使用智能支付按钮(React + Redux)的 PayPal 结帐创建订单问题

Posted

技术标签:

【中文标题】使用智能支付按钮(React + Redux)的 PayPal 结帐创建订单问题【英文标题】:PayPal Checkout with Smart Payment Buttons (React + Redux) create order problem 【发布时间】:2020-10-21 16:59:24 【问题描述】:

每当我尝试处理付款时,我都会收到422 error: Unprocessable entity。 当我动态地想要捕获从 redux 商店收到的购买项目详细信息时,就会出现此问题。

我尝试遵循这种格式(重复):PayPal Checkout (javascript) with Smart Payment Buttons create order problem

这与 PayPal 文档中的相同:https://developer.paypal.com/docs/api/orders/v2/#definition-item

但是,这无济于事。这是我的代码

import React, useState, useEffect, useRef from 'react';
import useSelector, useDispatch from 'react-redux'

const mapState = ( cart ) => (
    itemsInCart: cart.itemsInCart,
    total: cart.total

)

const Cart = props => 
  
    const itemsInCart = useSelector(mapState);


        useEffect(() => 
          const itemsObj = itemsInCart.map(item => 
            return 
              name: item.name,
              description: item.description,
              unit_amount: 
                              currency_code: "USD",
                               value: item.price
              ,
              quantity: "1"
            
          )


          window.paypal
              .Buttons(
                createOrder: (data, actions) => 
                  return actions.order.create(
                    purchase_units: [
                      
                        description: "Your purchase details",
                        amount: 
                          currency_code: 'USD',
                          value: document.getElementById('totalAmount').innerhtml
                        ,
                        items: itemsObj
                        ,
                    ],
                  );
                

如果我将items 属性更改为item_list,正如我在某些文档中看到的那样,付款会通过,但不会捕获项目对象。我不知道为什么。

【问题讨论】:

【参考方案1】:

如果您想将订单项捕获为 items 属性,则必须在 amount 属性中指定细分,如下所示:

 purchase_units: [
              
                description: "test",
                amount: 
                  currency_code: "USD",
                  value: price,
                  breakdown: 
                    item_total: 
                      currency_code: "USD",
                      value: document.getElementById("totalAmount").innerHTML
                    
                  

这篇文章对于完整的代码示例也很有帮助: https://www.paypal-community.com/t5/REST-APIs/PayPal-Checkout-javascript-with-Smart-Payment-Buttons-create/m-p/1824785#M2816

【讨论】:

以上是关于使用智能支付按钮(React + Redux)的 PayPal 结帐创建订单问题的主要内容,如果未能解决你的问题,请参考以下文章

在 react redux saga 中处理同步

react-redux 中的奇怪按钮行为

如何在 React/Redux 中本地管理组件的状态

React - Native ' Redux 未捕获错误:操作必须是普通对象。按下按钮时使用自定义中间件进行异步操作

使用 redux 删除项目

为啥 xState 不能与 react redux 一起使用?