Authorize.Net 验证信用卡 AIM 和 ARB
Posted
技术标签:
【中文标题】Authorize.Net 验证信用卡 AIM 和 ARB【英文标题】:Authorize.Net verify credit card AIM and ARB 【发布时间】:2013-08-29 07:47:58 【问题描述】:我正在使用 authorize.net 定期交易。 我想做的是,如果他们希望在接下来的 12 个月内重复捐赠,可以选择核对捐赠。
所以在 ARB 之前 - 我想验证卡,但 0.00 不是有效金额。所以如果我的金额是 0.01 - 我如何在卡验证后取消交易?
另外 - 订阅后,我没有收到来自 authorize.net 的电子邮件,告诉我交易已完成,就像处理常规交易时一样。
我的代码:
$authorization = new AuthnetAIM($apilogin, $apitranskey, true);
$authorization->setTransaction($creditcard, $expiration, '0.01');
$authorization->setTransactionType('AUTH_ONLY');
$authorization->process();
if ($authorization->isApproved())
$subscription = new AuthnetARB($apilogin, $apitranskey, AuthnetARB::USE_DEVELOPMENT_SERVER);
// Set subscription information
$subscription->setParameter('amount', $amount);
$subscription->setParameter('cardNumber', $creditcard);
$subscription->setParameter('expirationDate', $expiration);
$subscription->setParameter('firstName', $business_firstname);
$subscription->setParameter('lastName', $business_lastname);
$subscription->setParameter('address', $business_address);
$subscription->setParameter('city', $business_city);
$subscription->setParameter('state', $business_state);
$subscription->setParameter('zip', $business_zipcode);
$subscription->setParameter('email', $email);
// Set the billing cycle for every three months
$subscription->setParameter('interval_length', 1);
$subscription->setParameter('startDate', date("Y-m-d", strtotime("+ 1 months")));
// Create the subscription
$subscription->createAccount();
// Check the results of our API call
if ($subscription->isSuccessful())
// Get the subscription ID
$subscription_id = $subscription->getSubscriberID();
Send_email();
else
$transError = 'your subscription was not created';
$hasError = true;
else if ($authorization->isDeclined())
$transError = 'This card is not valid';
$hasError = true;
catch (AuthnetARBException $e)
$transError = 'There was an error processing the transaction. Here is the error message:<br/> ';
echo $e->__toString();
$hasError = true;
【问题讨论】:
【参考方案1】:使用新的 SDK 进行授权,这将起作用
$authorize = new AuthorizeNetAIM(self::AUTHNET_LOGIN, self::AUTHNET_TRANSKEY);
$authorize->setFields(array(
'amount' => '0.01',
'card_num' => $cardNumber,
'exp_date' => $expDate
));
$response = $authorize->authorizeOnly();
if ($response->response_code == 1)
// good card
else
// bad card
【讨论】:
【参考方案2】:0.00 不仅是一个有效金额,而且如果您只是想验证信用卡是否合法,Visa 和 Mastercard 要求您使用该金额。几年前,出于这个原因,他们停止允许进行任何实际价值的预授权。我认为不这样做的商家会被罚款。
话虽如此,如果您打算采用“收取 $.01 美元然后使交易无效”的路线,那么下面的代码应该可以工作:
$transaction_id = $authorization->getTransactionID();
$void = new AuthnetAIM($apilogin, $apitranskey, true);
$void->setTransactionType("VOID");
$void->setParameter('x_trans_id', $transaction_id);
$void->process();
【讨论】:
谢谢你! - 我正在使用您的教程,当我将金额设置为 0.00 时,它会抛出此错误:“省略交易处理所需的信息:美元金额” 有趣。自从我参与商家帐户相关的事情以来,也许事情已经改变了一段时间。但是,如果您遇到该错误并且 .01 可以正常工作,那么一定要走那条路。 所以我把新代码放在授权之后?我收到了一封 0.01 收据的电子邮件 - 这是否意味着它将在当天结束时作废? 将它放在if ($authorization->isApproved())
之后的任何时间。然后它将立即作废,客户将永远不会在他们的声明中看到它。
好的,我把它放进去——我只是不确定它会在哪里反映无效的交易。是否可以设置订阅的结束日期? - 我只想要每个月的 12 个月以上是关于Authorize.Net 验证信用卡 AIM 和 ARB的主要内容,如果未能解决你的问题,请参考以下文章
在 Heroku 上的 Rails 中为 Authorize.net AIM API 使用自定义证书
(13) 商户登录ID或密码无效或账户未激活。(authorize.net的usig Aim方法)
在 ASP.NET 中接受信用卡的最佳方式是啥? (在 ASP.NET 和 Authorize.NET 之间)