【问题标题】:Easiest way to match transaction totals?匹配交易总额的最简单方法?
【发布时间】:2021-03-11 18:24:40
【问题描述】:

我正在尝试将贝宝添加到我的网站。我正在使用他们的 REST API,我想做的是让用户确定他们要存入的金额。我可以在创建付款时获得总额,但我不确定如何在没有复杂对象数组系统的情况下将其传递给执行部分。有什么想法吗?

以下是我如何创建订单和执行订单的示例:

router.post('/pay', (req, res) => {
    console.log(req.body.amount_to_deposit)
    var create_payment_json = {
      "intent": "sale",
      "payer": {
          "payment_method": "paypal"
      },
      "redirect_urls": {
          "return_url": `${domain}success`,
          "cancel_url": `${domain}cancel`
      },
      "transactions": [{
          "custom": req.user.steamid,
          "item_list": {
              "items": [{
                  "name": "Deposit",
                  "sku": "001",
                  "price": "25",
                  "currency": "USD",
                  "quantity": 1
              }]
          },
          "amount": {
              "currency": "USD",
              "total": "25"
          },
          "description": `Deposit UserID:${req.user.steamid}`
      }]
  };
  
  paypal.payment.create(create_payment_json, function (error, payment) {
    if (error) {
        throw error;
    } else {
        for(let i = 0;i < payment.links.length;i++){
          if(payment.links[i].rel === 'approval_url'){
            res.redirect(payment.links[i].href);
          }
        }
    }
  });
  
  });

  router.get('/success', (req, res) => {
    const payerId = req.query.PayerID;
    const paymentId = req.query.paymentId;
    console.log(req.query)
    const execute_payment_json = {
      "payer_id": payerId,
      "transactions": [{
          "amount": {
              "currency": "USD",
              "total": "25"
          }
      }]
    };
  
    paypal.payment.execute(paymentId, execute_payment_json, function (error, payment) {
      if (error) {
          console.log(error.response);
          throw error;
      } else {
          if (payment.transactions[0].custom) {
            console.log(payment.transactions[0].custom)
          }
          res.send('Success');
      }
  });
  });

我可以使用 body 参数获取用户想要支付的金额,但是如何将其获取到成功路径以及执行支付 json 对象?

【问题讨论】:

    标签: javascript node.js express paypal


    【解决方案1】:

    您为什么使用旧的 v1 付款 REST API?

    当前的 API 是 v2/checkout/orders,documented here。捕获订单(大致相当于执行 v1 付款)不需要传递金额。

    如果您发现它比自己管理 JSON 请求更容易,还有一个 node.js SDK,但无论哪种方式都可以。


    您似乎也重定向到了approval_url,这在如今的结账体验中相当糟糕。无需重定向,而是使用 PayPal 按钮调用您的 2 条路线(一条用于创建订单,一条用于捕获订单):https://developer.paypal.com/demo/checkout/#/pattern/server

    不要使用任何重定向。完全没有。

    【讨论】:

    • 感谢您的建议,抱歉我没有早点回复,但我一直在快速运行文档,我的眼睛在燃烧。无论如何,据我了解,不同之处在于现在您可以在前端创建订单,将 orderID 发送到后端,后端会捕获它和所有细节。对吗?
    • 不要在前端创建订单。前端 createOrder 函数将向您的服务器发送请求,服务器通过 API 创建订单
    • 哦,我明白了,所以在前端创建订单时,它应该向后端发出获取请求,以获取后端将创建的订单信息。一旦收到响应并且用户批准了订单,就会发送另一个获取请求以在后端捕获订单。我理解正确吗?另外,如果我是一个菜鸟,我很抱歉,我完全是自学成才,所以有时我很难理解文档并来这里寻求帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 1970-01-01
    • 2022-01-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多