Authorize.Net Silent Post не отвечает должным образом - вообще никаких данных

Я пытаюсь настроить молчаливый ответ для своих живых тележек электронной коммерции auth.net. Silent Post от Auth.net происходит, но я не получаю никаких данных вообще. Я написал быстрый скрипт, просто чтобы регистрировать ответы от транзакций, чтобы я мог видеть, что отправлял auth.net.

$f = fopen('log.txt', 'a');

fwrite($f, 'new request: ');
fwrite($f, date('Y-m-d H:i'));
fwrite($f, ' ' . $_SERVER['REQUEST_METHOD']. ' ');
fwrite($f, ' ' . $_SERVER['QUERY_STRING']. ' ');
fwrite($f, ' ' . $_SERVER['REQUEST_URI']. ' ');

fwrite($f, print_r(http_get_request_headers(),1));
fwrite($f, print_r($_GET,1));

Простой сладкий, должен ли я получить результат правильно? Обратите внимание на печать GET, которую я добавил, потому что это набор результатов:

 new request: 2011-12-06 14:54 GET      /authSilentResponse/ Array (
     [Accept] => */*
     [Host] => myhost.mydomain.com
     [Connection] => Close ) Array ( )

Таким образом, вместо сообщения, что все говорит мне, что это должно быть, я получаю запрос GET...

Кто-нибудь есть идеи, почему это не будет проходить как POST с данными?

2 ответа

Я думаю, что вы где-то делаете что-то не так, поскольку Silent Post всегда отправляет результаты транзакций, используя запрос POST. Попробуйте код, который я написал, и посмотрите, будет ли он работать лучше для вас. Если это так, вы можете сравнить свой код с ним и посмотреть, где находится потенциальная проблема.

Вот модифицированная версия, которую вы можете использовать для тестирования:

<?php
// Get the subscription ID if it is available. 
// Otherwise $subscription_id will be set to zero.
$subscription_id = (int) $_POST['x_subscription_id'];

// Check to see if we got a valid subscription ID.
// If so, do something with it.
if ($subscription_id)
{
    // Get the response code. 1 is success, 2 is decline, 3 is error
    $response_code = (int) $_POST['x_response_code'];

    // Get the reason code. 8 is expired card.
    $reason_code = (int) $_POST['x_response_reason_code'];

    if ($response_code == 1)
    {
        // Approved!

        // Some useful fields might include:
        // $authorization_code = $_POST['x_auth_code'];
        // $avs_verify_result  = $_POST['x_avs_code'];
        // $transaction_id     = $_POST['x_trans_id'];
        // $customer_id        = $_POST['x_cust_id'];

        $result = 'approved';
    }
    else if ($response_code == 2)
    {
        // Declined

        $result = 'declined';
    }
    else if ($response_code == 3 && $reason_code == 8)
    {
        // An expired card

        $result = 'expired';
    }
    else 
    {
        // Other error

        $result = 'error';
    }

    $f = fopen('log.txt', 'a');

    fwrite($f, 'new request: ');
    fwrite($f, date('Y-m-d H:i'));
    fwrite($f, ' ' . $_SERVER['REQUEST_METHOD']. "\n\n");
    fwrite($f, ' ' . $_SERVER['QUERY_STRING']. "\n\n");
    fwrite($f, ' ' . $_SERVER['REQUEST_URI']. "\n\n");

    fwrite($f, ' ' . $result. "\n\n");

    fwrite($f, print_r(http_get_request_headers(),1));
    fwrite($f, print_r($_REQUEST,1));
}
?>

Вы можете проверить это, используя эту форму:

<form action="http://www.yourdomain.com/silent-post.php" method="post">
    <input type="hidden" name="x_response_code" value="1"/>
    <input type="hidden" name="x_response_subcode" value="1"/>
    <input type="hidden" name="x_response_reason_code" value="1"/>
    <input type="hidden" name="x_response_reason_text" value="This transaction has been approved."/>
    <input type="hidden" name="x_auth_code" value=""/>
    <input type="hidden" name="x_avs_code" value="P"/>
    <input type="hidden" name="x_trans_id" value="1821199455"/>
    <input type="hidden" name="x_invoice_num" value=""/>
    <input type="hidden" name="x_description" value=""/>
    <input type="hidden" name="x_amount" value="9.95"/>
    <input type="hidden" name="x_method" value="CC"/>
    <input type="hidden" name="x_type" value="auth_capture"/>
    <input type="hidden" name="x_cust_id" value="1"/>
    <input type="hidden" name="x_first_name" value="John"/>
    <input type="hidden" name="x_last_name" value="Smith"/>
    <input type="hidden" name="x_company" value=""/>
    <input type="hidden" name="x_address" value=""/>
    <input type="hidden" name="x_city" value=""/>
    <input type="hidden" name="x_state" value=""/>
    <input type="hidden" name="x_zip" value=""/>
    <input type="hidden" name="x_country" value=""/>
    <input type="hidden" name="x_phone" value=""/>
    <input type="hidden" name="x_fax" value=""/>
    <input type="hidden" name="x_email" value=""/>
    <input type="hidden" name="x_ship_to_first_name" value=""/>
    <input type="hidden" name="x_ship_to_last_name" value=""/>
    <input type="hidden" name="x_ship_to_company" value=""/>
    <input type="hidden" name="x_ship_to_address" value=""/>
    <input type="hidden" name="x_ship_to_city" value=""/>
    <input type="hidden" name="x_ship_to_state" value=""/>
    <input type="hidden" name="x_ship_to_zip" value=""/>
    <input type="hidden" name="x_ship_to_country" value=""/>
    <input type="hidden" name="x_tax" value="0.0000"/>
    <input type="hidden" name="x_duty" value="0.0000"/>
    <input type="hidden" name="x_freight" value="0.0000"/>
    <input type="hidden" name="x_tax_exempt" value="FALSE"/>
    <input type="hidden" name="x_po_num" value=""/>
    <input type="hidden" name="x_MD5_Hash" value="A375D35004547A91EE3B7AFA40B1E727"/>
    <input type="hidden" name="x_cavv_response" value=""/>
    <input type="hidden" name="x_test_request" value="false"/>
    <input type="hidden" name="x_subscription_id" value="365314"/>
    <input type="hidden" name="x_subscription_paynum" value="1"/>
    <input type="submit"/>
</form>

В вашем аккаунте должна быть неправильная конфигурация. Silent Post НЕ отправляет вам данные. Просто отправьте как указано. Вы, наверное, уже проверили, но на всякий случай:

  1. Убедитесь, что URL-адрес ответа по умолчанию не установлен, если вы не используете эту функцию
  2. Убедитесь, что ваши записи журнала соответствуют фактическим транзакциям. Время от времени "плохие люди" пингуют наши молчаливые посты. По этой причине мы добавляем проверку на запросы GET и отбрасываем их
  3. Попробуйте опубликовать на свой немой URL и print_r($_POST). Убедитесь, что это работает.
  4. Добавьте хеш MD5 в интерфейс Auth.net, запустите транзакцию и посмотрите, получаете ли вы значение.
Другие вопросы по тегам