ApplePay Web会话创建成功后报sessionError code:unknown错误如何排查?
Apple Pay会话创建后立即触发cancel事件问题排查
触发错误的控制台日志:
[Log] getApplePaySession() for: https://apple-pay-gateway-cert.apple.com/paymentservices/startSession [Log] getApplePaySession().onload() status: 200 [Log] ApplePayCancelEvent {isTrusted: true, sessionError: {code: "unknown", info: {}}, type: "cancel", target: ApplePaySession, currentTarget: ApplePaySession, …}
常见触发原因
- 环境配置不匹配:请求
startSession的网关地址与证书环境不对应,沙箱环境需使用apple-pay-gateway-cert.apple.com,生产环境需使用apple-pay-gateway.apple.com,测试沙箱环境时设备需绑定苹果沙箱测试卡,不可使用实体银行卡 - 证书校验失败:请求
startSession接口使用的商户身份证书,与苹果开发者后台对应商户ID绑定的证书不一致,或证书已过期、未开启Apple Pay支付权限 - 会话参数错误:创建
ApplePaySession实例时传入的paymentRequest参数不符合规范,比如金额小于等于0、货币/国家代码不符合ISO标准、商户ID与请求session时使用的商户ID不一致、supportedNetworks/merchantCapabilities配置错误 - 域名校验失败:发起支付的页面域名未添加到对应商户ID的已验证域名列表,或域名根目录下的苹果验证文件无法正常访问
- session处理逻辑错误:拿到苹果返回的session响应后,没有正确调用
completeMerchantValidation方法,或传入的session参数被篡改(比如多余的序列化/反序列化操作导致字段丢失)
排查解决思路
- 核对环境配置:确认网关地址、证书、测试设备三者的环境统一,沙箱测试全程使用沙箱网关、沙箱商户证书、绑定了沙箱测试卡的苹果设备
- 校验证书有效性:确认商户证书未过期,与开发者后台商户ID绑定的证书为同一文件,请求
startSession时证书已正确加载 - 逐一校验
paymentRequest参数:金额必须为正数,货币代码符合ISO 4217标准、国家代码符合ISO 3166标准,merchantCapabilities必须包含3DS,supportedNetworks包含当前支持的所有卡组织标识 - 检查域名配置:确认当前支付页面域名已在开发者后台完成验证,域名根目录下的
/.well-known/apple-developer-merchantid-domain-association文件可直接无权限访问,无重定向、拦截配置 - 校验session处理逻辑:拿到苹果
startSession接口返回的响应体后,直接原封不动传入session.completeMerchantValidation()方法,不要做额外的字段处理 - 开启详细调试日志:在Safari开发菜单的Web检查器中开启全量日志,同时执行终端命令
defaults write com.apple.Safari WebKitDebugApplePayLoggingEnabled -bool true获取更详细的错误提示,定位具体报错点
内容的提问来源于stack exchange,提问作者Ahsan Mahboob Shah
相关产品推荐
相关产品推荐

