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