Я внедрил платежную систему Paytm, и все работает нормально с веб-намерением поверх моего намерения, деньги вычитаются из учетной записи клиента и добавляются в мою учетную запись, но после завершения транзакции она застревает на белой странице с надписью `` Перенаправить '' в приложение, которое, как я считаю, мне следует написать код для перенаправления обратно в свое приложение, но я не знаю, как это сделать, потому что я не смог найти событие onTransactionSucess () или что-то подобное, я также пробовал onTransactionResponse, но все еще нет отклик. Я проверил всю документацию по Paytm и попытался связаться со службой поддержки Paytm, но не смог найти способ.
Ответ платежного шлюза Android Paytm
Ответы (3)
Надеюсь, вы добавили CALLBACK_URL, который требуется для проверки контрольной суммы. Как указано в документации Paytm
CALLBACK_URL - параметр безопасности для предотвращения взлома. Сгенерировано с использованием служебной программы контрольной суммы на стороне сервера, предоставленной Paytm. Продавец должен гарантировать, что это всегда генерируется на сервере. Утилиты для генерации контрольной суммы хеша доступны здесь.
Надеюсь, это должно творить чудеса.
Надеюсь, вы добавили эту переменную в свой код -
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()
}
});
Я надеюсь, что это поможет вам.
Измените callbackurl по умолчанию, чтобы он предполагал, 'http://yourdomain (IP-адрес при проверке на localhost) /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:
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();
}
}