文档库 最新最全的文档下载
当前位置:文档库 › 一些案例的关键源码代码PayPal集成

一些案例的关键源码代码PayPal集成

轻轻松松集成PayPal

标准版

Paypal国际版网站集成简易教程(一):序言

前段时间接到一个外贸网站的项目,集成paypal支付接口的,对象是海外用户,全部用US的信用卡结算。国内有个paypal的中文版,叫贝宝,不过只支持人民币之间的结算,而且提供的功能不多。所以只能使用paypal国际版,也就是https://www.wendangku.net/doc/c62722894.html,,习惯性的google 了一下相关资料,发现关于https://www.wendangku.net/doc/c62722894.html,接口的中文文档并不多,也不详细,只好自己上https://www.wendangku.net/doc/c62722894.html,研究,还好paypal上的资料非常齐全,而且还提供了开发者沙盒(sandbox),相比之下,国内流行的支付宝还有很长的路要走啊。

项目结束的时候就有想法写一篇网站集成paypal的简易教程,方便以后的各位开发者,毕竟看长篇英文资料是很头痛的事情^_^。一直到昨天期末考才结束,所以今天开始写这个教程,其实内容也不多,可能还算不上教程,只能算经验吧。

主要分为序言、支付按钮、返回信息方式(IPN&PDT)、实例四部分组成,预计在三天内完成,如果有新内容我临时再加吧。

接下来一篇将会介绍如何在网站上快速加入paypal支付按钮。

Paypal国际版网站集成简易教程(二):快速加入支付按钮

本篇主要介绍如何在你的网站上快速加入paypal支付按钮,通过这个按钮,人们可以方便快速的付款到你的paypal帐户。

首先,你需要注册一个paypal帐户,帐户类型分为Personal(个人)、Premier(高级)和Business(商业),他们的差别对于开发者来说主要是返回的信息,Personal的不能使用IPN和PDT等商家工具,即不能获取交易信息,但是Personal帐户收款无需手续费;Premier

和Business当然就提供了IPN和PDT功能,能够在客户支付成功后,将交易信息传给指定的网站,用来二次使用。Premier和Business使用上的差异我不是很清楚,应该是月收款额和手续费上的区别吧。

这里插进来介绍一下paypal sandbox,也就是沙盒,是paypal提供给开发者的一个工具,非常好用,你可以在https://https://www.wendangku.net/doc/c62722894.html,/注册和使用它。登录以后可以新建帐户,设置余额和帐户类型,有一点要注意,每次使用时必须先登录sandbox才能使用新建的那些帐户。Sndbox里面有个测试工具,可以发送IPN的,以后会用到。

接着上面的内容,注册完帐户以后,当然,一开始开发最好使用sandbox,不然资金转来转去手续费都扣光了,paypal的费率如下:

比起国内的支付工具,paypal贵了好多,当然,和国情也有关系。

接下来是按钮的代码,很简单,就是一个普通的网页表单代码:

程序代码

value="Item Name Goes Here">

value="Item Number Goes Here">

name="submit" alt="Make payments with payPal - it's fast,

free and secure!">

src="https://https://www.wendangku.net/doc/c62722894.html,/en_US/i/scr/pixel.gif"

width="1" height="1">

如果使用sandbox,action地址改成https://https://www.wendangku.net/doc/c62722894.html,/cgi-bin/webscr即可,上面这段还是很容易理解的,看下name和value基本上就能知道每个值的含义了。

保存用浏览器打开,就会看到一个paypal的按钮,点击过去按照提示操作,就能付

款到business指定值的帐户了。

这就是一个最简单的paypal支付按钮。

再下一篇中会讲一下如何在付款成功之后,将信息返回到你的网站,大部分需求都是客户完成付款后返回信息到网站的数据库,记录网站客服的交易信息。

最后稍微了解下为什么海外用户喜欢用自己的网站做生意,而不是像国内一样用淘宝之类的C2C平台。一开始我也很不理解,有免费的平台为什么要自己建设网站还要支付paypal的手续费,后来和客户了解了一下,他们做的事网游虚拟交易,国外最大的C2C平台就是eBay,但只有德国可以售卖虚拟物品,并且eBay上的交易并不是免费的,收取的手续费远远高于paypal的费率,因此,更多的海外用户选择自己建设网站进行电子商务。

Paypal国际版网站集成简易教程(三):IPN的使用

本文内容采用知识共享署名-非商业性使用-禁止演绎2.5 中国大陆许可协议进行许可。

引用内容

什么是即时付款通知IPN

当您收到新的付款交易或者已发生的付款交易的状态发生变化时,PayPal都将异步(即不作为网站付款流程的一部分)发送付款详细数据到您所指定的URL,以便您了解买家付款的具体情况并做出相应的响应。这个过程我们称作即时付款通知(简称IPN)。

最近事情比较多,一直没有继续更新,不好意思了,今天难得有空,就把最重要的一段先发上来了。

相信大部分网站集成Paypal都希望能够实现客户支付完成后返回信息到自己的网站,然后处理这些信息。比如客户在你的网站上购买了一个产品,通过Paypal完成了支付,接着Paypal告诉你的网站客户完成了支付以及支付信息,最后你的网站将这些信息记录到你自己的数据库中,并且将你的客户订单状态设为已支付,接着你就可以进行一系列的相关订单的后续操作。

IPN就能帮助我们实现这个功能,IPN示意图如下(来自https://www.wendangku.net/doc/c62722894.html,):

当客户完成支付,Paypal会在后台通过post方式向你的服务器传送交易数据,来实现网站集成的功能。

接下来我们就来看IPN的实现方法。

第一步,你需要一个sandbox的帐号,这很重要,因为它能让你随心所欲的进行测试,

而不用担心资金在天上飞。注册地址:https://https://www.wendangku.net/doc/c62722894.html,/

第二步,登陆sandbox,新建一个商家帐号(卖方)和一个客户账号(买方),其中卖方帐号必须是Premier或者Business,不然无法使用IPN功能。

新建买家帐号的时候记得在Account Balance中加上金额,不然你就没钱买东西了,如果https://www.wendangku.net/doc/c62722894.html,的帐号也能这样加钱多好。

新建完两个帐号:

卖家帐号的test mode要设为enabled。

选中business帐号,点击下面的Enter Sandbox Test Site进入sandbox Test Site,登录,就像普通Paypal帐号的管理页面一样。

点击Profile,在Selling Preferences中选择Instant Payment Notification Preferences,点击edit加入IPN信息返回的地址,记得勾上前面那个选项,我是用.net写的接受文件,所以我的IPN地址是https://www.wendangku.net/doc/c62722894.html,/ipn.aspx,地址只要能在互联网上访问到就可以了。

在Profile -> Selling Preferences ->Website Payment Preferences选项中,有一个Auto Return的选项,将它设为on,并且在下面的return地址中填入你希望的客户支付完成后返回的地址:

以上就完成了商家端的设置。

接下来是你网站上ipn.aspx文件的编写,这个是用来接收支付数据的,是非常关键的一个文件。

文件环境,.net 2.0,语言C#。

Ipn.aspx文件:此文件不用修改任何东西,代码都在cs文件中。

Ipn.aspx.cs文件:关键代码

定义一个VerifyIPN()函数:

程序代码

bool VerifyIPN()

{

string strFormValues = Request.Form.ToString();

string strNewValue;

string strResponse;

string serverURL = "https://https://www.wendangku.net/doc/c62722894.html,/cgi-bin/webscr";

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(serverURL);

req.Method = "POST";

req.ContentType = "application/x-www-form-urlencoded";

strNewValue = strFormValues + "&cmd=_notify-validate";

req.ContentLength = strNewValue.Length;

StreamWriter stOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII);

stOut.Write(strNewValue);

stOut.Close();

StreamReader stIn = new StreamReader(req.GetResponse().GetResponseStream());

strResponse = stIn.ReadToEnd();

stIn.Close();

return strResponse == "VERIFIED";

}

这段代码的作用是判断IPN信息是否来自Pyapal,如果不进行判断,那么恶意用户完全可以模拟一个信息post到你的网站上,让你认为订单已经完成支付,所以,必须首先对接受到的信息进行验证。

代码的基本原理,serverURL定义了验证地址,sandbox为:https://https://www.wendangku.net/doc/c62722894.html,/cgi-bin/webscr,https://www.wendangku.net/doc/c62722894.html,就是https://https://www.wendangku.net/doc/c62722894.html,/cgi-bin/webscr。

将paypal发送过来的所有信息加上一个&cmd=_notify-validate参数,表示对这个信息进行验证,全部发送回paypal验证,如果信息确实存在,则返回VERIFIED字符串。

验证成功后,就可以用如下形式获得交易信息:

程序代码

string ppTx = Request.Form["txn_id"].ToString();

string ppStatus = Request.Form["payment_status"].ToString();

string ppDate = Request.Form["payment_date"].ToString();

string ppItem = Request.Form["item_name"].ToString();

string ppPrice = Request.Form["mc_gross"].ToString();

每个变量的解释可以参考Paypal网站上的说明,我这里就不再重复。

.cs代码结构如下:

程序代码

public partial class paypal_ipn : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

if (VerifyIPN())//验证成功

{

string ppTx = Request.Form["txn_id"].ToString();//获取post中的各项变量值

执行将数据写入数据库等操作

}

}

bool VerifyIPN()

{

具体代码见上。

}

}

这样,就实现了将支付信息传回网站的功能。注:当交易状态发生改变时,paypal 也会返回一个ipn,比如完成支付,退款等等。

介绍一下sandbox中IPN测试工具,登陆sandbox主帐号,就是你在sandbox上注册的那个,不是那些卖家/买家帐号。

选择Test Tools -> Instant Payment Notification (IPN) Simulator:

输入你的ipn接受文件地址,选择ipn信息的方式,然后会让你填具体信息内容,再点击Send IPN,就能模拟一个ipn到你网站的页面,可以用来测试IPN是否正常工作。

不过这个工具有个小BUG,就是发送的IPN里不包括contact_phone这个变量,但是实际的IPN里是有的,这里要注意一下。

注:可以在商家帐号的Profile -> Selling Preferences ->Website Payment Preferences中,选择Contact Telephone Number这一栏,来确定是否需要发送买家联系电话。

通过IPN,你的网站就开始从真正意义上的集成了Paypal。

这篇文章写得有些仓促,如有疑问可以发送邮件到:chenchen[at]https://www.wendangku.net/doc/c62722894.html, 用@替换[at]。

下一次我会讲PDT方式,这个比IPN简单很多。

Paypal国际版网站集成简易教程(四):PDT的使用

引用内容

什么是PDT

PDT是一个安全获取付款明细的方式。在买家付完款后,卖家可以通过此方式即时获取付款明细并显示给买家看。

暑假时候写了前面三篇文章,后来去电视台打工了,帮他们上了一个人居博览会,再接着就开学了,又在杭州、温州、宁波跑来跑去。一直不能静下来继续写,现在工作又没啥着落哈。

今天难得有感觉想写了,不知道是不是中午牛排的威力,趁机会就快点写吧。

上图是PDT的流程示意。

1.首先买家付款后通过事先设定好的返回url(return)回到您的网站。

2.接着paypal在返回url后面加上tx变量,即交易号。

3.然后网站将收到的tx和您的令牌(paypal账户里申请)发回paypal。

4.paypal验证令牌通过后,将交易明细发回网站。

5.最后网站将交易明细显示给客户。

目录

1 注册您的PAYPAL帐号 (7)

2 创建“BUY NOW”按钮 (8)

3 创建“SHOPPING CART”按钮 (10)

3.1创建“A DD TO C ART”按钮 (10)

3.2创建“U PLOAD C ART”按钮 (12)

4 加密网站付款EWP (14)

4.1使用加密网站付款的先决条件 (14)

4.2创建加密按钮 (17)

5 附录1: 参考文档及网站 (25)

6 附录2:PAYPAL目前支持的货币列表 (26)

7 附录3:常见问题 (27)

8 附录4:标准变量列表 (28)

9 附录6:国家或地区ISO3166代码 (34)

1 注册您的PayPal帐号

如果您已经有PayPal账户了,那恭喜您,您可以直接跳过这部分。

如果还没有PayPal账户,那您可以通过https://https://www.wendangku.net/doc/c62722894.html,访问主页,如图1-1所示,点击“Sign Up”或“Sign Up Now”按钮立即注册一个PayPal账户。如需帮助,您可以点击主页上方的“帮助”按钮或在您的浏览器中输入

https://https://www.wendangku.net/doc/c62722894.html,/cgi-bin/webscr?cmd=_help-ext&source_page=_home

获取帮助。

点击这里

图1-1 PayPal主页

注册完以后,您就可以开始您的PayPal之旅了!

2 创建“Buy Now”按钮

PayPal可以让您轻松地通过您的网站接受单件物品的付款。“Buy Now”(立即购买)按钮可以在几分钟内实施,让来自PayPal数百万用户的商家和捐赠人以及网络上的任何其他买家轻松访问您的网站。

那如何在您自己的网站上创建一个“Buy Now”按钮呢?很简单,如图2-1,这里我们集成了PayPal 的“Buy Now”按钮;

图2-1 立即购买Buy Now示例

创建这个“Buy Now”按钮有两种方法:

方法1-登陆PayPal网站自动创建

您可以通过登陆PayPal网站自动为您创建“Buy Now”按钮。创建方法请参考“PayPal 网站付款标准版交易方式确认集成指南”(以下简称“集成指南”,下载方法见附录1)文档。

方法2-用网页编辑器直接编写代码

利用您喜欢的网页编辑器(如DreamWeaver)直接编辑HTML代码,在您想要出现“Buy Now”按钮的位置上插入以下示例代码:

其中:

?第1、2、10行是必须且不可更改得;

?第3行用于设置您得PayPal账户,即修改粗体部分(下同);

?第4,5行设置商品得属性,包括商品描述,价格;

?第6行用于设置货币种类,关于货币描述请参考附录2;

?第7行用于设置目标客户国家所在地,其值可参考附录6;

?第8行用于设置客户付完款后返回您网站的地址,具体请参考PDT/IPN参考

文档;

?第9行在一般情况下无需改动。

除此之外,您可以根据实际需要增加、修改或删除一些变量。

所有“Buy Now”按钮可用变量您可以参考“集成指南”文档中“HTML示例与立即购买,捐赠和购物车变量”部分;也可以访问英文网站:

https://https://www.wendangku.net/doc/c62722894.html,/IntegrationCenter/ic_std-variable-reference.html

3 创建“Shopping Cart”按钮

如果您的网站还没有集成购物车功能,您可以通过创建“Add to Cart”按钮直接使用PayPal的购物车。

如果您的网站已经有自己的购物车或者已经集成了第三方购物车的功能,那您可以通过创建“Upload Cart”按钮将您的购物车明细上传给PayPal并通过PayPal进行付款;您也可以为已有购物车生成一个订单,并通过创建PayPal的“Buy Now”按钮进行付款(其中:商品名称可以为您的订单号,商品价格可以为订单总价)。

3.1 创建“Add to Cart”按钮

如图3-1所示,这里我们集成了PayPal“Add to Cart”按钮:

图3-1 “Add to Cart”按钮

当点击“Add to Cart”按钮时,该商品即被加入到您的PayPal购物车里,如图3-2所示:

图3-2 PayPal购物车详情

创建“添加到购物车”按钮有两种方法:

方法1-登陆PayPal网站自动创建

您可以通过登陆PayPal网站自动为您创建“添加到购物车”按钮。创建方法请参考“集成指南”文档中“创建购物车按钮(第37页)”部分。

方法2-用网页编辑器直接编写代码

利用您喜欢的网页编辑器(如DreamWeaver)直接编辑HTML代码,在您想要出现“添加到购物车”按钮的位置上插入以下代码:

其中:

?第1、2、3、11行是必须且不可更改得;

?第4行用于设置您得PayPal账户;

?第5,6行设置商品得属性,包括商品描述及价格;

?第7行用于设置货币种类,关于货币描述请参考附录2;

?第8行用于设置目标客户国家所在地,其值可参考附录6;

?第9行用于设置客户付完款后返回您网站的地址,具体请参考PDT/IPN文档;

?第10行在一般情况下无需改动。

除此之外,您可以根据实际需要增加、修改或删除一些变量。

所有“添加购物车”按钮可用变量您可以参考“集成文档”中“HTML示例与立即购买,捐赠和购物车变量”部分;也可以访问网址:

https://https://www.wendangku.net/doc/c62722894.html,/IntegrationCenter/ic_std-variable-reference.html

【注】

?若要显示当前购物车信息,您只需将

改为

若上面两句同时存在,则只显示当前购物车信息;

在FORM里需设置target="paypal"以使购物页面和购物车页面分开;

3.2 创建“Upload Cart”按钮

若您的网站已经有自己的购物车或已经集成了第三方购物车,如图3-3所示,那您可以通过创建“上传购物车”按钮将购物车详细信息上传给PayPal,然后通过PayPal来进行付款。

图3-3 第三方购物车

在您的购物车页面适合的位置上插入以下代码:

其中:

?第1、2、3、18行是必须且不可更改得;

?第4行用于设置您得PayPal账户;

?第6~8、10~12行分别设置了商品1,2得属性,包括商品描述,商品价格

及数量;如需添加更多商品,可照此类推;

?第14行用于设置货币种类,关于货币描述请参考附录2;

?第15行用于设置目标客户国家所在地,其值可参考附录6;

?第16行用于设置客户付完款后返回您网站的地址,具体请参考PDT/IPN文档

部分;

?第17行在一般情况下无需改动。

除此之外,您可以根据实际需要增加、修改或删除一些变量。

点击“Upload Cart”后,将显示PayPal支付页面,如图3-4所示:

点击这里

图3-4 用PayPal支付您的购物车

点击图3-4蓝色倒三角则可以显示此次购物车的详情,如图3-5所示:

图3-5 PayPal购物车详情

所有“上传购物车”按钮可用变量您可以参考“集成指南”文档中“HTML示例与立即购买,捐赠和购物车变量”部分;也可以访问网址

https://https://www.wendangku.net/doc/c62722894.html,/IntegrationCenter/ic_std-variable-reference.html

【注】

若变量“quantity_X”没有设置,则默认为1;

4 加密网站付款EWP

在第二章和第三章,我们列举了很多PayPal 付款按钮的实例代码。很明显,这些代码中的一些关键信息,如PayPal账户、金额等都是未经过加密的,根据实际需要,您可以对这些信息进行加密;目前,PayPal提供了基于.NET和JAVA的加密示例,使用方法如下:4.1 使用加密网站付款的先决条件

在使用加密的网站付款之前,您必须:

?生成一个私钥;

?生成一个公共证书;

?将您的公共证书上传到PayPal网站;

?下载PayPal的公共证书。

关于私钥和公共证书的定义您可以参考“集成指南”文档中“加密的网站付款/密钥和证书”部分;

第1步-创建您的公共证书

下载OpenSSL并安装

对于windows用户,您可以从https://www.wendangku.net/doc/c62722894.html,/related/binaries.html或https://www.wendangku.net/doc/c62722894.html,/products/Win32OpenSSL.html直接下载OpenSSL for Windows,下载完后直接安装,安装时建议您安装在某个盘的根目录下,如c:\OpenSSL。

对于非windows用户,您可以从https://www.wendangku.net/doc/c62722894.html,/source下载您需要的版本,然后根据您实际的操作系统进行编译安装,示例如下:

创建私钥和公共证书;

使用OpenSSL程序,输入以下命令创建您的私钥。该命令生成一个1024位的RSA私钥。该私钥存储在文件-prvkey.pem中:

OpenSSL genrsa -out -prvkey.pem 1024

使用OpenSSL程序,输入以下命令创建您的公共证书。该命令在文件-pubcert.pem中生成公共证书:

OpenSSL req –new –key -prvkey.pem –x509 –days 365 –out

–pubcert.pem

【注】

?OpenSSL 在OpenSSL得安装目录得bin下,若是在非windows操作系统中,

请注意大小写和路径;

?您可以将改写成您想要的名字;

?对于windows用户来说,您也可以从

https://https://www.wendangku.net/doc/c62722894.html,/en_US/dwnloads/windows.zip

或https://https://www.wendangku.net/doc/c62722894.html,/en_US/dwnloads/java.zip下载PayPal为常用的

开发环境提供的示例代码,其中均包含了文件“key.bat”,下载并解压后编辑

该文件,设置好正确的OpenSSL路径,然后在命令行执行命令“key

”即可生成您的私钥和公共证书,示例如下:

C:\paypal\coding\windows\key

创建PKCS12文件(适用于后面用JAVA生成加密代码)

要创建PKCS12文件,输入下面OpenSSL命令,该命令在文件-prvkey.p12 中生成PKCS12文件:

OpenSSl pkcs12 -export -inkey -prvkey.pem –in

-pubcert.pem -out -prvkey.p12

【注】

?执行此命令时,将会提示您输入密码,请记住此密码,下面用JAVA生成加密

代码时将会提示您输入此密码。

第2步-上传您的公共证书

1) 登录到您的PayPal企业或高级账户;

2) 点击“Profile”子选项卡;

3) 从右侧菜单中点击“Encrypted payment Settings”链接;

4) 点击“Add”;

5) 在窗口“Add Certificate”点击“浏览…”并选择您上面创建的公共证书。

【注】

?公共证书必须为PEM格式,如上面的-pubcert.pem。

如果您的公共证书上传成功,它将出现在您的公共证书下的下一个屏幕上,如图4-1所示,您可以得到一个唯一的公共证书号(Cert ID):

图4-1 公共证书示例

【注】

?请记住这个证书号,此证书号将在后面生成加密代码时使用;

?一个PayPal账户最多可以获取6个不同的证书号。

第3步-下载PayPal的公共证书

1) 登录到您的PayPal企业或高级账户;

2) 点击“Profile”子选项卡;

3) 点击右侧菜单中“Encrypted payment Settings”链接;

4) 点击“PayPal Public Certificate”下的“Download”按钮;

4.2 创建加密按钮

在进行创建加密按钮之前,我们必须将原来HTML代码中付款数据部分转换成一个字符串形式,字符串按格式=组成,变量与变量之间用“,”隔开,具体情况举例如下:

1) 立即购买/ Buy Now

假设原来“Buy Now”按钮的数据部分如下:

则我们可以把它转换成:

【注】

?请将<证书号>替换成您自己的证书号,如上面一个证书号是

“4UXSJFDZ8A2PL”则在这“cert_id=<证书号>”就写成

“cert_id=4UXSJFDZ8A2PL”;

?其中cmd=_xclick, business, item_name, amount及cert_id是必须的。

2) 添加到购物车/ Add to Cart

假设原来“Add to Cart”按钮的数据部分如下:

则我们可以把它转换成:

【注】

?请将<证书号>替换成您自己的证书号,如上面一个证书号是

“4UXSJFDZ8A2PL”则在这“cert_id=<证书号>”就写成

“cert_id=4UXSJFDZ8A2PL”;

?其中cmd=_xclick, add, business, item_name, amount及cert_id是必须的。

3) 上传购物车/ Upload Cart

假设原来“Upload Cart”按钮的数据部分如下:

则我们可以把它转换成:

【注】

?请将<证书号>替换成您自己的证书号,如上面一个证书号是

“4UXSJFDZ8A2PL”则在这“cert_id=<证书号>”就写成

“cert_id=4UXSJFDZ8A2PL”;

?其中cmd=_xclick, upload, business及cert_id是必须的。

在生成加密数据字符串后,下面我们介绍如何在C#和JAVA中通过程序生成加密按钮。

4.2.1 用C#生成加密按钮

1) 用PayPal提供的示例代码生成单个按钮

从https://https://www.wendangku.net/doc/c62722894.html,/en_US/dwnloads/windows.zip下载windows.zip,解压后在Visual .NET环境中编译,里面包含了ButtonEncryptionLib和ButtonEncryptionLibTest 两个工程。其中ButtonEncryptionLib用于生成加密按钮的DLL,这个要求系统已经安装了OpenSSL for Windows;ButtonEncryptionLibTest则会引用前者生成的DLL编译一个可执行

相关文档
相关文档 最新文档