文章内容
2023/10/18 20:44:07,作 者: 黄兵
PayPal API 开发总结
最近使用 PayPal API 的方式进行支付开发,平时我们通过 JavaScript SDK 的方式经行支付很简单,同时官方也有很详细的问题,具体文档地址,我放在下面的参考资料当中,有需要自取。
我们通过 API 支付,首先需要参考官方文档,文档地址可以在下面的参考资料找到。
在通过 API 支付的时候,我们首先需要获取 token,获取 token 的方式,我们可以参考这篇文章:Get started with PayPal REST APIs
获取了 token 之后,我们通过官方文档,可以看到首先需要通过 API 的方式创建订单,创建订单的 API 接口介绍:Create order
创建完成订单之后,会得到一个订单 id,我们需要拿着这个订单 id,确认订单。
如果不确认订单,会一直卡在继续查看订单,截图如下:
我这边开发的时候,就是没有确认订单,一直卡在这里,点击继续查看订单,没有任何效果。
同时我这边使用 Flask 创建的订单 API 代码如下:
# 初始化 PayPal paypal_init = PaymentMethodPayPalUtil() # 获取 PayPal Access Token get_access_token = paypal_init.get_access_token() if get_access_token: order_info = { "name": { "given_name": first_name, "surname": last_name }, "address": { "address_line_1": address_1, "admin_area_2": get_city, "admin_area_1": get_state_code, "postal_code": postal_code, "country_code": "US" } } purchase_units = [{"reference_id": item.id, "amount": {"currency_code": "USD", "value": str(item.total_price)}} for item in get_card] response = paypal_init.crate_order(access_token=get_access_token, order_info=order_info, purchase_units=purchase_units) # 处理响应 if response.status_code == 201: response_json = response.json() # confirm_order = paypal_init.confirm_order(access_token=get_access_token, order_id=response_json['id']) approve_url = next(link['href'] for link in response_json['links'] if link['rel'] == 'approve') return redirect(approve_url, 302)
confirm_order 这一行就是确认订单的,这里为了调试,先注释了。
创建完成订单之后,会返回如下数据:
{"id":"3JC242078V9397811","status":"CREATED","links": [ {"href":"https://api.sandbox.paypal.com/v2/checkout/orders/3JC242078V9397811","rel":"self","method":"GET"}, {"href":"https://www.sandbox.paypal.com/checkoutnow?token=3JC242078V9397811","rel":"approve","method":"GET"}, {"href":"https://api.sandbox.paypal.com/v2/checkout/orders/3JC242078V9397811","rel":"update","method":"PATCH"}, {"href":"https://api.sandbox.paypal.com/v2/checkout/orders/3JC242078V9397811/capture","rel":"capture","method":"POST"} ] }
我们直接取 approve
的 href
数据用于用户登录支付,就会出现上面的继续查看订单问题。
我们确认了订单之后,就可以
返回结果如下:
[ {'href': 'https://api.sandbox.paypal.com/v2/checkout/orders/0GY22822PL512791W', 'method': 'GET', 'rel': 'self'}, {'href': 'https://www.sandbox.paypal.com/checkoutnow?token=0GY22822PL512791W', 'method': 'GET', 'rel': 'payer-action'} ]
我们直接获取 payer-action
的 href
值,跳转到 PayPal 的付款页面,用户输入用户名和密码之后,开始支付,截图如下:
当用户点击完成购物之后,PayPal 会从用户的账户中扣除费用,同时会返回我们定义的 return_url
地址,PayPal 会通过 Webhook 的方式请求 return_url 的地址,之后我们对请求的数据做校验就可以了。
校验数据我们稍后会详细介绍。
参考资料:
2、PayPal - Get started with PayPal REST APIs
其它相关推荐:
黄兵个人博客原创。
转载请注明出处:黄兵个人博客 - PayPal API 开发总结
评论列表