Zen Cart Logo
Forums / Addon Payment Modules / Help with ZIPCASH payment gateway

Help with ZIPCASH payment gateway

Locked

Views: 2,180

Results 1 to 3 of 3
This thread is locked. New replies are disabled.
5 Jan 2009, 9:32 AM
#1
nnitin avatar

nnitin

New Zenner

Join Date:
Oct 2008
Posts:
31
Plugin Contributions:
0

Help with ZIPCASH payment gateway

Hi All,

I want to add a zipcash payment module. It is basically a web interface where customer enters his mobile number and pays via SMS. Is there any tutorial to add new payment method? They need following info via hhtp post:

mercode - Merchant Code provided by Zipcash
amount - Transaction Amount in Rupees. A two digit paisa component can also be added if required.
txcode – Transaction Reference Code generated by merchant (without any spaces)
details – This parameter is used to described the transaction (eg. Movie Tickets, Air Tickets etc.)
RU – Optional parameter – Return url
Use the HTTP-POST method to post the data.

How do I create a module for this type of payment?

Regards,

nnitin

7 Jan 2009, 5:53 AM
#2
nnitin avatar

nnitin

New Zenner

Join Date:
Oct 2008
Posts:
31
Plugin Contributions:
0

Re: Help with ZIPCASH payment gateway

Hi All,

Well I have figured out how to make this module and have developed some code for this payment method. I have cloned ccavenue module available in download section. However after making the payment and the confirmation from the payment gateway, I come back to my shop but, the transaction is not completed and the item remains in the shopping cart.

What mistake am I making?

If I am able to make this successful I would like to offer this as an adon module for zipcash.

Regards,

Nitin

8 Jan 2009, 7:02 AM
#3
nnitin avatar

nnitin

New Zenner

Join Date:
Oct 2008
Posts:
31
Plugin Contributions:
0

Re: Help with ZIPCASH payment gateway

Hi All,

I have cloned ccavenue payment module to suit ZIPCASH payment module.

Sending data from Zencart to zipcash payment gateway works. When the user pays the amount and complestes the transaction it comes back to zencart with return url. However it can not update the order. The payment gateway sends to zencart following information to zencart

txcode – Transaction Reference Code sent by merchant
statuscode – Success code – 101 Failure code – 110
ziptxncode - Zipcash transaction code
amount

I feel when it comes to "checkout_payment.php" the headers will process the info. I tried it but the order remains in the shopping cart.:unsure:

Where am I making a mistake? :no:

Here is the code:

<?php


  class zipcash extends base{
    var $code, $title, $description, $enabled;

// class constructor
    function zipcash() {
      $this->code = 'zipcash';
      $this->title = MODULE_PAYMENT_ZIPCASH_TEXT_TITLE;
      $this->description = MODULE_PAYMENT_ZIPCASH_TEXT_DESCRIPTION;
      $this->sort_order = MODULE_PAYMENT_ZIPCASH_SORT_ORDER;
      $this->enabled = ((MODULE_PAYMENT_ZIPCASH_STATUS == 'True') ? true : false);

      if ((int)MODULE_PAYMENT_ZIPCASH_ORDER_STATUS_ID > 0) {
        $this->order_status = MODULE_PAYMENT_ZIPCASH_ORDER_STATUS_ID;
      }

      if (is_object($order)) $this->update_status();

$this->form_action_url = 'http://www.zipcash.in/PG2Test/PayByZipcash.aspx';
    }

// class methods
    function update_status() {
     global $order, $db;

      if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_ZIPCASH_ZONE > 0) ) {
        $check_flag = false;
        $check_query = $db->Execute("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_ZIPCASH_ZONE . "' and zone_country_id = '" . $order->delivery['country']['id'] . "' order by zone_id");
        while ($check = mysql_fetch_array($check_query)) {
          if ($check['zone_id'] < 1) {
            $check_flag = true;
            break;
          } elseif ($check['zone_id'] == $order->delivery['zone_id']) {
            $check_flag = true;
            break;
          }
        }

        if ($check_flag == false) {
          $this->enabled = false;
        }
      }

// disable the module if the order only contains virtual products
      if ($this->enabled == true) {
        if ($order->content_type == 'virtual') {
          $this->enabled = false;
        }
      }
    }
    function javascript_validation() {
      return false;
    }

    function selection() {
      return array('id' => $this->code,
                   'module' => $this->title);
    }

    function pre_confirmation_check() {
      return false;
    }

    function confirmation() {
  return false;
  
    }

   function process_button() {
    global $order, $customer_id, $MerchantId, $Amount, $OrderId, $Url, $Checksum
		;

  $MerchantId = MODULE_PAYMENT_ZIPCASH_MERCHANT_ID;
  $Amount = $order->info['total'];
  $OrderId = $customer_id . '-' . date('Ymdhis');
  $Url = zen_href_link(FILENAME_CHECKOUT_PROCESS,'','SSL',true,false);  
  $pattern='http://www\.';

    if(!(Eregi($pattern,$Url,$reg)))
        eregi_replace('http://', $pattern, $Url);
	$str = "$MerchantId|$OrderId|$Amount|$Url";  

    //Variables to be passed to ZIPCASH as a POST 
    $process_button_string = zen_draw_hidden_field('mercode', $MerchantId) .
					  zen_draw_hidden_field('txcode',   $OrderId) .
					  zen_draw_hidden_field('amount', $Amount) .
					  zen_draw_hidden_field('details', 'Books') .
			          zen_draw_hidden_field('RU',$Url);                      
	                       
      return $process_button_string;
    }

 function before_process() {
      global $messageStack, $order;
      if (!isset($_POST['txcode']) || $_POST['txcode'] == '') {
        $messageStack->add_session('checkout_payment', MODULE_PAYMENT_ZIPCASH_ERROR, 'error');
        zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL', true, false));
      }
      $_SESSION['txcode'] = $_POST['txcode'];
      $order->info['details'] .= sprintf(MODULE_PAYMENT_ZIPCASH_RECEIPT_NUMBER_TEXT, $_SESSION['txcode']);
      return $_SESSION['txcode'];
    }


    function after_process() {
      return false;
    }
	

    function output_error() {
   global $HTTP_GET_VARS;

   $output_error_string = '<table border="0" cellspacing="0" cellpadding="0" width="100%">' . "\n" .
                             '  <tr>' . "\n" .
                             '    <td class="main"> <font color="#FF0000"><b>' . MODULE_PAYMENT_ZIPCASH_TEXT_ERROR . '</b></font><br> ' . MODULE_PAYMENT_ZIPCASH_TEXT_ERROR_MESSAGE . ' </td>' . "\n" .
                             '  </tr>' . "\n" .
                             '</table>' . "\n";

      return $output_error_string;
    }
	
	

    function check() {
	 global $db;
      if (!isset($this->_check)) {
        $check_query = $db->Execute("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_ZIPCASH_STATUS'");
     	$this->_check = $check_query->RecordCount();
      }
      return $this->_check;
    }
 function install() {
  global $db;
      $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Enable ZIPCASH Module', 'MODULE_PAYMENT_ZIPCASH_STATUS', 'True', 'Do you want to accept ZIPCASH payments?', '6', '1', 'zen_cfg_select_option(array(\'True\', \'False\'), ', now())");
	  
	  
      $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Merchant Id', 'MODULE_PAYMENT_ZIPCASH_MERCHANT_ID', 'mercode', 'The Merchant Code to use for the ZIPCASH service', '6', '2', now())");

$db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('WorkingKey', 'MODULE_PAYMENT_ZIPCASH_WORKING_KEY', '', 'put in the 32 bit alphanumeric key.Please note that get this key ,login to your ZIPCASH merchant account and visit the \"Generate Working Key\" section at the \"Settings & Options\" page.', '6', '2', now())");
      $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('ZIPCASH Payment Zone', 'MODULE_PAYMENT_ZIPCASH_ZONE', '0', 'If a zone is selected, only enable this payment method for that zone.', '6', '2', 'zen_get_zone_class_title', 'zen_cfg_pull_down_zone_classes(', now())");
      $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('ZIPCASH Sort order of  display.', 'MODULE_PAYMENT_ZIPCASH_SORT_ORDER', '0', 'Sort order of ZIPCASH display. Lowest is displayed first.', '6', '0', now())");
      $db->Execute("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, use_function, date_added) values ('ZIPCASH Set Order Status', 'MODULE_PAYMENT_ZIPCASH_ORDER_STATUS_ID', '0', 'Set the status of orders made with this payment module to this value', '6', '0', 'zen_cfg_pull_down_order_statuses(', 'zen_get_order_status_name', now())");

    }

    function remove() {
      $keys = '';
      $keys_array = $this->keys();
      for ($i=0; $i<sizeof($keys_array); $i++) {
        $keys .= "'" . $keys_array[$i] . "',";
      }
      $keys = substr($keys, 0, -1);

      $db->Execute("delete from " . TABLE_CONFIGURATION . " where configuration_key in (" . $keys . ")");
    }

       function keys() {
      return array('MODULE_PAYMENT_ZIPCASH_STATUS', 'MODULE_PAYMENT_ZIPCASH_MERCHANT_ID','MODULE_PAYMENT_ZIPCASH_WORKING_KEY', 'MODULE_PAYMENT_ZIPCASH_ZONE','MODULE_PAYMENT_ZIPCASH_SORT_ORDER', 'MODULE_PAYMENT_ZIPCASH_ORDER_STATUS_ID' );
    }
  }
?>