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

PaypalButtons组件onInit函数未触发,SDK版本加载异常求助

PayPal按钮加载异常:SDK版本undefined且onInit未触发

未对代码库中PayPal相关功能做任何修改,加载@paypal/react-paypal-js的PayPalButtons组件时出现以下问题:

  • 清缓存状态下,加载的PayPal SDK版本显示为undefined
  • 等待按钮变为可点击状态一段时间后,提示错误与SDK中不存在相关函数有关(推测因版本undefined导致SDK未实际加载)
  • 模拟支付时按钮始终无法点击,按实现逻辑onInit函数执行后按钮才会启用,但onInit从未触发
  • usePayPalScriptReducer返回的isResolved为true,表明存在PayPal SDK实例,但版本为undefined

PayPalButtons组件调用代码

const PaypalButton = ({ documentId, history, getPaymentForInvoice }: PaypalButtonProps) => {
   const [ isInitialized, setIsInitialized ] = useState(false)
   const [{ options, isPending, isResolved, ...rest }] = usePayPalScriptReducer();

   useEffect(() => {
      setIsInitialized(false);
   }, [documentId])

   const onCreateOrderHandler = async (data: any, actions: any): Promise<string> => {
      console.log('Creating payment');

      const paymentId = await getPaymentForInvoice(documentId);

      if (paymentId) {
         return Promise.resolve(paymentId)
      }

      return Promise.reject()
   }

   const onApproveHandler = async () => {
      console.log('Payment approved');

      onRedirectToLoadingUrl();
   }

   const onErrorHandler = async () => {
      console.log('Received error during payment');

      onRedirectToFailureUrl();
   };

   const onCancelHandler = async () => {
      console.log('Payment cancelled');
   };

   const onInitHandler = (data: any) => {
      console.log('Paypal buttons are initialized');
      setIsInitialized(true);
   };

   const onRedirectToLoadingUrl = () => {
      history.push(`${RestURLConstants.baseAppPaths.paymentLoadingPath}-${documentId}`)
   }

   const onRedirectToFailureUrl = () => {
      history.push(`${RestURLConstants.baseAppPaths.paymentFailurePath}-${documentId}`)
   }

   return isResolved ? (
      <PayPalButtons
         disabled={!isInitialized}
         forceReRender={[documentId]}
         createOrder={onCreateOrderHandler}
         onApprove={onApproveHandler}
         onInit={onInitHandler}
         onCancel={onCancelHandler}
         onError={onErrorHandler}
      />
   ) : null;

}

PayPalScriptProvider配置代码

import { PayPalScriptProvider } from '@paypal/react-paypal-js';

<PayPalScriptProvider
    options={{
        'client-id': PAYPAL_CLIENT_ID,
        components: `buttons`,
        currency: `EUR`,
        commit: true,
        'data-usercentrics': `PayPal`,
        'data-namespace': `paypal_sdk`,
        'disable-funding': `credit,card,bancontact,blik,eps,giropay,ideal,mybank,p24,sepa,sofort,venmo`
    }}
>
    <Authenticate />
    <RegisterSharedEvents />
    <PagesMainRouting />
</PayPalScriptProvider>

补充说明:近期未对上述组件做任何代码修改,问题突然出现;PAYPAL_CLIENT_ID存储在配置文件中,取自环境变量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 06:55:45