正常街道地址能看到信用卡,输入“P.O. Box 123”以后支付区变空。最初以为是shipping method没选,实际是支付模块的地址风控插件把PO Box判断写得太宽,post office road这种正常地址也会中招。

先比较两次请求:shipping-information之后的payment_methods响应,以及服务端支付方法的isAvailable日志。只记录国家、邮编和规则命中项,不要把完整地址写日志。

grep -R "P.O. Box\|PO Box\|post office" app/code vendor -n
tail -f var/log/system.log var/log/exception.log

正则要按词边界写

常见错误是 /po|box/i,任何含po或box的词都会被拦。规则至少要覆盖 P.O. Box、PO Box等明确格式,并允许业务需要的国家例外。更重要的是:拦截配送方式还是支付方式,要符合真实业务规则,别在支付层悄悄返回false让页面什么提示都没有。

用户可理解的做法是保留页面提示:该支付方式不支持邮政信箱地址,请更换地址或支付方式。空白区域只会让人反复刷新。

修复后我用PO Box、Post Office Road、Box Hill、普通门牌四组地址回归,再把REST和GraphQL结账各跑一遍,防止只修了Luma前端。