我的后端成功验证了商家并返回了会话,但是当我在浏览器上完成验证时,它立即取消了交易。 Apple Dev论坛上也有一些类似的投诉,但似乎都没有得到解决。我希望你们能提供帮助!
ApplePaymentSession
对象中所有事件处理程序]中的所有对象,仅调用onvalidatemerchant,然后只要具有有效会话对象的completeMerchantValidation
(请参见下面的有效负载),就会触发oncancel
。
会话配置(在浏览器上)
const session = new ApplePaySession(3, { currencyCode: 'GBP', countryCode: 'GB', merchantCapabilities: [ 'supports3DS' ], supportedNetworks: ['visa', 'masterCard', 'amex', 'discover' ], total: { type: 'final', label: 'My Product', amount: 9.99, }, });
请求(在后端)
{ merchantIdentifier: 'merchant.MY.FQDN', displayName: 'My Company Name', initiative: 'web', initiativeContext: 'MY.VERIFIED.FQDN', }
响应(从Apple到后端,然后发送到
completeMerchantValidation
{ "epochTimestamp": 1552090296444, "expiresAt": 1552093896444, "merchantSessionIdentifier": "LONG_STRING", "nonce": "XXXX", "merchantIdentifier": "SAME_AS_IN_MY_MERCHANT_ID_CERT", "domainName": "MY.VERIFIED.FQDN", "signature": "XXXXXX-VERY-LONG-STRING-XXXXX" }
我肯定会将响应作为JSON对象而不是字符串发送到
completeMerchantValidation
中,例如:
console.log('session is a', typeof(result), result); // says: object session.completeMerchantValidation(result);
域名的全部来源(并托管在Firebase上)均已通过此商户ID进行了验证,后端或浏览器控制台中都没有出现任何错误,也没有引发异常,它只显示了Apple Pay托盘,然后说“付款未完成”,并很快隐藏了托盘。帮助!
UPDATE:
查看文档,看来startSession
(由onvalidatemerchant
返回)正在逐步淘汰,因此我尝试将其替换为paymentSession
(例如https://apple-pay-gateway-nc-pod5.apple.com/paymentservices/paymentSession
);但我仍然得到相同的响应和行为。我的后端成功验证了商家并返回了会话,但是当我在浏览器上完成验证时,它立即取消了交易。有一些类似的投诉...
此解决方案可能对您有用,也可能对您不起作用,但是我遇到了同样的问题,因为一旦调用session.completeMerchantValidation()
,该会话就被取消了。