我的后端成功验证了商家,并返回了会话,但是当我在浏览器上完成验证时,它立即取消了交易。 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托盘,然后说“付款未完成”,并很快隐藏了托盘。救命!
更新:查看文档,看来startSession
(由onvalidatemerchant
返回的paymentSession
正在被淘汰,所以我尝试用{{ 1}}(例如https://apple-pay-gateway-nc-pod5.apple.com/paymentservices/paymentSession
);但是我仍然得到相同的响应和行为。
答案 0 :(得分:0)
此解决方案可能对您有用,也可能不对您有用,但是我遇到了同样的问题,因为一旦调用session.completeMerchantValidation()
,该会话就被取消了。
它归结为merchantSession
的创建,其值为{strong> 未验证 的domainName
(请参阅:https://developer.apple.com/documentation/apple_pay_on_the_web/configuring_your_environment)
我使用了一个通过Ngrok进行广播的本地网络服务器,通过将apple-developer-merchantid-domain-association.txt
文件放置在需要基于Apple Pay文档的地方来验证临时URL。
此后,只要我使用沙箱iCloud帐户和测试的Apple Pay卡,就将ngrok
请求的domainName
URL作为merchantSession
值传递,Apple就可以了Pay终于开始在本地工作。请注意,我必须通过ngrok
网址与本地运行的Web应用程序进行交互,Apple Pay才能正常工作。