2013-08-26 8 views
0

Я использую повторную транзакцию authorize.net. Что я пытаюсь сделать, это дать возможность проверить пожертвование, если они хотят, чтобы он повторялся в течение следующих 12 месяцев.Authorize.Net проверить кредитную карту AIM и ARB

Итак, перед 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

Не только 0,00 действительное количество, но если вы просто пытаетесь проверить кредитную карту является законным вы обязаны по Visa и Mastercard использовать эту сумму. Несколько лет назад они перестали допускать предварительные авторизации любой реальной стоимости по этой причине. Я думаю, что для торговцев есть штрафы, которые этого не делают.

Сказав, что, если вы собираетесь брать «плату в размере $ 0,01, а затем аннулировать сделку» маршрут, следующий код должен работать:

$transaction_id = $authorization->getTransactionID(); 
$void = new AuthnetAIM($apilogin, $apitranskey, true); 
$void->setTransactionType("VOID"); 
$void->setParameter('x_trans_id', $transaction_id); 
$void->process(); 
+0

Спасибо, человек! - im, используя ваш учебник, и когда я оставлю количество, установленное на 0.00, оно вызывает мне эту ошибку: «Требуемая информация для обработки транзакций опущена: сумма в долларах» – Mark

+0

Интересно. Может быть, все изменилось, так как прошло какое-то время, так как я участвовал в связанных с торговцами вещах. Но если вы получаете эту ошибку, а .01 работает, то определенно возьмите этот маршрут. –

+0

Итак, я разместил новый код сразу после авторизации? Я получил электронное письмо за квитанцию ​​за 0,01 - означает ли это, что это аннулирует его к дню? – Mark

3

С новым 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 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^