Скопировал модуль commerce_cod и начал переделывать для безналичной оплаты. Добавил поле для ввода реквизитов фирмы, но не знаю как его вывести в http://example.ru/admin/commerce/orders/%/payment/%/view
(это кнопка "просмотр" в ОПЛАТА). Может быть есть другой способ получать данные с этой формы?
Вот код:
<?php
/**
* Implements hook_menu().
*/
function beznal_menu() {
$items = array();
// Add a menu item for capturing authorizations.
$items['admin/commerce/orders/%commerce_order/payment/%commerce_payment_transaction/beznal-payment'] = array(
'title' => 'Payment',
'page callback' => 'drupal_get_form',
'page arguments' => array('beznal_payment_form', 3, 5),
'access callback' => 'beznal_payment_access',
'access arguments' => array(3, 5),
'type' => MENU_DEFAULT_LOCAL_TASK,
'context' => MENU_CONTEXT_INLINE,
'weight' => 2,
);
return
$items;
}
/**
* User access callback for cashing cheque
*/
function beznal_payment_access($order, $transaction) {
// Return FALSE if the transaction isn't with a COD
if ($transaction->payment_method != 'beznal' && $transaction->status == COMMERCE_PAYMENT_STATUS_PENDING) {
return FALSE;
}
else {
// Allow access if the user can update payments on this order.
return commerce_payment_transaction_access('update', $transaction);
}
}
/**
* Form to Receive the Payment
*/
function beznal_payment_form($form, &$form_state, $order, $transaction) {
$form_state['order'] = $order;
$form_state['transaction'] = $transaction;
// Load and store the payment method instance for this transaction.
$payment_method = commerce_payment_method_instance_load($transaction->instance_id);
$form_state['payment_method'] = $payment_method;
/*
$form['information'] = array(
'#markup' => t('Payment received means that the cheque has been verified and cashed').'<br />'
);
*/
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Payment received'),
);
return $form;
}
function
beznal_payment_form_submit($form, &$form_state) {
$transaction = $form_state['transaction'];
$order = $form_state['order'];
$transaction->message = t('The Payment for this order has been received');
$transaction->status = COMMERCE_PAYMENT_STATUS_SUCCESS;
commerce_payment_transaction_save($transaction);
$form_state['redirect'] = 'admin/commerce/orders/'.$order->order_id.'/payment';
}
/**
* Implements hook_commerce_payment_method_info().
*/
function beznal_commerce_payment_method_info() {
$payment_methods = array();
$payment_methods['beznal'] = array(
'title' => t('Beznalichnie'),
'description' => t('Cashless settlement.'),
'active' => TRUE,
);
return
$payment_methods;
}
/**
* Payment method callback: settings form.
*/
function beznal_settings_form($settings = NULL) {
$settings = (array) $settings + array(
'information' => ''
);
$form = array();
$form['information'] = array(
'#type' => 'textarea',
'#title' => t('Information'),
'#description' => t('Information you would like to be shown to users when they select this payment method, such as delivery payment details.'),
'#default_value' => $settings['information']
);
return $form;
}
/**
* Payment method callback: checkout form.
*/
function beznal_submit_form($payment_method, $pane_values, $checkout_pane, $order) {
$form = array();
$pane_values += array('inn' => '');
if (!empty(
$payment_method['settings']['information'])) {
$form['beznal_description'] = array(
'#markup' => $payment_method['settings']['information']
);
}
// Need to create a dummy value to solve http://drupal.org/node/1230666
// Probably an issue in the main commerce module
$form['dummy'] = array(
'#type' => 'hidden',
'#value' => 'dummy'
);
$form['inn'] = array(
'#type' => 'textarea',
'#title' => t('Rekvizity'),
'#description' => t('inn-kpp'),
'#default_value' => $pane_values['inn'],
'#required' => TRUE,
);
return
$form;
}
/**
* Payment method callback: checkout form validation.
*/
function beznal_submit_form_validate($payment_method, $pane_form, $pane_values, $order, $form_parents = array()) {
}
/**
* Payment method callback: checkout form submission.
*/
function beznal_submit_form_submit($payment_method, $pane_form, $pane_values, $order, $charge) {
$order->data['beznal'] = $pane_values;
beznal_transaction($payment_method, $order, $charge);
}
function
beznal_transaction($payment_method, $order, $charge) {
$transaction = commerce_payment_transaction_new('beznal', $order->order_id);
$transaction->instance_id = $payment_method['instance_id'];
$transaction->amount = $charge['amount'];
$transaction->currency_code = $charge['currency_code'];
$transaction->status = COMMERCE_PAYMENT_STATUS_PENDING;
$transaction->message = t('Waiting for payment.'); /* Вот сюда бы вставить */
commerce_payment_transaction_save($transaction);
}
?>

Комментарии
А commerce bank transfer не понравился?
http://xandeadx.ru/blog/drupal/607
http://xandeadx.ru/blog/drupal/591
xandeadx рулит
Жаль что погиб данный юзернэйм, не с кем и посраться 
Кстати, поставил твой модуль...Работает... Кстати, а что мешает из него сделать модуль Invoice - только поменять шаблон. Правильно я понимаю?
Это из моего раннего. Там наверное нужно слегка подчистить говнокод, но в целом должно работать. У меня будет стимул им заниматься, если:
1) кто то подкинет пару монет
2) мне самому он понадобиться
Invoice? как это должно выглядеть в общих чертах?
Invoice это счет на оплату по русски - основание для безналичного перевода денег из банка ЮРИДИЧЕСКИМ лицом. Как в случае с банковской формой для физика, толь ко форма другая. И работать, на мой взгляд, должно следующим образом - человек накладывает в корзину товара, идет ее оформлять, выбирает способ оплаты (счет или рецепт), получает по эл. почте заполненный докУмент. Оплачивает его. Продавец каждый день получает выписку из банка, где все поступившие за сутки платежи. Манагер берет её (выписку) и разносит по заказам (т.е. ставит статус Оплачено). Дальше отправка. Само собой, в рецепте д.б. указан номер заказа...
Форма счета вроде как стандартна, но этот стандарт не жесткий...
з.ы. пара монет, это сколько?
з.з.ы. само собой, товар на период срока действия счета (рецепта) резервируется. По истечении срока, счет считается недействительным, резерв снимается...
А выписку чем получает, врукопашную? Если под конкретный банк и он даёт апи, то можно по крону это всё делать, тогда веселее и явно не пара монет
В основном врукопашную, т.к. если и есть интернет-банк, то для каждого банка, скорее всего, извращаться нужно будет отдельно... Кроме того, это не накладно, бухгалтерия это все-равно каждый день делает в 1С... (ну 20, ну 30 проводок... ну попьют чаю не 200 раз, а только 150...;)
Это интересно, я буду делать подобное для Приватбанка (в Украине №1). Если интересно, можете поучаствовать дензнаками и ускорить этот светлый день. Пока же воздержусь, есть более первоочередное, тем более, что, вам не горит сильно
Да, прямо сейчас не горит. Я в России, но система не должна сильно отличаться... Как что получится, дай знать, может, обсудим...