2024年8月22日发(作者:)

轻轻松松集成PayPal

标准版

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

前段时间接到一个外贸网站的项目,集成paypal支付接口的,对象是海外用户,全

部用US的信用卡结算。国内有个paypal的中文版,叫贝宝,不过只支持人民币之间的结算,

而且提供的功能不多。所以只能使用paypal国际版,也就是,习惯性的google

了一下相关资料,发现关于接口的中文文档并不多,也不详细,只好自己上

研究,还好paypal上的资料非常齐全,而且还提供了开发者沙盒(sandbox),相

比之下,国内流行的支付宝还有很长的路要走啊。

项目结束的时候就有想法写一篇网站集成paypal的简易教程,方便以后的各位开发

者,毕竟看长篇英文资料是很头痛的事情^_^。一直到昨天期末考才结束,所以今天开始写

这个教程,其实内容也不多,可能还算不上教程,只能算经验吧。

主要分为序言、支付按钮、返回信息方式(IPN&PDT)、实例四部分组成,预计在三

天内完成,如果有新内容我临时再加吧。

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

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

本篇主要介绍如何在你的网站上快速加入paypal支付按钮,通过这个按钮,人们可

以方便快速的付款到你的paypal帐户。

首先,你需要注册一个paypal帐户,帐户类型分为Personal(个人)、Premier(高级)

和Business(商业),他们的差别对于开发者来说主要是返回的信息,Personal的不能使用

IPN和PDT等商家工具,即不能获取交易信息,但是Personal帐户收款无需手续费;Premier

轻轻松松集成PayPal

和Business当然就提供了IPN和PDT功能,能够在客户支付成功后,将交易信息传给指定

的网站,用来二次使用。Premier和Business使用上的差异我不是很清楚,应该是月收款额

和手续费上的区别吧。

这里插进来介绍一下paypal sandbox,也就是沙盒,是paypal提供给开发者的一个工

具,非常好用,你可以在/注册和使用它。登录以后可以新建帐户,

设置余额和帐户类型,有一点要注意,每次使用时必须先登录sandbox才能使用新建的那些

帐户。Sndbox里面有个测试工具,可以发送IPN的,以后会用到。

接着上面的内容,注册完帐户以后,当然,一开始开发最好使用sandbox,不然资金

转来转去手续费都扣光了,paypal的费率如下:

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

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

程序代码

value="Item Name Goes Here">

value="Item Number Goes Here">

en_US/i/btn/"

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

1

轻轻松松集成PayPal

free and secure!">

src="/en_US/i/scr/"

width="1" height="1">

如果使用sandbox,action地址改成/cgi-bin/webscr即

可,上面这段还是很容易理解的,看下name和value基本上就能知道每个值的含义了。

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

款到business指定值的帐户了。

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

再下一篇中会讲一下如何在付款成功之后,将信息返回到你的网站,大部分需求都是

客户完成付款后返回信息到网站的数据库,记录网站客服的交易信息。

最后稍微了解下为什么海外用户喜欢用自己的网站做生意,而不是像国内一样用淘宝

之类的C2C平台。一开始我也很不理解,有免费的平台为什么要自己建设网站还要支付

paypal的手续费,后来和客户了解了一下,他们做的事网游虚拟交易,国外最大的C2C平

台就是eBay,但只有德国可以售卖虚拟物品,并且eBay上的交易并不是免费的,收取的手

续费远远高于paypal的费率,因此,更多的海外用户选择自己建设网站进行电子商务。

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

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

可。

引用内容

2

轻轻松松集成PayPal

什么是即时付款通知IPN

当您收到新的付款交易或者已发生的付款交易的状态发生变化时,PayPal都将异步(即不作

为网站付款流程的一部分) 发送付款详细数据到您所指定的URL,以便您了解买家付款的

具体情况并做出相应的响应。这个过程我们称作即时付款通知(简称 IPN)。

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

段先发上来了。

相信大部分网站集成Paypal都希望能够实现客户支付完成后返回信息到自己的网站,

然后处理这些信息。比如客户在你的网站上购买了一个产品,通过Paypal完成了支付,接

着Paypal告诉你的网站客户完成了支付以及支付信息,最后你的网站将这些信息记录到你

自己的数据库中,并且将你的客户订单状态设为已支付,接着你就可以进行一系列的相关订

单的后续操作。

IPN就能帮助我们实现这个功能,IPN示意图如下(来自):

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

现网站集成的功能。

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

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

而不用担心资金在天上飞。注册地址:/

第二步,登陆sandbox,新建一个商家帐号(卖方)和一个客户账号(买方),其中

卖方帐号必须是Premier或者Business,不然无法使用IPN功能。

3

轻轻松松集成PayPal

新建买家帐号的时候记得在Account Balance中加上金额,不然你就没钱买东西了,

如果的帐号也能这样加钱多好。

新建完两个帐号:

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

选中business帐号,点击下面的Enter Sandbox Test Site进入sandbox Test Site,登录,

就像普通Paypal帐号的管理页面一样。

4

轻轻松松集成PayPal

点击Profile,在Selling Preferences中选择Instant Payment Notification Preferences,点

击edit加入IPN信息返回的地址,记得勾上前面那个选项,我是用.net写的接受文件,所以

我的IPN地址是/,地址只要能在互联网上访问到就可以了。

在Profile -> Selling Preferences ->Website Payment Preferences选项中,有一个Auto

Return的选项,将它设为on,并且在下面的return地址中填入你希望的客户支付完成后返

回的地址:

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

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

一个文件。

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

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

文件:关键代码

5

轻轻松松集成PayPal

定义一个VerifyIPN()函数:

程序代码

bool VerifyIPN()

{

string strFormValues = ng();

string strNewValue;

string strResponse;

string serverURL = "/cgi-bin/webscr";

HttpWebRequest req = (HttpWebRequest)(serverURL);

= "POST";

tType = "application/x-www-form-urlencoded";

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

tLength = ;

StreamWriter stOut = new StreamWriter(uestStream(),

);

(strNewValue);

();

StreamReader stIn = new StreamReader(ponse().GetResponseStream());

strResponse = End();

();

return strResponse == "VERIFIED";

}

这段代码的作用是判断IPN信息是否来自Pyapal,如果不进行判断,那么恶意用户

完全可以模拟一个信息post到你的网站上,让你认为订单已经完成支付,所以,必须首先

对接受到的信息进行验证。

代码的基本原理,serverURL定义了验证地址,sandbox为:

/cgi-bin/webscr,就是

/cgi-bin/webscr。

将paypal发送过来的所有信息加上一个&cmd=_notify-validate参数,表示对这个信息

进行验证,全部发送回paypal验证,如果信息确实存在,则返回VERIFIED字符串。

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

程序代码

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

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

6

轻轻松松集成PayPal

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

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

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

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

.cs代码结构如下:

程序代码

public partial class paypal_ipn :

{

protected void Page_Load(object sender, EventArgs e)

{

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

{

string ppTx = ["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是否正常工作。

7

轻轻松松集成PayPal

不过这个工具有个小BUG,就是发送的IPN里不包括contact_phone这个变量,但是

实际的IPN里是有的,这里要注意一下。

注:可以在商家帐号的Profile -> Selling Preferences ->Website Payment Preferences中,

选择Contact Telephone Number这一栏,来确定是否需要发送买家联系电话。

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

这篇文章写得有些仓促,如有疑问可以发送邮件到:chenchen[at] 用@

替换[at]。

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

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

引用内容

什么是PDT

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

款明细并显示给买家看。

暑假时候写了前面三篇文章,后来去电视台打工了,帮他们上了一个人居博览会,再

接着就开学了,又在杭州、温州、宁波跑来跑去。一直不能静下来继续写,现在工作又没啥

着落哈。

8

轻轻松松集成PayPal

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

上图是PDT的流程示意。

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

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

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

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

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

目 录

1 注册您的PAYPAL帐号 ................................................................................................................... 10

2 创建“BUY NOW”按钮 ................................................................................................................... 11

3 创建“SHOPPING CART”按钮 ..................................................................................................... 12

3.1

创建“A

DD TO

C

ART

”按钮 ............................................................................................................ 12

3.2

创建“U

PLOAD

C

ART

”按钮 ........................................................................................................... 14

4 加密网站付款EWP .......................................................................................................................... 17

4.1

使用加密网站付款的先决条件.................................................................................................. 17

4.2

创建加密按钮 ............................................................................................................................. 20

5 附录1: 参考文档及网站 .................................................................................................................. 28

6 附录2:PAYPAL目前支持的货币列表 ......................................................................................... 29

7 附录3:常见问题 ............................................................................................................................. 30

8 附录4:标准变量列表 ..................................................................................................................... 31

9 附录6:国家或地区ISO3166代码 ................................................................................................ 37

9

轻轻松松集成PayPal

1 注册您的PayPal帐号

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

如果还没有PayPal账户,那您可以通过访问主页,如图1-1

所示,点击 “Sign Up”或“Sign Up Now”按钮立即注册一个PayPal账户。如需帮助,您

可以点击主页上方的“帮助”按钮或在您的浏览器中输入

/cgi-bin/webscr?cmd=_help-ext&source_page=_home

获取帮助。

点击这里

图1-1 PayPal主页

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

10

轻轻松松集成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

3

4

5

6

7

8

9

/

">

border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">

11

轻轻松松集成PayPal

10

其中:

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

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

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

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

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

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

文档;

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

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

所有“Buy Now”按钮可用变量您可以参考“集成指南”文档中“HTML示例与立即购

买,捐赠和购物车变量”部分;也可以访问英文网站:

/IntegrationCenter/ic_

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”按钮:

12

轻轻松松集成PayPal

图3-1 “Add to Cart”按钮

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

示:

图3-2 PayPal购物车详情

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

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

您可以通过登陆PayPal网站自动为您创建“添加到购物车”按钮。创建方法请参考“集

成指南”文档中“创建购物车按钮(第37页)”部分。

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

利用您喜欢的网页编辑器(如DreamWeaver)直接编辑HTML代码,在您想要出现“添

加到购物车”按钮的位置上插入以下代码:

1

2

3

4

5

6

7

8

9

/

">

10

13

轻轻松松集成PayPal

border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">

11

其中:

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

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

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

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

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

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

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

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

所有“添加购物车”按钮可用变量您可以参考“集成文档”中“HTML示例与立即购买,

捐赠和购物车变量”部分;也可以访问网址:

/IntegrationCenter/ic_

【注】

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

改为

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

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

3.2 创建“Upload Cart”按钮

若您的网站已经有自己的购物车或已经集成了第三方购物车,如图3-3所示,那您可以

通过创建“上传购物车”按钮将购物车详细信息上传给PayPal,然后通过PayPal来进行付

款。

14

轻轻松松集成PayPal

图3-3 第三方购物车

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16 /

">

17 free and secure!">

18

其中:

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

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

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

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

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

15

轻轻松松集成PayPal

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

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

部分;

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

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

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

点击这里

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

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

16

轻轻松松集成PayPal

图3-5 PayPal购物车详情

所有“上传购物车”按钮可用变量您可以参考“集成指南”文档中“HTML示例与立即

购买,捐赠和购物车变量”部分;也可以访问网址

/IntegrationCenter/ic_

【注】

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

4 加密网站付款EWP

在第二章和第三章,我们列举了很多PayPal 付款按钮的实例代码。很明显,这些代码

中的一些关键信息,如PayPal账户、金额等都是未经过加密的,根据实际需要,您可以对

这些信息进行加密;目前,PayPal提供了基于.NET和JAVA的加密示例,使用方法如下:

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

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

17

轻轻松松集成PayPal

生成一个私钥;

生成一个公共证书;

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

下载PayPal的公共证书。

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

证书”部分;

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

下载OpenSSL并安装

对于windows用户,您可以从/related/或

/products/直接下载OpenSSL for Windows,

下载完后直接安装,安装时建议您安装在某个盘的根目录下,如c:OpenSSL。

对于非windows用户,您可以从/source下载您需要的版本,

然后根据您实际的操作系统进行编译安装,示例如下:

Login as root.

Shell> tar –gz **.

Shell> config

Shell> make

Shell> make install

创建私钥和公共证书;

使用OpenSSL程序,输入以下命令创建您的私钥。该命令生成一个1024位的RSA私

钥。该私钥存储在文件-中:

OpenSSL genrsa -out - 1024

使用OpenSSL程序,输入以下命令创建您的公共证书。该命令在文件

-中生成公共证书:

OpenSSL req –new –key - –x509 –days 365 –out

【注】

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

请注意大小写和路径;

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

18

轻轻松松集成PayPal

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

/en_US/dwnloads/

或/en_US/dwnloads/下载PayPal为常用的

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

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

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

C:paypalcodingwindowskey

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

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

中生成PKCS12文件:

OpenSSl pkcs12 -export -inkey - –in

- -out -prvkey.p12

【注】

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

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

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

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

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

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

4) 点击“Add”;

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

【注】

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

如果您的公共证书上传成功,它将出现在您的公共证书下的下一个屏幕上,如图4-1所

示,您可以得到一个唯一的公共证书号(Cert ID):

19

轻轻松松集成PayPal

图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”按钮的数据部分如下:

border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">

20

轻轻松松集成PayPal

则我们可以把它转换成:

cmd=_xclick,business=paypal@,item_name=SIGMASD1000,currency_code=US

D,amount=399.00,cert_id=<证书号>

【注】

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

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

“cert_id=4UXSJFDZ8A2PL”;

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

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

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

type="image" src="//en_US/i/btn/"

border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">

则我们可以把它转换成:

cmd=_cart,add=1,business=paypal@,item_name=PPShoppingCartExample,cur

rency_code=USD,amount=99.99,cert_id=<证书号>

【注】

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

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

“cert_id=4UXSJFDZ8A2PL”;

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

3) 上传购物车 / Upload Cart

21

轻轻松松集成PayPal

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

and secure!">

则我们可以把它转换成:

cmd=_cart,upload=1,business=paypal@,item_name_1=SanFranciscoBay(32’x3

2’),amount_1=250.00,quantity_1=1,item_name_2=MountHamilton(24’x15’),amount_2=1,q

uantity_2=1,,currency_code=USD,cert_id=<证书号>

【注】

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

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

“cert_id=4UXSJFDZ8A2PL”;

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

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

4.2.1 用C#生成加密按钮

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

从/en_US/dwnloads/下载,解压后

在Visual .NET环境中编译,里面包含了ButtonEncryptionLib和ButtonEncryptionLibTest

两个工程。其中ButtonEncryptionLib用于生成加密按钮的DLL,这个要求系统已经安装了

OpenSSL for Windows;ButtonEncryptionLibTest则会引用前者生成的DLL编译一个可执行

22

轻轻松松集成PayPal

文件PPEncrypt,此文件即可用于加密单个按钮,您可以在目录

ButtonEncryptionLibTestbinDebug下找到。

生成加密按钮步骤

将您的私钥、公共证书和PayPal的公共证书拷贝到与PPEncrypt同一个目录下;运行

下面的命令即可生成加密内容;

PPEncrypt

[Sandbox]

其中:

[Sandbox]

比如:

PPEncrypt paypal_

“cmd=_xclick,business=paypal@,return=/thankyo

,item_name=itemname,currency_code=USD,amount=99.99,invoice=I2005010100

4,cancel_return=/,cert_id=4UXSJFDZ8A2PL"

您的公共证书文件名

您的私钥文件名

PayPal的公共证书文件名

加密的字符串命令行

输出HTML代码的文件名

在PayPal测试环境中生成

打开生成文件(这里为),将里面加密的FORM内容复制到您

需要付款的页面中即可。

的样本如下:

border="0" name="submit" alt="Make payments with PayPal - it's fast, free and

secure!">

MIIHTwYJKoZIhvcNAQcEoIIHQDCCBzwCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBh

MCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQw

… …

1C7YhvLqslFdnUfeI8RR5vqQpvr4pHUwjEsAz3m/ZAO6/Riqo7/JimpWHjMDbZzR

F91ttNhph8Ts22CfoAckT5tEPCG9G/iM0oPLfMFl8L2mCQhzHN02nEYU6080z9N0Zfd9

-----END PKCS7-----

23

轻轻松松集成PayPal

">

2) 集成PayPal加密按钮到您的.Net/C#环境中

a. 在OpenSSL目录下您可以找到文件和,将这两个文件复

制到system32下;

b. 将上面由ButtonEncryptionLib工程编译成的复制到您

的.Net/C#工程中,并通过“添加引用”将此DLL添加到您当前的工程里;

c. 将您的私钥、公共证书和PayPal的公共证书拷贝到该工程下一个目录中,如

cert ;

d. 在需要添加“生成加密按钮”的地方引用该组件,示例代码如下:

//申明一个ButtonEncryption用于加密字符串

ButtonEncryption buttonenc = new ButtonEncryption(true);

string sResult = "";

//获取所有证书存放的路径

string VPath = h(ationPath

+ "/cert/");

string sCmdTxt = "cmd=_xclick,cert_id=XXXX,buiness=paypal@...";

string sCertFile = VPath + "";

string sPrivKeyFile = VPath + "";

string sPPCertFile = VPath + "paypal_cert_";

//生成加密字符串到sEncryption

string sEncryption = dEncrypt(sCmdTxt, sCertFile, sPrivKeyFile,

sPPCertFile, ref sResult);

string outString="";

outString = outString +"

method=""post"">");

outString = outString +"

value=""_s-xclick"">" ;

outString = outString +"

src=""/en_US/i/btn/"" border=""0""

name=""submit"" >";

outString = outString +"

outString = outString + sEncryption;

outString = outString +" "">

" ;

//outString输出的就是加密付款按钮的HTML代码

4.2.2 用JAVA生成加密按钮

在开始使用JAVA生成加密按钮之前,您必须做以下几个准备工作:

24

轻轻松松集成PayPal

1) 下载并安装JDK,请参考/j2se/1.4.2/;

2) 根据JDK的版本下载相对应的crypto,下载地址为

/latest_,下载后解压到某一个目录

备用,记住此目录名(如 c:crypto-124),用于后面的CRYPTO_HOME;

3) 从/products/jce/或

/j2se/1.4.2/下载Java(TM) Cryptography

Extension(JCE);解压JCE*.rar/.zip,并将其中local_及

US_export_覆盖至$JAVA_HOMEjrelibsecurity目录中。

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

从/en_US/dwnloads/下载 ,解压。

生成单个加密按钮步骤如下:

A. 编辑其中的文件,设置CRYPTO_HOME为上面中CRYPTO

解压的目录,如图4-2所示,修改好后保存并运行。运行后将自动编译该目录

下的类ButtonEncryption以及compaypalcryptosample目录下所有java

类;

B. 将您的私钥、公共证书、PKCS12文件和PayPal的公共证书拷贝到一个指定的

目录中,(这里我们将这些文件拷贝到与同一目录);

C. 运行下面的命令即可生成加密内容:

Java ButtonEncryption

[Sandbox]

其中:

您的公共证书文件名

您的私钥文件名

25

轻轻松松集成PayPal

[Sandbox]

比如:

PayPal的公共证书文件名

生成PKCS12文件时输入的密码

加密的字符串命令行

输出HTML代码的文件名

在PayPal测试环境中生成

Java ButtonEncryption my-prvkey.p12 paypal_ pwd

“cmd=_xclick,business=paypal@,return=/thankyo

,item_name=itemname,currency_code=CNY,amount=1.00,invoice=I2

,cancel_return=/,cert_id=4UXSJFDZ8A2PL"

java_

D. 打开生成文件(这里为java_),将里面加密的FORM内

容复制到您需要付款的页面中即可。

的样本如下:

border="0" name="submit" alt="Make payments with PayPal - it's fast, free and

secure!">

MIIHTwYJKoZIhvcNAQcEoIIHQDCCBzwCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBh

MCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQw

… …

1C7YhvLqslFdnUfeI8RR5vqQpvr4pHUwjEsAz3m/ZAO6/Riqo7/JimpWHjMDbZzR

F91ttNhph8Ts22CfoAckT5tEPCG9G/iM0oPLfMFl8L2mCQhzHN02nEYU6080z9N0Zfd9

-----END PKCS7-----

">

2> 集成PayPal加密按钮到您的JAVA工程环境中

A. 复制包中的整个com目录到您的工程中;

B. 在您需要生成加密按钮的类里添加引用:

import .*;

import .*;

import dAlgorithmParameterException;

import reException;

import AlgorithmException;

26

轻轻松松集成PayPal

import ProviderException;

import ty;

import verableKeyException;

import oreException;

import icateException;

import eption;

C. 然后通过下面的示例代码即可生成加密数据:

vider(new CastleProvider());

try{

//先申明变量PrivkeyFile CertFile PPCertPath Password CmdText

//这些变量的定义可以参考上面

private static String PrivkeyFile = null;

private static String CertFile = null;

private static String PPCertPath = null;

private static String Password = "password";

private static String CmdText = null;

//cmd=_xclick,business=paypal@,amount=1.00

//TODO:初始化变量PrivkeyFile CertFile PPCertPath Password CmdText

//……

//申明一个ClientSide,其中PrivkeyFile CertFile PPCertPath Password CmdText

ClientSide client_side = new ClientSide(PrivkeyFile,CertFile,PPCertPath,Password);

//生成加密数据

String result = client_tonEncryptionValue( CmdText, PrivkeyFile, CertFile,

PPCertPath, Password );

//生成加密付款按钮的HTML代码

StringBuffer sbResult = new StringBuffer(“”);

("

method="post">" );

("" );

("

src="/en_US/i/btn/" border="0"

name="submit" " );

("alt="Make payments with PayPal - it's fast, free and secure!">" );

("

( result );

( "">

");

//通过调用ng()即可输出加密付款按钮的HTML代码

//以下为捕获意外事件

}catch(NoSuchAlgorithmException e){

tackTrace();

}catch(NoSuchProviderException e){

tackTrace();

}catch(IOException e){

27

action="/cgi-bin/webscr"

轻轻松松集成PayPal

tackTrace();

}catch(CMSException e){

}

tackTrace();

tackTrace();

tackTrace();

tackTrace();

tackTrace();

tackTrace();

}catch(CertificateException e){

}catch(KeyStoreException e){

}catch(UnrecoverableKeyException e){

}catch(InvalidAlgorithmParameterException e){

}catch (CertStoreException e){

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

PayPal网站付款标准版交易方式确认集成指南

【中文版】

/zh_CN/pdf/PP_WebsitePaymentsStandard_

【英文版】

/en_US/pdf/PP_WebsitePaymentsStandard_

订单管理集成指南

【中文版】

/zh_CN/pdf/PP_OrderManagement_

【英文版】

/en_US/pdf/PP_OrderManagement_

PayPal集成中心/IntegrationCenter/ic_

标准标量列表

/IntegrationCenter/ic_

IPN和PDT变量列表

/IntegrationCenter/ic_

加密按钮 /IntegrationCenter/ic_

28

轻轻松松集成PayPal

英文论坛搜索 /?objID=c1

按钮示例网站 /demo_site/

IPN代码生成器

/content/?option=com_content&task=view&id=25

&Itemid=49

EWP for PHP /Stephen/encode/

PEM和P12的转换器

/content/?option=com_content&task=view&id=21

&Itemid=42

6 附录2:PayPal目前支持的货币列表

货币代号

USD

AUD

CAD

CZK

DKK

EUR

HKD

HUF

NZD

NOK

PLN

GBP

SGD

SEK

CHF

JPY

U.S. Dollars

Australian Dallars

Canaidan Dollars

Czech Korunna

Danish Kroner

Euros

Hong Kong Dollars

Hungarian Forint

New Zealand Dollars

Norwegian Kroner

Polish Zlotych

Pounds Sterling

Singapore Dollars

Swedish Kronor

Swiss Frances

Japan Yen

货币名称

29

轻轻松松集成PayPal

7 附录3:常见问题

若在您的

“Buy Now”

按钮中添加了变量

“invoice”

(订单标识号),则应保证每次付款

中的

“invoice”

号码唯一;若重复付款,

PayPal

将提示您,如下图所示:

在所有涉及到价格的变量中,其数值都只精确到小数点后面两位;若其中一个数值精

确到两位以上或者格式不对时,PayPal将提示您发生错误,如下图所示:

如果您为您的网站付款流程页面定义了LOGO,则该LOGO图片必须存放在一个

HTTPS服务器上,以避免出现一些安全警告,如下图所示:

30

轻轻松松集成PayPal

8 附录4:标准变量列表

变量 cmd 的值

cmd 的值

_xclick

_cart

_ext-enter

“立即购买”和“捐赠”按钮。

“购物车” 按钮。

预填充您的客户的PayPal注册表单。需要一个redirect_cmd 变量,其值应为 _xclick 。

说明

用于IPN的变量: notify_url

变量名

notify_url

说明

用于接受PayPal发送的关于即时付款通知的交易信息的URL。必须是有效的

URL。

必填/

选填

选填

字段

长度

255

表单变量: 物品信息

变量名

amount

说明

购物价格或金额,不包括运费、手续费或税费。如果在“立即购买”或者“捐

赠”交易情况下省略,则由客户在购买时填写此值。

• 立即“购买”或者“捐赠”交易情况下是选填

• “购物车”交易情况下是必填

item_name

物品描述。如果在“立即购买”或者“捐赠”交易情况下省略,则客户将看

到一个可以选择输入物品名称的栏目。

• 立即“购买”或者“捐赠”交易情况下是选填

• “购物车”交易情况下是必填

item_numb

er

可用于跟踪购买或捐赠的传递变量,在付款完成时传回给您。如果在“立即

购买”或者“捐赠”交易情况下省略,则将没有变量传回给您。

必填/

选填

请参

考本

行说

请参

考本

行说

明.

选填

127

127

字段

长度

31

轻轻松松集成PayPal

quantity

物品数量。将金额、运费和税费乘以数量将得出付款总额。如果这是购物车

交易,PayPal将附加物品数量(例如, quantity1、quantity2)。

提示:数量的值必须是正整数。不允许为空、零或负数。

undefined_

quantity

on0

on1

os0

如果设置为 1,则允许买家修改数量。

提示:这个变量只允许在“立即购买”或者“捐赠”交易情况下使用。 购

物车交易不允许使用。

第一选项栏名称。如果省略,则将没有变量传回给您.

第二选项栏名称。如果省略,则将没有变量传回给您。

第一组选项值。如果此选项通过文本框或单选按钮选中,则每个值均应不超

过 64 个字符。如果该值由客户通过文本框输入,则上限为 200 个字符。

如果省略,则不会传回给您任何变量。

提示:必须对 on0 进行定义,才能识别 os0。

os1

第二组选项值。如果此选项通过文本框或单选按钮选中,则每个值均应不超

过 64 个字符。如果该值由客户通过文本框输入,则上限为 200 个字符。

如果省略,则不会传回给您任何变量。

提示:必须对 on1 进行定义,才能识别 os1。

选填

选填

选填

请参

考本

行说

明.

选填

请参

考本

行说

明.

64 or

200

64

64

64 or

200

选填

1

选填

表单变量:显示信息

名字

add

cancel_retu

rn

cbt

cn

cpp_heade

r_image

添加一个物品到PayPal购物车

若“add”和“display”两个变量同时设置,则只显示当前购物车信息。

指在付款取消的情况下,客户浏览器返回到的 URL 。例如,您的网站上显

示“付款已取消”页面的 URL。如果省略,则用户将被带到PayPal网站。

设置“PayPal付款完成”页面上的“继续”按钮的文本。

提示:return 变量也需要被设置。

提示栏上的标签。该值不保存,而且不会出现在任何给您的通告中。如果省

略,则将没有变量传回给您。

将您选择的图片设置为显示在付款页面的左上角。该图片的最大尺寸为 选填

750像素宽、90 像素高。有效的字符集为 URL 安全字符。由于图片不存

储在我们的数据库上,所以 cpp_header_image 变量没有字符限制。建议

您只提供存储在安全 (https) 服务器上的图片。

cpp_heade

cpp_heade

rborder_col

or

cpp_payflo

w_color

为付款页面标题设置背景色。有效的字符集为 6 字符 HTML 十六进制 选填

rback_color

ASCII代码。此变量不区分大小写。

设置付款页面标题四周的边框颜色。边框是位于标题空间四周,粗细为 2 像

素的方框,方框最大尺寸为 750 像素宽、90 像素高。有效的字符集为 6 字

符HTML 十六进制 ASCII 代码。此变量不区分大小写。

为付款页面的标题以下区域设置背景色。有效的字符集为 6 字符 HTML 十

六进制 ASCII 代码。此变量不区分大小写。

提示:不允许使用与贝宝错误信息相冲突的背景色。默认颜色为白色。

选填

选填

无限

选填

40

选填

60

选填

说明

必填/

选填

必填

字段

长度

1

32

轻轻松松集成PayPal

cs

display

image_url

设置您的付款页面的背景色。如果设为“1”,背景色将为黑色。如果省略

或设为“0”,背景色则为白色。

显示当前PayPal购物车的物品信息。

若“add”和“display”两个变量同时设置,则只显示当前购物车信息。

您希望在PayPal付款页面左上角的用作标识的 150x50 像素图片的 URL。

必须是有效的URL。

如果省略,则客户看到的是您的商家名称(如果您有企业账户)或您的电子

邮件地址(如果您有高级账户)。

no_note

no_shippin

g

为付款加入说明。如果省略或设为“0”,则会提示您的客户输入说明。如果

设为“1”,则不会提示您的客户输入说明。

买家的送货地址。

省略或设为 0 = 提示客户输入收货地址。

1 = 不要求客户提供收货地址。

2 = 客户必须提供收货地址。

page_style

为与此按钮/ 链接相关的付款页面设置“自定义付款页面的样式”。

page_style 的值与添加或编辑页面样式时您选择的页面样式名称相同。

page_style 变量的最大长度为 30 个字符。

有效的字符集只能为小写 7 位字母数字 ASCII 字符,加下划线。不能包含

空格。

如果您希望按钮/ 链接始终引用您设置为首选的样式,请将该变量设置为

"primary"。

如果您希望该按钮/ 链接始终引用默认的贝宝页面样式,请将该变量设置为

"paypal"。

return

指完成付款后客户的浏览器返回到的 URL 。 例如,在您的站点上显示“感

谢您的付款” 的页面的 URL。

如果省略,则您的买家将被带到PayPal网站。

rm

付款完成后的返回 URL 的行为(“返回方法”)。

提示:rm变量只有在return变量被设置后才能生效。

如果省略或为 0,则 GET 方法用于没有启用即时付款通知的所有购物车交

易,而 POST 方法用于所有其他交易。

如果为 1 并设置了 return,则客户的浏览器由 GET 方法返回至返回

URL,并且不提交任何交易变量。

如果为 2 并设置了 return,则客户的浏览器由 POST 方法返回至返回

URL,同时将所有可用交易变量发送至该 URL。

选填

选填

选填

30

选填

1

选填

1

选填

选填

1

选填

表单变量: 交易信息

名字

address_ov

erride

currency_c

ode

说明

如果设置为 1,通过预填充栏传送的地址将会覆盖用户的已存储地址。用户

可以看到传送的地址,但是无法进行编辑。如果地址无效(例如,缺少必需

的栏,包括国家或地区)或者没有包括地址,则不会显示地址。

付款货币。定义币种以标示货币变量(amount、shipping、shipping2、

handling、tax)。如果省略,则所有货币字段将解释为美元。

33

选填

必填/

选填

选填

字段

长度

1

轻轻松松集成PayPal

custom

handling

invoice

redirect_c

md

shipping

永远不会向您的客户显示的传递变量。如果省略,则不会传回给您任何变量。 选填

手续费。并非根据数量而定。无论所购物品数量多少,均收取相同手续费。

选填

如果省略,则不收取手续费。

您可以用于识别此次购物的帐单号码的传递变量。如果省略,则不会传回给

您任何变量。

只有在cmd的值为“_ext-enter”,即账户注册的预填充时才有效。

redirect_cmd 的唯一有效值是 _xclick.

在您启用了特定于物品的运费时,运送此物品的成本。如果使用了shipping

选填

而未定义 shipping2 ,则无论所购物品数量多少,都将收取该固定金额。

提示:如果您使用的是基于物品的运费,请确保选中您的用户信息中的覆盖

复选框。

如果省略,并启用了基于用户信息的运费,则将向您的客户收取您的用户信

息中定义的金额或百分比。

shipping2

tax

每增加一件物品所需的运送成本。如果省略,并启用了基于用户信息的运费,

选填

则将向您的客户收取您的用户信息中定义的金额或百分比。

基于交易的税费覆盖变量。将该变量设置为您希望应用于交易的固定税额,

选填

而不论买家所处的位置。如果存在,该值将覆盖可能已在您的用户信息中设

定的任何税费设置。如果省略,则适用用户信息税费设置(如有)。

tax_cart

整个购物车的税费。而不是单个物品的税额。 选填

选填

40

选填

127

256

表单变量: 购物车特有

名字

amount

business

handling_ca

rt

item_name

paymentacti

on

upload

必填

必填

选填

必填/

选填

必填

必填

选填

说明

物品的价格(购物车中所有物品的总价格)。

您PayPal账户上的电子邮件地址。

对整个购物车收取的单笔手续费。如果在多个“添加到

购物车”按钮中使用handling_cart,将使用第一件物品

的handling_cart 值。

物品名称(或购物车名称)。

指明交易是否是稍后在/ 上通

过PayPal授权与捕获进行捕获的授权。

上传第三方购物车

1

允许的值

任何有效货币金额

您PayPal账户上的电

子邮件地址

任何有效货币金额

表单变量:第三方购物车中单个物品的变量

名字

amount_x

handling_x

item_name_

x

物品 #x 的价格。

物品 #x 的手续费。

购物车中的物品 #x 的名称。必须为字母数字字符。

说明

必填/

选填

必填

选填

必填

字段

长度

127

34

轻轻松松集成PayPal

item_numbe

r_x

on0_x

on1_x

os0_x

os1_x

quantity_x

shipping_x

shipping2_x

tax_x

可用于跟踪购买 或捐赠的传递变量,在付款完成时传回给您。

如果省略,则将没有变量传回给您。

物品 #x 的第一选项栏名称。

物品 #x 的第二选项栏名称。

物品 #x 的第一组选项值。

必须对 on0_x 进行定义,才能识别 os0_x 。

物品 #x 的第二组选项值。

必须对 on1_x 进行定义,才能识别 os1_x 。

物品 #x 的数量。quantity_x 的值必须是正整数。不允许为空、零或负

数。

运送物品 #x 的第一件(数量 1)的成本。

每增加一件运送物品 #x (数量 2 或更多)所需的运送成本。

物品 #x 的税额。

选填

选填

选填

选填

127

64

64

200

选填

200

选填

选填

选填

选填

表单变量:网站付款的预填充变量

变量名

address1

address2

city

country

email

first_name

last_name

lc

night_phone

_a

night_phone

_b

night_phone

_c

state

zip

省/ 直辖市/ 自治区

邮编

必须为两个字

符的正式缩写

数字

32

2

街道(第 1 栏,共 2 栏)

街道(第 2 栏,共 2 栏)

市/ 县

设置运送和开单国家或地区。请查看附录6,以了解允许的国家

或地区代码。

客户的电子邮件地址

定义买家的交易方式确认流程的语言

美国电话号码的区号,或非美国电话号码的国家或地区代码。它

会预填充买家的家庭电话。

美国电话号码的 3 位数前缀,或非美国电话号码的完整电话号

码(不包括国家或地区代码)。它会预填充买家的家庭电话。

美国电话号码的 4 位数电话号码。它会预填充买家的家庭电话。 数字

4

数字

3

字母数字字符

字母

字母

字母

数字

127

32

32

2

3

说明 要求

字母数字字符

字母数字字符

字母数字字符

字母

字段

长度

100

100

40

2

表单变量: 账户注册的预填充变量

变量名

business_addres

s1

35

客户所在的街道

说明 要求

字母数字字符

字段

长度

128

轻轻松松集成PayPal

business_addres

s2

business_city

business_state

business_countr

y

business_cs_em

ail

business_cs_pho

ne_a

business_cs_pho

ne_b

business_cs_pho

ne_c

business_url

night_phone_b

客户的客服电话所在的美国电话号码的区号,或非美国电话

号码的国家或地区代码。

客户的客服电话所在的美国电话号码的 3 位数前缀,或非

美国电话号码的完整电话号码(不包括国家或地区代码)。

它会预填充买家的家庭电话。

客户的客服电话所在的美国电话号码的 4 位数电话号码。

它会预填充买家的家庭电话。

客户网站的URL

美国电话号码的 3 位数前缀,或非美国电话号码的完整电

话号码(不包括国家或地区代码)。它会预填充买家的家庭

电话。

business_night_

phone_a

business_night_

phone_b

business_night_

phone_c

客户所在的美国电话号码的区号,或非美国电话号码的国家

或地区代码。它会预填充买家的家庭电话。

客户所在的美国电话号码的 3 位数前缀,或非美国电话号

码的完整电话号码(不包括国家或地区代码)。它会预填充

买家的家庭电话。

客户所在的美国电话号码的 4 位数电话号码。它会预填充

买家的家庭电话。

数字

4

数字

3

数字

3

字母数字字符.

128

必须是有效的.

数字

3

数字

4

数字

3

数字

3

客户的email地址 字母数字字符

128

客户所在的市/ 县

客户所在的省/ 直辖市/ 自治区

客户所在的国家

字母数字字符

必须为两个字

符的正式缩写

字母

2

128

2

客户所在的街道 字母数字字符

128

36

轻轻松松集成PayPal

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

国家或地区名

安圭拉

代码

AI

国家或地区名

希腊Greece

中国香港特别行政区

匈牙利Hungary

冰岛Iceland

印度India

爱尔兰Ireland

以色列Israel

意大利Italy

牙买加Jamaica

日本

拉脱维亚

立陶宛

卢森堡Luxembourg

马来西亚Malaysia

马耳他

墨西哥Mexico

荷兰Holland

新西兰New Zealand

挪威Norway

代码

GR

HK

HU

IS

IN

IE

IL

IT

JM

JP

LV

LT

LU

MY

MT

MX

NL

NZ

NO

国家或地区名

波兰Poland

代码

PL

阿根廷Argentina

AR

澳大利亚

AU

奥地利Austria

比利时Belgium

巴西Brazil

加拿大

智利Chile

中国

哥斯达黎加

Costa Rica

塞浦路斯

捷克共和国

Czech Republic

丹麦Denmark

多米尼加共和国

厄瓜多尔

Ecuador

爱沙尼亚

芬兰Finland

法国

德国Germany

葡萄牙Portugal

PT

新加坡

SG

Singapore

斯洛伐克

Slovakia

斯洛文尼亚

南非South

Africa

韩国Korea

西班牙Spain

瑞典Sweden

瑞士

Switzerland

中国台湾地区

泰国Thailand

土耳其Turkey

英国Great

Britain

美国U.S.A

SK

SI

ZA

KR

ES

SE

CH

TW

TH

TR

GB

US

AT

BE

BR

CA

CL

CN

CR

CY

CZ

DK

DO

EC

EE

FI

FR

DE

乌拉圭Uruguay

UY

委内瑞拉

VE

Venezuela

37