You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React+TypeScript自定义表单集成Adyen Native 3DS2组件疑问

关于Adyen自定义支付表单onAdditionalDetails的两个疑问解答

1. 关于.d.ts文件中state类型标注为any的问题

这个标注虽然看起来不严谨,但其实是Adyen SDK的合理设计:因为onAdditionalDetails返回的state结构会根据支付场景(比如3DS验证、银行卡分期、本地支付方式的额外验证等)动态变化,没有固定的统一结构,所以用any来兼容所有可能的返回情况。

如果你需要更严格的类型约束,可以根据自己业务用到的支付场景自定义类型,比如针对3DS验证的场景:

interface ThreeDSAdditionalDetailsState {
  data: {
    cres: string;
    MD: string;
  };
  isLoading: boolean;
}

使用时通过类型断言处理:

const handleAdditionalDetails = (state: any) => {
  const typedState = state as ThreeDSAdditionalDetailsState;
  // 后续基于typedState处理逻辑
};

2. React卡片组件中是否需要将state.data作为payload传入服务器

是的,必须将state.data完整传给你的后端服务器,再由后端转发给Adyen的API完成后续验证流程。这里给你一个React卡片组件的简化示例:

import { useAdyenCheckout } from '@adyen/react';

const CardPaymentComponent = () => {
  const { createComponent } = useAdyenCheckout();
  const CardComponent = createComponent('card');

  const handleAdditionalDetails = (state) => {
    // 直接将state.data作为请求体传给后端接口
    fetch('/your-backend/adyen-submit-details', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(state.data)
    })
    .then(res => res.json())
    .then(adyenResponse => {
      // 根据后端返回的Adyen响应处理后续逻辑,比如更新支付状态
      if (adyenResponse.resultCode === 'Authorised') {
        // 支付成功逻辑
      }
    })
    .catch(err => console.error('提交额外验证信息失败:', err));
  };

  return (
    <CardComponent
      onAdditionalDetails={handleAdditionalDetails}
    />
  );
};

export default CardPaymentComponent;

注意:后端收到state.data后,需要调用Adyen的/payments/details API,将这些数据放入请求体的details字段中,完成支付流程的收尾。

内容的提问来源于stack exchange,提问作者AshNaz87

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 05:14:54