2014-10-28 2 views
1

Генерация Hash для Post запросаИнтеграция PayUMoney - как рассчитать хеш для сравнения с ответом?

$hashSequence = "key|txnid|amount|productinfo|firstname|email|udf1|" 
        ."udf2|udf3|udf4|udf5|udf6|udf7|udf8|udf9|udf10"; 
    $hashVarsSeq = explode('|', $hashSequence); 
    $hashString = ''; 
    foreach ($hashVarsSeq as $hashVar) { 
     $hashString .= isset($payObject['params'][$hashVar]) ? $payObject['params'][$hashVar] : ''; 
     $hashString .= '|'; 
    } 
    $hashString .= $salt; 
    //generate hash 
    $hash = strtolower(hash('sha512', $hashString)); 

После получения успешного ответа, генерирующего Hash

$retHashSeq = $salt.'|'.$status.'||||||||'.$udf3.'|'.$udf2.'|'.$udf1.'|'.$email.'|||'.$amount.'|'.$txnid.'|'.$key; 
$hash = hash("sha512", $retHashSeq); 

Но сгенерированный Hash не совпадает с возвращенным Hash сервером PayU. что может быть проблемой ??? любая помощь будет оценена по достоинству.

+0

Вы имеете в виду PayU, но я не могу найти ничего о том, что это должно быть. – magnetik

+0

Это PayMoney. –

ответ

1

Кажется, что вы пытаетесь переопределить PayU REST API. Я не могу найти ссылку на шаблон вашего $hashSequence в текущей версии REST API.

Считаете ли вы использование official SDK?

+0

так это сработало для вас? в чем проблема? как вы его разрешили? –

0

Этот код предназначен для андроид hashcodegeneration на вашей стороне сервера

<?php 

$key=$_POST["key"]; 

$salt="xxxxx"; #your payumoney salt 
$txnId=$_POST["txnid"]; 
$amount=$_POST["amount"]; 
$productName=$_POST["productInfo"]; 
$firstName=$_POST["firstName"]; 
$email=$_POST["email"]; 
$udf1=$_POST["udf1"]; 
$udf2=$_POST["udf2"]; 
$udf3=$_POST["udf3"]; 
$udf4=$_POST["udf4"]; 
$udf5=$_POST["udf5"]; 

$payhash_str = $key . '|' . checkNull($txnId) . '|' .checkNull($amount) . '|' .checkNull($productName) . '|' . checkNull($firstName) . '|' . checkNull($email) . '|' . checkNull($udf1) . '|' . checkNull($udf2) . '|' . checkNull($udf3) . '|' . checkNull($udf4) . '|' . checkNull($udf5) . '|' . $salt; 


function checkNull($value) { 
      if ($value == null) { 
        return ''; 
      } else { 
        return $value; 
      } 
     } 


$hash = strtolower(hash('sha512', $payhash_str)); 
$arr['result'] = $hash; 
$arr['status']=0; 
$arr['errorCode']=null; 
$arr['responseCode']=null; 
$arr['hashtest']=$payhash_str; 
$output=$arr; 


echo json_encode($output); 

?> 
0

Я знаю, что его поздно, чтобы ответить на этот вопрос, но этот ответ может помочь будущим искателям. Просто скачайте последнюю версию PayUMoney Kit с официального сайта и поместите ключ SALT на страницу success.php.

Вот моя последняя Success.php

<?php 
include'config/db.php'; // Your database connection file if needed 
$status=$_POST["status"]; 
$firstname=$_POST["firstname"]; 
$amount=$_POST["amount"]; 
$txnid=$_POST["txnid"]; 
$posted_hash=$_POST["hash"]; 
$key=$_POST["key"]; 
$productinfo=$_POST["productinfo"]; 
$email=$_POST["email"]; 

$salt=""; // PLACE YOUR SALT KEY HERE 

// Salt should be same Post Request 
if(isset($_POST["additionalCharges"])){ 
    $additionalCharges=$_POST["additionalCharges"]; 
    $retHashSeq = $additionalCharges.'|'.$salt.'|'.$status.'|||||||||||'.$email.'|'.$firstname.'|'.$productinfo.'|'.$amount.'|'.$txnid.'|'.$key; 
}else{ 
    $retHashSeq = $salt.'|'.$status.'|||||||||||'.$email.'|'.$firstname.'|'.$productinfo.'|'.$amount.'|'.$txnid.'|'.$key; 
} 

$hash = strtolower(hash('sha512', $retHashSeq)); // NOTE: THIS PART IN YOUR KIT MAY HAVE AN ERROR. THERE YOU MIGHT GET $hash_string instead of $retHashSeq. JUST REPLACE $hash_string with $retHashSeq. 

if($hash != $posted_hash){ 
    // Transaction completed but is Invalid as Hash Values are not Matching. Notify Admin. 
    //header('Location: fail.php'); 
    //exit(); 
}else{ 
    // Transaction is Valid. Process orders here. 
    //header('Location: thanks.php'); 
    //exit(); 
} 
?>