`
lovnet
  • 浏览: 6670566 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

PayPal支付流程

 
阅读更多

PayPal支付流程

一、 PayPal支付时序图

二、 PayPal启用IPN设置方式

IPN方式是用来在在支付完成以后获得Paypal的通知的。

1、 登录PayPal账户

2、 点击“Profile”

3、 点击Selling Preferences列表栏中“Instant Payment Notification Preferences”打开即时付款通知习惯设定页面;在支付完成以后,Paypal会调用这里设置的页面来通知商户支付的情况。

三、 开发详细流程

1、 选择商品页面:列出所有可供用户购买的商品,让用户选择购买,提交;

2、 支付确认页面:

a) 根据提交的商品id,获取商品id、名称,价格,货币,并产生本次交易的唯一Id号。

b) 把信息组合成cmd=_xclick,business={0},amount={1},currency_code={2},custom={3},item_name={4},invoice={5},cert_id={6}命令串

c) 使用ButtonEncryption库对命令串进行加密打包处理

此部分加密需要用到的三个密钥文件:

1、 PayPal的公钥:在PayPal后台Profile里的Encrypted Payment Settings下载。

2、 商户的公钥:用OpenSSL产生,并上传到PayPal->Profile->Encrypted Payment Settings中,并记录下PayPal对此公钥产生的Cert ID

3、 商户的私钥:用OpenSSL产生。

d) 形成PayPal的加密按钮,呈现在页面上。下面是按钮的代码,里面包含了生成的私钥。

<input type="hidden" value="_s-xclick" name="cmd"> <input type="image" alt="Make payments with PayPal - it's fast, free and secure!" src="https://www.Sandbox.paypal.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit"> <input type=hidden value=" -----BEGIN PKCS7----- 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 R4A= -----END PKCS7----- " name=encrypted>

3、 PayPal获取到支付请求,要求用户进行支付流程,当用户成功完成支付后,PayPal提交信息到商户的IPN指定的URL地址上;

商户的IPN指定的页面:
将获取的所有页面表单数据通过Http提交到Paypal上去验证,判断本地请求是否为PayPal发出的,是否真实有效,判断返回字符是否等于"VERIFIED",如果匹配证明这是个合法的回复

获取页面中的Request数据

txn_id:交易id

mc_gross:金额

payment_date:付款时间

payment_status:支付状态,是否是Completed

payment_type:付款类型:有电子支票和paypal帐号的钱两种

item_name:商品名称

custom:商户平台商品Id

invoice:商户平台产生的交易号

如果payment_status"Completed",这证明支付已经完成,将相应的数据写回数据库,完成本次交易全过程。

4、 如果需要在支付完成以后回到自己的网站,还需要做一个设置。在My Account中,进入到Profile | Website Payment Preferences。下面是页面:


Return URL里面设置支付完成以后返回的页面。Paypal会传递下面的参数:
tx
:交易id,这个与步骤3里面的txn_id的值是一样的。
amt
:交易金额。
payment_status
:交易状态,交易成功的话值应该是Completed

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics