将CCAvenue与php集成

4
我是一名对支付网关完全不了解的新手。我想使用PHP将CCAvenue集成到我的网站中。我已经下载了他们的集成包,输入了我的商户ID和工作密钥,将帐户设置为活动状态,并尝试在本地主机上提供的索引文件上进行虚拟交易。
但是,当我在表单上点击提交时,它会将我带到CCAvenue交易错误页面,没有任何错误代码和错误描述。
请告诉我我犯了什么错误以及我还需要做什么。
如果有人能指向一个CCAvenue集成手册之外的教程,那就太好了。
代码: Checkout.php
<html>
<head>
<title> Checkout</title>
</head>
<body>

 <?php include('adler32.php')?>
 <?php include('Aes.php')?>
 <?php 

 error_reporting(0);
 $merchant_id=$_POST['Merchant_Id'];  // Merchant id(also User_Id) 
 $amount=$_POST['Amount'];            // your script should substitute the amount here                        in the quotes provided here
 $order_id=$_POST['Order_Id'];        //your script should substitute the order   description here in the quotes provided here
 $url=$_POST['Redirect_Url'];         //your redirect URL where your customer will be redirected after authorisation from CCAvenue
 $billing_cust_name=$_POST['billing_cust_name'];
 $billing_cust_address=$_POST['billing_cust_address'];
 $billing_cust_country=$_POST['billing_cust_country'];
 $billing_cust_state=$_POST['billing_cust_state'];
 $billing_city=$_POST['billing_city'];
 $billing_zip=$_POST['billing_zip'];
 $billing_cust_tel=$_POST['billing_cust_tel'];
 $billing_cust_email=$_POST['billing_cust_email'];
 $delivery_cust_name=$_POST['delivery_cust_name'];
 $delivery_cust_address=$_POST['delivery_cust_address'];
 $delivery_cust_country=$_POST['delivery_cust_country'];
 $delivery_cust_state=$_POST['delivery_cust_state'];
 $delivery_city=$_POST['delivery_city'];
 $delivery_zip=$_POST['delivery_zip'];
 $delivery_cust_tel=$_POST['delivery_cust_tel'];
 $delivery_cust_notes=$_POST['delivery_cust_notes'];


$working_key=/*MY working Key*/;    //Put in the 32 bit alphanumeric key in the quotes provided here.


 $checksum=getchecksum($merchant_id,$amount,$order_id,$url,$working_key); // Method to       generate checksum

  $merchant_data=    'Merchant_Id='.$merchant_id.'&Amount='.$amount.'&Order_Id='.$order_id.'&Redirect_Url='.$url  '&billing_cust_name='.$billing_cust_name.'&billing_cust_address='.$billing_cust_address.'&billing_cust_country='.$billing_cust_country.'&billing_cust_state='.$billing_cust_state.'&billing_cust_city='.$billing_city.'&billing_zip_code='.$billing_zip.'&billing_cust_tel='.$billing_cust_tel.'&billing_cust_email='.$billing_cust_email.'&delivery_cust_name='.$delivery_cust_name.'&delivery_cust_address='.$delivery_cust_address.'&delivery_cust_country='.$delivery_cust_country.'&delivery_cust_state='.$delivery_cust_state.'&delivery_cust_city='.$delivery_city.'&delivery_zip_code='.$delivery_zip.'&delivery_cust_tel='.$delivery_cust_tel.'&billing_cust_notes='.$delivery_cust_notes.'&Checksum='.$checksum  ;

$encrypted_data=encrypt($merchant_data,$working_key); // Method for encrypting the data.

?>

<form method="post" name="redirect"   action="http://www.ccavenue.com/shopzone/cc_details.jsp"> 
<?php
   echo "<input type=hidden name=encRequest value=$encrypted_data>";
   echo "<input type=hidden name=Merchant_Id value=$merchant_id>";

    ?>
 </form>
 <script type='text/javascript'>document.redirect.submit();</script>
 </body>
 </html>

我的Redirecturl.php文件

<?php include('Aes.php')?>
<?php include('adler32.php')?>
<?php


error_reporting(0);
$workingKey=/*My Working Key*/;     //Working Key should be provided here.
$encResponse=$_POST["encResponse"];         //This is the response sent by the CCAvenue Server


$rcvdString=decrypt($encResponse,$workingKey);      //AES Decryption used as per the specified working key.
$AuthDesc="";
$MerchantId="";
$OrderId="";
$Amount=0;
$Checksum=0;
$veriChecksum=false;

$decryptValues=explode('&', $rcvdString);
$dataSize=sizeof($decryptValues);
//******************************    Messages based on Checksum & AuthDesc   **********************************//
echo "<center>";


for($i = 0; $i < $dataSize; $i++) 
{
    $information=explode('=',$decryptValues[$i]);
    if($i==0)   $MerchantId=$information[1];    
    if($i==1)   $OrderId=$information[1];
    if($i==2)   $Amount=$information[1];    
    if($i==3)   $AuthDesc=$information[1];
    if($i==4)   $Checksum=$information[1];  
}

$rcvdString=$MerchantId.'|'.$OrderId.'|'.$Amount.'|'.$AuthDesc.'|'.$workingKey;
$veriChecksum=verifyChecksum(genchecksum($rcvdString), $Checksum);

if($veriChecksum==TRUE && $AuthDesc==="Y")
{
    echo "<br>Thank you for shopping with us. Your credit card has been charged and your transaction is successful. We will be shipping your order to you soon.";

    //Here you need to put in the routines for a successful 
    //transaction such as sending an email to customer,
    //setting database status, informing logistics etc etc
}
else if($veriChecksum==TRUE && $AuthDesc==="B")
{
    echo "<br>Thank you for shopping with us.We will keep you posted regarding the status of your order through e-mail";

    //Here you need to put in the routines/e-mail for a  "Batch Processing" order
    //This is only if payment for this transaction has been made by an American Express Card
    //since American Express authorisation status is available only after 5-6 hours by mail from ccavenue and at the "View Pending Orders"
}
else if($veriChecksum==TRUE && $AuthDesc==="N")
{
    echo "<br>Thank you for shopping with us.However,the transaction has been declined.";

    //Here you need to put in the routines for a failed
    //transaction such as sending an email to customer
    //setting database status etc etc
}
else
{
    echo "<br>Security Error. Illegal access detected";

    //Here you need to simply ignore this and dont need
    //to perform any operation in this condition
}


echo "<br><br>";


//************************************  DISPLAYING DATA RCVD ******************************************//

echo "<table cellspacing=4 cellpadding=4>";
for($i = 0; $i < $dataSize; $i++) 
{
    $information=explode('=',$decryptValues[$i]);
        echo '<tr><td>'.$information[0].'</td><td>'.$information[1].'</td></tr>';
}

echo "</table><br>";
echo "</center>";
?>

我还包括了随集成套件提供的Adler.php和Aes.php文件。


请展示一些代码,其中包含您已经集成的内容。 - user2936213
我已添加了代码。 - Amit
你解决了这个问题吗?现在我也遇到了同样的问题。 - Yadhu Babu
2个回答

5

Ccavenue支付网关集成非常简单易懂,请复制以下PHP代码或PHP脚本以进行Ccavenue支付网关集成,并根据您的账户设置变量值。

<?php 

function getchecksum($MerchantId,$Amount,$OrderId ,$URL,$WorkingKey) 
{ 
    $str ="$MerchantId|$OrderId|$Amount|$URL|$WorkingKey"; 
    $adler = 1;
    $adler = adler32($adler,$str); 
    return $adler; 
}   

function verifychecksum($MerchantId,$OrderId,$Amount,$AuthDesc,$CheckSum,$WorkingKey) 
{ 
    $str = "$MerchantId|$OrderId|$Amount|$AuthDesc|$WorkingKey"; 
    $adler = 1; 
    $adler = adler32($adler,$str);   
    if($adler == $CheckSum) 
        return "true" ; 
    else 
        return "false" ; 
}   


function adler32($adler , $str) 
{ 
    $BASE = 65521 ;   
    $s1 = $adler & 0xffff ; 
    $s2 = ($adler >> 16) & 0xffff; 
    for($i = 0 ; $i < strlen($str) ; $i++) 
    { 
        $s1 = ($s1 + Ord($str[$i])) % $BASE ; 
        $s2 = ($s2 + $s1) % $BASE ; 
    } 
    return leftshift($s2 , 16) + $s1; 
}  



function leftshift($str , $num) 
{   
    $str = DecBin($str);   
    for( $i = 0 ; $i < (64 - strlen($str)) ; $i++) 
        $str = "0".$str ;   
    for($i = 0 ; $i < $num ; $i++) 
        $str = $str."0"; $str = substr($str , 1 ) ;  
    return cdec($str) ; 
}   


function cdec($num) 
{   
    for ($n = 0 ; $n < strlen($num) ; $n++) 
    { 
        $temp = $num[$n] ; 
        $dec = $dec + $temp*pow(2 , strlen($num) - $n - 1); 
    }   
    return $dec; 
} 


$Merchant_Id = "User ID" ;//This id(also User Id) available at "Generate Working Key" of "Settings & Options" 
$Amount = 'Total Amount';//your script should substitute the amount in the quotes provided here 
$Order_Id = "Order ID";//your script should substitute the order description in the quotes provided here 
$Redirect_Url = "Your Return URL" ;//your redirect URL where your customer will be redirected after authorisation from CCAvenue   
$WorkingKey = "Your Working Key" ;//put in the 32 bit alphanumeric key in the quotes provided here.Please note that get this key ,login to your CCAvenue merchant account and visit the "Generate Working Key" section at the "Settings & Options" page. 
$Checksum = getCheckSum($Merchant_Id,$Amount,$Order_Id ,$Redirect_Url,$WorkingKey);   
$billing_cust_name=$customer_name; 
$billing_cust_address=$customer_address; 
$billing_cust_state=$customer_statename; 
$billing_cust_country=$customer_country;
$billing_cust_tel=$customer_contact_no;
$billing_cust_email=$customer_email; 
$delivery_cust_name=$customer_name; 
$delivery_cust_address=$customer_address; 
$delivery_cust_state = $customer_statename; 
$delivery_cust_country = $customer_country; 
$delivery_cust_tel=$customer_contact_no; 
$delivery_cust_notes=$customer_message;  
$billing_city = $customer_city; 
$billing_zip = $customer_zipcode; 
$delivery_city = $customer_city; 
$delivery_zip = $customer_zipcode; 
?> 



<form name="paymentform" method="post" action="https://www.ccavenue.com/shopzone/cc_details.jsp">
    <input type="hidden" name="Merchant_Id" value="<?php echo $Merchant_Id; ?>"> 
    <input type="hidden" name="Amount" value="<?php echo $Amount; ?>"> 
    <input type="hidden" name="Order_Id" value="<?php echo $Order_Id; ?>">
    <input type="hidden" name="Redirect_Url" value="<?php echo $Redirect_Url; ?>"> 
    <input type="hidden" name="Checksum" value="<?php echo $Checksum; ?>"> 
    <input type="hidden" name="billing_cust_name" value="<?php echo $billing_cust_name; ?>"> 
    <input type="hidden" name="billing_cust_address" value="<?php echo $billing_cust_address; ?>"> 
    <input type="hidden" name="billing_cust_country" value="<?php echo $billing_cust_country; ?>"> 
    <input type="hidden" name="billing_cust_state" value="<?php echo $billing_cust_state; ?>"> 
    <input type="hidden" name="billing_zip" value="<?php echo $billing_zip; ?>"> 
    <input type="hidden" name="billing_cust_tel" value="<?php echo $billing_cust_tel; ?>"> 
    <input type="hidden" name="billing_cust_email" value="<?php echo $billing_cust_email; ?>"> 
    <input type="hidden" name="delivery_cust_name" value="<?php echo $delivery_cust_name; ?>">
    <input type="hidden" name="delivery_cust_address" value="<?php echo $delivery_cust_address; ?>">
    <input type="hidden" name="delivery_cust_country" value="<?php echo $delivery_cust_country; ?>">
    <input type="hidden" name="delivery_cust_state" value="<?php echo $delivery_cust_state; ?>"> 
    <input type="hidden" name="delivery_cust_tel" value="<?php echo $delivery_cust_tel; ?>">
    <input type="hidden" name="delivery_cust_notes" value="<?php echo $delivery_cust_notes; ?>"> 
    <input type="hidden" name="Merchant_Param" value="<?php echo $Merchant_Param; ?>"> 
    <input type="hidden" name="billing_cust_city" value="<?php echo $billing_city; ?>">
    <input type="hidden" name="billing_zip_code" value="<?php echo $billing_zip; ?>">
    <input type="hidden" name="delivery_cust_city" value="<?php echo $delivery_city; ?>"> 
    <input type="hidden" name="delivery_zip_code" value="<?php echo $delivery_zip; ?>"> 
    <INPUT TYPE="submit" value="submit">
</form>

我可以在本地测试吗?如果可以,我需要进行任何设置吗? - Amit
2
您的ccavenue注册账户是以印度卢比(INR)还是美元(USD)计价的呢?ccavenue不允许从其他域名测试美元货币,它只能在ccavenue指定的实际网站上运行。只有印度货币可以在本地主机上进行测试,其他货币都被排除在本地主机之外。 - appWOZ
user2936213,下次我会处理好的。 - appWOZ
@appWOZ 是的,这是印度货币。请检查我的代码并让我知道我做错了什么。 - Amit
你解决了这个问题吗?现在我也遇到了同样的问题。 - Yadhu Babu

1

整合支付网关的步骤:

  1. 首先在https://dashboard.ccavenue.com/web/registration.do?command=Preview上创建商户账户。

  2. 成功注册后,CCavenue团队将验证您提供的电话号码和电子邮件地址。

  3. 账户激活后,将验证您的网站,并向您提供商户ID和工作密钥,这些将在整合支付网关时需要。

  4. 登录https://dashboard.ccavenue.com/jsp/merchant/merchantLogin.jsp上的账户。

  5. 进入仪表板,点击设置选项卡,然后选择API KEYS。

  6. 复制所有三个密钥:商户ID、访问代码和工作密钥。

    现在按照以下代码步骤来整合Ccavenue:

    创建一个包含表单的文件,例如index.php并粘贴下面的代码:

    按照以下链接进行逐步执行:

https://www.lelocode.com/posts/integrate-ccavenue-payment-gateway-in-php-with-simple-step---lelocode


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接