使用Website Payments Pro Hosted Solution
现在paypal变复杂了,支付解决方案相当多,而且一些国家只能用特定的解决方案。以香港为例,不能使用payflow pro了,只能使用Website Payments Pro Hosted Solution,这在magento 1.x上使用还需要安装组件才能支持,现在2.x与paypal高度集成,已经存在Website Payments Pro Hosted Solution这个payment。但在新安装的magento2后台上很难发现这个payment,最初以为不存在,查过源代码才知道需要先选择Merchant Country为HK之后才会显示这个payment,这是挺人性化的设计,并不会搞错国家使用了不能使用的payment。
Payment Action需要设置为Sale,这样可以自动收款。
TLSv1.2
由于paypal已经使用了TLSv1.2了,如果环境中不支持这个协议,过程就无法顺利。访问以下链接得到解决方案:
TLSv1.2 Requirement
paypal sandbox
paypal提供了很完善的测试方案,只要有正式paypal帐号,都可以建立多个paypal sandbox帐号。
https://developer.paypal.com/...
在以上地址创建sandbox商家帐号,如果是香港的务必在Country一栏选择Hong Kong,这一点很重要,使用什么支付解决方案完全取决于帐号所属地,需要跟magento2后台的Merchant Country一致。创建帐号后需要手动把帐号升级为pro
把Classic TEST API Credentials里面的Username, Password, Signature都贴到magento2后台去,Website Payments Pro Hosted Solution就能使用。
How do I create an additional credit card number for a Sandbox account?
payment review
Website Payments Pro Hosted Solution支付完成之后,后台的订单状态应该是processing,这说明订单已经确认收款了,但却出现payment review,这时需要到登录paypal商家帐号,在收到的订单中点确认收款,然后magento2的订单才会转为processing。
在我的案例中有两个原因:
- 在sandbox帐号里有Payment Review选择,这个需要设为No
- 由于在我的项目中使用的支付货币是英磅,而商家帐号默认是港币,所以不能自动收款,需要添加英磅这个货币才可以,可以通过以下链接添加:
https://www.sandbox.paypal.co...
cancel button
Website Payments Pro Hosted Solution默认没有cancel按钮,而商家帐号里可以设置cancel按钮,但设置后也不会出现。这是因为magento2使用的是iframe模式,在这个模式下cancel是不会出来的。要解决这个问题,恐怕需要修改程序了,我估计难度也不少。
IPN异常
如果paypal支付成功后order status仍然是pending payment,即有可能 Paypal IPN受阻,可以用以下方式排查:
- 在paypal登录后到Edit Instant Payment Notification (IPN) settings页面,Notification URL:
https://domain.com/paypal/ipn/index/
并设置Receive IPN messages - 打开paypal debug选项,查
var/log/exception.log
是否出现相关异常 - 检查paypal IPN是否设置了disabled状态
- 查paypal的交易历史记录以分析原因 https://www.paypal.com/hk/cgi...
测试卡号
http://www.webcreatorbox.com/...
技术支持
使用Website Payments Pro Hosted Solution的通过中出现很多问题,很多都是我无法解决的,但paypal support可以让我咨询技术上的问题,我是通过paypal support沟通多次后才能解决问题。一般一个工作天就会得到答复,有时候快的半天就有答复了。
不用担心英文不好难以沟通,我是用中文的。
声明
以上的内容是我在实际项目中得到的经验之谈,不一定都适合于所有情况,如果无法解决问题,最好直接咨询paypal support。如果内容有错,请留言提醒。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。