Paypal SDK,如何在不重新注入和重新初始化SDK本身的情况下动态更改货币?

Арт*_*ков 5 javascript paypal

我的网站在同一页面上出售多种货币的产品,因此用户可以单击以欧元出售的产品并以欧元付款,或者他们可以单击以美元出售的产品并以美元付款等。 ..

问题在于,一旦初始化了新的PayPal SDK,就不能在没有以下情况的情况下更改其接受的货币:

  1. 破坏元素
  2. 更改指向SDK的链接,使其可以接受其他货币
  3. 手动将其注入页面
  4. 重新初始化

正如您可能理解的那样,它不是同时非常快速,稳定或安全。我想念什么吗?我知道您可以在旧的Express Checkout版本中将货币作为参数发送。

贝宝(PayPal)文档令人发指,它缺少大量信息,并且周围没有大型社区,因此我无法在任何地方找到问题的答案。

我尝试在付款参数中发送货币,但是如果它与初始化的货币不同,则在尝试确认付款时会引发货币不匹配错误。

现在,如果用户单击使用PayPal进行支付的选项,那么我将使用正确的货币手动重新注入并重新初始化Paypal SDK,但这很慢,并且需要对睡眠进行硬编码(尽管可能是由于我缺乏知识,但是可能更好的方法)。

这是我当前设置中不可接受的伪代码:

initialisePaypalSDK(currency) {
    destroy old initialisation
    change link to paypal with new currency
    inject new link to page
    initialise the new sdk
    sleep until the paypal variable is defined
    showPayPalButton()
}
Run Code Online (Sandbox Code Playgroud)

我希望有比这更简单,更安全的货币兑换方式。谢谢。

小智 1

您可以使用后端来解决此问题。首先,定义 createOrder 函数,如下所示:

const createOrder = async (data, actions) => {
  return await axios.get('/yourbackend/api/get_order_id')
}

const onApprove = (data, actions) => {
// ... code to handle the payment status
}

paypal.Buttons({createOrder, onApprove}).render('#paypal-button-container')
Run Code Online (Sandbox Code Playgroud)

然后只需在后端实现 REST Api 来创建订单 (/v2/checkout/orders)。然后返回创建的付款的id。