Я разрабатываю веб-сайт, который использует Authorize.net, но в настоящее время я использую тестовую учетную запись. Чтобы проверить возврат, требуется уникальный идентификатор транзакции, но, поскольку я использую только тестовую учетную запись, он не возвращает уникальный идентификатор транзакции при совершении тестовой транзакции (всегда 2147483647). Есть ли другой способ для этого работать? Мне нужно посмотреть, будет ли мой код работать с API.
Тестовые возвраты на Authorize.net с использованием тестовой учетной записи?
Ответы (3)
Какой бы код вы ни использовали для анализа «идентификатора транзакции», который Authorize.net возвращает вам после успешной транзакции, он преобразует этот идентификатор транзакции в целое число. Его следует рассматривать как строку, а не целое число. В 2008 году Authorize заявила, что они переходят от целого числа к идентификатору транзакции на основе строки, потому что у них закончились 32-битные целые числа.
2147483647 — это наибольшее целое число с основанием 10, которое можно составить из 32 двоичных битов (1111 1111 1111 1111 1111 1111 1111 1111). Это означает, что Authorize возвращает идентификатор транзакции > 2147483647 (например, 3000000000), а ваш язык программирования усекает биты до максимально допустимого значения, 2147483647.
Изучите свой PHP-код и убедитесь, что идентификатор транзакции преобразуется в значение в виде строки. Чтобы быть уверенным, вы можете просмотреть свой код и выполнить его самостоятельно. Например:
(string)$transaction_id
Также убедитесь, что ваш код не выполняет действия, автоматически преобразующие строки в целые числа. Например:
$transaction_id + 1
Наконец, если идентификатор транзакции считывается из базы данных, убедитесь, что база данных хранит идентификатор транзакции как строковый тип данных. Например, с mysql используйте CHAR или VARCHAR и сделайте его больше 10. Попробуйте 16 или 24, чтобы быть в безопасности.
Использованная литература:
- http://answers.yahoo.com/question/index?qid=20080503144541AAqrW0D
- http://groups.drupal.org/node/14891
Если вы отправляете свои запросы на https://test.authorize.net/gateway/transact.dll, тогда вы всегда будете получать 0 в качестве transaction_id.
Короче говоря, вам понадобится реальный счет, чтобы проверить возврат средств. Вы можете установить x_test_request=TRUE и опубликовать на https://secure.authorize.net/gateway/transact.dll и проверьте, возвращаете ли вы действительный идентификатор транзакции. Но опять же вам понадобится действующая учетная запись Live с Authorize.Net, чтобы иметь возможность публиковать транзакции на Live URL.
Чтобы получить идентификатор транзакции, при отправке запроса на транзакцию в тестовом режиме необходимо установить в списке параметров запроса:
x_test_request=FALSE
тогда вы получите правильный идентификатор
_getRequest()
см. setXTestRequest()
- person pspahn; 03.12.2012