3

我正在开发一个使用 Authorize.net 的网站,但我目前使用的是测试帐户。要测试退款,它需要一个唯一的交易 ID,但由于我只使用测试帐户,因此在您进行测试交易时它不会返回唯一的交易 ID(始终为 2147483647)。还有另一种方法可以做到这一点吗?我需要看看我的代码是否可以与 API 一起使用。

4

3 回答 3

2

无论您使用什么代码来解析 Authorize.net 在成功交易后返回给您的“交易 ID”,都会将该交易 ID 转换为整数。它应该被视为一个字符串,而不是一个整数。2008 年,Authorize 宣布他们正在从整数转换为基于字符串的事务 ID,因为它们用完了 32 位整数。

2147483647 是您可以使用 32 个二进制位 (1111 1111 1111 1111 1111 1111 1111 1111) 生成的最大基数为 10 的整数。这意味着 Authorize 返回的事务 id > 2147483647(例如 3000000000)并且您的编程语言正在将这些位截断为允许的最大值 2147483647。

检查您的 PHP 代码并确保将事务 ID 转换为字符串。可以肯定的是,您可能想要检查您的代码并自己进行转换。例如:

(string)$transaction_id

还要确保您的代码不会自动将字符串转换为整数。例如:

$transaction_id + 1

最后,如果从数据库中读取事务 ID,请确保数据库将事务 ID 存储为字符串数据类型。例如,对于 mysql,使用 CHAR 或 VARCHAR 并使其大于 10。尝试 16 或 24 以确保安全。

参考:

于 2011-03-10T05:59:58.493 回答
1

如果您将请求发布到https://test.authorize.net/gateway/transact.dll,那么您将始终收到 0 作为 transaction_id。

所以简而言之,您需要一个真实账户来测试您的退款。您可以设置 x_test_request=TRUE 并发布到https://secure.authorize.net/gateway/transact.dll并检查您是否获得了有效的交易 ID。但同样,您需要使用 Authorize.Net 的有效实时帐户才能将交易发布到实时 URL

于 2012-04-18T18:26:37.413 回答
0

要获取交易ID,在测试模式下发送交易请求时,您需要在请求参数列表中设置:

x_test_request=FALSE

那么你会得到正确的id

于 2010-12-03T08:32:39.483 回答