最近做了一个在线支付,哎呀,把我给折腾的可不轻.搞了很长时间. PayPal 是一家 eBay 公司,它是在线付款解决方案的全球领导者,在全世界有超过七千一百六十万个帐户用户。PayPal 可由易趣买家和卖家、在线零售商和其他商家在 56 个市场以 6 种货币使用:加元 欧元 英镑 美元 日元 澳元;PayPal 快速、安全而又方便,是跨国交易的理想解决方案。国内的支付宝和PayPal 类型是差不多的!
随着制作外贸网站的数量增多,有些客户针对国外需要用到PayPal 支付接口,今天找了些PayPal 支付接口方面的资料,以备以后查询!也可以点GO去看原文档.
1.到https://developer.paypal.com注册一个开发帐号,好了之后再进入Sandbox建立测试用的Paypal虚拟帐号(至少应该建立一个Business的和一个Personal的),信息可以是假的,注意:这里的至少两个测试帐号是在你所建立的开发帐号里面建立的,不要注册错了;
2.测试是很麻烦,但是是必不可少的,因为如果客户买过一次出错之后,就不会来第二次了,所以花半天时间做测试是很重要的;
3.代码帖出来给大家参考一下,我做的是不很细,支付成功后返回的结果我就没有做,因为我在测试的时候已经没有问题了,所以没有做,改天有空会完善的;
using System; using System.IO; using System.Text; using System.Net; using System.Web;
public partial class csIPNexample :System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //Post back to either sandbox or live string strSandbox = "https://www.sandbox.paypal.com/cgi-bin/webscr"; string strLive = "https://www.paypal.com/cgi-bin/webscr"; HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strSandbox);
// Set values for the request back req.Method = "POST"; req.ContentType = "application/x-www-form-urlencoded"; byte[] param = Request.BinaryRead(HttpContext.Current.Request.ContentLength); string strRequest = Encoding.ASCII.GetString(param); strRequest += "&cmd=_notify-validate"; req.ContentLength = strRequest.Length;
//for proxy //WebProxy proxy = new WebProxy(new Uri("http://url:port#")); //req.Proxy = proxy;
//Send the request to PayPal and get the response StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII); streamOut.Write(strRequest); streamOut.Close(); StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream()); string strResponse = streamIn.ReadToEnd(); streamIn.Close();
if (strResponse == "VERIFIED") { // check the payment_status is Completed // check that txn_id has not been previously processed // check that receiver_email is your Primary PayPal email // check that payment_amount/payment_currency are correct // process payment } else if (strResponse == "INVALID") { // log for manual investigation } else { //log response/ipn data for manual investigation } } }
|
|
Imports System.Net Imports System.IO
Partial Class vbIPNexample Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load ‘Post back to either sandbox or live Dim strSandbox As String = "https://www.sandbox.paypal.com/cgi-bin/webscr" Dim strLive As String = "https://www.paypal.com/cgi-bin/webscr" Dim req As HttpWebRequest = CType(WebRequest.Create(strSandbox), HttpWebRequest)
‘Set values for the request back req.Method = "POST" req.ContentType = "application/x-www-form-urlencoded" Dim Param() As Byte = Request.BinaryRead(HttpContext.Current.Request.ContentLength) Dim strRequest As String = Encoding.ASCII.GetString(Param) strRequest = strRequest + "&cmd=_notify-validate" req.ContentLength = strRequest.Length
‘for proxy ‘Dim proxy As New WebProxy(New System.Uri("http://url:port#")) ‘req.Proxy = proxy
‘Send the request to PayPal and get the response Dim streamOut As StreamWriter = New StreamWriter(req.GetRequestStream(), Encoding.ASCII) streamOut.Write(strRequest) streamOut.Close() Dim streamIn As StreamReader = New StreamReader(req.GetResponse().GetResponseStream()) Dim strResponse As String = streamIn.ReadToEnd() streamIn.Close()
If strResponse = "VERIFIED" Then ‘check the payment_status is Completed ‘check that txn_id has not been previously processed ‘check that receiver_email is your Primary PayPal email ‘check that payment_amount/payment_currency are correct ‘处理付款 ElseIf strResponse = "INVALID" Then ‘log for manual investigation Else ‘Response wasn‘t VERIFIED or INVALID, log for manual investigation End If End Sub End Class
|
|
(requires MSXML)
<%@LANGUAGE="VBScript"%> <% Dim Item_name, Item_number, Payment_status, Payment_amount Dim Txn_id, Receiver_email, Payer_email Dim objHttp, str
‘ read post from PayPal system and add ‘cmd‘ str = Request.Form & "&cmd=_notify-validate"
‘ post back to PayPal system to validate set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP") ‘ set objHttp = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0") ‘ set objHttp = Server.CreateObject("Microsoft.XMLHTTP") objHttp.open "POST", "https://www.paypal.com/cgi-bin/webscr", false objHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded" objHttp.Send str
‘ assign posted variables to local variables Item_name = Request.Form("item_name") Item_number = Request.Form("item_number") Payment_status = Request.Form("payment_status") Payment_amount = Request.Form("mc_gross") Payment_currency = Request.Form("mc_currency") Txn_id = Request.Form("txn_id") Receiver_email = Request.Form("receiver_email") Payer_email = Request.Form("payer_email")
‘ Check notification validation if (objHttp.status <> 200 ) then ‘ HTTP error handling elseif (objHttp.responseText = "VERIFIED") then ‘ check that Payment_status=Completed ‘ check that Txn_id has not been previously processed ‘ check that Receiver_email is your Primary PayPal email ‘ check that Payment_amount/Payment_currency are correct ‘ process payment elseif (objHttp.responseText = "INVALID") then ‘ log for manual investigation else ‘ error end if set objHttp = nothing %> |