啥都不说,先吐槽
Paypal 真心坑爹,跟国内支付完全没法比,能不接入就不接入吧!!!
准备工作
重要事情
Paypal下单支付后,需要主动跟paypal确认收款(capture),否则该笔订单并不是完成状态!!!
账号
自己前往Paypal develop注册一个吧,注意区分沙箱(sandbox)和正式(live)账号即可。
用沙盒账号开发,还可以创建多个沙盒的paypal账号,可以用于沙盒测试支付。
下单方式
跟国内的支付宝和微信有区别,paypal可以直接在客户端下单。
支持客服端、服务端下单。各有利弊,看具体需求来定咯
无论何种下单,paypal 都没有采用加密机制,全部都是明文,所以在检校订单信息时需要格外注意
客户端下单
客服端直接下单,需要保证客服端接收到的订单信息时准确的(最好后端加密订单信息,客户端解密并检验数据完整性)
JavaScript
JavaScript直接接入,是通过paypal js直接生成一个iframe用于支付。
其中需要注意的是,paypal生成的按钮只有几个基本样式可选,无法直接自定义样式(我是没有找到相关文档,不排除可以自定义的可能。如果有麻烦也告诉下我)。
使用方式
// 如果默认货币不是美元,需要在后面添加货币参数 <script src="https://www.paypal.com/sdk/js?client-id=sb"></script>
paypal.Buttons({ createOrder: function(data, actions) { // This function sets up the details of the transaction, including the amount and line item details. return actions.order.create({ purchase_units: [{ amount: { value: '0.01' } }] }); }, onApprove: function(data, actions) {}, onCancel: function(){}, onError: function(){} }).render('#paypal-button-container');
虽然目前无法自定义按钮,但是我们可以是paypal生成的按钮隐藏,用自己的按钮盖住,然后是设置css属性pointer-events:none;来屏蔽事件即可。
Ios || android
Ios 和 andorid 的接入方式与JavaScript类似,只要引入相应的SDK,非常简单的就可以下单。SDK quickstart
服务端下单(推荐)
因为paypal没有采用加密机制,同时在弱网情况下无法保证客户端可以及时通知服务端订单状态的改变,选用服务端下单是相对安全的。
建议在下单时,发送完整的订单金额信息,paypal会对相关金额做检校,如果更方面金额不一致(总价 !== 运费+税费+商品数量 * 商品单价+…… ),是不能下单的。同时也可以让买家确认该笔订单的明细,用户体验和安全性都有提高。
顺便吐槽下paypal的沙盒环境,如果你请求超时,请不要见怪,这不是你的问题,是沙盒环境太烂。(PS:不知道是不是与服务端语言相关,PHP和nodejs对接paypal,性能差别很大,同一时间,同一个沙盒账号,nodejs请求基本保持在5s以内,php在15s左右)
基本下单参数
{ "intent": "CAPTURE", "purchase_units": [ { "reference_id": "order_id", // 总价 "amount": { "value": "200", "currency_code": "RMB" }, // 价格明细 "breakdown": { // 商品总价 "item_total": { "value": "180", "currency_code": "RMB" }, // 运费 "shipping": { "value": "20", "currency_code": "RMB" } // …… 还有税费之类的 }, // 商品明细 "items": [ { "name": "goods", "unit_amount": { "value": "90", "currency_code": "RMB" }, "quantity": 2,// 数量 "sku": "sku" } ] //...地址之类的其他参数 } ], "application_context": { "cancel_url": "", "return_url": "" } }
支付时序图
高清在线图片
再次强调: Paypal下单支付后,需要主动跟paypal确认收款(capture),否则该笔订单并不是完成状态!!
notify
支付回调可以通过IPN或者webhooks,基本和国内支付没有什么区别,唯一区别是paypal通知没有加密,收到回调需要服务端主动跟paypal确认信息是否正确
相关链接
PayPal Checkout
PayPal integrate doc
PayPal SDK quickstart
point-events
到此这篇关于Paypal支付不完全指北的文章就介绍到这了,更多相关Paypal支付内容请搜索小牛知识库以前的文章或继续浏览下面的相关文章希望大家以后多多支持小牛知识库!
本文向大家介绍PHP整合PayPal支付,包括了PHP整合PayPal支付的使用技巧和注意事项,需要的朋友参考一下 简单整理一下PHP项目整合PayPal支付功能。 一、表单的构建: 二、IPN验证部分 以上所述就是本文的全部内容了,希望大家能够喜欢。
链接是:https://developer.paypal.com/webapps/developer/docs/integration/mobile/verify-mobile-payment/#look-up-a-payment-using-the-rest-api 谢谢你的建议
我有Paypal DoDirect方法的api(直接信用卡支付),我使用php作为基本语言。 我正在获得成功的交易或回应是这样说的。但沙箱帐户中没有更新。 我分享了我的沙盒业务-专业帐户详细信息如下: 我用我的另一个个人账户做了这笔交易。 我的期望是,它应该从个人账户扣除金额,并贷记到商户(business-pro)账户。 非常感谢任何帮助。谢谢 编辑我使用的代码与以下url中提到的相同,使用类的
我目前正在整合贝宝定期付款。我有一些关于集成贝宝系统的问题。 > 用户需要为定期支付系统创建paypal帐户吗? 我们可以使用这种“尝试按钮”集成进行贝宝定期支付吗?https://developer.paypal.com/docs/checkout/ 如果用户在没有创建贝宝帐户的情况下使用信用卡注册,我们可以获得信用卡品牌吗?最后4位数字和到期日期? 我们可以使用php api创建使用贝宝账户或
null 如果我确实需要执行支付,那么我如何获得paymentId和payerID?如果我不需要执行支付,那么这就出现了一个问题,因为我希望用户确认支付。我可以将create payment(创建支付)的内容移动到只有当用户确认直接支付订单时才执行,但是在用户输入卡的详细信息之后,我就无法验证这些信息了。我在想有没有更好的办法处理这件事? 如果有人能帮我弄清楚我会很感激的。谢谢
我用贝宝支付预付我的Magento购物车。我发现一个来自加拿大的客户的信用卡不断下降。我直接和客户谈了一下,做了以下测试: > 转到我的Paypal管理器中的虚拟终端,只测试授权,它也不工作。虚拟终端的单个事务测试给出错误:结果代码:12响应消息:Decreded:15005-无法处理此事务。 我在我的贝宝账户里发了一张2美元的发票,但这也不起作用。 客户然后使用信用卡从其他地方和它的工作很好。然