Apple Pay completeMerchantValidation отменяет сессию - PullRequest
1 голос
/ 09 марта 2019

Мой бэкэнд успешно проверяет продавца и возвращает сеанс, но когда я завершаю проверку в браузере, он немедленно отменяет транзакцию. Есть несколько подобных жалоб на форуме 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), проверено по этому идентификатору продавца, и я не получаю никаких ошибок ни в бэкэнде, ни в консоли браузера, исключение не выдается, оно просто показывает лоток Apple Pay, затем говорит «Платеж не завершен» и очень быстро скрывает лоток. Помогите!

ОБНОВЛЕНИЕ: Глядя на документы, кажется, что startSession (который возвращается onvalidatemerchant постепенно сокращается, поэтому я попытался заменить его на paymentSession (например, * 1037) *); но я все еще получаю тот же ответ и поведение.

...