我正试图弄清楚如何使用JavaScript SDK在网站上显示PayPal支付按钮,我对使用JSON和REST API调用也很陌生。
我的createOrder函数正在执行,并在服务器后端调用代码。后端的paypal api调用似乎工作正常(authorization,/v2/orders/create)。当我从服务器端调用的/v2/orders/create返回到客户端createOrders函数的响应主体时,问题就发生了,PayPal给了我以下错误:
{err: 'Error: Expected an order id to be passed\n at ht…credit,venmo&integration-date=2023-01-01:3:15633)', timestamp: '1686345825125', referer: 'www.sandbox.paypal.com', sdkCorrelationID: 'f896866242248', sessionID: 'uid_915a4c39df_mje6mtm6mtc', …}
下面是我的服务器端代码返回到createOrder函数的内容(从开发者控制台中提取):
{"d":"{\"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\"}]}"}
下面是我的createOrder函数的代码:
createOrder: function () {
return fetch("ppcktest2/ppckCreateOrder", {
method: 'POST',
credentials: 'include',
headers: { 'Content-Type': 'application/json' },
})
.then((response) => response.json())
.then((order) => order.id);
}
我觉得这个问题一定与我返回到createOrder函数的JSON有关。格式有问题吗?Chrome中的开发者控制台在我预览服务器时不会将我的响应显示为树,我认为它应该这样做。
我还没有发布我的服务器端代码,因为它似乎是好的,除非有一个问题,我如何返回JSON,我基本上只是返回响应体,就像我从PayPal得到它。
注意:我没有在服务器端使用PayPal SDK,我只是直接调用API。
我想了解:
- JavaScript sdk createOrder函数想要返回什么?我的服务器端调用/v2/orders/create的整个JSON响应,还是只是其中的一部分?
1.以及我的服务器端应该如何返回它-我假设作为一个JSON格式的字符串,就像我目前返回的一样...我不知道该怎么退货。
我是JSON和API的新手,我敢肯定这是问题的一部分。
1条答案
按热度按时间l2osamch1#
{"d":"{\"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\"}]}"}
我不知道这个日志是从哪里来的,但是这个字符串看起来好像是双重编码的,服务器应该返回一个更简单的字符串。
您还可以使用Network选项卡查找请求,并使用其Response子选项卡查看正在传输的实际数据。如果您在数据中看到
\
,则可能是过度编码,最好在服务器上解析。使用https://developer.paypal.com/demo/checkout/#/pattern/server作为参考实现,并在单击按钮时比较Network选项卡中的日志。
您还可以在浏览器选项卡中加载
ppcktest2/ppckCreateOrder
,并直接将其输出格式与https://developer.paypal.com/demo/checkout/api/paypal/order/create/
的输出格式进行比较。该演示站点具有特定于该站点/实现的其他响应参数,唯一重要的是
id
。