1

我一直在尝试使用 Adyen Drop-in 组件在我正在开发的 Razor 页面网站上进行付款。我有一个正在运行的测试版本,可以支付硬编码的金额,但我还没有弄清楚如何将唯一的订单 ID 传递给我的 API 端点发出支付请求。

https://docs.adyen.com/online-payments/drop-in-web中的示例为例,插件组件通过 JavaScript 使用

const checkout = new AdyenCheckout(configuration);
const dropin = checkout.create('dropin').mount('#dropin-container');

对象是用类似的configuration东西创建的

const configuration = {
 paymentMethodsResponse: paymentMethodsResponse, // The `/paymentMethods` response from the server.
 clientKey: "YOUR_CLIENT_KEY", // Web Drop-in versions before 3.10.1 use originKey instead of clientKey.
 locale: "en-US",
 environment: "test",
 onSubmit: (state, dropin) => {
     // Your function calling your server to make the `/payments` request
     makePayment(state.data)
       .then(response => {
         if (response.action) {
           // Drop-in handles the action object from the /payments response
           dropin.handleAction(response.action);
         } else {
           // Your function to show the final result to the shopper
           showFinalResult(response);
         }
       })
       .catch(error => {
         throw Error(error);
       });
   },
 onAdditionalDetails: (state, dropin) => {
   // Your function calling your server to make a `/payments/details` request
   makeDetailsCall(state.data)
     .then(response => {
       if (response.action) {
         // Drop-in handles the action object from the /payments response
         dropin.handleAction(response.action);
       } else {
         // Your function to show the final result to the shopper
         showFinalResult(response);
       }
     })
     .catch(error => {
       throw Error(error);
     });
 }
};

然后 Adyen 自己的 JavaScriptstate为该方法提供对象onSubmit,以便使用PaymentRequeststate.data.

但是,由于无法在此PaymentRequest对象中获取唯一的订单 ID,我的服务器端代码不知道要设置多少数量。请注意,可以在Amount对象中设置对象,configuration但这仅用于在 Drop-in 组件上显示值 - 该值不会传递给服务器。

那么如何通过 Drop-in 组件传递唯一的订单 ID 呢?

4

1 回答 1

1

Adyen 文档没有在此处明确提供示例,但假设您将获取 state.data 并回传到您的服务器makePayment()makeDetailsCall()您需要在这里实现自己的代码。此时,您可以添加其他信息,例如任何标识符。

这是一个示例实现作为参考:

async function makePayment(state_data) {
  const order_id = ""; // You need to provide this however your client  stores it.
  const json_data = {
    order_id,
    state_data,
  };

  const res = await fetch("[url to your server's endpoint]", {
    method: "POST",
    body: JSON.stringify(json_data),
    headers: {
      "Content-Type": "application/json",
    },
  });

  return await res.json();
}

另一个有用的资源可能是Adyen node.js/express 教程。它在实现细节上更加明确,因此可能有助于消除一些歧义。

于 2021-04-12T19:27:56.177 回答