(asp.net)PayPal案例的关键源码代码__PayPal集成_API接口

 

轻轻松松集成PayPal

标准版

 

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

 

      前段时间接到一个外贸网站的项目,集成paypal支付接口的,对象是海外用户,全部用US的信用卡结算。国内有个paypal的中文版,叫贝宝,不过只支持人民币之间的结算,而且提供的功能不多。所以只能使用paypal国际版,也就是paypal.com,习惯性的google了一下相关资料,发现关于paypal.com接口的中文文档并不多,也不详细,只好自己上paypal.com研究,还好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://developer.paypal.com/注册和使用它。登录以后可以新建帐户,设置余额和帐户类型,有一点要注意,每次使用时必须先登录sandbox才能使用新建的那些帐户。Sndbox里面有个测试工具,可以发送IPN的,以后会用到。

 

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

 

     

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

    

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

      

 

 程序代码

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">

   <input type="hidden" name="cmd" value="_xclick">

   <input type="hidden" name="business" value="sample@sample.com">

   <input type="hidden" name="item_name"

   value="Item Name Goes Here">

   <input type="hidden" name="item_number"

   value="Item Number Goes Here">

   <input type="hidden" name="amount" value="100.00">

   <input type="hidden" name="no_shipping" value="2">

   <input type="hidden" name="no_note" value="1">

   <input type="hidden" name="currency_code" value="USD">

   <input type="hidden" name="bn" value="IC_Sample">

   <input type="image" src="https://www.paypal.com/

   en_US/i/btn/x-click-but23.gif"

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

   free and secure!">

   <img alt=""

   src="https://www.paypal.com/en_US/i/scr/pixel.gif"

   width="1" height="1">

</form>

 

 

 

      如果使用sandbox,action地址改成https://www.sandbox.paypal.com/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示意图如下(来自Paypal.com):

 

     

 

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

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

      第一步,你需要一个sandbox的帐号,这很重要,因为它能让你随心所欲的进行测试,而不用担心资金在天上飞。注册地址:https://developer.paypal.com/

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

     

 

      新建买家帐号的时候记得在Account Balance中加上金额,不然你就没钱买东西了,如果paypal.com的帐号也能这样加钱多好。

      新建完两个帐号:

     

 

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

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

     

 

      点击Profile,在Selling Preferences中选择Instant Payment Notification Preferences,点击edit加入IPN信息返回的地址,记得勾上前面那个选项,我是用.net写的接受文件,所以我的IPN地址是http://www.chenchen.org/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://www.sandbox.paypal.com/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://www.sandbox.paypal.com/cgi-bin/webscr,Paypal.com就是https://www.paypal.com/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中的各项变量值

                …

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

        }  

    }

 

 

 

 

 

      这样,就实现了将支付信息传回网站的功能。注:当交易状态发生改变时,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]ndwork.com  用@替换[at]。

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

 

 

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

 

 

 引用内容

 

什么是PDT

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

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

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

 

     

 

      上图是PDT的流程示意。

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

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

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

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

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

 

 

目   

 

1 注册您的PayPal帐号.... 2

2 创建“Buy Now”按钮.... 2

3 创建“Shopping Cart”按钮.... 4

3.1 创建“Add to Cart”按钮... 4

3.2 创建“Upload Cart”按钮... 6

4 加密网站付款EWP.. 9

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

4.2 创建加密按钮... 12

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

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

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

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

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 注册您的PayPal帐号

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

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

https://www.paypal.com/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

3

4

5

6

7

8

9

 

10

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_xclick">

<input type="hidden" name="business" value="paypal@yoursite.com">

<input type="hidden" name="item_name" value="SIGMA SD1000">

<input type="hidden" name="amount" value="399.00">

<input type="hidden" name="currency_code" value="USD">

<input type="hidden" name="lc" value="US">

<input type="hidden" name="return" value="http://www.yoursite.com/thanks.html">

<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">

</form>

其中:

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

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

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

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

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

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

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

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

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

https://www.paypal.com/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

4

5

6

7

8

9

10

 

11

<form target="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_cart">

<input type="hidden" name="add" value="1">

<input type="hidden" name="business" value="paypal@yoursite.com">

<input type="hidden" name="item_name" value="PPShopping Cart Example">

<input type="hidden" name="amount" value="99.99">

<input type="hidden" name="currency_code" value="USD">

<input type="hidden" name="lc" value="US">

<input type="hidden" name="return" value="http://www.yoursite.com/thanks.html">

<input type="image" src=https://www.paypal.com//en_US/i/btn/sc-but-01.gif
 border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">

</form>

其中:

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

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

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

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

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

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

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

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

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

https://www.paypal.com/IntegrationCenter/ic_std-variable-reference.html

 

【注】

n            若要显示当前购物车信息,您只需将
<input type="hidden" name="add" value="1">
改为
<input type="hidden" name="display" value="1">
若上面两句同时存在,则只显示当前购物车信息;

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

3.2 创建“Upload Cart”按钮

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

 

图3-3 第三方购物车

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

 

18

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_cart">

<input type="hidden" name="upload" value="1">

<input type="hidden" name="business" value="paypal@yoursite.com">

 

<input type="hidden" name="item_name_1" value="San Francisco Bay(32'X32')">

<input type="hidden" name="amount_1" value="250.00">

<input type="hidden" name="quantity_1" value="1">

 

<input type="hidden" name="item_name_2" value="Mount Hamilton(24'x15')">

<input type="hidden" name="amount_2" value="50.00">

<input type="hidden" name="quantity_2" value="1">

 

<input type="hidden" name="currency_code" value="USD">

<input type="hidden" name="lc" value="US">

<input type="hidden" name="return" value="http://www.yoursite.com/thanks.html">

<input type="submit" value="Upload Cart" alt="Make payments with PayPal - it's fast, free and secure!">

</form>

其中:

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

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

n            第6~8、10~12行分别设置了商品1,2得属性,包括商品描述,商品价格及数量;如需添加更多商品,可照此类推;

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

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

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

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

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

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

 

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

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

 

图3-5 PayPal购物车详情

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

https://www.paypal.com/IntegrationCenter/ic_std-variable-reference.html

 

【注】

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

4 加密网站付款EWP

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

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

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

n            生成一个私钥;

n            生成一个公共证书;

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

n            下载PayPal的公共证书。

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

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

下载OpenSSL并安装

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

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

Login as root.

Shell> tar –gz **.tar.gz

Shell> config

Shell> make

Shell> make install

创建私钥和公共证书;

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

OpenSSL genrsa -out <basename>-prvkey.pem 1024

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

OpenSSL req –new –key <basename>-prvkey.pem –x509 –days 365 –out
<basename>–pubcert.pem

 

【注】

n            OpenSSL 在OpenSSL得安装目录得bin下,若是在非windows操作系统中,请注意大小写和路径;

n            您可以将<basename>改写成您想要的名字;

n            对于windows用户来说,您也可以从
https://www.paypal.com/en_US/dwnloads/windows.zip
或https://www.paypal.com/en_US/dwnloads/java.zip下载PayPal为常用的开发环境提供的示例代码,其中均包含了文件“key.bat”,下载并解压后编辑该文件,设置好正确的OpenSSL路径,然后在命令行执行命令“key <basename>”即可生成您的私钥和公共证书,示例如下:
C:\paypal\coding\windows\key <basename>

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

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

OpenSSl pkcs12 -export -inkey <basename>-prvkey.pem –in
<basename>-pubcert.pem -out <basename>-prvkey.p12

 

【注】

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

 

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

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

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

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

4)    点击“Add”;

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

 

【注】

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

 

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

 

图4-1 公共证书示例

【注】

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

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

 

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

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

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

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

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

 

4.2 创建加密按钮

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

1)    立即购买 / Buy Now

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

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_xclick">

<input type="hidden" name="business" value="paypal@yoursite.com">

<input type="hidden" name="item_name" value="SIGMA SD1000">

<input type="hidden" name="amount" value="399.00">

<input type="hidden" name="currency_code" value="USD">

<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">

</form>

则我们可以把它转换成:

cmd=_xclick,business=paypal@yoursite.com,item_name=SIGMASD1000,currency_code=USD,amount=399.00,cert_id=<证书号>

 

【注】

n            请将<证书号>替换成您自己的证书号,如上面一个证书号是“4UXSJFDZ8A2PL”则在这“cert_id=<证书号>”就写成“cert_id=4UXSJFDZ8A2PL”;

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

 

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

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

<form target="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_cart">

<input type="hidden" name="add" value="1">

<input type="hidden" name="business" value="paypal@yoursite.com">

<input type="hidden" name="item_name" value="PPShopping Cart Example">

<input type="hidden" name="amount" value="99.99">

<input type="hidden" name="currency_code" value="USD">

<input type="image" src="https://www.paypal.com//en_US/i/btn/sc-but-01.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">

</form>

则我们可以把它转换成:

cmd=_cart,add=1,business=paypal@yoursite.com,item_name=PPShoppingCartExample,currency_code=USD,amount=99.99,cert_id=<证书号>

 

【注】

n            请将<证书号>替换成您自己的证书号,如上面一个证书号是“4UXSJFDZ8A2PL”则在这“cert_id=<证书号>”就写成“cert_id=4UXSJFDZ8A2PL”;

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

 

3)    上传购物车 / Upload Cart

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

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_cart">

<input type="hidden" name="upload" value="1">

<input type="hidden" name="business" value="paypal@yoursite.com">

 

<input type="hidden" name="item_name_1" value="San Francisco Bay(32'X32')">

<input type="hidden" name="amount_1" value="250.00">

<input type="hidden" name="quantity_1" value="1">

 

<input type="hidden" name="item_name_2" value="Mount Hamilton(24'x15')">

<input type="hidden" name="amount_2" value="50.00">

<input type="hidden" name="quantity_2" value="1">

 

<input type="hidden" name="currency_code" value="USD">

<input type="submit" value="Upload Cart" alt="Make payments with PayPal - it's fast, free and secure!">

</form>

则我们可以把它转换成:

cmd=_cart,upload=1,business=paypal@yoursite.com,item_name_1=SanFranciscoBay(32’x32’),amount_1=250.00,quantity_1=1,item_name_2=MountHamilton(24’x15’),amount_2=1,quantity_2=1,,currency_code=USD,cert_id=<证书号>

 

【注】

n            请将<证书号>替换成您自己的证书号,如上面一个证书号是“4UXSJFDZ8A2PL”则在这“cert_id=<证书号>”就写成“cert_id=4UXSJFDZ8A2PL”;

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

 

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

4.2.1 用C#生成加密按钮

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

从https://www.paypal.com/en_US/dwnloads/windows.zip下载windows.zip,解压后在Visual .NET环境中编译,里面包含了ButtonEncryptionLib和ButtonEncryptionLibTest两个工程。其中ButtonEncryptionLib用于生成加密按钮的DLL,这个要求系统已经安装了OpenSSL for Windows;ButtonEncryptionLibTest则会引用前者生成的DLL编译一个可执行文件PPEncrypt,此文件即可用于加密单个按钮,您可以在目录ButtonEncryptionLibTest\bin\Debug下找到。

生成加密按钮步骤

将您的私钥、公共证书和PayPal的公共证书拷贝到与PPEncrypt同一个目录下;运行下面的命令即可生成加密内容;

PPEncrypt <CertFile> <PrivKeyFile> <PPCertFile> <CmdTxt> <OutputFile> [Sandbox]

其中:

<CertFile>

您的公共证书文件名

<PrivKeyFile>

您的私钥文件名

<PPCertFile>

PayPal的公共证书文件名

<CmdTxt>

加密的字符串命令行

<OutputFile>

输出HTML代码的文件名

[Sandbox]

在PayPal测试环境中生成

比如:

PPEncrypt my-pubcert.pem my-prvkey.pem paypal_pubcert.pem
“cmd=_xclick,business=paypal@yoursite.com,return=http://www.yoursite.com/thankyou.htm,item_name=itemname,currency_code=USD,amount=99.99,invoice=I20050101004,cancel_return=http://www.yoursite.com/cancel.htm,cert_id=4UXSJFDZ8A2PL" button.html

打开生成文件<OutputFile>(这里为button.html),将里面加密的FORM内容复制到您需要付款的页面中即可。

<OutputFile>的样本如下:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_s-xclick">

<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">

<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----

MIIHTwYJKoZIhvcNAQcEoIIHQDCCBzwCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQw

… …

1C7YhvLqslFdnUfeI8RR5vqQpvr4pHUwjEsAz3m/ZAO6/Riqo7/JimpWHjMDbZzR

F91ttNhph8Ts22CfoAckT5tEPCG9G/iM0oPLfMFl8L2mCQhzHN02nEYU6080z9N0Zfd9

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

">

</form>

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

a.    在OpenSSL目录下您可以找到文件libeay32.dll和ssleay32.dll,将这两个文件复制到<windir>\system32下;

b.    将上面由ButtonEncryptionLib工程编译成的ButtonEncryptionLib.dll复制到您的.Net/C#工程中,并通过“添加引用”将此DLL添加到您当前的工程里;

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

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

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

ButtonEncryption buttonenc = new ButtonEncryption(true);

string sResult = "";

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

string VPath = Page.Server.MapPath(HttpContext.Current.Request.ApplicationPath + "/cert/");

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

string sCertFile = VPath + "your-pubcert.pem";

string sPrivKeyFile = VPath + "your-prvkey.pem";

string sPPCertFile = VPath + "paypal_cert_pem.txt";

//生成加密字符串到sEncryption

string sEncryption = buttonenc.SignAndEncrypt(sCmdTxt, sCertFile, sPrivKeyFile, sPPCertFile, ref sResult);

string outString="";

outString = outString +"<form action=""https://www.paypal.com/cgi-bin/webscr"" method=""post"">");

outString = outString +"<input type=""hidden"" name=""cmd"" value=""_s-xclick"">" ;

outString = outString +"<input type=""image""
src=""https://www.paypal.com/en_US/i/btn/x-click-but23.gif"" border=""0""
name=""submit"" >";

outString = outString +"<input type=""hidden"" name=""encrypted"" value=""" ;

outString = outString + sEncryption;

outString = outString +" ""></form>" ;

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

 

4.2.2 用JAVA生成加密按钮

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

1)        下载并安装JDK,请参考http://java.sun.com/j2se/1.4.2/download.html

2)        根据JDK的版本下载相对应的crypto,下载地址为
http://www.bouncycastle.org/latest_releases.html,下载后解压到某一个目录备用,记住此目录名(如 c:\crypto-124),用于后面的CRYPTO_HOME;

3)        从http://java.sun.com/products/jce/index.jsp或
http://java.sun.com/j2se/1.4.2/download.html下载Java(TM) Cryptography Extension(JCE);解压JCE*.rar/.zip,并将其中local_policy.jar及
US_export_policy.jar覆盖至$JAVA_HOME\jre\lib\security目录中。

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

从https://www.paypal.com/en_US/dwnloads/java.zip下载 java.zip,解压。

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

  1. 编辑其中的文件build-window.bat,设置CRYPTO_HOME为上面中CRYPTO解压的目录,如图4-2所示,修改好后保存并运行。运行后将自动编译该目录下的类ButtonEncryption以及com\paypal\crypto\sample\目录下所有java类;
  2. 将您的私钥、公共证书、PKCS12文件和PayPal的公共证书拷贝到一个指定的目录中,(这里我们将这些文件拷贝到与ButtonEncryption.class同一目录);
  3. 运行下面的命令即可生成加密内容:
    Java ButtonEncryption <CertFile> <PrivKeyFile> <PPCertFile> <Password> <CmdTxt> <OutputFile> [Sandbox]
    其中:

<CertFile>

您的公共证书文件名

<PrivKeyFile>

您的私钥文件名

<PPCertFile>

PayPal的公共证书文件名

<Password>

生成PKCS12文件时输入的密码

<CmdTxt>

加密的字符串命令行

<OutputFile>

输出HTML代码的文件名

[Sandbox]

在PayPal测试环境中生成

比如:

Java ButtonEncryption my-pubcert.pem my-prvkey.p12 paypal_pubcert.pem pwd
“cmd=_xclick,business=paypal@yoursite.com,return=http://www.yoursite.com/thankyou.htm,item_name=itemname,currency_code=CNY,amount=1.00,invoice=I20050101004,cancel_return=http://www.yoursite.com/cancel.htm,cert_id=4UXSJFDZ8A2PL" java_bn.html

  1. 打开生成文件<OutputFile>(这里为java_bn.html),将里面加密的FORM内容复制到您需要付款的页面中即可。

<OutputFile>的样本如下:

<form action="https://www.paypal.com/cgi-bin/webscr" method="post">

<input type="hidden" name="cmd" value="_s-xclick">

<input type="image" src="https://www.paypal.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">

<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----

MIIHTwYJKoZIhvcNAQcEoIIHQDCCBzwCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQw

… …

1C7YhvLqslFdnUfeI8RR5vqQpvr4pHUwjEsAz3m/ZAO6/Riqo7/JimpWHjMDbZzR

F91ttNhph8Ts22CfoAckT5tEPCG9G/iM0oPLfMFl8L2mCQhzHN02nEYU6080z9N0Zfd9

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

">

</form>

 

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

  1. 复制java.zip包中的整个com目录到您的工程中;
  2. 在您需要生成加密按钮的类里添加引用:

import com.paypal.crypto.sample.*;

 

import java.io.*;

import java.security.InvalidAlgorithmParameterException;

import java.security.KeyStoreException;

import java.security.NoSuchAlgorithmException;

import java.security.NoSuchProviderException;

import java.security.Security;

import java.security.UnrecoverableKeyException;

import java.security.cert.CertStoreException;

import java.security.cert.CertificateException;

import org.bouncycastle.cms.CMSException;

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

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());

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@yoursite.com,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_side.getButtonEncryptionValue( CmdText, PrivkeyFile, CertFile, PPCertPath, Password );

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

StringBuffer sbResult = new StringBuffer(“”);

sbResult.append("<form action=\"https://www.paypal.com/cgi-bin/webscr\" method=\"post\">" ); 

sbResult.append("<input type=\"hidden\" name=\"cmd\" value=\"_s-xclick\">" );

sbResult.append("<input type=\"image\"
src=\"https://www.paypal.com/en_US/i/btn/x-click-but23.gif\" border=\"0\"
 name=\"submit\" " );

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

sbResult.append("<input type=\"hidden\" name=\"encrypted\" value=\"" );

sbResult.append( result );

sbResult.append( "\"></form>");

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

//以下为捕获意外事件

}catch(NoSuchAlgorithmException e){

e.printStackTrace();

}catch(NoSuchProviderException e){

e.printStackTrace();

}catch(IOException e){

e.printStackTrace();

}catch(CMSException e){

       e.printStackTrace();

}catch(CertificateException e){

       e.printStackTrace();

}catch(KeyStoreException e){

       e.printStackTrace();

}catch(UnrecoverableKeyException e){

       e.printStackTrace();

}catch(InvalidAlgorithmParameterException e){

       e.printStackTrace();

}catch (CertStoreException e){

       e.printStackTrace();

}

 

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

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

【中文版】
https://www.paypal.com/zh_CN/pdf/PP_WebsitePaymentsStandard_IntegrationGuide.pdf

【英文版】
https://www.paypal.com/en_US/pdf/PP_WebsitePaymentsStandard_IntegrationGuide.pdf

n            订单管理集成指南

【中文版】
https://www.paypal.com/zh_CN/pdf/PP_OrderManagement_IntegrationGuide.pdf

【英文版】
https://www.paypal.com/en_US/pdf/PP_OrderManagement_IntegrationGuide.pdf

n            PayPal集成中心https://www.paypal.com/IntegrationCenter/ic_home.html

n            标准标量列表
https://www.paypal.com/IntegrationCenter/ic_std-variable-reference.html

n            IPN和PDT变量列表
https://www.paypal.com/IntegrationCenter/ic_ipn-pdt-variable-reference.html

n            加密按钮 https://www.paypal.com/IntegrationCenter/ic_button-encryption.htm

n            英文论坛搜索 http://paypal.forums.liveworld.com/search.jspa?objID=c1

n            按钮示例网站 http://paypaltech.com/demo_site/

n            IPN代码生成器
http://paypaltech.com/content/index.php?option=com_content&task=view&id=25&Itemid=49

n            EWP for PHP http://paypaltech.com/Stephen/encode/index.php

n            PEM和P12的转换器
http://paypaltech.com/content/index.php?option=com_content&task=view&id=21&Itemid=42

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

货币代号

货币名称

USD

U.S. Dollars

AUD

Australian Dallars

CAD

Canaidan Dollars

CZK

Czech Korunna

DKK

Danish Kroner

EUR

Euros

HKD

Hong Kong Dollars

HUF

Hungarian Forint

NZD

New Zealand Dollars

NOK

Norwegian Kroner

PLN

Polish Zlotych

GBP

Pounds Sterling

SGD

Singapore Dollars

SEK

Swedish Kronor

CHF

Swiss Frances

JPY

Japan Yen

 

 

 

 

 

 

 

 

 

 

 

 

7 附录3:常见问题

n            若在您的“Buy Now”按钮中添加了变量“invoice”(订单标识号),则应保证每次付款中的“invoice”号码唯一;若重复付款,PayPal 将提示您,如下图所示:

n            在所有涉及到价格的变量中,其数值都只精确到小数点后面两位;若其中一个数值精确到两位以上或者格式不对时,PayPal将提示您发生错误,如下图所示:

n            如果您为您的网站付款流程页面定义了LOGO,则该LOGO图片必须存放在一个HTTPS服务器上,以避免出现一些安全警告,如下图所示:

 

 

 

 

 

 

 

 

 

 

8 附录4:标准变量列表

变量 cmd 的值

cmd 的值

说明

_xclick

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

_cart

“购物车” 按钮。

_ext-enter

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

 

用于IPN的变量: notify_url

变量名

说明

必填/选填

字段长度

notify_url

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

选填

255

 

表单变量: 物品信息

变量名

说明

必填/选填

字段长度

amount

购物价格或金额,不包括运费、手续费或税费。如果在“立即购买”或者“捐赠”交易情况下省略,则由客户在购买时填写此值。

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

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

请参考本行说明

 

item_name

物品描述。如果在“立即购买”或者“捐赠”交易情况下省略,则客户将看到一个可以选择输入物品名称的栏目。

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

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

请参考本行说明.

127

item_number

可用于跟踪购买或捐赠的传递变量,在付款完成时传回给您。如果在“立即购买”或者“捐赠”交易情况下省略,则将没有变量传回给您。

选填

127

quantity

物品数量。将金额、运费和税费乘以数量将得出付款总额。如果这是购物车交易,PayPal将附加物品数量(例如, quantity1、quantity2)。

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

选填

 

undefined_quantity

如果设置为 1,则允许买家修改数量。
提示:这个变量只允许在“立即购买”或者“捐赠”交易情况下使用。 购物车交易不允许使用。

选填

1

on0

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

选填

64

on1

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

选填

64

os0

第一组选项值。如果此选项通过文本框或单选按钮选中,则每个值均应不超过 64 个字符。如果该值由客户通过文本框输入,则上限为 200 个字符。如果省略,则不会传回给您任何变量。

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

选填
请参考本行说明.

64 or 200

os1

第二组选项值。如果此选项通过文本框或单选按钮选中,则每个值均应不超过 64 个字符。如果该值由客户通过文本框输入,则上限为 200 个字符。如果省略,则不会传回给您任何变量。

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

选填

请参考本行说明.

64 or 200

 

表单变量:显示信息

名字

说明

必填/选填

字段长度

add

添加一个物品到PayPal购物车

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

必填

1

cancel_return

指在付款取消的情况下,客户浏览器返回到的 URL 。例如,您的网站上显示“付款已取消”页面的 URL。如果省略,则用户将被带到PayPal网站。

选填

 

cbt

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

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

选填

60

cn

提示栏上的标签。该值不保存,而且不会出现在任何给您的通告中。如果省略,则将没有变量传回给您。

选填

40

cpp_header_image

将您选择的图片设置为显示在付款页面的左上角。该图片的最大尺寸为 750像素宽、90 像素高。有效的字符集为 URL 安全字符。由于图片不存储在我们的数据库上,所以 cpp_header_image 变量没有字符限制。建议您只提供存储在安全 (https) 服务器上的图片。

选填

无限制

cpp_headerback_color

为付款页面标题设置背景色。有效的字符集为 6 字符 HTML 十六进制 ASCII代码。此变量不区分大小写。

选填

 

cpp_headerborder_color

设置付款页面标题四周的边框颜色。边框是位于标题空间四周,粗细为 2 像素的方框,方框最大尺寸为 750 像素宽、90 像素高。有效的字符集为 6 字符HTML 十六进制 ASCII 代码。此变量不区分大小写。

选填

 

cpp_payflow_color

为付款页面的标题以下区域设置背景色。有效的字符集为 6 字符 HTML 十六进制 ASCII 代码。此变量不区分大小写。

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

选填

 

cs

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

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

选填

 

display

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

选填

1

image_url

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

如果省略,则客户看到的是您的商家名称(如果您有企业账户)或您的电子邮件地址(如果您有高级账户)。

选填

 

no_note

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

选填

1

no_shipping

买家的送货地址。

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

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

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

选填

1

page_style

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

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

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

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

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

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

选填

30

return

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

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

选填

 

rm

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

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

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

如果为 1 并设置了 return,则客户的浏览器由 GET 方法返回至返回 URL,并且不提交任何交易变量。

如果为 2 并设置了 return,则客户的浏览器由 POST 方法返回至返回URL,同时将所有可用交易变量发送至该 URL。

选填

 

 

表单变量: 交易信息

名字

说明

必填/选填

字段长度

address_override

如果设置为 1,通过预填充栏传送的地址将会覆盖用户的已存储地址。用户可以看到传送的地址,但是无法进行编辑。如果地址无效(例如,缺少必需的栏,包括国家或地区)或者没有包括地址,则不会显示地址。

选填

1

currency_code

付款货币。定义币种以标示货币变量(amount、shipping、shipping2、handling、tax)。如果省略,则所有货币字段将解释为美元。

选填

 

custom

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

选填

256

handling

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

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

选填

 

invoice

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

选填

127

redirect_cmd

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

redirect_cmd 的唯一有效值是 _xclick.

选填

40

shipping

在您启用了特定于物品的运费时,运送此物品的成本。如果使用了shipping 而未定义 shipping2 ,则无论所购物品数量多少,都将收取该固定金额。

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

如果省略,并启用了基于用户信息的运费,则将向您的客户收取您的用户信息中定义的金额或百分比。

选填

 

shipping2

每增加一件物品所需的运送成本。如果省略,并启用了基于用户信息的运费,则将向您的客户收取您的用户信息中定义的金额或百分比。

选填

 

tax

基于交易的税费覆盖变量。将该变量设置为您希望应用于交易的固定税额,而不论买家所处的位置。如果存在,该值将覆盖可能已在您的用户信息中设定的任何税费设置。如果省略,则适用用户信息税费设置(如有)。

选填

 

tax_cart

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

选填

 

 

表单变量: 购物车特有

名字

必填/选填

说明

允许的值

amount

必填

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

任何有效货币金额

business

必填

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

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

handling_cart

选填

对整个购物车收取的单笔手续费。如果在多个“添加到购物车”按钮中使用handling_cart,将使用第一件物品的handling_cart 值。

任何有效货币金额

item_name

必填

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

 

paymentaction

选填

指明交易是否是稍后在https://www.paypal.com/ 上通过PayPal授权与捕获进行捕获的授权。

 

upload

必填

上传第三方购物车

1

 

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

名字

说明

必填/选填

字段长度

amount_x

物品 #x 的价格。

必填

 

handling_x

物品 #x 的手续费。

选填

 

item_name_x

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

必填

127

item_number_x

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

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

选填

127

on0_x

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

选填

64

on1_x

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

选填

64

os0_x

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

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

选填

200

os1_x

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

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

选填

200

quantity_x

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

选填

 

shipping_x

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

选填

 

shipping2_x

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

选填

 

tax_x

物品 #x 的税额。

选填

 

 

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

变量名

说明

要求

字段长度

address1

街道(第 1 栏,共 2 栏)

字母数字字符

100

address2

街道(第 2 栏,共 2 栏)

字母数字字符

100

city

市/ 县

字母数字字符

40

country

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

字母

2

email

客户的电子邮件地址

字母数字字符

127

first_name

字母

32

last_name

字母

32

lc

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

字母

2

night_phone_a

美国电话号码的区号,或非美国电话号码的国家或地区代码。它会预填充买家的家庭电话。

数字

3

night_phone_b

美国电话号码的 3 位数前缀,或非美国电话号码的完整电话号码(不包括国家或地区代码)。它会预填充买家的家庭电话。

数字

3

night_phone_c

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

数字

4

state

省/ 直辖市/ 自治区

必须为两个字符的正式缩写

2

zip

邮编

数字

32

 

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

变量名

说明

要求

字段长度

business_address1

客户所在的街道

字母数字字符

128

business_address2

客户所在的街道

字母数字字符

128

business_city

客户所在的市/ 县

字母数字字符

128

business_state

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

必须为两个字符的正式缩写

2

business_country

客户所在的国家

字母

2

business_cs_email

客户的email地址

字母数字字符

128

business_cs_phone_a

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

数字

3

business_cs_phone_b

客户的客服电话所在的美国电话号码的 3 位数前缀,或非美国电话号码的完整电话号码(不包括国家或地区代码)。它会预填充买家的家庭电话。

数字

3

business_cs_phone_c

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

数字

4

business_url

客户网站的URL

字母数字字符. 必须是有效的.

128

night_phone_b

美国电话号码的 3 位数前缀,或非美国电话号码的完整电话号码(不包括国家或地区代码)。它会预填充买家的家庭电话。

数字

3

business_night_phone_a

客户所在的美国电话号码的区号,或非美国电话号码的国家或地区代码。它会预填充买家的家庭电话。

数字

3

business_night_phone_b

客户所在的美国电话号码的 3 位数前缀,或非美国电话号码的完整电话号码(不包括国家或地区代码)。它会预填充买家的家庭电话。

数字

3

business_night_phone_c

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

数字

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

国家或地区名

代码

国家或地区名

代码

国家或地区名

代码

安圭拉

AI

希腊Greece

GR

波兰Poland

PL

阿根廷Argentina

AR

中国香港特别行政区

HK

葡萄牙Portugal

PT

澳大利亚

AU

匈牙利Hungary

HU

新加坡Singapore

SG

奥地利Austria

AT

冰岛Iceland

IS

斯洛伐克Slovakia

SK

比利时Belgium

BE

印度India

IN

斯洛文尼亚

SI

巴西Brazil

BR

爱尔兰Ireland

IE

南非South Africa

ZA

加拿大

CA

以色列Israel

IL

韩国Korea

KR

智利Chile

CL

意大利Italy

IT

西班牙Spain

ES

中国

CN

牙买加Jamaica

JM

瑞典Sweden

SE

哥斯达黎加Costa Rica

CR

日本

JP

瑞士Switzerland

CH

塞浦路斯

CY

拉脱维亚

LV

中国台湾地区

TW

捷克共和国Czech Republic

CZ

立陶宛

LT

泰国Thailand

TH

丹麦Denmark

DK

卢森堡Luxembourg

LU

土耳其Turkey

TR

多米尼加共和国

DO

马来西亚Malaysia

MY

英国Great Britain

GB

厄瓜多尔Ecuador

EC

马耳他

MT

美国U.S.A

US

爱沙尼亚

EE

墨西哥Mexico

MX

乌拉圭Uruguay

UY

芬兰Finland

FI

荷兰Holland

NL

委内瑞拉Venezuela

VE

法国

FR

新西兰New Zealand

NZ

 

 

德国Germany

DE

挪威Norway

NO

 

 

 

 

关于.NET技术 等其他计算机技术,欢迎加群一起讨论 3群 70536418 2群 5851499 1群 12672376

 

转载于:https://www.cnblogs.com/guolilong/archive/2012/04/11/2441830.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值