Связывание данных обратного вызова ("ответ шлюза") с транзакцией

Я настраиваю платежный шлюз Authorize.Net DPM (Direct Post Method) для сайта. Есть кое-что, чего я принципиально не понимаю, и не могу связать кусочки.

Основная операция DPM заключается в том, что сайт продавца - мой сайт - предоставляет форму кредитной карты. Эта форма размещена непосредственно на Authorize.Net. После авторизации CC и других опубликованных данных Authorize.Net отправит результаты обратно на мой сайт. Я буду называть это как сообщение обратного вызова. Теперь вот где вещи не совсем связаны для меня.

Функция обратного вызова POST поступает непосредственно от Authorize.Net и не разделяет сеанс с пользователем, поэтому обработчик POST имеет только ту информацию, которая была опубликована. Сумма (x_amount) и сгенерированный ID транзакции Authorize.Net (x_trans_id) хешируются с заранее согласованным секретом и идентификатором входа в учетную запись Authorize.Net. Это может быть использовано для проверки подлинности системы, обеспечивающей этот обратный вызов. Из того, что я могу сказать, на самом деле это просто проверка того, что отправитель знает заранее согласованный секрет.

Таким образом, единственными данными, которым я могу доверять в обратном вызове, является сумма и шлюз, сгенерированный идентификатор транзакции (и это первая точка, в которой этот идентификатор доступен для моего сайта, поэтому его значение не имеет смысла).

Чего я не вижу, так это как связать результаты авторизации с транзакцией, которую платит конечный пользователь. В POST нет других данных, которым можно доверять, чтобы они не были изменены, и они все равно не передают сгенерированный продавцом идентификатор (комбинация x_fp_sequence и x_timestamp).

То, что я ожидаю, что смогу сделать в обратном вызове - это взять результат авторизации карты, быть уверенным, что результату можно доверять, привязать его к ожидающей транзакции, сохраненной в базе данных, до того, как пользователь отправил форму для авторизации..Net, так что транзакция может быть уверенно помечена как завершенная. Но как?


Я работал со шлюзом SagePay Server, и у него также есть обратный вызов. Однако обратный вызов содержит все поля, необходимые для привязки результата к обрабатываемой транзакции (он включает в себя идентификатор транзакции, созданный продавцом), и, что важно, он обеспечивает хэш ВСЕХ полей POST, которым необходимо доверять, чтобы их можно было проверить,

Так что я пропускаю? Я могу предоставить пример данных, если это поможет объяснить проблему. Я использую OmniPay и расширяю драйвер для этого шлюза.

0 ответов

Другие вопросы по тегам