전자결제 [PayPal] ASP 결제 연동
페이지 정보
본문
PayPal 결제연동입니다.
1. paypal_pay.asp
<%@ Language=VBScript %>
<%
' 페이팔 계정 정보
my_paypal_email = "paypal@happyjung.com"
' 내 도메인 정보
return_page = "https://www.happyjung.com/test/pay_insert.asp"
notify_page = "https://www.happyjung.com/test/paypal_notify.asp"
cancel_page = "https://www.happyjung.com/test/paypal_cancel.asp"
' 내 상품 정보
' GET방식으로 받는다면 item_price = Request.QueryString("item_price") 이런 식으로
' POST방식으로 받는다면 item_price = Request.Form("item_price") 이런 식으로
item_price = request("price") ' 가격
item_name = request("product") ' 제품명
item_quantity = "1" ' 수량
item_cod = request("oid") ' 주문번호
currency_type = "USD" ' 결제단위
' 페이팔 페이지 call 부분
url = "https://www.paypal.com/xclick/"
url = url & "?business=" & my_paypal_email
url = url & "&return=" & return_page
url = url & "¬ify_url=" & notify_page
url = url & "&cancel_return=" & cancel_page
url = url & "&quantity=" & item_quantity
url = url & "&item_name=" & replace(item_name," ","%20")
url = url & "&item_number=" & item_cod
url = url & "&amount=" & item_price
url = url & "&no_shipping=1"
url = url & "&no_note=0"
url = url & "¤cy_code=" & currency_type
response.redirect url
%>
2. paypal_notify.asp
<%@LANGUAGE="VBScript"%>
<%
dim addr1, city, company, country, email, orderdate
dim orderid, prodid, qty, state, tot, trackingid
dim ordername, zip, payment_status, ret, msg, str
dim connString, conn, objHttp, SQL
' email 정보
const myEmail = "myemail@mydomain.com"
const myEmailLogin = "mylogin"
const myEmailPassword = "mypassword"
const mySMTPServer = "smtp.mydomain.com"
const myDomain = "http://www.mydoamin.com"
' 데이터베이스 정보
MyDBServer = "localhost" ' 서버주소
MyDBname = "네임" ' 디비네임
MyDBUser = "아이디" ' 디비 아이디
MyDBPassword = "비밀번호" ' 디비 비밀번호
' MS-ACCESS
'const myDatabasePath = "/database"
'const connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=%database%;Jet OLEDB:Database Password=;"
' MS-SQL
const connString = "Provider=SQLOLEDB;Data Source=MyDBServer;Initial Catalog=MyDBname;User ID=MyDBUser;Password=MyDBPassword;"
' ORACLE
'const connString = "Provider=MSDAORA;Data Source=MyDBServer;User ID=MyDBUser;Password=MyDBPassword;"
' MySQL
'const connString = "Provider=MySQLProv.2.5;Data Source=MyDBServer;UID=MyDBUser;PWD=MyDBPassword"
' 링크 파라미터를 가져오는 부분 (retrtieve link parameters)
addr1 = request("address_street") ' 주문자 정보 - 주소
city = request("address_city") ' 주문자 정보 - 도시
company = request("payer_business_name") ' 주문자 정보 - 회사
country = request("address_country") ' 주문자 정보 - 국가
email = request("payer_email") ' 주문자 정보 - email
orderdate = request("payment_date") ' 주문일
orderid = request("txn_id") ' 상품 주문 id (product order id)
prodid = request("item_number") ' 상품의 id (product id)
qty = request("quantity") ' 주문 수량 (order product quantity)
state = request("address_state") ' 주문자 정보 - state(주)
tot = request("mc_gross") ' 상품의 총 가격 (product total price)
trackingid = request("txn_id") ' order trackin id
ordername = request("last_name") & " " & request("first_name") ' 주문자 이름
zip = request("address_zip") ' 주문자 정보 - 우편번호 (zip)
payment_status = request("payment_status") ' 주문 상태 (payment status)
' html 이메일 보내기 (send html email)
function SendEmail(byval emailaddr, byval message)
on error resume next
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
schema = "http://schemas.microsoft.com/cdo/configuration/"
Flds.Item(schema & "sendusing") = 2
Flds.Item(schema & "smtpserver") = mySMTPServer
Flds.Item(schema & "smtpserverport") = 25
Flds.Item(schema & "sendusername") = myEmailLogin
Flds.Item(schema & "sendpassword") = myEmailPassword
Flds.Item(schema & "smtpauthenticate") = 1
Flds.Update
With iMsg
.To = emailaddr
.From = myEmail
.Subject = "PayPal Payment"
.HTMLBody = message
.Sender = myDomain
.HTMLBody = message
Set .Configuration = iConf
SendEmail = .Send
End With
on error goto 0
end function
' 페이팔 결재 확인 (PayPal verification)
set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
if err.number <> 0 then set objHttp = Server.CreateObject("Microsoft.XMLHTTP")
str = Request.Form & "&cmd=_notify-validate"
objHttp.open "POST", "https://www.paypal.com/cgi-bin/webscr", false
objHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHttp.Send str
if objHttp.status <> 200 then
set objHttp = nothing
Response.Redirect "paypal_error.asp"
end if
ret = objHttp.responseText
set objHttp = nothing
' 고객 정보와 관리 메시지를 보낸다. (send administrative message with customer informations)
msg = "<b>Customer Informations from PayPal</b><br><br>"
msg = msg & " Name: " & ordername & "<br>"
msg = msg & " Company: " & company & "<br>"
msg = msg & " Address 1: " & addr1 & "<br>"
msg = msg & " City: " & city & "<br>"
msg = msg & " Country: " & country & "<br>"
msg = msg & " State: " & state & "<br>"
msg = msg & " Zip: " & zip & "<br>"
msg = msg & " Email: " & email & "<br>"
msg = msg & " Order Date: " & orderdate & "<br>"
msg = msg & " Order ID: " & orderid & "<br>"
msg = msg & "Tracking ID: " & trackingid & "<br>"
msg = msg & " Product ID: " & prodid & "<br>"
msg = msg & " Quantity: " & qty & "<br>"
msg = msg & " Total: " & tot & "<br>"
msg = msg & " Status: " & payment_status & "<br>"
SendEmail myEmail, msg
' 통지 유효성 검사 (Check notification validation)
if (ret = "VERIFIED") then
' 주문이 유효한지 검사 (다음중에 해당이 없으면 에러메시지를 보낸다.)
if instr("CANCELED_REVERSAL COMPLETED DENIED FAILED PENDING REFUNDED REVERSED PROCESSED",ucase(payment_status))=0 then
Response.Redirect "paypal_error.asp"
end if
' 데이터베이스 open
set conn = CreateObject("ADODB.Connection")
' MS-ACCESS
'conn.Open replace(connString,"%database%",Server.MapPath(myDatabasePath & "/customer.mdb")),"Admin"
' 그외
conn.Open connString
if err.number <> 0 then
set conn = nothing
Response.Redirect "paypal_error.asp"
end if
' 주문정보 업데이트
sql = "update 테이블 set transaction_card = '"& trackingid &"' where oid = '"& orderid &"' "
'response.write(sql)
'response.End()
set rs = conn.execute(sql)
' ' 테이블 open
' set rs = Server.CreateObject("ADODB.Recordset")
' rs.Open "Customer", conn, 2, 3
'
' ' 주문이 이미 DB에 있는지 확인
' rs.Find "orderid=" & orderid
' if rs.EOF then
'
' ' 없다면 새로운 결재 정보를 삽입한다.
' conn.BeginTrans
' rs.AddNew
' rs("addr1") = addr1
' rs("city") = city
' rs("company") = company
' rs("country") = country
' rs("orderdate") = orderdate
' rs("email") = lcase(email)
' rs("orderid") = orderid
' rs("prodid") = prodid
' rs("qty") = qty
' rs("state") = state
' rs("tot") = tot
' rs("trackingid") = trackingid
' rs("name") = ordername
' rs("zip") = zip
' rs("status") = payment_status
' rs.Update
'
' ' 에러가 있다면...........
' if err.number <> 0 then
' ' 결재 취소
' conn.RollbackTrans
'
' ' 테이블 닫는다.
' rs.Close
' set rs = nothing
'
' ' DB닫는다.
' conn.Close
' set conn = nothing
'
' ' 에러메시지 표시하는 페이지로 리디렉트
' Response.Redirect "paypal_error.asp"
' end if
'
' ' 에러가 없다면 거래확인
' conn.CommitTrans
' end if
' 테이블 닫고
rs.Close
set rs = nothing
' DB도 닫고
conn.Close
set conn = nothing
' 지불의 무효 또는 환불(invalid payment or refunded) (다음중에 하나에 걸리면 그건 에러니까.......에러메시지를 뿌린다.)
if bexist and instr("CANCELED_REVERSAL DENIED FAILED REFUNDED REVERSED", ucase(payment_status))>0 then
Response.Redirect "paypal_error.asp"
end if
' 해결되지 못한 주문이 있는가(not pending order)
if ucase(payment_status) <> "PENDING" then
' 고객에게 확인 메일을 발송한다.
msg = "<b>고객님은 " & myDomain & "에서 결제하셨습니다.<br><br><br>"
msg = msg & "고객님께,<br>"
msg = msg & "주문이 잘 이루어 졌음을 알립니다.<br>"
'msg = msg & "If you need further help, please contact us at <a href=""mailto:" & myEmail & """>" & myEmail & "</a><br><br>"
msg = msg & "감사합니다.<br>"
SendEmail email, msg
end if
else
' 고객에게 에러 메일을 발송한다.
msg = "<b>고객님이 " & myDomain & "에서 결제 처리하는데 있어 오류가 발생했습니다.<br><br><br>"
msg = msg & "고객님께,<br>"
msg = msg & "고객님의 결제를 처리하는 과정에 문제가 발생했습니다. 고객님의 <a href=""www.paypal.com"" target=""_blank"">PayPal</a> 계정을 확인해 주시기 바랍니다.<br>"
msg = msg & "도움이 필요하시면 <a href=""mailto:" & myEmail & """>" & myEmail & "</a>로 문의해주시기 바랍니다.<br><br>"
msg = msg & "감사합니다.<br>"
SendEmail email, msg
end if
%>
<html>
<body bgcolor="#ffffff">
<center>
<table border="0" width="80%">
<tr>
<td align="left"><%=msg%></td>
</tr>
</table>
</center>
</body>
</html>
3. paypal_error.asp
<%@ Language=VBScript %>
<html>
<body bgcolor="#ffffff">
<center>
<table border="0" width="80%">
<tr>
<td align="left">
<b>페이팔을 통한 결제</b><br>
<br>
고객님께,<br>
결제 처리중에 오류가 발생했습니다.
저희에게 연락을 취해주시기 바랍니다.<br>
<br>
감사합니다.
</td>
</tr>
</table>
</center>
</body>
</html>
4. paypal_cancel.asp
<%@ Language=VBScript %>
<html>
<body bgcolor="#ffffff">
<center>
<table border="0" width="80%">
<tr>
<td align="left">
<b>페이팔을 통한 결제</b><br>
<br>
고객님께,<br>
결제 처리중에 오류가 발생했거나 취소되었습니다.
고객님의 <a href="https://www.paypal.com" target="_blank">페이팔</a> 계정을 확인해 주시기 바라며,
도움이 필요하시면 연락을 취해주시기 바랍니다.<br>
<br>
감사합니다.
</td>
</tr>
</table>
</center>
</body>
</html>
참고자료
http://ozahir.tistory.com/902
1. paypal_pay.asp
<%@ Language=VBScript %>
<%
' 페이팔 계정 정보
my_paypal_email = "paypal@happyjung.com"
' 내 도메인 정보
return_page = "https://www.happyjung.com/test/pay_insert.asp"
notify_page = "https://www.happyjung.com/test/paypal_notify.asp"
cancel_page = "https://www.happyjung.com/test/paypal_cancel.asp"
' 내 상품 정보
' GET방식으로 받는다면 item_price = Request.QueryString("item_price") 이런 식으로
' POST방식으로 받는다면 item_price = Request.Form("item_price") 이런 식으로
item_price = request("price") ' 가격
item_name = request("product") ' 제품명
item_quantity = "1" ' 수량
item_cod = request("oid") ' 주문번호
currency_type = "USD" ' 결제단위
' 페이팔 페이지 call 부분
url = "https://www.paypal.com/xclick/"
url = url & "?business=" & my_paypal_email
url = url & "&return=" & return_page
url = url & "¬ify_url=" & notify_page
url = url & "&cancel_return=" & cancel_page
url = url & "&quantity=" & item_quantity
url = url & "&item_name=" & replace(item_name," ","%20")
url = url & "&item_number=" & item_cod
url = url & "&amount=" & item_price
url = url & "&no_shipping=1"
url = url & "&no_note=0"
url = url & "¤cy_code=" & currency_type
response.redirect url
%>
2. paypal_notify.asp
<%@LANGUAGE="VBScript"%>
<%
dim addr1, city, company, country, email, orderdate
dim orderid, prodid, qty, state, tot, trackingid
dim ordername, zip, payment_status, ret, msg, str
dim connString, conn, objHttp, SQL
' email 정보
const myEmail = "myemail@mydomain.com"
const myEmailLogin = "mylogin"
const myEmailPassword = "mypassword"
const mySMTPServer = "smtp.mydomain.com"
const myDomain = "http://www.mydoamin.com"
' 데이터베이스 정보
MyDBServer = "localhost" ' 서버주소
MyDBname = "네임" ' 디비네임
MyDBUser = "아이디" ' 디비 아이디
MyDBPassword = "비밀번호" ' 디비 비밀번호
' MS-ACCESS
'const myDatabasePath = "/database"
'const connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data source=%database%;Jet OLEDB:Database Password=;"
' MS-SQL
const connString = "Provider=SQLOLEDB;Data Source=MyDBServer;Initial Catalog=MyDBname;User ID=MyDBUser;Password=MyDBPassword;"
' ORACLE
'const connString = "Provider=MSDAORA;Data Source=MyDBServer;User ID=MyDBUser;Password=MyDBPassword;"
' MySQL
'const connString = "Provider=MySQLProv.2.5;Data Source=MyDBServer;UID=MyDBUser;PWD=MyDBPassword"
' 링크 파라미터를 가져오는 부분 (retrtieve link parameters)
addr1 = request("address_street") ' 주문자 정보 - 주소
city = request("address_city") ' 주문자 정보 - 도시
company = request("payer_business_name") ' 주문자 정보 - 회사
country = request("address_country") ' 주문자 정보 - 국가
email = request("payer_email") ' 주문자 정보 - email
orderdate = request("payment_date") ' 주문일
orderid = request("txn_id") ' 상품 주문 id (product order id)
prodid = request("item_number") ' 상품의 id (product id)
qty = request("quantity") ' 주문 수량 (order product quantity)
state = request("address_state") ' 주문자 정보 - state(주)
tot = request("mc_gross") ' 상품의 총 가격 (product total price)
trackingid = request("txn_id") ' order trackin id
ordername = request("last_name") & " " & request("first_name") ' 주문자 이름
zip = request("address_zip") ' 주문자 정보 - 우편번호 (zip)
payment_status = request("payment_status") ' 주문 상태 (payment status)
' html 이메일 보내기 (send html email)
function SendEmail(byval emailaddr, byval message)
on error resume next
Set iMsg = CreateObject("CDO.Message")
Set iConf = CreateObject("CDO.Configuration")
Set Flds = iConf.Fields
schema = "http://schemas.microsoft.com/cdo/configuration/"
Flds.Item(schema & "sendusing") = 2
Flds.Item(schema & "smtpserver") = mySMTPServer
Flds.Item(schema & "smtpserverport") = 25
Flds.Item(schema & "sendusername") = myEmailLogin
Flds.Item(schema & "sendpassword") = myEmailPassword
Flds.Item(schema & "smtpauthenticate") = 1
Flds.Update
With iMsg
.To = emailaddr
.From = myEmail
.Subject = "PayPal Payment"
.HTMLBody = message
.Sender = myDomain
.HTMLBody = message
Set .Configuration = iConf
SendEmail = .Send
End With
on error goto 0
end function
' 페이팔 결재 확인 (PayPal verification)
set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")
if err.number <> 0 then set objHttp = Server.CreateObject("Microsoft.XMLHTTP")
str = Request.Form & "&cmd=_notify-validate"
objHttp.open "POST", "https://www.paypal.com/cgi-bin/webscr", false
objHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"
objHttp.Send str
if objHttp.status <> 200 then
set objHttp = nothing
Response.Redirect "paypal_error.asp"
end if
ret = objHttp.responseText
set objHttp = nothing
' 고객 정보와 관리 메시지를 보낸다. (send administrative message with customer informations)
msg = "<b>Customer Informations from PayPal</b><br><br>"
msg = msg & " Name: " & ordername & "<br>"
msg = msg & " Company: " & company & "<br>"
msg = msg & " Address 1: " & addr1 & "<br>"
msg = msg & " City: " & city & "<br>"
msg = msg & " Country: " & country & "<br>"
msg = msg & " State: " & state & "<br>"
msg = msg & " Zip: " & zip & "<br>"
msg = msg & " Email: " & email & "<br>"
msg = msg & " Order Date: " & orderdate & "<br>"
msg = msg & " Order ID: " & orderid & "<br>"
msg = msg & "Tracking ID: " & trackingid & "<br>"
msg = msg & " Product ID: " & prodid & "<br>"
msg = msg & " Quantity: " & qty & "<br>"
msg = msg & " Total: " & tot & "<br>"
msg = msg & " Status: " & payment_status & "<br>"
SendEmail myEmail, msg
' 통지 유효성 검사 (Check notification validation)
if (ret = "VERIFIED") then
' 주문이 유효한지 검사 (다음중에 해당이 없으면 에러메시지를 보낸다.)
if instr("CANCELED_REVERSAL COMPLETED DENIED FAILED PENDING REFUNDED REVERSED PROCESSED",ucase(payment_status))=0 then
Response.Redirect "paypal_error.asp"
end if
' 데이터베이스 open
set conn = CreateObject("ADODB.Connection")
' MS-ACCESS
'conn.Open replace(connString,"%database%",Server.MapPath(myDatabasePath & "/customer.mdb")),"Admin"
' 그외
conn.Open connString
if err.number <> 0 then
set conn = nothing
Response.Redirect "paypal_error.asp"
end if
' 주문정보 업데이트
sql = "update 테이블 set transaction_card = '"& trackingid &"' where oid = '"& orderid &"' "
'response.write(sql)
'response.End()
set rs = conn.execute(sql)
' ' 테이블 open
' set rs = Server.CreateObject("ADODB.Recordset")
' rs.Open "Customer", conn, 2, 3
'
' ' 주문이 이미 DB에 있는지 확인
' rs.Find "orderid=" & orderid
' if rs.EOF then
'
' ' 없다면 새로운 결재 정보를 삽입한다.
' conn.BeginTrans
' rs.AddNew
' rs("addr1") = addr1
' rs("city") = city
' rs("company") = company
' rs("country") = country
' rs("orderdate") = orderdate
' rs("email") = lcase(email)
' rs("orderid") = orderid
' rs("prodid") = prodid
' rs("qty") = qty
' rs("state") = state
' rs("tot") = tot
' rs("trackingid") = trackingid
' rs("name") = ordername
' rs("zip") = zip
' rs("status") = payment_status
' rs.Update
'
' ' 에러가 있다면...........
' if err.number <> 0 then
' ' 결재 취소
' conn.RollbackTrans
'
' ' 테이블 닫는다.
' rs.Close
' set rs = nothing
'
' ' DB닫는다.
' conn.Close
' set conn = nothing
'
' ' 에러메시지 표시하는 페이지로 리디렉트
' Response.Redirect "paypal_error.asp"
' end if
'
' ' 에러가 없다면 거래확인
' conn.CommitTrans
' end if
' 테이블 닫고
rs.Close
set rs = nothing
' DB도 닫고
conn.Close
set conn = nothing
' 지불의 무효 또는 환불(invalid payment or refunded) (다음중에 하나에 걸리면 그건 에러니까.......에러메시지를 뿌린다.)
if bexist and instr("CANCELED_REVERSAL DENIED FAILED REFUNDED REVERSED", ucase(payment_status))>0 then
Response.Redirect "paypal_error.asp"
end if
' 해결되지 못한 주문이 있는가(not pending order)
if ucase(payment_status) <> "PENDING" then
' 고객에게 확인 메일을 발송한다.
msg = "<b>고객님은 " & myDomain & "에서 결제하셨습니다.<br><br><br>"
msg = msg & "고객님께,<br>"
msg = msg & "주문이 잘 이루어 졌음을 알립니다.<br>"
'msg = msg & "If you need further help, please contact us at <a href=""mailto:" & myEmail & """>" & myEmail & "</a><br><br>"
msg = msg & "감사합니다.<br>"
SendEmail email, msg
end if
else
' 고객에게 에러 메일을 발송한다.
msg = "<b>고객님이 " & myDomain & "에서 결제 처리하는데 있어 오류가 발생했습니다.<br><br><br>"
msg = msg & "고객님께,<br>"
msg = msg & "고객님의 결제를 처리하는 과정에 문제가 발생했습니다. 고객님의 <a href=""www.paypal.com"" target=""_blank"">PayPal</a> 계정을 확인해 주시기 바랍니다.<br>"
msg = msg & "도움이 필요하시면 <a href=""mailto:" & myEmail & """>" & myEmail & "</a>로 문의해주시기 바랍니다.<br><br>"
msg = msg & "감사합니다.<br>"
SendEmail email, msg
end if
%>
<html>
<body bgcolor="#ffffff">
<center>
<table border="0" width="80%">
<tr>
<td align="left"><%=msg%></td>
</tr>
</table>
</center>
</body>
</html>
3. paypal_error.asp
<%@ Language=VBScript %>
<html>
<body bgcolor="#ffffff">
<center>
<table border="0" width="80%">
<tr>
<td align="left">
<b>페이팔을 통한 결제</b><br>
<br>
고객님께,<br>
결제 처리중에 오류가 발생했습니다.
저희에게 연락을 취해주시기 바랍니다.<br>
<br>
감사합니다.
</td>
</tr>
</table>
</center>
</body>
</html>
4. paypal_cancel.asp
<%@ Language=VBScript %>
<html>
<body bgcolor="#ffffff">
<center>
<table border="0" width="80%">
<tr>
<td align="left">
<b>페이팔을 통한 결제</b><br>
<br>
고객님께,<br>
결제 처리중에 오류가 발생했거나 취소되었습니다.
고객님의 <a href="https://www.paypal.com" target="_blank">페이팔</a> 계정을 확인해 주시기 바라며,
도움이 필요하시면 연락을 취해주시기 바랍니다.<br>
<br>
감사합니다.
</td>
</tr>
</table>
</center>
</body>
</html>
참고자료
http://ozahir.tistory.com/902
댓글목록
등록된 댓글이 없습니다.