Как изменить статус заказа на "оплачен" через плагин оплаты?

Добрый день!

Собственно вопрос в заголовке. Плагин пишу сам, для нужной платежной системы плагина в готовом виде нет. В данный момент при проведении платежа получаю в логах следующие ошибки:

2017-06-21 16:56:41
#594a7b1988e09
data:
array (
'method' => 'waPayment::callbackInit',
'app_id' => 'shop',
'merchant_id' => NULL,
'_magic' => 'APP_ID suggested',
)


2017-06-21 16:56:41
#594a7b1988e09
data:
array (
'method' => 'waPayment::execAppCallback',
'app_id' => 'shop',
'callback_method' => 'payment',
'transaction_data' =>
array (
'state' => 'CAPTURED',
'plugin' => 'yamon',
'app_id' => 'shop',
'merchant_id' => NULL,
'id' => 9,
),
'result' =>
array (
'error' => 'Invalid plugin id',
),
)

3 ответа

  • 1

    Посмотрите для изучения, как устроен бесплатный плагин webmoney. В коде плагина много комментариев, которые помогут разобраться. Если что-то останется непонятным, задавайте уточняющие вопросы.

    • +2
      Денис Денис 21 июня 2017 18:58 #

      Данный плагин смотрел. Под Шопскрипт пишу плагин первый раз и не во всем еще могу разобраться.

      Сейчас после проверки хеша полученного плагином и в ответе от платежной системы добавляю следующий код для обработки ответа от платежной системы и смены статуса заказа:


      $transaction_data = parent::formalizeData($request);
      		$transaction_data['order_id'] = $request['label'];
      		$transaction_data['native_id'] = $request['operation_id'];
      		$transaction_data['type'] = $request['notification_type'];
      		$transaction_data['amount'] = $request['withdraw_amount'];
      		$currency = $this->allowedCurrency();
      		$transaction_data['currency_id'] = $currency;
              $transaction_data['state'] = self::STATE_CAPTURED;
              $callback_method = null;
              switch (ifset($transaction_data['state'])) {
                  case self::STATE_CAPTURED:
                      $callback_method = self::CALLBACK_PAYMENT;
                      break;
              }
              if ($callback_method) {
                  $transaction_data = $this->saveTransaction($transaction_data, $request);
                  $this->execAppCallback($callback_method, $transaction_data);
              }
      
      		}
      		else {$message = 'Ошибка, платеж не выполнен!';}

      Но статус не меняется и в логе следующее:


      data:
      array (
        'method' => 'waPayment::execAppCallback',
        'app_id' => 'shop',
        'callback_method' => 'payment',
        'transaction_data' => 
        array (
          'plugin' => 'yamon',
          'merchant_id' => NULL,
          'date_time' => '2017-06-21 18:50:51',
          'update_datetime' => '2017-06-21 18:50:51',
          'result' => true,
          'order_id' => '66',
          'native_id' => '551375443811115004',
          'type' => 'incoming',
          'amount' => '2.00',
          'currency_id' => 'RUB',
          'state' => 'CAPTURED',
          'app_id' => 'shop',
          'id' => 16,
        ),
        'result' => 
        array (
          'error' => 'Invalid plugin id',
        ),
      )

      Что я делаю не так?

      • +2

        Режим разработки включен в Инсталлере? Кеш очищен? Как выглядит ваш callback URL?

        • +1
          Денис Денис 22 июня 2017 10:56 #

          Нет, режим разработки не включал, так как в данном случае плагин тестировался на действующем сайте. Кеш очищен. Callback следующего вида "https://домен/payments.php/imon/" Плагин в папке imon в соответствующем разделе.

          • +1
            Алексей Алексей Webasyst 22 июня 2017 14:49 #

            если у вас папка imon то почему array ( 'plugin' => 'yamon', ?

            • +1
              Денис Денис 22 июня 2017 15:39 #

              Сейчас везде прописан как imon. Я его везде переименовывал когда пытался понять что за ошибка Invalid plugin id

              • +1
                Сейчас везде прописан

                Возможно, всё-таки не везде... В именах файлов и классов точно всё одинаково?

                • +1
                  Денис Денис 22 июня 2017 15:52 #

                  Да, после предыдущего сообщения специально еще раз все перепроверил, везде прописан одинаково. Папка imon, файл imonPayment.class.php, класс imonPayment

  • 1
    Денис 24 июня 2017 00:53 #

    Добрый вечер!

    Проблема не решена! Есть у кого нибудь какие нибудь варианты решения проблемы?

    • +2
      Евгений Евгений 24 июня 2017 08:19 #

      Тут никаких вариантов нет, пока у вас будет ошибка

      'error' => 'Invalid plugin id',

      • +2
        Денис Денис 24 июня 2017 08:57 #

        Это я понимаю. Как раз и интересует вопрос в чем причина ошибки. Нигде нет информации по такой ошибке, чем она вызывается и как ее исправить.

  • 0
    Денис 24 июня 2017 22:41 #

    Вопрос закрыт, проблема решена, все работает.

    • +1
      theair theair 12 января 2018 16:45 #

      а как?

      Что вы сделали чтобы заработало?

      Как устранили ошибку "Invalid plugin id"

      Где прописываеться plugin id?


      • +1
        Михаил Ушенин Михаил Ушенин Webasyst 12 января 2018 16:56 #

        Возможно, в методе callbackInit() вы не выделяете значение merchant_id из содержимого колбека от платёжного шлюза. Посмотрите пример того, как это делается.

        merchant_id — это числовой ID способа оплаты, настроенного в приложении.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите