applepay - Apple Pay completeMerchantValidation 取消会话
问题描述
我的后端成功验证了商家并返回了一个会话,但是当我在浏览器上完成验证时,它立即取消了交易。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"
}
我肯定会将此响应completeMerchantValidation
作为 JSON 对象而不是字符串发送,如下所示:
console.log('session is a', typeof(result), result); // says: object
session.completeMerchantValidation(result);
这一切发生的域名(并托管在 Firebase 上)已针对此商家 ID 进行验证,我在后端或浏览器控制台中都没有收到任何错误,也没有抛出异常,它只显示 Apple Pay托盘,然后说“付款未完成”并很快隐藏托盘。帮助!
更新:查看文档,似乎startSession
(正在onvalidatemerchant
被逐步淘汰,所以我尝试用paymentSession
(eg https://apple-pay-gateway-nc-pod5.apple.com/paymentservices/paymentSession
) 替换它;但我仍然得到相同的响应和行为。
解决方案
此解决方案可能适合您,也可能不适合您,但我遇到了同样的问题,即会话一被session.completeMerchantValidation()
调用就被取消。
它归结为使用未经验证的值merchantSession
创建(参见:https ://developer.apple.com/documentation/apple_pay_on_the_web/configuring_your_environment )domainName
我使用通过Ngrok广播的本地网络服务器来验证临时 URL,方法是将apple-developer-merchantid-domain-association.txt
文件放在需要基于 Apple Pay 文档的位置。
之后,只要我使用沙盒 iCloud 帐户和测试 Apple Pay 卡,将ngrok
URL 作为请求的domainName
值传递merchantSession
,Apple Pay 终于开始在本地工作。请注意,我必须通过ngrok
url 与本地运行的 Web 应用程序进行交互,Apple Pay 才能正常工作。
推荐阅读
- rust - 如何获得 Rust 编程语言的可移植安装?
- django - 如何使用 django 或 HTML 实现文本表单(?)
- salt-stack - 如何匹配模式并使用盐状态替换目录中的所有文件?
- c - 有什么方法可以解决段错误吗?
- java - 设置 ViewPager 适配器时应用程序崩溃
- ios - 将流媒体视频(m3u8 文件)保存到图库中
- objective-c - UISwitch动画问题
- ruby - Unable to create a valid CRYPT_HASH_BLOB in ruby
- c# - C# 调用 powershell 脚本时出现问题
- string - 从 Matlab 中的单元格数组中删除 'NaN' 字符串和 [] 单元格