我已经实现了Paytm支付系统,并且在我的意图之外,还可以通过Web意图正常运行,从客户的acc扣除费用并将其添加到我的帐户中,但是交易完成后,它就卡在了白页上说“重定向到应用程序”,我认为我应该编写代码以重定向回我的应用程序,但是我不知道该怎么做,因为我找不到onTransactionSucess()事件或类似的东西,我也尝试过onTransactionResponse但仍然没有回应。我检查了所有paytm文档,并尝试与paytm支持人员联系,但找不到方法。
答案 0 :(得分:2)
希望您已添加“ CALLBACK_URL”,以验证校验和。 如paytm文档中所述
CALLBACK_URL-安全参数以避免篡改。使用产生 Paytm提供的服务器端校验和实用程序。商家必须确保 总是在服务器上生成的。生成实用程序 checksumhash可用here。
希望这能起到神奇作用。
答案 1 :(得分:0)
希望您已将此变量添加到代码中-
PaytmPGService service;
如果您正在使用它,则可以获得所有与付款相关的方法,如下所示:
service.startPaymentTransaction(this, true,
true, new PaytmPaymentTransactionCallback() {
@Override
public void onTransactionResponse(Bundle inResponse) {
System.out.println("===== onTransactionResponse " + inResponse.toString());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (Objects.equals(inResponse.getString("STATUS"), "TXN_SUCCESS")) {
// Payment Success
} else if (!inResponse.getBoolean("STATUS")) {
// Payment Failed
}
}
}
@Override
public void networkNotAvailable() {
// network error
}
@Override
public void clientAuthenticationFailed(String inErrorMessage) {
// AuthenticationFailed
}
@Override
public void someUIErrorOccurred(String inErrorMessage) {
// UI Error
}
@Override
public void onErrorLoadingWebPage(int iniErrorCode, String inErrorMessage, String inFailingUrl) {
// Web page loading error
}
@Override
public void onBackPressedCancelTransaction() {
// on cancelling transaction
}
@Override
public void onTransactionCancel(String inErrorMessage, Bundle inResponse) {
// maybe same as onBackPressedCancelTransaction()
}
});
我希望这会对您有所帮助。
答案 2 :(得分:0)
将默认的回调URL更改为“ http://yourdomain(如果在localhost上检查,则为IP地址)/pgResponse.php” ;。 将以下代码添加到pgResponse.php
<?php
session_start();
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;
$checkSum = getChecksumFromArray($paramList,PAYTM_MERCHANT_KEY);//generate new checksum
$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, PAYTM_MERCHANT_KEY, $paytmChecksum); //will return TRUE or FALSE string.
$return_array["IS_CHECKSUM_VALID"] = $isValidChecksum ? "Y" : "N";
unset($return_array["CHECKSUMHASH"]);
$mid = $_POST['MID'];
$orderid = $_POST['ORDERID'];
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => 'https://securegw-stage.paytm.in/order/status?JsonData={"MID":"'.$mid.'","ORDERID":"'.$orderid.'","CHECKSUMHASH":"'.$checkSum.'"}',
CURLOPT_USERAGENT => 'Make Request'
));
$resp = curl_exec($curl);
$status= json_decode($resp)->STATUS;
//do something in your database
$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>
Redirecting 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>
在android studio中:
public void onTransactionResponse(Bundle inResponse) {
Log.d("Create Response", inResponse.toString());
String response = inResponse.getString("RESPMSG");
if (response.equals("Txn Successful.")) {
Toast.makeText(Bag.this,"Payment done",Toast.LENGTH_LONG).show();
}
else{
Toast.makeText(Bag.this,response,Toast.LENGTH_LONG).show();
}
}