Здравстуйте, я создал аддон как документацией. Процессор внутри func.php. При оплате перенаправлает в банк. Но после оплаты банк отправлает на свой callbackurl с белым экраном и дает такой ответ - RESULT: OK RESULT_CODE: 000.
После оплаты статус остается несовершенным
Как сделат чтобы он поменял статус и отправил маил покупателю
Узнайте у поддержки банка, где можно у них в банке в настройках прописать, на какой URL вашего сайта банк должен заходить после успешной и неуспешной оплаты. Ваш аддон должен отслеживать заходы на этот URL и обрабатывать их - менять статусы заказов.
Вот как, например, это выглядит в настройках Робокассы:
Обычно есть 2 типа URL - куда отправлять пользователя после оплаты и куда высылать запрос с данными транзакции. У вас это один и тот же URL?
Я могу добавить такой линк в админ панеле банка. Этого будет достаточно?
Да, они разные.
Callback_url http://domain.com/index.php?dispatch=checkout.complete
Если написать это код что еще надо надо добавить в аддон?
checkout.complete не обрабатывает данные. Вам нужно использовать что-то типа
domain.com/index.php?dispatch=payment_notification.callback&payment=my_payment
В этом случае скрипт вашей платежной системы должен называться my_payment.php
Я просто отправляю в банк чтобы они поменяли callback_url. Сразу проверять не получатся.
checkout.complete проверил. Вы правильно сказали он не сработал
Структура кода как должно быть в my_payment.php? Чтобы правильно работало?
Примерно так
if (defined('PAYMENT_NOTIFICATION')) {
... тут обрабатываете полученные данные и форумируете массив $pp_response ...
$pp_response = [
'order_status' => 'P',
'reason_text' => ''
];
fn_finish_payment($order_id, $pp_response);
... если пользователь редиректится по этому же URL, то дополнительно вызываете...
fn_order_placement_routines('route', $order_id);
}
Можно более подробный пример?
<?php
use Tygh\Http;
use Tygh\Registry;
if (!defined(‘BOOTSTRAP’)) { die(‘Access denied’); }
if(defined(‘PAYMENT_NOTIFICATION’)){
if($mode == ‘callcack’){
$order_id = $_REQUEST[‘order_id’];
$pp_response = array();
$order_status = ‘O’;
$pp_response = array(
‘order_status’ => $order_status,
‘order_id’ => $order_id
);
}
if($mode == ‘fail’){
$order_status = ‘F’;
}
fn_finish_payment($order_id, $pp_response, false);
fn_order_placement_routines(‘route’, $order_id, false);
exit;
} else {
–Сдесь код банка–
fn_create_payment_form($post_address, $post_data, ‘my_gateway’,false);
}
Банк когда открывает "https://domain/index.php?dispatch=payment_notification.callback&payment=my_gateway бывает белый экран.
Но если я сам добысываю &order_id=001 меняет статус.
Что я не правильно делаю?
Callback не содержит order_id. Если платежная система шлет данные по транзакции, посмотрите order_id в этом массиве данных
Заказ уже меняет статус. Спасибо вам за помощь
Какой код надо добавить чтобы он и маил отправлял покупателю?
Если используются функции fn_order_placement_routines или fn_finish_payment, добавьте третий параметр (true)
1 лайк