如何在 Authorize.net 中找到已结算/未结算的交易?
Posted
技术标签:
【中文标题】如何在 Authorize.net 中找到已结算/未结算的交易?【英文标题】:How to find the transaction is settled/Unsettled in Authorize.net? 【发布时间】:2011-03-12 05:57:38 【问题描述】:我如何在authorize.net中查看用户进行的交易是已结算还是未结算。我正在使用AIM。 我想通过编码。当交易完成时,我找不到交易状态。但我想知道它是进行已结算还是未结算的交易。 提前致谢。
【问题讨论】:
呃,我已经有一段时间没有通过 Authorize.net 手动实现信用卡处理了,但我不记得有任何类型的已结算/未结算财产。您通常向网关发送请求以处理付款(包含所有 CC 信息),然后它返回一个状态代码,告诉您付款是通过还是失败。由于它是一张信用卡,而不是一张标签,因此资金几乎会立即从买家的账户转移到您的账户。 更正,除了通过/失败/错误之外,还有第四个响应代码,但在标准设置中不应该出现。当您接受部分付款或您已设置帐户以便您必须手动审查和批准每笔交易时,就会发生这种情况。请参阅第 4 节中标题为“响应原因代码...”的小节:developer.authorize.net/guides/AIM 感谢您的快速回复...我会通过它。 【参考方案1】:您无法通过编码获取此信息,因为没有 API Authorize.Net 提供允许这样做。它只能通过控制面板完成。当您处理交易并获得批准时,您可以假设交易未结算。交易通常在太平洋时间午夜左右每天结算一次。之后,您可以假设交易已结算。
【讨论】:
啊,我不知道。交易“未结算”到底是什么意思?资金还没有从购买者那里扣除吗?还是仅仅意味着资金在购买者账户和商家账户之间(例如由 Authorize.net 持有)? 为了让所有相关人员(商户、收单方、处理银行)更轻松地处理交易,交易每天分批处理一次。未结算的交易将资金保存在持卡人的信用卡上,供商户购买。交易完成后,资金将从持卡人处取出并转移给商家。一旦获得交易批准码,就商家而言,交易完成,他们可以指望在 2-3 个工作日内收到这笔钱,具体取决于卡的种类。 谢谢约翰康德。我的疑问是在 12 小时后是否是未结算的交易(即如果银行人员通过时验证失败(我不知道这种情况是否会出现))是否有可能通知商家进行为用户退还(未保留)金额。 未结算意味着它只是没有提交给您付款。一旦获得批准,它就不会失败验证或任何事情,因为不再进行验证。 这不正确(至少不再正确)。 developer.authorize.net/api/transaction_details 可让您查看交易详情,包括是否已结算。【参考方案2】:自 2011 年 3 月 16 日起,authorize.net 发布了对 Transaction Details API 的两个新调用,getUnsettledTransactionList 和 getBatchStatistics。
getUnsettledTransactionList 每次调用最多返回 1,000 个未结算的交易,返回最近的交易。响应中返回的信息将与 getTransactionList 调用中返回的信息相同。
getBatchStatistics 返回单个批次的批次统计信息,例如结算状态和时间、收费计数、拒绝计数等。
有关详细信息,请查看 XML 指南和 SOAP 指南。
在撰写本文时,php SDK 的版本为 1.1.6,并且没有在 TD api 中内置此功能,但是如果您查看上面提供的文档以及this example page,您会看到获取未结算交易列表实际上是可能的。
from this page
【讨论】:
【参考方案3】:我已点击此链接 http://developer.authorize.net/api/transaction_details/ 并从那里获取此代码,
<?php
require_once "anet_php_sdk/AuthorizeNet.php";
define("AUTHORIZENET_API_LOGIN_ID", "YOURLOGIN");
define("AUTHORIZENET_TRANSACTION_KEY", "YOURKEY");
// Get Settled Batch List
$request = new AuthorizeNetTD;
$response = $request->getSettledBatchList();
echo count($response->xml->batchList->batch) . " batches\n";
foreach ($response->xml->batchList->batch as $batch)
echo "Batch ID: " . $batch->batchId . "\n";
// Get Transaction Details
$transactionId = "12345";
$response = $request->getTransactionDetails($transactionId);
echo $response->xml->transaction->transactionStatus;
但我收到此错误消息。
由于验证值无效,用户验证失败。
【讨论】:
您好 Musaddiq,我知道这是一篇旧帖子,但也许您知道答案。有没有办法在不必先调用 batchList 再调用 getTransactionDetails 的情况下带来已结算交易的列表?每天超过 1000 笔交易的结算越来越难确认。谢谢。 您好 Danielle,对不起,这是我的客户帐户,当时我能够进行测试。目前我没有任何活动帐户可供测试。 感谢穆萨迪克!事实证明,Authorize 没有选择带来所有已结算的帐户。您可以获取 batchIds,然后获取该批次的已结算帐户。我不敢相信他们没有这样简单的选择。非常感谢您的回答:-)【参考方案4】:正如@cwd 的回答中所建议的,了解交易是否已结算的最可靠方法是致电getUnsettledTransactionList
或getBatchStatistics
,但您也可以查看您的交易截止时间 设置为。
登录到您的 Authorize.net 管理员,点击账户 > 交易截止时间
我的帐户设置为 4:00 PM PDT,因此您可以将交易时间与截止时间进行比较。比如:
$createdTime = new DateTime($charge['createdTime']);
// starting point for settle time
$settleTime = new DateTime($createdTime->format('Y-m-d') . ' 16:00:00');
$now = new DateTime();
// if card was charged after settle time for
// that day, move settle time to the next day
if ($createdTime > $settleTime)
$settleTime->add(new DateInterval('P1D'));
if ($now > $settleTime) $settled = true;
【讨论】:
【参考方案5】:http://developer.authorize.net/api/transaction_details/ 是您要查找的 API。
【讨论】:
以上是关于如何在 Authorize.net 中找到已结算/未结算的交易?的主要内容,如果未能解决你的问题,请参考以下文章