匹配交易总额的最简单方法?

Posted

技术标签:

【中文标题】匹配交易总额的最简单方法?【英文标题】: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": `$domainsuccess`,
          "cancel_url": `$domaincancel`
      ,
      "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 对象?

【问题讨论】:

【参考方案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 创建订单 哦,我明白了,所以在前端创建订单时,它应该向后端发出获取请求,以获取后端将创建的订单信息。一旦收到响应并且用户批准了订单,就会发送另一个获取请求以在后端捕获订单。我理解正确吗?另外,如果我是一个菜鸟,我很抱歉,我完全是自学成才,所以有时我很难理解文档并来这里寻求帮助。

以上是关于匹配交易总额的最简单方法?的主要内容,如果未能解决你的问题,请参考以下文章

将 PayPal 添加到现有 Stripe 计费流程的最简单方法

按属性从 dom 中选择 v-for 项目的最简单方法?

实现真正 boost::asio::async_read_until 的最简单方法

在 C# 字符串中摆脱零宽度空间的最简单方法

比较两列中的数据并相互匹配数字

复制 activerecord 记录的最简单方法是啥?