Drupal Commerce и Webmoney

Сегодня интегрировал известный сервис Webmoney в Drupal Commerce. Для интеграции взял соответствующий модуль прямо из песочницы Друпала.орг. Оказалось, что, в принципе, модуль работает — и редиректит на внешний сайт, и генерирует транзакцию, и даже деньги принимает.

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

Далее — измененный код, который добавляет оные редиректы.

function commerce_webmoney_fail() {
  $output = '';
  drupal_set_message(t('Payment unsuccessful!'), 'error');
  $output = (commerce_webmoney_get_settings('fail_message')) ? commerce_webmoney_get_settings('fail_message') : '';
  if (isset($_GET['LMI_PAYMENT_NO'])) {
    $order = commerce_order_load($_GET['LMI_PAYMENT_NO']);
    commerce_payment_redirect_pane_previous_page($order);
    drupal_goto(commerce_checkout_order_uri($order));
  } else {
    return $output;
  }
}

function commerce_webmoney_success() {
  $output = MENU_ACCESS_DENIED;
  if ($_REQUEST['LMI_PAYMENT_NO'] && $_REQUEST['LMI_SYS_INVS_NO'] && $_REQUEST['LMI_SYS_TRANS_NO'] && $_REQUEST['LMI_SYS_TRANS_DATE']) {
    $message = t('Thank you, payment successful. Order #@shop_order,Webmoney order number: @wm_order,Webmoney transaction number: @wm_trans,Webmoney transaction date: @wm_date', array('@shop_order' => $_REQUEST['LMI_PAYMENT_NO'], '@wm_order' => $_REQUEST['LMI_SYS_INVS_NO'], '@wm_trans' => $_REQUEST['LMI_SYS_TRANS_NO'], '@wm_date' => $_REQUEST['LMI_SYS_TRANS_DATE']));
    drupal_set_message($message, 'status');
    $order = commerce_order_load($_REQUEST['LMI_PAYMENT_NO']);
    commerce_payment_redirect_pane_next_page($order);
    drupal_goto(commerce_checkout_order_uri($order));
  }
  return $output;
}

Комментарии