【问题标题】:Apple Pay completeMerchantValidation cancels sessionApple Pay completeMerchantValidation 取消会话
【发布时间】:2019-07-31 01:13:11
【问题描述】:

我的后端成功验证了商家并返回了一个会话,但是当我在浏览器上完成验证时,它立即取消了交易。 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(例如@ 987654333@); 但我仍然得到相同的响应和行为。

【问题讨论】:

  • 您解决了吗?
  • 不,我没有:(

标签: applepay applepayjs


【解决方案1】:

此解决方案可能适合您,也可能不适合您,但我遇到了同样的问题,因为一旦调用 session.completeMerchantValidation(),会话就会被取消。

归结为 merchantSession 是用一个 未验证domainName 值创建的(请参阅:https://developer.apple.com/documentation/apple_pay_on_the_web/configuring_your_environment

我使用本地网络服务器通过 Ngrok 广播来验证临时 URL,方法是将 apple-developer-merchantid-domain-association.txt 文件放在需要基于 Apple Pay 文档的位置。

之后,只要我使用沙盒 iCloud 帐户和测试 Apple Pay 卡,将 ngrok URL 作为 domainName 值传递给 merchantSession 请求就可以工作,Apple Pay 终于开始在本地工作。请注意,我必须通过 ngrok url 与本地运行的 Web 应用程序进行交互,Apple Pay 才能正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 2017-01-25
    • 2021-04-07
    • 2021-07-28
    • 2015-04-14
    • 2019-03-15
    • 2020-12-11
    • 2015-09-19
    相关资源
    最近更新 更多