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 НЕ отправляет вам данные. Просто отправьте как указано. Вы, наверное, уже проверили, но на всякий случай:
- Убедитесь, что URL-адрес ответа по умолчанию не установлен, если вы не используете эту функцию
- Убедитесь, что ваши записи журнала соответствуют фактическим транзакциям. Время от времени "плохие люди" пингуют наши молчаливые посты. По этой причине мы добавляем проверку на запросы GET и отбрасываем их
- Попробуйте опубликовать на свой немой URL и print_r($_POST). Убедитесь, что это работает.
- Добавьте хеш MD5 в интерфейс Auth.net, запустите транзакцию и посмотрите, получаете ли вы значение.