【问题标题】:react-paypal-button-v2 payment complete but not receivedreact-paypal-button-v2 付款完成但未收到
【发布时间】:2020-11-12 21:18:04
【问题描述】:

这就是我加载按钮的方式

  <PayPalButton
                      amount={this.props.details.totalAmount}
                      shippingPreference="NO_SHIPPING"
                      onApprove={(data) => {
                        this.props.handlePaymentComplete(data.orderID);
                      }}
                      options={{
                        clientId: clientId,
                      }}
                    />

handlePaymentComplete - 向后端发送请求,然后将信息保存到数据库并验证订单。

此代码似乎在沙箱中工作,它显示付款完成消息,我可以发送带有 orderId 的请求到 paypal 的 api 并获取有关交易的所有信息,付款处于批准状态,但钱赢了'不会被转移。

我尝试更改为 live paypal,通过我的 cc 支付到我的 paypal 卖家账户,我的 cc 公司向我发送了一条关于交易的短信,所以它似乎正在做某事,对 paypal 的 API 的请求说一切都是好的:

{
    "id": "theorderid",
    "intent": "CAPTURE",
    "purchase_units": [
        {
            "reference_id": "default",
            "amount": {
                "currency_code": "USD",
                "value": "0.45"
            },
            "payee": {
                "email_address": "theselleremail",
                "merchant_id": "thesellersid"
            }
        }
    ],
    "payer": {
        "name": {
            "given_name": "name",
            "surname": "surname"
        },
        "email_address": "payeraddress",
        "payer_id": "payerid",
        "address": {
            "country_code": "IL"
        }
    },
    "create_time": "2020-07-23T06:35:35Z",
    "links": [
        {
            "href": "https://api.paypal.com/v2/checkout/orders/id",
            "rel": "self",
            "method": "GET"
        },
        {
            "href": "https://api.paypal.com/v2/checkout/orders/id",
            "rel": "update",
            "method": "PATCH"
        },
        {
            "href": "https://api.paypal.com/v2/checkout/orders/id/capture",
            "rel": "capture",
            "method": "POST"
        }
    ],
    "status": "APPROVED"

但付款实际上不会被转移。

我已经检查了互联网的答案,但除了已弃用的贝宝版本之外找不到任何东西,您必须调用某种 Express Checkout 命令才能完成交易,所以我想解决方案类似于那个想法,但我没找到。

我已经尝试过但没有影响任何事情的方法是使用action.order.capture:

            <PayPalButton
              amount={this.props.details.totalAmount}
              shippingPreference="NO_SHIPPING"
              onApprove={(data, actions) => {
                actions.order.capture();
                this.props.handlePaymentComplete(data.orderID);
              }}
              options={{
                clientId: clientId,
              }}
            />

【问题讨论】:

    标签: javascript node.js paypal


    【解决方案1】:

    您的处理程序函数应该在 actions.order.capture() 之后的 .then( 承诺链中。

    https://developer.paypal.com/demo/checkout/#/pattern/client查看示例


    更好的是,您应该使用服务器端支付创建和捕获。这是用于此的用户界面:https://developer.paypal.com/demo/checkout/#/pattern/server

    您需要在服务器上设置两条对应的路由,一条用于“设置事务”,一条用于“捕获事务”,记录在此:https://developer.paypal.com/docs/checkout/reference/server-integration/

    您的订单验证和保存到数据库都可以在该捕获路径中发生。

    【讨论】:

      猜你喜欢
      • 2014-07-30
      • 2022-01-05
      • 2012-03-11
      • 2020-05-26
      • 2012-07-31
      • 2013-03-02
      • 2017-02-03
      • 1970-01-01
      • 2017-08-29
      相关资源
      最近更新 更多