Почему я получаю сообщение Ошибка «токен недействителен» в API платежей?
Первая попытка
Я следовал инструкциям на этой странице, в которых описано, как использовать JavaScript. файл, предоставленный инуитами для токенизации данных карты.
Код: Выделить всё
intuit.ipp.payments.tokenize(
qbAppToken, {
card: {
number: $("#tokenize_cc-number").val(),
expMonth: $("#tokenize_cc-expmonth").val(),
expYear: $("#tokenize_cc-expyear").val(),
cvc: $("#tokenize_cc-cvc").val(),
address: {
streetAddress: $("#tokenize_cc-address-street").val(),
city: $("#tokenize_cc-address-city").val(),
region: $("#tokenize_cc-address-region").val(),
country: $("#tokenize_cc-address-country").val(),
postalCode: $("#tokenize_cc-address-postalcode").val()
}
}
},
function(token, response) {
console.log(response);
if (token != null) {
console.log(token);
$cardToken.val(token);
$paymentForm[0].submit();
} else {
console.log("Error during tokenization " + response.code + "; " + response.message + "; " + response.detail + "; " + response.moreinfo);
}
});
f9e7a378-c3f2-4343-b0a8-ee376d4ed472< /p>
Я вставляю этот токен в свою форму и отправляю форму на свой сервер, который затем отправляет платеж в API платежей через CURL, используя токен карты.< /p>
Я отправляю в конечную точку:
https://sandbox.api.intuit.com/quickbooks/ v4/платежи/списания
Код: Выделить всё
Array
(
[amount] => 6992.83
[currency] => USD
[capture] => true
[token] => f9e7a378-c3f2-4343-b0a8-ee376d4ed472
[context] => Array
(
[mobile] => false
[isEcommerce] => true
)
)
Код: Выделить всё
{
"errors": [{
"code": "PMT-4000",
"type": "invalid_request",
"message": "token is invalid.",
"detail": "token",
"infoLink": "https://developer.intuit.com/v2/docs?redirectID=PayErrors"
}]
}
Код: Выделить всё
HTTP/1.1 400 Bad Request
Server: nginx
Date: Wed, 05 Jun 2019 18:13:20 GMT
Content-Type: application/json;charset=utf-8
Content-Length: 175
Connection: keep-alive
Keep-Alive: timeout=5
Strict-Transport-Security: max-age=15552000
intuit_tid: [redacted]
Set-Cookie: ADRUM_BT=R:0|clientRequestGUID:9ae895d4-44ee-4175-bb47-4e37e95162a819|btId:755|backendSnapshotType:f; Expires=Wed, 5-Jun-2019 18:13:49 GMT; Path=/
{"errors":[{"code":"PMT-4000","type":"invalid_request","message":"token is invalid.","detail":"token","infoLink":"https://developer.intuit.com/v2/docs?redirectID=PayErrors"}]}
Интерпретация ошибки
Я предполагаю, что «токен недействителен». ошибка относится к токену моей карты, а не к токену аутентификации моего приложения. Я основываю это предположение на двух вещах:
- Когда я меняю токен аутентификации приложения, я получаю другую ошибку:
Код: Выделить всё
{ "code": "AuthenticationFailed", "type": "INPUT", "message": null, "detail": null, "moreInfo": null }
- Сотрудники Intuit по связям с разработчиками заявили, что конечная точка токена в файле JavaScript Intuit является «неправильной», что указывает на проблему с токеном карты, который я Получаю.
Связь с разработчиками компании Intuit сообщила:
Причина, по которой вы получаете эту ошибку, заключается в том, что файл javascript неправильно создал токен в правильной среде.
API QuickBooks Payments имеет две разные среды. Одна называется «песочницей», другая — «производственной средой». Для создания токена для изолированной среды вам необходимо будет использовать этот URL-адрес: https://sandbox.api.intuit.com/quickboo ... ays/tokens
Однако в этом javascript, URL-адрес токена: https://transaction-api-e2e.pays.intuit.net/v2/tokens, что неверно. Мы использовали внутреннюю среду тестирования. Токен, созданный в e2e, не будет работать в песочнице. Вот почему вы получаете сообщение о том, что токен недействителен.
Еще одна попытка
После проверки API Explorer и tokens, я попытался создать токен карты без библиотеки JavaScript Intuit.
При этом используется та же конечная точка, что и в API Explorer, на который ссылаются отношения с разработчиками, хотя sandbox.api.intuit.com /v4/pays/tokens не существует, поэтому я предполагаю, что это опечатка.
POST v4/pays/tokens
FOR IE8/IE9 – POST/quickbooks/v4/pays/tokens/ie
Тип контента: application/json
Производственный базовый URL-адрес: https://api.intuit.com
Базовый URL-адрес песочницы: https://sandbox.api.intuit.com
Код: Выделить всё
jQuery.ajax({
url: "https://sandbox.api.intuit.com/quickbooks/v4/payments/tokens",
type: "POST",
contentType: 'application/json',
dataType: "json",
data: JSON.stringify(cardData)
}).done(function(msg) {
...
});
Я получаю то, что выглядит как токен карты, но когда я отправляю платеж через CURL, я все равно получаю:
Код: Выделить всё
{
"errors": [{
"code": "PMT-4000",
"type": "invalid_request",
"message": "token is invalid.",
"detail": "token",
"infoLink": "https://developer.intuit.com/v2/docs?redirectID=PayErrors"
}]
}
У меня есть открытая заявка в Intuit в дополнение к сообщению на форумах сообщества разработчиков. Я обновлю этот пост, если получу от них дополнительную информацию.
Подробнее здесь: https://stackoverflow.com/questions/564 ... yments-api