Сегодня интегрировал известный сервис 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;
}