0

我在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);

服务器代码

生成校验和.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);

验证校验和.php

此功能将使用 paytm 服务器验证校验和

注意:请忽略 key mid 参数的值,它们是错误的

<?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 上检查订单时,它显示校验和错误

请帮助解决问题

4

3 回答 3

2

可能有一些事情可能出错了。

让我先简要说明一步一步的过程,因此如果您发现与您所做的不同的事情,我们可以快速查明错误。

1) 应用程序通常会触发付款并发送所有需要生成 checkSum 的数据。

2)只有服务器必须生成校验和(纯粹出于安全原因)

3) 支付和退款的校验和生成方式不同。至少在 Java 和 Python 中。(这对于 Paytm 来说真的很愚蠢,而且有点乱,但这是另一天的故事)

4)应用程序必须调用Paytm API(有或没有SDK),一旦收到响应必须要求服务器验证校验和在响应中发送。

注意事项:-

1) 发送到 Paytm 的参数必须与生成 checkSum 时使用的参数相同。不多不少,不用说,空格、输入、破折号所有计数都会使您的校验和验证失败。

2)如果您正在处理退款,请不要REFID在生成 checkSum 时发送,而是在调用 Paytm API 时发送。

于 2018-01-17T08:57:47.940 回答
0

我没有看到您在任何地方生成校验和,应该为您计划发送的所有参数完成校验和。

看来您:String checksum = pref.getchecksum();的实施在getchecksum哪里?将其远离主要对象,然后重试。

于 2019-02-25T01:36:35.313 回答
0

在春天使用 paytm 校验和很简单。

运行时会导致一些问题。

3个简单的步骤来解决所有问题。

1:-将此依赖项添加到您的 pom.xml

<dependency><groupId>com.paytm.pg</groupId><artifactId>pg-checksum</artifactId><version>1.0</version></dependency>

2:下载“pg-checksum-1.0.jar”文件并重命名“pg-checksum-1.0”

3:将 pg-checksum-1.0.jar 粘贴到“C:\Users\xyz.m2\repository\com\paytm\pg\pg-checksum\1.0”

现在清理并构建您的项目,您将获得校验和字符串。

很高兴能帮助你 ;-)

于 2020-05-23T11:58:44.910 回答