PayPalScriptProvider设为zh-CN时提示异常的解决咨询
问题
在多语言Web应用中集成PayPalScriptProvider时,根据用户选择的语言设置locale:
- 当locale设为
en_HK和zh_HK时,PayPal按钮可正常打开内嵌HTML表单 - 当locale设为
zh_CN时,弹出错误提示:We're sorry, things don't appear to be working at the moment. Please try again later.
相关React代码如下:
// React App <PayPalScriptProvider key='paypal-script' options={{ 'locale': 'en_HK', 'client-id': 'xxxxxx', 'currency': 'HKD' }}> // handleLanguageChange() // paypal locale change // const [{ options }, dispatch] = usePayPalScriptReducer(); dispatch({ type: "resetOptions", value: { ...options, locale: paypalLocale.get(locale), currency: 'HKD', }, });
解决方案
1. 修正locale与货币的匹配关系
PayPal对不同locale支持的货币有严格限制:zh_CN locale默认适配人民币(CNY),而你当前固定使用HKD,这种不匹配会触发错误。
修改代码,根据locale自动切换对应货币:
dispatch({ type: "resetOptions", value: { ...options, locale: paypalLocale.get(locale), currency: paypalLocale.get(locale) === 'zh_CN' ? 'CNY' : 'HKD', }, });
2. 检查PayPal账户的地区权限
如果你的PayPal账户是香港地区注册的,可能无法使用zh_CN locale——该locale主要面向中国大陆地区账户。
- 若需服务中国大陆用户,建议注册中国大陆地区的PayPal商户账户;
- 若暂时无法更换账户,可尝试用
zh_TW作为替代locale(需提前测试兼容性)。
3. 避免动态切换时的脚本缓存冲突
动态调用resetOptions切换locale时,可能存在旧脚本未完全卸载的缓存问题。可以通过修改PayPalScriptProvider的key属性,强制组件重新渲染并加载对应locale的脚本:
<PayPalScriptProvider key={`paypal-script-${paypalLocale.get(locale)}`} options={{ 'locale': paypalLocale.get(locale), 'client-id': 'xxxxxx', 'currency': paypalLocale.get(locale) === 'zh_CN' ? 'CNY' : 'HKD', }} > {/* 你的PayPal按钮组件 */} </PayPalScriptProvider>
4. 验证客户端ID的地区访问权限
登录PayPal商户平台,检查你的客户端ID是否支持zh_CN地区的交易。部分测试环境或受限账户可能无法访问特定地区的PayPal服务,需确保账户已启用中国大陆地区的交易权限。
内容的提问来源于stack exchange,提问作者Jake
相关产品推荐
相关产品推荐

