Authorize.Net проверяет кредитные карты AIM и ARB

Я использую повторяющуюся транзакцию 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;
}
}

2 ответа

Решение

Мало того, что 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();

С новым 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
}
Другие вопросы по тегам