PayPal Checkout JavaScript SDK:CreateOrder响应返回问题排查
问题解答
1. JavaScript SDK的createOrder函数需要返回什么?
只需要返回订单ID字符串(比如7MF03646UY937942N),不需要返回完整的PayPal订单响应。你也可以返回包含id属性的对象,但最直接的方式是返回纯ID字符串。
2. 后端应如何正确返回数据?
你的后端目前把PayPal的订单响应转成字符串后,额外包装了{"d": "..."}的结构,这就是问题根源——前端解析后拿到的order对象里并没有id属性,真正的订单ID藏在order.d这个字符串里,导致PayPal SDK找不到订单ID报错。
正确的处理方式:
- 后端调用PayPal的
/v2/orders/create接口后,直接把PayPal返回的原始JSON响应(也就是你现在放在d里的那个对象)作为自身接口的响应返回,不要做任何额外的字符串转义或包装。 - 确保后端响应的
Content-Type头设置为application/json,这样前端的response.json()才能正确将响应解析为JSON对象。
举个例子,后端应该返回的内容是:
{"id":"7MF03646UY937942N","status":"PAYER_ACTION_REQUIRED","payment_source":{"paypal":{}},"links":[{"href":"https://api.sandbox.paypal.com/v2/checkout/orders/7MF03646UY937942N","rel":"self","method":"GET"},{"href":"https://www.sandbox.paypal.com/checkoutnow?token=7MF03646UY937942N","rel":"payer-action","method":"GET"}]}
调整后,你的前端代码then((order) => order.id)就能正确拿到订单ID,PayPal SDK就不会再报错了。
内容的提问来源于stack exchange,提问作者John W
相关产品推荐
相关产品推荐

