Ответ платежного шлюза Android Paytm

Я внедрил платежную систему Paytm, и все работает нормально с веб-намерением поверх моего намерения, деньги вычитаются из учетной записи клиента и добавляются в мою учетную запись, но после завершения транзакции она застревает на белой странице с надписью `` Перенаправить '' в приложение, которое, как я считаю, мне следует написать код для перенаправления обратно в свое приложение, но я не знаю, как это сделать, потому что я не смог найти событие onTransactionSucess () или что-то подобное, я также пробовал onTransactionResponse, но все еще нет отклик. Я проверил всю документацию по Paytm и попытался связаться со службой поддержки Paytm, но не смог найти способ.


person NTWON Technologies    schedule 30.09.2019    source источник


Ответы (3)


Надеюсь, вы добавили CALLBACK_URL, который требуется для проверки контрольной суммы. Как указано в документации Paytm

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

Надеюсь, это должно творить чудеса.

person PattySpringDev    schedule 03.01.2020

Надеюсь, вы добавили эту переменную в свой код -

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

Я надеюсь, что это поможет вам.

person Vivek Thummar    schedule 28.11.2019
comment
Это все работает, но проблема в том, что мое приложение застревает на странице verifyCheckSum.php в бэкэнде. Он не перенаправляется автоматически обратно в мое приложение. Могу ли я добавить что-нибудь на свою страницу php, чтобы закрыть ее или перенаправить обратно в свое приложение? - person NTWON Technologies; 01.12.2019
comment
Если все работает полностью, и вы просто хотите перенаправить на заднюю страницу, вы можете использовать метод onTransactionResponse () (см. Мой код), если вы можете найти способ вернуться с этой страницы, чем может быть, вы можете передать намерение для обратной активности и я надеюсь, что это поможет - person Vivek Thummar; 02.12.2019
comment
Транзакция рабочая. Деньги зачислены на мой счет, но мое приложение застряло на внутренней php-странице verifychecksum.php. - person NTWON Technologies; 07.12.2019

Измените 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();
                            }
                        }
person aryanknp    schedule 28.02.2020