【问题标题】:Why do I keep getting INVALID_RESOURCE_ID error in production when trying to set up PayPal payment?为什么我在尝试设置 PayPal 付款时在生产中不断收到 INVALID_RESOURCE_ID 错误?
【发布时间】:2021-09-04 01:25:09
【问题描述】:

我想设置一次性 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)

我完全不知道为什么会这样,而且我已经尝试修复它好几天了。它在沙盒中工作。

【问题讨论】:

    标签: javascript web paypal payment paypal-rest-sdk


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      至于为什么它在实时而不是沙盒中因配置文件 ID 无效而出错,可能是您忽略了在所述客户端代码中更新 clientID+secret。但是,如前所述,绝不能从客户端使用秘密(以及您获得的身份验证令牌)。它仅用于服务器端 API 调用。

      【讨论】:

        猜你喜欢
        • 2014-08-27
        • 2012-05-16
        • 1970-01-01
        • 2015-05-28
        • 2014-06-17
        • 2020-06-08
        • 2014-01-20
        • 2022-07-19
        • 2020-10-11
        相关资源
        最近更新 更多