Commerce модуль безналичной оплаты

Главные вкладки

Аватар пользователя whiesam whiesam 10 декабря 2012 в 15:53

Скопировал модуль 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'35),
    
'access callback' => 'beznal_payment_access',
    
'access arguments' => array(35),
    
'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);
}

?>

Комментарии

Аватар пользователя dimapv dimapv 8 января 2013 в 14:45

"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
Опубликовано volocuga@drupal.org

Кстати, поставил твой модуль...Работает... Кстати, а что мешает из него сделать модуль Invoice - только поменять шаблон. Правильно я понимаю?

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 8 января 2013 в 15:03

"dimapv" wrote:
Кстати, поставил твой модуль

Это из моего раннего. Там наверное нужно слегка подчистить говнокод, но в целом должно работать. У меня будет стимул им заниматься, если:

1) кто то подкинет пару монет
2) мне самому он понадобиться

Invoice? как это должно выглядеть в общих чертах?

Аватар пользователя dimapv dimapv 8 января 2013 в 17:13

"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
Invoice? как это должно выглядеть в общих чертах?

Invoice это счет на оплату по русски - основание для безналичного перевода денег из банка ЮРИДИЧЕСКИМ лицом. Как в случае с банковской формой для физика, толь ко форма другая. И работать, на мой взгляд, должно следующим образом - человек накладывает в корзину товара, идет ее оформлять, выбирает способ оплаты (счет или рецепт), получает по эл. почте заполненный докУмент. Оплачивает его. Продавец каждый день получает выписку из банка, где все поступившие за сутки платежи. Манагер берет её (выписку) и разносит по заказам (т.е. ставит статус Оплачено). Дальше отправка. Само собой, в рецепте д.б. указан номер заказа...

Форма счета вроде как стандартна, но этот стандарт не жесткий...

з.ы. пара монет, это сколько?
з.з.ы. само собой, товар на период срока действия счета (рецепта) резервируется. По истечении срока, счет считается недействительным, резерв снимается...

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 8 января 2013 в 17:21

"dimapv" wrote:
Продавец каждый день получает выписку из банка, где все поступившие за сутки платежи

А выписку чем получает, врукопашную? Если под конкретный банк и он даёт апи, то можно по крону это всё делать, тогда веселее и явно не пара монет Smile

Аватар пользователя dimapv dimapv 8 января 2013 в 17:32

"<a href="mailto:volocuga@drupal.org">volocuga@drupal.org</a>" wrote:
А выписку чем получает, врукопашную? Если под конкретный банк и он даёт апи, то можно по крону это всё делать, тогда веселее и явно не пара монет :)

В основном врукопашную, т.к. если и есть интернет-банк, то для каждого банка, скорее всего, извращаться нужно будет отдельно... Кроме того, это не накладно, бухгалтерия это все-равно каждый день делает в 1С... (ну 20, ну 30 проводок... ну попьют чаю не 200 раз, а только 150...;)

Аватар пользователя volocuga@drupal.org volocuga@drupal.org 8 января 2013 в 17:48

Это интересно, я буду делать подобное для Приватбанка (в Украине №1). Если интересно, можете поучаствовать дензнаками и ускорить этот светлый день. Пока же воздержусь, есть более первоочередное, тем более, что, вам не горит сильно

Аватар пользователя dimapv dimapv 8 января 2013 в 17:55

Да, прямо сейчас не горит. Я в России, но система не должна сильно отличаться... Как что получится, дай знать, может, обсудим...