Paypal的文档写的真是不友好,社区维护的也很烂,遇到问题都是靠自己摸索,各种尝试。
我遇到的问题是调用退款接口返回403,PERMISSION_DENIED
1.关于创建订单(交易)
创建订单的操作是前端调用PayPal的js去实现的,然后再由PayPal去调用自己的接口,从控制台可以看到PayPal创建订单(交易)使用的是如下URL。
2.退款路径
因为这个路径,我一直认为要走capture退款,再加上PayPal支付成功的返回信息中有多个id信息,搞得人就很混乱,有的是orderId,有的是saleId,有的是transactionId或captureId,强烈建议PayPal可以把不同类型的Id加个前缀做标识。如图,PayPal的返回信息(之前测试一直用的绿色id)
疯狂测试https://api-m.sandbox.paypal.com/v2/payments/captures/2FL71623CA539041M/refund都返回如下错误:
{
"name": "NOT_AUTHORIZED",
"message": "Authorization failed due to insufficient permissions.",
"debug_id": "8ce6650ecf680",
"details": [
{
"issue": "PERMISSION_DENIED",
"field": "capture_id",
"value": "2FL71623CA539041M",
"description": "You do not have permission to access or perform operations on this resource.",
"location": "path"
}
],
"links": [
{
"href": "https://developer.paypal.com/docs/api/payments/v2/#error-PERMISSION_DENIED",
"rel": "information_link"
}
]
}
3.灵感来源
灵感来源一:开发者API一个不显眼的地方读到一句话,大概意思是authorize和capture退款只有会员可操作。
灵感来源三:PayPal社区里有不少帖子是使用错了ID,有人提到使用purchase_unit中的id可操作成功。
4.退款成功
使用purchase_unit中的id,使用sale进行退款,退款成功。登录PayPal开发者后台,确实可以看到有退款记录。至此,完成该功能。PayPal虽然挺坑,但它的优点是个人和商户都可以退款。又爱又恨~