目 录
如果您已经有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之旅了!
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
如果您的网站还没有集成购物车功能,您可以通过创建“Add to Cart”按钮直接使用PayPal的购物车。
如果您的网站已经有自己的购物车或者已经集成了第三方购物车的功能,那您可以通过创建“Upload Cart”按钮将您的购物车明细上传给PayPal并通过PayPal进行付款;您也可以为已有购物车生成一个订单,并通过创建PayPal的“Buy Now”按钮进行付款(其中:商品名称可以为您的订单号,商品价格可以为订单总价)。
如图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示例与立即购买,捐赠和购物车变量”部分;也可以访问网址:
【注】
n 若要显示当前购物车信息,您只需将
<input type="hidden" name="add" value="1">
改为
<input type="hidden" name="display" value="1">
若上面两句同时存在,则只显示当前购物车信息;
<input type="hidden" name="add" value="1">
改为
<input type="hidden" name="display" value="1">
若上面两句同时存在,则只显示当前购物车信息;
n 在FORM里需设置target="paypal"以使购物页面和购物车页面分开;
若您的网站已经有自己的购物车或已经集成了第三方购物车,如图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
<basename>–pubcert.pem
【注】
n OpenSSL 在OpenSSL得安装目录得bin下,若是在非windows操作系统中,请注意大小写和路径;
n 您可以将<basename>改写成您想要的名字;
创建PKCS12文件(适用于后面用JAVA生成加密代码)
要创建PKCS12文件,输入下面OpenSSL命令,该命令在文件<basename>-prvkey.p12 中生成PKCS12文件:
OpenSSl pkcs12 -export -inkey <basename>-prvkey.pem –in
<basename>-pubcert.pem -out <basename>-prvkey.p12
<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;
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目录中。
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,解压。
生成单个加密按钮步骤如下:
A. 编辑其中的文件build-window.bat,设置CRYPTO_HOME为上面中CRYPTO解压的目录,如图4-2所示,修改好后保存并运行。运行后将自动编译该目录下的类ButtonEncryption以及com\paypal\crypto\sample\目录下所有java类;
B. 将您的私钥、公共证书、PKCS12文件和PayPal的公共证书拷贝到一个指定的目录中,(这里我们将这些文件拷贝到与ButtonEncryption.class同一目录);
C. 运行下面的命令即可生成加密内容:
Java ButtonEncryption <CertFile> <PrivKeyFile> <PPCertFile> <Password> <CmdTxt> <OutputFile> [Sandbox]
其中:
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 |
D. 打开生成文件<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工程环境中
A. 复制java.zip包中的整个com目录到您的工程中;
B. 在您需要生成加密按钮的类里添加引用:
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; |
C. 然后通过下面的示例代码即可生成加密数据:
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();
} |
n PayPal网站付款标准版交易方式确认集成指南
【中文版】
https://www.paypal.com/zh_CN/pdf/PP_WebsitePaymentsStandard_IntegrationGuide.pdf
https://www.paypal.com/zh_CN/pdf/PP_WebsitePaymentsStandard_IntegrationGuide.pdf
【英文版】
https://www.paypal.com/en_US/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/zh_CN/pdf/PP_OrderManagement_IntegrationGuide.pdf
【英文版】
https://www.paypal.com/en_US/pdf/PP_OrderManagement_IntegrationGuide.pdf
https://www.paypal.com/en_US/pdf/PP_OrderManagement_IntegrationGuide.pdf
n IPN和PDT变量列表
https://www.paypal.com/IntegrationCenter/ic_ipn-pdt-variable-reference.html
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
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
http://paypaltech.com/content/index.php?option=com_content&task=view&id=21&Itemid=42
货币代号 |
货币名称 |
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 |
n 若在您的“Buy Now”按钮中添加了变量“invoice”(订单标识号),则应保证每次付款中的“invoice”号码唯一;若重复付款,PayPal 将提示您,如下图所示:
n 在所有涉及到价格的变量中,其数值都只精确到小数点后面两位;若其中一个数值精确到两位以上或者格式不对时,PayPal将提示您发生错误,如下图所示:
n 如果您为您的网站付款流程页面定义了LOGO,则该LOGO图片必须存放在一个HTTPS服务器上,以避免出现一些安全警告,如下图所示:
变量 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 |
选填 |
||
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 |
国家或地区名 |
代码 |
国家或地区名 |
代码 |
国家或地区名 |
代码 |
安圭拉 |
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 |