为啥我在尝试设置 PayPal 付款时在生产中不断收到 INVALID_RESOURCE_ID 错误?

Posted

技术标签:

【中文标题】为啥我在尝试设置 PayPal 付款时在生产中不断收到 INVALID_RESOURCE_ID 错误?【英文标题】: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)

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于为啥我在尝试设置 PayPal 付款时在生产中不断收到 INVALID_RESOURCE_ID 错误?的主要内容,如果未能解决你的问题,请参考以下文章

PayPal直接付款问题

为啥我在使用 Paypal 付款后在我的商店中得到一个空白页面?

为啥 Flask-Cors 在生产中没有检测到我的跨域域?

Rails 4:为啥在生产中没有加载字体?

当我尝试以欧元设置付款时,使用 Braintree SDK 的 PayPal 出现问题。无法调试问题

贝宝支付流专业通知网址