Google Pay - ОШИБКА: запрос не выполнен - непредвиденная ошибка разработчика, повторите попытку позже
Когда я пытаюсь оплатить (в среде TEST) с помощью Google Pay на реальном устройстве, я получаю сообщение об ошибке в названии.
Я попытался изменить "шлюз" в строку, как показывают Google Docs, но пока ничего.
const DETAILS = {
id: 'COMPANY',
displayItems: [
{
label: 'Phone Bill',
amount: { currency: 'USD', value: compTotal }
}
],
total: {
label: 'COMPANY',
amount: { currency: 'USD', value: compTotal }
}
};
// GOOGLE PAY
const METHOD_DATA = [{
supportedMethods: ['android-pay'],
data: {
supportedNetworks: ['visa', 'mastercard', 'amex'],
currencyCode: 'USD',
environment: 'TEST', // defaults to production
paymentMethodTokenizationParameters: {
tokenizationType: 'GATEWAY_TOKEN',
parameters: {
gateway: 'braintree',
'braintree:tokenizationKey': 'sandbox_XXXXXXXXXXX'
}
}
}
}];
const paymentRequest = new PaymentRequest(METHOD_DATA, DETAILS);
paymentRequest.show()
.then(paymentResponse => {
const { getPaymentToken } = paymentResponse.details;
return getPaymentToken()
.then(paymentToken => {
const { ephemeralPublicKey, encryptedMessage, tag } = paymentToken.details;
return fetch('...', {
method: 'POST',
body: {
ephemeralPublicKey,
encryptedMessage,
tag
}
})
.then(res => res.json())
.then(paymentResponse.complete('success'), handleConfirm())
.catch(paymentResponse.complete('fail'), alert(1));
});
});
};
Ожидаемым результатом будет оплата.
2 ответа
Оказывается, я не смог сделать это с React-Native, потому что "React Native Payments" не полностью поддерживал Google Pay, который, в свою очередь, не полностью поддерживал Braintree и вообще не поддерживал Payeezy.
Мне пришлось прибегнуть к нативному коду (Java), а затем связать React-Native с этим нативным модулем. Это было довольно просто.
Я использовал это демо на Github, чтобы провести меня через него. Я использовал Braintree в качестве обработчика платежей, но, похоже, я перейду на Payeezy.
Я получил ошибку в названии, потому что, как я сказал, Google Pay не полностью поддерживал "React-Native-Payments", который, в свою очередь, не поддерживал Braintree, и когда ошибка накапливалась, потому что я только давал эту информацию -
parameters: {
gateway: 'braintree',
'braintree:tokenizationKey': 'sandbox_TOKEN-HERE'
}
Но похоже, что мне нужно было использовать это (в модуле Java) -
.put("gateway", "braintree")
.put("braintree:apiVersion", "v1")
.put("braintree:sdkVersion", "BETA")
.put("braintree:clientKey", "sandbox_TOKEN-HERE")
.put("braintree:merchantId", "TOKEN-HERE"));
Чтобы узнать больше об этой ошибке, выполните следующие действия:
1- Убедитесь, что на вашем компьютере установлен Android Debug Bridge (adb). Убедитесь, что на вашем устройстве включена отладка по USB. Для получения дополнительной информации см. Отладка вашего приложения.
2- Подключите телефон к компьютеру с помощью кабеля USB.
3- Выполните следующую команду в терминале или командной строке на вашем компьютере:
adb -d logcat -s WalletMerchantError
У меня ошибка из-за несоответствия типа объекта цены. Я положилfloat
ценность в totalPrice
.
После обновления
data class TransactionInfo(
@SerializedName("totalPrice") val price: String,
@SerializedName("totalPriceStatus") val priceStatus: String,
@SerializedName("currencyCode") val currency: String
)
Это отлично работает на ENVIRONMENT_TEST
кейс.
Использование https://google.com/pay
под supportedMethods
использовать Google Pay через API платежных запросов.
Посмотрите на эти пару примеров для дальнейшего использования: официальные документы, пример от команды Chrome.