Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Integrate Paytm PGSDK_V2.0 Android

Tags:

android

paytm

I am Integrating Paytm PGSDK_V2.0 in my android app. I have read all documentation on Github. I have understand everything.but the problem is in its earlier SDK where we can simply generate checksum using Paytm Merchant object Like:

PaytmMerchant merchant=new PaytmMerchant("Checksum generation url","Checksum verification url");  

and put this in Service Like this

 Service.initialize(Order,merchant,null);

But in new SDK it change to

 Service.initialize(Order,null);

So please help me how to generate checksum in new SDK

like image 617
Mayank Garg Avatar asked Apr 17 '17 05:04

Mayank Garg


People also ask

How can I add Paytm payment gateway in Android app?

With JS Checkout, businesses can integrate the payments functionality with a custom JS code written by Paytm in 2 steps: Step #1: Integrating a single S2S API to initiate the transaction. Step #2: Embedding the custom-made JS code by Paytm on the checkout HTML of your online store.

What is Paytm integration?

Secure payments with PaytmUse Paytm Payment gateway solution in your App or website to simplify payment for your customers. Your customers can choose to pay from any credit/debit card, UPI, Netbanking, Paytm Wallet and EMI. Create Account Getting Started. Quick Integration ToolNew.

Can we use Paytm wallet as a payment method in Android?

Paytm wallet can be used by all Paytm users to make transactions at any time and from any location.


2 Answers

Paytm has change process to increase the security. now in PGSDK_V2.0 first you have to generate through calling the api Checksum Generation on your server side Like this:

 @Override
        protected String doInBackground(String... params) {
            url ="http://xxx.co.in/generateChecksum.php";
            JSONParser jsonParser = new JSONParser(MainActivity.this);

                param="ORDER_ID=" + orderId+
                        "&MID="+YourMID+
                        "&CUST_ID="+custId+
                        "&CHANNEL_ID=WAP&INDUSTRY_TYPE_ID=Retail110&WEBSITE=xxxwap&TXN_AMOUNT="+billAmt+"&CALLBACK_URL=http://xxx.co.in/verifyChecksum.php";

            JSONObject jsonObject = jsonParser.makeHttpRequest(url,"POST",param);
            Log.e("CheckSum result >>",jsonObject.toString());
            if(jsonObject != null){
                Log.d("CheckSum result >>",jsonObject.toString());
                try {

                    CHECKSUMHASH=jsonObject.has("CHECKSUMHASH")?jsonObject.getString("CHECKSUMHASH"):"";
                    Log.e("CheckSum result >>",CHECKSUMHASH);

                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }

now after getting CHECKSUM string in your onPostExecute initialize paytm Service object and do further process Like This:

  @Override
        protected void onPostExecute(String s) {
            super.onPostExecute(s);
            progressDialog.hide();
            Service = PaytmPGService.getProductionService();

    /*PaytmMerchant constructor takes two parameters
    1) Checksum generation url
    2) Checksum verification url
    Merchant should replace the below values with his values*/




            //below parameter map is required to construct PaytmOrder object, Merchant should replace below map values with his own values

            Map<String, String> paramMap = new HashMap<String, String>();

            //these are mandatory parameters


            paramMap.put("ORDER_ID", orderId);
            //MID provided by paytm

            paramMap.put("MID", yourMID);
            paramMap.put("CUST_ID", custId);
            paramMap.put("CHANNEL_ID", "WAP");
            paramMap.put("INDUSTRY_TYPE_ID", "Retail");
            paramMap.put("WEBSITE", "xxxwap");
            paramMap.put("TXN_AMOUNT",billAmt);
            // 
            paramMap.put("CALLBACK_URL" ,"http://xxx.co.in/verifyChecksum.php");
            paramMap.put("CHECKSUMHASH" ,CHECKSUMHASH);
            PaytmOrder Order = new PaytmOrder(paramMap);



            Service.initialize(Order,null);
            Service.startPaymentTransaction(ReviewBooking.this, true, true, new PaytmPaymentTransactionCallback() {
                @Override
                public void someUIErrorOccurred(String inErrorMessage) {
                    // Some UI Error Occurred in Payment Gateway Activity.
                    // // This may be due to initialization of views in
                    // Payment Gateway Activity or may be due to //
                    // initialization of webview. // Error Message details
                    // the error occurred.
                }

                @Override
                public void onTransactionResponse(Bundle inResponse) {
                    Log.d("LOG", "Payment Transaction : " + inResponse);
                    String response=inResponse.getString("RESPMSG");
                    if (response.equals("Txn Successful."))
                    {
                        new ConfirmMerchent().execute();
                    }else
                    {
                        Toast.makeText(getApplicationContext(),response,Toast.LENGTH_SHORT).show();
                    }
                    Toast.makeText(getApplicationContext(), "Payment Transaction response "+inResponse.toString(), Toast.LENGTH_LONG).show();
                }


                @Override
                public void networkNotAvailable() {
                    // If network is not
                    // available, then this
                    // method gets called.
                }

                @Override
                public void clientAuthenticationFailed(String inErrorMessage) {
                    // This method gets called if client authentication
                    // failed. // Failure may be due to following reasons //
                    // 1. Server error or downtime. // 2. Server unable to
                    // generate checksum or checksum response is not in
                    // proper format. // 3. Server failed to authenticate
                    // that client. That is value of payt_STATUS is 2. //
                    // Error Message describes the reason for failure.
                }

                @Override
                public void onErrorLoadingWebPage(int iniErrorCode,
                                                  String inErrorMessage, String inFailingUrl) {

                }

                // had to be added: NOTE
                @Override
                public void onBackPressedCancelTransaction() {
                    // TODO Auto-generated method stub
                }

                @Override
                public void onTransactionCancel(String inErrorMessage, Bundle inResponse) {
                    Log.d("LOG", "Payment Transaction Failed " + inErrorMessage);
                    Toast.makeText(getBaseContext(), "Payment Transaction Failed ", Toast.LENGTH_LONG).show();
                }
            });
        }

JsonParser Class

public class JSONParser {
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";

    HttpURLConnection urlConnection = null;
    // variable to hold context
    private Context context;
    // constructor
    public JSONParser(Context context){
        this.context=context;
    }


    public JSONObject makeHttpRequest(String url,String method,String params) {

       // boolean isReachable =Config.isURLReachable(context);
        // Making HTTP request
        try {
            String retSrc="";
            char current = '0';

                URL url1 = new URL(url);
                // check for request method
                HttpURLConnection urlConnection = (HttpURLConnection) url1.openConnection();
            if (method == "POST") {
                // request method is POST
               urlConnection.setDoOutput(true);
                urlConnection.setRequestMethod("POST");
                urlConnection.setFixedLengthStreamingMode(params.getBytes().length);
                urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                PrintWriter out = new PrintWriter(urlConnection.getOutputStream());
                out.print(params);
                out.close();
            }
                InputStream in = urlConnection.getInputStream();

                InputStreamReader isw = new InputStreamReader(in);

                byte[] bytes = new byte[10000];
                StringBuilder x = new StringBuilder();
                int numRead = 0;
                while ((numRead = in.read(bytes)) >= 0) {
                    x.append(new String(bytes, 0, numRead));
                }
                retSrc=x.toString();



            jObj = new JSONObject(retSrc);
            } catch (Exception e) {
            e.printStackTrace();
            new Handler(Looper.getMainLooper()).post(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(context, "Connectivity issue. Please try again later.", Toast.LENGTH_LONG).show();
                }
            });
            return null;
        }finally {
                if (urlConnection != null) {
                    urlConnection.disconnect();
                }
            }
        return jObj;
    }
}

and parameter values should be same both time.

like image 75
Ghanshyam Sharma Avatar answered Oct 22 '22 04:10

Ghanshyam Sharma


Generating Checksum is quite easy.

  • Just get the Paytm App Checksum Kit from Github.
  • Extract the downloaded kit and put it in your server. If you are using a local server using xampp then the path would be c:/xampp/htdocs/paytm. I would recommend renaming the folder name to paytm or a small name.
  • Inside the kit there is a folder named lib. Inside this folder you will find a file named config_paytm.php, Open this file and put your Paytm Merchant Key here.
  • Now you can use the file generateChecksum.php to generate checksum.
  • Remember you need to pass every parameter that you will pass with transaction.
  • Below you can see a retrofit api code sample to send POST request to generateChecksum.php.

    //this is the URL of the paytm folder that we added in the server
    //make sure you are using your ip else it will not work 
    String BASE_URL = "http://192.168.101.1/paytm/";
    
    @FormUrlEncoded
    @POST("generateChecksum.php")
    Call<Checksum> getChecksum(
            @Field("MID") String mId,
            @Field("ORDER_ID") String orderId,
            @Field("CUST_ID") String custId,
            @Field("CHANNEL_ID") String channelId,
            @Field("TXN_AMOUNT") String txnAmount,
            @Field("WEBSITE") String website,
            @Field("CALLBACK_URL") String callbackUrl,
            @Field("INDUSTRY_TYPE_ID") String industryTypeId
    );
    

This part is very important you have to send all the parameters. And order_id should be unique everytime.

Source: Paytm Integration in Android Example

like image 4
Belal Khan Avatar answered Oct 22 '22 03:10

Belal Khan