Paytm verifychecksum ошибка

Я получаю ошибку проверки контрольной суммы в приложении PayTM для Android. Я создал контрольную сумму в php и отправляю с сервера на приложение Android. Только что приложение получило контрольную сумму, параметры снова отправятся на сервер для проверки контрольной суммы.

код приложения

public void onStartTransaction (View view){

String orderId = pref.getoId();
String uid = pref.getuid();
String email = pref.getemail();
String mobile = pref.getMobileNumber();
String checksum = pref.getchecksum();
PaytmPGService Service = PaytmPGService.getProductionService();
Map<String, String> paramMap = new HashMap<String, String>();
paramMap.put("MID", "Goa3038161");
paramMap.put("ORDER_ID", orderId);
paramMap.put("CUST_ID", uid);
paramMap.put("INDUSTRY_TYPE_ID", "Retail109");
paramMap.put("CHANNEL_ID", "WAP");
paramMap.put("TXN_AMOUNT", "99");
paramMap.put("WEBSITE", "GWEB");
paramMap.put("CALLBACK_URL", "https://goalert.in/verifyChecksum.php ");
paramMap.put("EMAIL", email);
paramMap.put("MOBILE_NO", mobile);
paramMap.put("CHECKSUMHASH", checksum);
PaytmOrder Order = new PaytmOrder(paramMap);

Service.initialize(Order, null);

код сервера

generateChecksum.php

эта функция генерирует контрольную сумму и возвращает в приложение значение контрольной суммы

<?php
header("Pragma: no-cache");
header("Cache-Control: no-cache");
header("Expires: 0");

require_once("./lib/config_paytm.php");
require_once("./lib/encdec_paytm.php");

require_once 'include/DB_Functions.php';
$db = new DB_Functions();

if (isset($_POST['email']) && isset($_POST['mobile']) && isset($_POST['uid']) && isset($_POST['orderId'])){

$email = $_POST['email'];
$mobile = $_POST['mobile'];
$uid = $_POST['uid'];
$orderId = $_POST['orderId'];

}else {
// required post params is missing
$response["error"] = TRUE;
$response["error_msg"] = "Unknown error";
echo json_encode($response);
}

$checkSum = "";
// below code snippet is mandatory, so that no one can use your checksumgeneration url for other purpose .
$findme   = 'REFUND';
$findmepipe = '|';
$paramList = array();
$paramList["MID"] = 'Goa8161';
$paramList["ORDER_ID"] = $orderId;
$paramList["CUST_ID"] = $uid;
$paramList["INDUSTRY_TYPE_ID"] = 'Retail109';
$paramList["CHANNEL_ID"] = 'WAP';
$paramList["TXN_AMOUNT"] = '99';
$paramList["WEBSITE"] = 'GoB';
foreach($_POST as $key=>$value)
{
$pos = strpos($value, $findme);
$pospipe = strpos($value, $findmepipe);
if ($pos === false || $pospipe === false)
{
$paramList[$key] = $value;
}
}

//Here checksum string will return by getChecksumFromArray() function.
$checkSum= getChecksumFromArray($paramList,"gPFC");
//print_r($_POST);
$response["user"]= array("CHECKSUMHASH" => $checkSum,"orderId" => $_POST["orderId"], "payt_STATUS" => "1");
echo json_encode($response);

verifyChecksum.php

эта функция проверяет контрольную сумму с сервера PayTM

Примечание: игнорируйте значения параметров ключа в середине, они заданы неверно

<?php
header("Pragma: no-cache");
header("Cache-Control: no-cache");
header("Expires: 0");
// following files need to be included
require_once("./lib/config_paytm.php");
require_once("./lib/encdec_paytm.php");
$paytmChecksum = "";
$paramList = array();
$isValidChecksum = FALSE;
$paramList = $_POST;
$return_array = $_POST;
$paytmChecksum = isset($_POST["CHECKSUMHASH"]) ? $_POST["CHECKSUMHASH"] : ""; //Sent by Paytm pg
//Verify all parameters received from Paytm pg to your application. Like MID received from paytm pg is same as your application’s MID, TXN_AMOUNT and ORDER_ID are same as what was sent by you to Paytm PG for initiating transaction etc.
$isValidChecksum = verifychecksum_e($paramList, "gPFZSi", $paytmChecksum); //will return TRUE or FALSE string.
if ($isValidChecksum===TRUE){
$return_array["IS_CHECKSUM_VALID"] = "Y";
else
$return_array["IS_CHECKSUM_VALID"] = "N";
}
$return_array["IS_CHECKSUM_VALID"] = $isValidChecksum ? "Y" : "N";
$return_array["TXNTYPE"] = "";
$return_array["REFUNDAMT"] = "";
unset($return_array["CHECKSUMHASH"]);
$encoded_json = htmlentities(json_encode($return_array));
?>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-I">
<title>Paytm</title>
<script type="text/javascript">
function response(){
return document.getElementById('response').value;
}
</script>
</head>
<body>
Redirect back to the app<br>

<form name="frm" method="post">
<input type="hidden" id="response" name="responseField" value='<?php echo $encoded_json?>'>
</form>
</body>
</html>

когда транзакция обрабатывается, она выдает ошибку из платежного сеанса, закрытого из-за неактивности. Когда я проверил на paytm порядок, в котором говорится об ошибке контрольной суммы

Пожалуйста, помогите решить проблему

0

Решение

Там может быть несколько вещей, которые могли пойти не так.

Позвольте мне кратко изложить сначала пошаговый процесс, поэтому, если вы найдете что-то, что отличается от того, что вы сделали, мы можем быстро определить ошибку.

1) Приложение обычно инициирует оплату и при этом отправляет все данные, с помощью которых необходимо сгенерировать checkSum.

2) Только сервер должен генерировать контрольную сумму (исключительно по соображениям безопасности)

3) Способ генерации контрольной суммы для оплаты и возврата отличается. По крайней мере, в Java и Python. (Это действительно глупо от Paytm, и это немного беспорядок, но это история для другого дня)

4) Приложение должно вызывать Paytm API (с SDK или без SDK), и как только ответ получен, необходимо попросить сервер проверить отправку контрольной суммы в ответе.

Предостережения: —

1) Параметры, отправляемые в Paytm, должны совпадать с параметрами, используемыми при генерации checkSum. Не менее, не более и, разумеется, пробел, введите, разбейте все значения и не пройдут проверку CheckSum.

2) Если вы обрабатываете возврат, не отправлено REFID в генерации checkSum, но отправьте его при вызове Paytm API.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]