порождающий Hash
за Post
запрос
$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
сервер.
В чем может быть проблема?? любая помощь будет оценена.
Кажется, вы пытаетесь переопределить PayU REST API.
Я не могу найти ссылку на образец вашего $hashSequence
в текущей версии REST API.
Рассматривали ли вы использование официальный SDK?
Этот код предназначен для генерации хеш-кода Android на вашей стороне сервера.
<?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);
?>
Я знаю, что уже поздно отвечать на этот вопрос, но этот ответ может помочь будущим поисковикам. Просто скачайте последнюю версию PayUMoney Kit с официального сайта и введите ключ СОЛИ в success.php
страница тоже.
Вот мой последний успех.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();
}
?>
Расчет хэша в запросе и ответе в PayUMoney C # API
hashSequence =
ключ | txnid | сумма | Информация о продукте | Firstname | почта | udf1 | udf2 | udf3 | udf4 | udf5 |||||| соль;
$ hash = hash («sha512», $ hashSequence);
Примечание. Пустое поле udf должно использоваться при вычислении hashSequence, даже если продавец не передает ни одного поля udf во входном запросе.
Для хэша ответа последовательность переменных находится в обратном порядке по сравнению с хэшем запроса платежа. Кроме того, переменная состояния добавлена между солью и udf1
hashSequence = salt | status |||||| udf5 | udf4 | udf3 | udf2 | udf1 | электронная почта | имя | productinfo | amount | txnid | key;
$ hash = hash («sha512», $ hashSequence);
Вот пример кода для расчета хеша ответа: —
bool isCheckSum = false;
var strhash = Request.Form["hash"];
var strstatus = Request.Form["status"];
var strfirstname = Request.Form["firstname"];
var stramount = Request.Form["amount"];
var strtxnid = Request.Form["txnid"];
var strkey = Request.Form["key"];
var strproductinfo = Request.Form["productinfo"];
var stremail = Request.Form["email"];
var stradditionalCharges = Request.Form["additionalCharges"];
string strudf1 = Request.Form["udf1"];
string strudf2 = Request.Form["udf2"];
string strudf3 = Request.Form["udf3"];
string strudf4 = Request.Form["udf4"];
string strudf5 = Request.Form["udf5"];
System.Security.Cryptography.SHA512Managed sha512 = new System.Security.Cryptography.SHA512Managed();
byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(strSALT + "|" + strstatus + "||||||" + strudf5 + "|" + strudf4 + "|" + strudf3 + "|" + strudf2 + "|" + strudf1 + "|" + stremail + "|" + strfirstname + "|" + strproductinfo + "|" + stramount + "|" + strtxnid + "|" + strkey);
byte[] hashBytes = sha512.ComputeHash(inputBytes);
byte[] hashValue;
string hex = "";
hashValue = sha512.ComputeHash(inputBytes);
foreach (byte x in hashValue)
{
hex += String.Format("{0:x2}", x);
}
if(strhash == hex)
{
isCheckSum = true;
}