PayPal智能按钮交易在';批准';

PayPal智能按钮交易在';批准';,paypal,paypal-sandbox,paypal-rest-sdk,Paypal,Paypal Sandbox,Paypal Rest Sdk,在这件危险的事情上花了整整一天的时间后,我无法理解交易是如何被批准的,我得到了一个订单ID,但不收取任何费用(买家或接收者除外)。 在沙盒上成功测试后,我在现场环境中工作 因此代码很长,但基本上在服务器端,我们首先创建事务: const request = new paypal.orders.OrdersCreateRequest(); request.prefer("return=representa

在这件危险的事情上花了整整一天的时间后,我无法理解交易是如何被批准的,我得到了一个订单ID,但不收取任何费用(买家或接收者除外)。 在沙盒上成功测试后,我在现场环境中工作

因此代码很长,但基本上在服务器端,我们首先创建事务:

                  const request = new paypal.orders.OrdersCreateRequest();
                        request.prefer("return=representation");
                        request.requestBody({
                          intent: 'CAPTURE', //CAPTURE
                          purchase_units: [{
                            amount: {
                              currency_code: currency,
                              value: finalPrice
                            },
                            payee: {
                              email_address: payee
                            },
                            shipping: shipObj
                          }]
                        });
然后我们批准与贝宝的订单:

  let request = new paypal.orders.OrdersGetRequest(orderID);
                        let order;
                        try {
                          order = await client.execute(request);
                        }
                        catch (err) {
                          console.error("error",err);
                          return res.sendStatus(500);
                        }
此时,我得到了订单、结果、状态的批准

这是一个实时环境(客户端和密钥)。 您如何将已批准的文件发送给开发人员,并提供orderID而不收取费用? 这是一件非常危险的事情,可能会毁掉企业

然后我发现有一个链接指向您的订单ID:

https://api.paypal.com/v2/checkout/orders/4PE63643WC652674S
如果您查看本页,您会发现:

"message":"Authentication failed due to invalid authentication credentials or a missing Authorization header."
现在,只有上帝知道这意味着什么,这是一个在订单ID页面上的failur消息,这意味着订单ID没有任何意义

因此,我还使用我的客户端ID检查paypal链接(应该与sdk中的我的客户端ID相同,对吗?):


这似乎是正常的,并且包含正确的电子邮件。

似乎您已经解决了问题,并且您错过了捕获步骤,这是提交交易所必需的步骤,并且必须在批准后进行

为了查看集成的最佳方法,如果您使用来自服务器的API调用进行集成,您需要在服务器上设置两个路由,一个用于“设置事务”,另一个用于“捕获事务”,如下所示:


然后,与这些服务器端路由匹配的最佳JS客户批准流程是:

您需要创建订单,让客户通过PayPal窗口批准订单,然后您可以捕获订单——看起来您不会在任何地方捕获订单(new PayPal.orders.OrdersCaptureRequest(orderId)),当然我会这样做,有一个窗口,有地址和价格,用户登录,批准销售,然后发生这种情况。我有OrdersCreateRequest和OrdersGetRequest,所以当OrdersCaptureRequest出现时?我不知道你在哪里捕获订单?我有多蠢。非常抱歉。出于某种原因,我移除了这个块。哇!谢谢。
https://www.paypal.com/sdk/js?client-id=xxxxxxxxx&merchant-id=xxx@yyyy.com&disable-funding=credit,card&currency=USD