文章内容

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"}
    ]
}

我们直接取 approvehref 数据用于用户登录支付,就会出现上面的继续查看订单问题。

我们确认了订单之后,就可以

返回结果如下:

[
    {'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-actionhref 值,跳转到 PayPal 的付款页面,用户输入用户名和密码之后,开始支付,截图如下:

当用户点击完成购物之后,PayPal 会从用户的账户中扣除费用,同时会返回我们定义的 return_url 地址,PayPal 会通过 Webhook 的方式请求 return_url 的地址,之后我们对请求的数据做校验就可以了。

校验数据我们稍后会详细介绍。




参考资料:

1、PayPal - JavaScript SDK

2、PayPal - Get started with PayPal REST APIs


其它相关推荐:

1、Python 使用支付宝支付相关问题总结

2、Payssion 支付代码片段

3、2.4GHz和5GHz WiFi的区别

4、PyCharm 永久激活

5、如何安装设置 WooCommerce


黄兵个人博客原创。

转载请注明出处:黄兵个人博客 - PayPal API 开发总结

分享到:

发表评论

评论列表