使用测试帐户在 Authorize.net 上测试退款?

Posted

技术标签:

【中文标题】使用测试帐户在 Authorize.net 上测试退款?【英文标题】:Test refunds on Authorize.net using a test account? 【发布时间】:2010-11-18 12:44:12 【问题描述】:

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

【问题讨论】:

时间太长了我无法确定,但我认为您需要处于实时模式(而不是测试模式)才能进行退款。 Authorize.NET 说要使用 1 美分的交易,他们的 Merchant Integration Guide 可能有更多细节。 【参考方案1】:

无论您使用什么代码来解析 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 以确保安全。

参考资料:

http://answers.yahoo.com/question/index?qid=20080503144541AAqrW0D http://groups.drupal.org/node/14891

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

x_test_request=FALSE

那么你会得到正确的id

【讨论】:

在 Magento 1.7.0.2 中,此值在 /app/code/core/Mage/Paygate/Model/Authorizenet.php 中设置 - 在 _getRequest() 方法中,请参阅 setXTestRequest()

以上是关于使用测试帐户在 Authorize.net 上测试退款?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 activemerchant 将实时交易发送到测试服务器 authorize.net

rails activemerchant authorize.net 问题

Authorize.net : 底层连接已关闭

在 Authorize.Net iOS SDK 中将 API 登录 ID 和事务密钥放在哪里?

authorize.net 测试在测试模式下失败

使用两个 Authorize.Net 帐户设置 Magento 的支付桥