| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 | 
							- <?php
 
- /**
 
-  * @file
 
-  * Written by Henri MEDOT <henri.medot[AT]absyx[DOT]fr>
 
-  * http://www.absyx.fr
 
-  */
 
- require_once dirname(__FILE__) .'/uc_cmcic.inc';
 
- define('UC_CMCIC_URL_CM_TEST', 'https://paiement.creditmutuel.fr/test/paiement.cgi');
 
- /*******************************************************************************
 
-  * Drupal Hooks
 
-  ******************************************************************************/
 
- /**
 
-  * Implementation of hook_menu().
 
-  */
 
- function uc_cmcic_menu() {
 
-   $items['cart/cmcic/response'] = array(
 
-     'title' => 'CM-CIC p@iement response',
 
-     'page callback' => 'uc_cmcic_response',
 
-     'access callback' => 'uc_cmcic_response_access',
 
-     'type' => MENU_CALLBACK,
 
-   );
 
-   $items['cart/cmcic/success'] = array(
 
-     'title' => 'CM-CIC p@iement payment success',
 
-     'page callback' => 'uc_cmcic_success',
 
-     'access arguments' => array('access content'),
 
-     'type' => MENU_CALLBACK,
 
-   );
 
-   $items['cart/cmcic/cancel'] = array(
 
-     'title' => 'CM-CIC p@iement payment cancelled',
 
-     'page callback' => 'uc_cmcic_cancel',
 
-     'access arguments' => array('access content'),
 
-     'type' => MENU_CALLBACK,
 
-   );
 
-   $items['cart/cmcic/return'] = array(
 
-     'title' => 'CM-CIC p@iement payment return',
 
-     'page callback' => 'uc_cmcic_return',
 
-     'access arguments' => array('access content'),
 
-     'type' => MENU_CALLBACK,
 
-   );
 
-   return $items;
 
- }
 
- // Make sure CM-CIC p@iement always has access to send responses.
 
- function uc_cmcic_response_access() {
 
-   return TRUE;
 
- }
 
- /*******************************************************************************
 
-  * Ubercart Hooks
 
-  ******************************************************************************/
 
- /**
 
-  * Implementation of hook_uc_payment_method().
 
-  */
 
- function uc_cmcic_uc_payment_method() {
 
-   $title = variable_get('uc_cmcic_method_title', t('Credit card with CM-CIC p@iement'))
 
-     .'<br />'. theme('image', array('path' => drupal_get_path('module', 'uc_cmcic') .'/images/logo_cm-paiement-pt.jpg'));
 
-   $methods['cmcic'] = array(
 
-     'name' => t('CM-CIC p@iement'),
 
-     'title' => $title,
 
-     'desc' => t('Redirect users to submit payments through CM-CIC p@iement.'),
 
-     'callback' => 'uc_payment_method_cmcic',
 
-     'redirect' => 'uc_cmcic_form',
 
-     'weight' => 3,
 
-     'checkout' => TRUE,
 
-     'no_gateway' => TRUE,
 
-   );
 
-   return $methods;
 
- }
 
- /*******************************************************************************
 
-  * Callback and Helper Functions
 
-  ******************************************************************************/
 
- /**
 
-  * Add CM-CIC p@iement settings to the payment method settings form.
 
-  */
 
- function uc_payment_method_cmcic($op, &$arg1) {
 
-   switch ($op) {
 
-     case 'settings':
 
-       $form['uc_cmcic_url'] = array(
 
-         '#type' => 'textfield',
 
-         '#title' => t('CM-CIC p@iement URL'),
 
-         '#description' => t('The URL to the CM-CIC p@iement payment platform.'),
 
-         '#default_value' => variable_get('uc_cmcic_url', UC_CMCIC_URL_CM_TEST),
 
-       );
 
-       $form['uc_cmcic_tpe'] = array(
 
-         '#type' => 'textfield',
 
-         '#title' => t('POS terminal number'),
 
-         '#description' => t('The 7-character virtual POS terminal number your site was assigned when subscribing to CM-CIC p@iement.'),
 
-         '#default_value' => variable_get('uc_cmcic_tpe', ''),
 
-         '#size' => 10,
 
-         '#maxlength' => 7,
 
-       );
 
-       $form['uc_cmcic_key'] = array(
 
-         '#type' => 'textfield',
 
-         '#title' => t('Merchant security key'),
 
-         '#description' => t('The 40-character key your site was assigned when subscribing to CM-CIC p@iement.'),
 
-         '#default_value' => variable_get('uc_cmcic_key', ''),
 
-         '#maxlength' => 40,
 
-       );
 
-       $form['uc_cmcic_site_code'] = array(
 
-         '#type' => 'textfield',
 
-         '#title' => t('Site code'),
 
-         '#description' => t('The 20-character code your site was assigned when subscribing to CM-CIC p@iement.'),
 
-         '#default_value' => variable_get('uc_cmcic_site_code', ''),
 
-         '#size' => 25,
 
-         '#maxlength' => 20,
 
-       );
 
-       $form['uc_cmcic_response_url'] = array(
 
-         '#type' => 'item',
 
-         '#title' => t('Return interface URL'),
 
-         '#markup' => url('cart/cmcic/response', array('absolute' => TRUE)),
 
-         '#description' => 'You have to provide your bank with this URL for CM-CIC p@iement to function properly.',
 
-       );
 
-       return $form;
 
-   }
 
- }
 
- /**
 
-  * Form to build the submission to CM-CIC p@iement.
 
-  */
 
- function uc_cmcic_form($form, &$form_state, $order) {
 
-   global $language;
 
-   $fields = array(
 
-     'TPE' => variable_get('uc_cmcic_tpe', ''),
 
-     'date' => date('d/m/Y:H:i:s', time()),
 
-     'montant' => round($order->order_total, 2) . variable_get('uc_currency_code', 'USD'),
 
-     'reference' => $order->order_id,
 
-     'texte-libre' => md5(uniqid(rand(), TRUE)),
 
-     'mail' => $order->primary_email,
 
-     'lgue' => in_array(strtoupper($language->language), uc_cmcic_languages()) ? strtoupper($language->language) : 'EN',
 
-     'societe' => variable_get('uc_cmcic_site_code', ''),
 
-     'url_retour' => url('cart/cmcic/cancel', array('absolute' => TRUE)),
 
-     'url_retour_ok' => url('cart/cmcic/success', array('absolute' => TRUE)),
 
-     'url_retour_err' => url('cart/cmcic/return', array('absolute' => TRUE)),
 
-   );
 
-   $fields = uc_cmcic_complete_request(variable_get('uc_cmcic_key', ''), $fields);
 
-   // Add the transaction ID to the order's data array.
 
-   $order->data['cmcic']['texte-libre'] = $fields['texte-libre'];
 
-   // Save the updated data array to the database.
 
-   uc_cmcic_save_order_data($order);
 
-   $form['#action'] = variable_get('uc_cmcic_url', UC_CMCIC_URL_CM_TEST);
 
-   foreach ($fields as $name => $value) {
 
-     $form[$name] = array('#type' => 'hidden', '#value' => $value);
 
-   }
 
-   $form['submit'] = array(
 
-     '#type' => 'submit',
 
-     '#value' => t('Submit order'),
 
-   );
 
-   return $form;
 
- }
 
- /**
 
-  * Save order's updated data array to the database.
 
-  */
 
- function uc_cmcic_save_order_data($order) {
 
-   db_update('uc_orders')
 
-     ->fields(array('data' => serialize($order->data)))
 
-     ->condition('order_id', $order->order_id)
 
-     ->execute();
 
- }
 
- /**
 
-  * Handle an incoming payment.
 
-  */
 
- function uc_cmcic_response() {
 
-   if (empty($_POST)) {
 
-     watchdog('uc_cmcic', 'Response attempted without any POST data.', array(), WATCHDOG_WARNING);
 
-     return;
 
-   }
 
-   unset($mac_ok);
 
-   $order = uc_cmcic_get_order($mac_ok);
 
-   if (!$order) {
 
-     watchdog('uc_cmcic', 'Invalid response.', array(), WATCHDOG_ERROR);
 
-     uc_cmcic_receipt_exit($mac_ok);
 
-   }
 
-   $order_id = $order->order_id;
 
-   if (($_POST['code-retour'] != 'paiement') && ($_POST['code-retour'] != 'payetest')) {
 
-     uc_order_comment_save($order_id, 0, t("The customer's attempted payment from a bank account may have failed. Authorisation result is @result.", array('@result' => $_POST['motifrefus'])), 'admin');
 
-     uc_cmcic_receipt_exit(TRUE);
 
-   }
 
-   $amount = substr($_POST['montant'], 0, -3);
 
-   $currency = substr($_POST['montant'], -3);
 
-   $comment = t('CM-CIC p@iement authorisation #: @number', array('@number' => $_POST['numauto']));
 
-   uc_payment_enter($order_id, 'cmcic', $amount, $order->uid, $_POST, $comment);
 
-   uc_cart_complete_sale($order);
 
-   uc_order_comment_save($order_id, 0, t('Payment of @amount @currency submitted through CM-CIC p@iement.', array('@amount' => uc_currency_format($amount, FALSE), '@currency' => $currency)), 'order', 'payment_received');
 
-   uc_order_comment_save($order_id, 0, t('CM-CIC p@iement response reported a payment of @amount @currency.', array('@amount' => uc_currency_format($amount, FALSE), '@currency' => $currency)));
 
-   uc_cmcic_receipt_exit(TRUE);
 
- }
 
- // Return the receipt to the bank then exit cleanly.
 
- function uc_cmcic_receipt_exit($mac_ok) {
 
-   print uc_cmcic_receipt($mac_ok);
 
-   module_invoke_all('exit');
 
-   exit;
 
- }
 
- /**
 
-  * Handle a successful payment.
 
-  */
 
- function uc_cmcic_success() {
 
-   if (empty($_SESSION['cart_order'])) {
 
-     drupal_goto('cart');
 
-   }
 
-   // This lets us know it's a legitimate access of the complete page.
 
-   $_SESSION['uc_checkout'][$_SESSION['cart_order']]['do_complete'] = TRUE;
 
-   drupal_goto('cart/checkout/complete');
 
- }
 
- /**
 
-  * Handle a cancelled payment.
 
-  */
 
- function uc_cmcic_cancel() {
 
-   unset($_SESSION['cart_order']);
 
-   drupal_set_message(t('Your payment was cancelled. Please feel free to continue shopping or contact us for assistance.'));
 
-   drupal_goto('cart');
 
- }
 
- /**
 
-  * Handle an unsuccessful payment.
 
-  */
 
- function uc_cmcic_return() {
 
-   unset($_SESSION['cart_order']);
 
-   drupal_set_message(t('Sorry, your payment could not be processed. Please try again or contact us for assistance.'));
 
-   drupal_goto('cart');
 
- }
 
- function uc_cmcic_get_order(&$mac_ok) {
 
-   $mac_ok = FALSE;
 
-   if (!uc_cmcic_validate_response(variable_get('uc_cmcic_key', ''), $_POST)) {
 
-     return FALSE;
 
-   }
 
-   $mac_ok = TRUE;
 
-   if (isset($_POST['reference']) && ($order = uc_order_load(intval($_POST['reference'])))) {
 
-     if (isset($order->data['cmcic']['texte-libre']) && ($_POST['texte-libre'] == $order->data['cmcic']['texte-libre'])) {
 
-       return $order;
 
-     }
 
-   }
 
-   return FALSE;
 
- }
 
 
  |