Android PayTM支付网关响应

时间:2019-09-30 10:56:32

标签: java android payment gateway paytm

我已经实现了Paytm支付系统,并且在我的意图之外,还可以通过Web意图正常运行,从客户的acc扣除费用并将其添加到我的帐户中,但是交易完成后,它就卡在了白页上说“重定向到应用程序”,我认为我应该编写代码以重定向回我的应用程序,但是我不知道该怎么做,因为我找不到onTransactionSucess()事件或类似的东西,我也尝试过onTransactionResponse但仍然没有回应。我检查了所有paytm文档,并尝试与paytm支持人员联系,但找不到方法。

3 个答案:

答案 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();
                            }
                        }