После оплаты статус остается несовершенным

Здравстуйте, я создал аддон как документацией. Процессор внутри 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 лайк

Спасибо вам за помощь

1 лайк