PayPal JavaScript API传递收货地址不生效及禁止地址修改问题
问题原因与修正方案
核心错误点
- 字段名使用错误:
shipping_detail下的地址字段名为address,你代码里写的address_portable是PayPal官方文档里对该地址对象的类型定义名称,不是实际传参的字段名。 - 缺少订单级配置项:需要新增
application_context配置,将shipping_preference设置为SET_PROVIDED_ADDRESS,该配置会强制PayPal使用你传入的收货地址,同时禁止用户在PayPal结账页面修改地址,没有该配置时PayPal默认会优先读取买家账号保存的地址。
修正后的完整代码
createOrder: function(data, actions) { return actions.order.create({ // 新增订单上下文配置,控制结账页面行为 application_context: { shipping_preference: 'SET_PROVIDED_ADDRESS' }, purchase_units: [{ amount: { value: '34' }, shipping_detail: { name: { full_name: 'Hans Muller' }, // 把address_portable改为address address: { address_line_1: 'Rohrd. 16', address_line_2: 'Rohrdorfer Street', admin_area_2: 'Stephanskirchen', admin_area_1: 'Bayern', postal_code: '83071', country_code: 'DE', }, }, }] }); }, onApprove: function(data, actions) { return actions.order.capture().then(function(details) { console.log('Success'); }); }, onError: function (err) { console.error(err); }
验证注意事项
- 如果修改后沙箱测试仍显示默认地址,可清除浏览器缓存后重新测试,或更换未保存过默认地址的沙箱买家账号验证。
- 传入的地址需要符合对应国家的格式规范,若地址校验不通过,PayPal会自动 fallback 到买家账号默认地址。
内容的提问来源于stack exchange,提问作者Merlin0216
相关产品推荐
相关产品推荐

