Magento 1.9.3 CE Chrome浏览器Guest checkout时PayPal Express运费报错
解决Magento 1.9.3 CE + PayPal Pro(Express)Chrome访客结账运费场景报错问题
我之前帮几个客户排查过完全相同的问题——Magento 1.9.3 CE集成了带Express结账的PayPal Pro,唯独在Chrome浏览器的访客结账场景下,只要商品需要收取运费,用户登录PayPal后就会看到那句“We’re Sorry. Things don’t appear to be working at the moment.”的报错,免运费时却一切正常。下面是我亲测有效的排查和解决方向:
1. 先排查Chrome浏览器的本地缓存与权限限制
Chrome对第三方Cookie和缓存的管控比其他浏览器严格很多,这是最常见的触发点:
- 让测试用户打开Chrome设置,找到隐私和安全→网站设置→查看所有网站数据和权限,删除你的店铺域名以及
paypal.com的相关数据; - 关闭Chrome的「阻止第三方Cookie」选项,或者把你的店铺域名和PayPal域名加入例外列表;
- 用Chrome无痕模式测试,如果无痕模式下正常,那基本可以确定是本地缓存/Cookie的问题,引导用户清理或调整浏览器设置即可。
2. 检查Magento传递给PayPal的运费参数格式
Magento 1.9.3的PayPal Express模块在访客结账+运费的场景下,偶尔会出现参数格式化错误,导致PayPal接口拒绝请求:
- 开启Magento的PayPal日志:进入系统→配置→付款方式→PayPal Express Checkout→高级设置,开启「启用日志」;
- 重现报错场景后,查看
var/log/paypal_express.log里的请求参数,重点核对AMT(订单总金额)、SHIPPINGAMT(运费金额)这两个字段,确保格式符合PayPal要求:必须是两位小数,用点作为分隔符,不能有逗号或货币符号; - 如果发现参数异常,不要直接修改核心文件,建议创建自定义模块重写
app/code/core/Mage/Paypal/Model/Api/Nvp.php中的_exportShippingInfo方法,确保运费金额被正确格式化。
3. 验证PayPal商家账户的运费与货币设置
PayPal账户端的设置和Magento冲突也会引发这类报错:
- 登录PayPal商家后台,检查是否开启了「自动计算运费」,或者设置了和Magento重复的运费规则,建议暂时关闭PayPal端的自动运费计算,完全由Magento控制运费;
- 确保PayPal账户的默认货币和Magento的默认货币完全一致(比如都是USD或CNY);
- 检查PayPal账户是否存在未解决的限制或审核问题,这类情况会直接导致接口请求被拦截。
4. 修复Magento 1.9.3的已知兼容性Bug
Magento 1.9.3本身存在几个和PayPal Express访客结账相关的Bug,建议:
- 应用官方的SUPEE-10752补丁,这个补丁修复了多个PayPal相关的安全和功能问题,其中就包括访客结账时的参数传递异常;
- 如果不想打全量补丁,可以单独修改
app/code/core/Mage/Paypal/Controller/Express/Abstract.php中的startAction方法,确保在访客结账时正确传递运费相关的会话参数。
内容的提问来源于stack exchange,提问作者PP west
相关产品推荐
相关产品推荐

