为什么在尝试设置PayPal支付时,我在生产中不断出现INVALID_RESOURCE_ID错误



我想设置一次性PayPal付款。我从HTML调用<script data-page-type="checkout" src="https://www.paypal.com/sdk/js?client-id={my client id}&currency=CZK&commit=true&intent=capture&debug=true"></script>以获取要显示的按钮。

然后我在客户端javascript中设置它,如

createOrder: function(data, actions) {
return fetch('/.netlify/functions/transactionProcessor?orderAction=create', {
method: 'post',
}).then(function(functionResponse) {
console.log("order created");
return functionResponse.json();
}).then(function(functionResponseJson) {
return functionResponseJson.id;
});
},

当用户单击按钮时,将调用createOrder。CreateOrder然后调用此服务器端代码

async function createOrder(client) {
// Call PayPal to set up a transaction.
const request = new paypal.orders.OrdersCreateRequest();
request.prefer('return=minimal');
request.requestBody({
intent: 'CAPTURE',
purchase_units: [{
amount: {
currency_code: 'CZK',
value: '69.99'
}
}]
});

const order = await client.execute(request);
console.log('order successfuly created');
// Return a successful serverResponse to the client with the order ID.
return { statusCode: 200, body: JSON.stringify({ serverResponse: order, id: 
order.result.id }) }
}

这回报绝对不错。然后,客户端代码通过在其createOrder方法中返回它来处理它——在这里发生了错误。

RESOURCE_NOT_FOUND(https://justpaste.it/resource_not_found_paypal_err)

INVALID_RESOURCE_ID(https://justpaste.it/invalid_resource_id_err)

我完全不知道为什么会发生这种情况,我已经试了好几天了。它在沙盒中工作。

您不应该从客户端执行REST API捕获请求。此对PayPal的API调用只能从服务器执行。

至于为什么它在live而不是sandbox中使用无效的配置文件ID出错,可能您忽略了更新所述客户端代码中的clientID+机密。但是,如前所述,机密(以及由此获得的auth令牌(永远不应该从客户端使用。它仅用于服务器端API调用。

已解决。我不小心在服务器上使用了沙箱环境。逻辑是process.env.SANDBOX ? sandboxEnv : liveEnv,但process.env变量由于某种原因(Netlify+Netlify-dev(不起作用。我用本地const sandbox = false替换了它。

真不敢相信我在这上面花了这么多时间。如果我不那么愚蠢地摆弄它,我永远不会发现这个。

最新更新