5
votes

I am using ccavenue payment gateway on my wordpress site.
Plugin url is https://wordpress.org/plugins/ccavenue-payment-gateway-woocommerce/
But i am having one issue that my base currency is inr and ccavenue accepts payment in inr only, so when user switch the currency to usd then ccavenue is taking $40 as inr40.
I want to convert the currency before getting it to ccavenue page.
The code snippet for the same is.

 public function generate_ccavenue_form($order_id){

        global $woocommerce;
        $order = new WC_Order($order_id);
        $redirect_url = ($this -> redirect_page_id=="" || $this -> redirect_page_id==0)?get_site_url() . "/":get_permalink($this -> redirect_page_id);
      //For wooCoomerce 2.0

        $redirect_url = add_query_arg( 'wc-api', get_class( $this ), $redirect_url );
        $order_id = $order_id.'_'.date("ymds");
        $checksum = $this -> getCheckSum($this -> merchant_id, $order->order_total, $order_id, $redirect_url, $this -> working_key);


        $ccavenue_args = array(
            'Merchant_Id' => $this -> merchant_id,

            'Amount' => $order->order_total,
            'Order_Id' => $order_id,
            'Redirect_Url' => $redirect_url,
            'Checksum' => $checksum,
            'currency_code' => get_woocommerce_currency(),

            'billing_cust_name' => $order -> billing_first_name .' '. $order -> billing_last_name,
            'billing_cust_address' => $order -> billing_address_1,
            'billing_cust_country' => $order -> billing_country,
            'billing_cust_state' => $order -> billing_state,
            'billing_cust_city' => $order -> billing_city,
            'billing_zip' => $order -> shipping_postcode,
            'billing_cust_tel' => $order -> billing_phone,
            'billing_cust_email' => $order -> billing_email,
            'delivery_cust_name' => $order -> shipping_first_name .' '. $order -> shipping_last_name,
            'delivery_cust_address' => $order -> shipping_address_1,
            'delivery_cust_country' => $order -> shipping_country,
            'delivery_cust_state' => $order -> shipping_state,
            'delivery_cust_tel' => $order -> shipping_phone,
            'delivery_cust_notes' => '',
            'Merchant_Param' => '',
            'billing_zip_code' => $order -> billing_postcode,
            'delivery_cust_city' => $order -> shipping_city,
            'delivery_zip_code' => $order -> shipping_postcode
            );

        $ccavenue_args_array = array();
        foreach($ccavenue_args as $key => $value){
            $ccavenue_args_array[] = "<input type='hidden' name='$key' value='$value'/>";
        }

I think i have to add a filter hook for this in function.php. But i am not able to made and add a filter for this.

1

1 Answers

0
votes

You can use Google API for currency convert.

You have to put some custom functions to convert your currency real time in woocommcerce, As CCavenue has no support for INR so you have to first convert to USD and then send this variable amount to CCavenue form.

Add below code into functions.php with appropriate action you want.

<?php
$from_currency    = 'USD';
$to_currency    = 'INR';
$amount            = 1;
$results = converCurrency($from_currency,$to_currency,$amount);
$regularExpression     = '#\<span class=bld\>(.+?)\<\/span\>#s';
preg_match($regularExpression, $results, $finalData);
echo $finalData[0];

function converCurrency($from,$to,$amount){
    $url = "http://www.google.com/finance/converter?a=$amount&from=$from&to=$to"; 
    $request = curl_init(); 
    $timeOut = 0; 
    curl_setopt ($request, CURLOPT_URL, $url); 
    curl_setopt ($request, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt ($request, CURLOPT_USERAGENT,"Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1)"); 
    curl_setopt ($request, CURLOPT_CONNECTTIMEOUT, $timeOut); 
    $response = curl_exec($request); 
    curl_close($request); 
    return $response;
} 
?>