使用测试帐户在 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 问题