首页 文章

Paytm Sdk版本2 - Android应用程序中的Paytm集成在doInBackground中抛出OOPS错误

提问于
浏览
0

我正在我的Android应用程序中集成Paytm SDK . 我必须POST ORDER ID和callbackurl以及其他paytm凭据 . 所有值都正确传递 . 但是显示OOPS错误 .

代码公共类Paytmgateway扩展Activity {

Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.merchantapp);
    context = this;
    //  initOrderId();
    getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

}

// This is to refresh the order id: Only for the Sample App’s purpose.
@Override
protected void onStart() {
    super.onStart();
    // initOrderId();
    getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}


public void onStartTransaction(View view) throws InterruptedException, ExecutionException {

    String myorder = "ORDER7999883";
    String mycallback= "https://securegw.paytm.in/theia/paytmCallback?ORDER_ID="+myorder;

    PostAsync postAsync= new PostAsync();
    postAsync.execute(myorder,mycallback);
}


class PostAsync extends AsyncTask<String, String, JSONObject> {

    JSONParser jsonParser = new JSONParser();



    private ProgressDialog pDialog;

    private static final String LOGIN_URL = "http://192.168.1.4/paytmtest/generateChecksum.php";

    private static final String TAG_SUCCESS = "success";
    private static final String TAG_MESSAGE = "message";

    protected JSONObject doInBackground(String... args) {

        try {

            HashMap<String, String> para = new HashMap<>();
            para.put("myorder", args[0]);
            para.put("mycallback", args[1]);

            Log.d("request", "starting");

            JSONObject json = jsonParser.makeHttpRequest(
                    LOGIN_URL, "POST", para);

            if (json != null) {
                Log.d("JSON result", json.toString());

                return json;
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

    protected void onPostExecute(JSONObject json) {

        PaytmPGService Service = PaytmPGService.getProductionService();


        if (json != null) {
            Toast.makeText(Paytmgateway.this,"Server Response"+json.toString(), Toast.LENGTH_LONG).show();
            String finalresult=json.toString();
            try {
                JSONObject mJsonObject=new JSONObject(finalresult);

                Map paramMap = new HashMap();
                System.out.println("Hi");
                paramMap.put("MID", mJsonObject.getString("MID"));
                System.out.println(mJsonObject.getString("MID"));
                // paramMap.put(“ORDER_ID”, order_id);
                paramMap.put("ORDER_ID", mJsonObject.getString("ORDER_ID"));
                System.out.println(mJsonObject.getString("ORDER_ID"));
                //  paramMap.put(“CUST_ID”, cust_id);
                paramMap.put("CUST_ID",mJsonObject.getString("CUST_ID"));
                System.out.println(mJsonObject.getString("CUST_ID"));
                //  paramMap.put(“INDUSTRY_TYPE_ID”,industry_type);
                paramMap.put("INDUSTRY_TYPE_ID",mJsonObject.getString("INDUSTRY_TYPE_ID"));
                System.out.println(mJsonObject.getString("INDUSTRY_TYPE_ID"));
                // paramMap.put(“CHANNEL_ID”, “WAP”);
                paramMap.put("CHANNEL_ID", mJsonObject.getString("CHANNEL_ID"));
                System.out.println(mJsonObject.getString("CHANNEL_ID"));
                // paramMap.put(“TXN_AMOUNT”,txn_amount);
                paramMap.put("TXN_AMOUNT", "1");
                System.out.println(mJsonObject.getString("TXN_AMOUNT"));
                // paramMap.put(“WEBSITE”, “APP_STAGING”);
                paramMap.put("WEBSITE" , mJsonObject.getString("WEBSITE"));
                System.out.println(mJsonObject.getString("WEBSITE"));
                // paramMap.put(“CALLBACK_URL”,callback);
                paramMap.put("CALLBACK_URL" , mJsonObject.getString("CALLBACK_URL"));
                System.out.println(mJsonObject.getString("CALLBACK_URL"));
                // paramMap.put(“CHECKSUMHASH”,checksum);
                paramMap.put("CHECKSUMHASH",mJsonObject.getString("CHECKSUMHASH"));
                System.out.println("MYCHECK"+mJsonObject.getString("CHECKSUMHASH"));

                PaytmOrder Order = new PaytmOrder(paramMap);


                System.out.println("sumithra"+paramMap);

                Service.initialize(Order, null);

                Service.startPaymentTransaction(Paytmgateway.this, true, true,
                        new PaytmPaymentTransactionCallback() {

                            @Override
                            public void someUIErrorOccurred(String inErrorMessage) {

                                Toast.makeText(getApplicationContext(),"UI Error" , Toast.LENGTH_LONG).show();

                            }

                            @Override
                            public void onTransactionResponse(Bundle inResponse) {

                                // Log.d(“LOG”, “Payment Transaction : ” + inResponse);
                                Log.d("LOG", "Payment Transaction : "+inResponse);
                                Toast.makeText(getApplicationContext(),"Payment Transaction Response" + inResponse.toString(), Toast.LENGTH_LONG).show();
                            }

                            @Override
                            public void networkNotAvailable() {
                                Toast.makeText(getApplicationContext(),"No Network Available" , Toast.LENGTH_LONG).show();

                            }

                            @Override
                            public void clientAuthenticationFailed(String inErrorMessage) {


                                Toast.makeText(getApplicationContext(),"Client Authentication Failed" , Toast.LENGTH_LONG).show();

                            }

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

                                Toast.makeText(getApplicationContext(),"Error Loading Webpage" , Toast.LENGTH_LONG).show();

                            }

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

                } catch (JSONException e) {
   // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

我的Android Studio Monitor输出

System.out.println(paramMap);

05-22 15:43:33.801 15328-15328 / com.example.merchantapp I / System.out: {MID = Bigfix12826731009600,CALLBACK_URL = https://securegw.paytm.in/theia/paytmCallback?ORDER_ID=ORDER7999883,TXN_AMOUNT = 1.00,ORDER_ID = ORDER7999883,WEBSITE = BigfixGadgetWAP,INDUSTRY_TYPE_ID = Retail109,CHECKSUMHASH = HxSimAQAYRsDhJ7XX6JXT cilxFNdSc4Pb3jr5AE5dddSavv6UD3DJffBHtcHVwQbBMYYHc850 / OdZretSWIeo3m / uC0 / FUA9wpO1Hgs / jY =,CHANNEL_ID = WAP,CUST_ID = 25654}

这意味着两个参数值成功发布,我也可以获取它们 . 但是显示以下错误

enter image description here

但是,如果我使用下面的代码,它是成功的

public class Paytm extends Activity {

String callback,website;
Context context;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.merchantapp);
    context = this;
  //  initOrderId();
    getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

// This is to refresh the order id: Only for the Sample App’s purpose.
@Override
protected void onStart() {
    super.onStart();
   // initOrderId();
    getWindow().setSoftInputMode(
            WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}



public void onStartTransaction(View view) throws InterruptedException, ExecutionException {
    PaytmPGService Service = PaytmPGService.getProductionService();

    Map paramMap = new HashMap();
    String mid="",order_id="",cust_id="",industry_type="",txn_amount="",checksum="";
    Log.d("before request", "some");
    JSONObject mJsonObject = null;
   // String url="http://paytmtest.azurewebsites.net/APP/generateChecksum.php";
    String url="http://192.168.1.4/paytmtest/generateChecksum.php";

    MyAsyncTask myAsyncTask=new MyAsyncTask();
    // String json = myAsyncTask.execute(url).get();
    String json = (String) myAsyncTask.execute(url).get();
    try {
        mJsonObject=new JSONObject(json);
    } catch (JSONException e) {
        e.printStackTrace();
    }

    try {
        //mid = mJsonObject.getString("MID");
        mid="Bigfix12826731009600";
        // order_id=mJsonObject.getString(“ORDER_ID”);
        order_id=mJsonObject.getString("ORDER_ID");
        // cust_id = mJsonObject.getString(“CUST_ID”);
        cust_id=mJsonObject.getString("CUST_ID");
        //callback  = mJsonObject.getString("CALLBACK_URL");
        callback= "https://securegw.paytm.in/theia/paytmCallback?ORDER_ID="+order_id;
        //website  = mJsonObject.getString("WEBSITE");
        website="BigfixGadgetWAP";
        //industry_type = mJsonObject.getString("INDUSTRY_TYPE_ID");
        industry_type="Retail109";
        txn_amount = mJsonObject .getString("TXN_AMOUNT");
        // checksum = mJsonObject.getString(“CHECKSUMHASH”);
        checksum = mJsonObject.getString("CHECKSUMHASH");

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

    // Log.d(“after request”, “some”);
    Log.d("after request", "some");

    // paramMap.put(“MID”, mid);
    paramMap.put("MID", mid);
    // paramMap.put(“ORDER_ID”, order_id);
    paramMap.put("ORDER_ID", order_id);
    //  paramMap.put(“CUST_ID”, cust_id);
    paramMap.put("CUST_ID",cust_id);
    //  paramMap.put(“INDUSTRY_TYPE_ID”,industry_type);
    paramMap.put("INDUSTRY_TYPE_ID",industry_type);
    // paramMap.put(“CHANNEL_ID”, “WAP”);
    paramMap.put("CHANNEL_ID", "WAP");
    // paramMap.put(“TXN_AMOUNT”,txn_amount);
    paramMap.put("TXN_AMOUNT", txn_amount);
    // paramMap.put(“WEBSITE”, “APP_STAGING”);
    paramMap.put("WEBSITE" , website);
    // paramMap.put(“CALLBACK_URL”,callback);
    paramMap.put("CALLBACK_URL" , callback);
    // paramMap.put(“CHECKSUMHASH”,checksum);
    paramMap.put("CHECKSUMHASH",checksum);

    System.out.println("sumithra"+paramMap);
    PaytmOrder Order = new PaytmOrder(paramMap);


    Service.initialize(Order, null);

    Service.startPaymentTransaction(this, true, true,
            new PaytmPaymentTransactionCallback() {

                @Override
                public void someUIErrorOccurred(String inErrorMessage) {
                }

                @Override
                public void onTransactionResponse(Bundle inResponse) {
                    // Log.d(“LOG”, “Payment Transaction : ” + inResponse);
                    Log.d("LOG", "Payment Transaction : "+inResponse);
                    Toast.makeText(getApplicationContext(),"Payment Transaction Response" + inResponse.toString(), Toast.LENGTH_LONG).show();
                }

                @Override
                public void networkNotAvailable() {
                }

                @Override
                public void clientAuthenticationFailed(String inErrorMessage) {
                }

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

            });
}

class MyAsyncTask extends AsyncTask {

    @Override
    protected String doInBackground(Object[] params) {

        URL url = null;
        try {
            url = new URL((String) params[0]);
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
        HttpURLConnection httpConn = null;
        try {
            httpConn = (HttpURLConnection) url.openConnection();

            int responseCode = httpConn.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {

                InputStream is = httpConn.getInputStream();

                BufferedReader reader = new BufferedReader(
                        new InputStreamReader(is));
                StringBuilder sb = new StringBuilder();

                String line = null;
                try {
                    while ((line = reader.readLine()) != null) {
                        sb.append(line);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    try {
                        is.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                return sb.toString();

            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }

    protected void onPostExecute(String result) {
        super.onPostExecute(result);

        try {

        } catch (Exception e) {

        }

        Log.d("Response", result);
    }


}

}

[enter image description here][2]

我只是使用第二个代码来测试trasaction . 但我必须使用第一个发布的代码,因为我必须将ORDERID和CALLBACKURL从Android应用程序发布到服务器 . 任何帮助都会很明显 .

1 回答

  • 1
    **Here is the solution for all :**
    
    Be sure to send equal number of parameters to your server (For checksum generator) And then to paytm server for payment.
    
    **For example:**
    If you are sending 6 params for checksum generator, then send these 6 same parameters including Checksum to Paytm...
    It will resolve your problem.
    
    **CODE EXAMPLE :**
    
    **Generate checksum.php**
    
    $paramList = array();
    $paramList["MID"] = 'Provided by Paytm'; //Provided by Paytm
    $paramList["ORDER_ID"] = 'hIquwhzvzTG7gvT'; //unique OrderId for every request
    $paramList["CUST_ID"] = 'CUST0001453'; // unique customer identifier
    $paramList["INDUSTRY_TYPE_ID"] = 'Retail'; //Provided by Paytm
    $paramList["CHANNEL_ID"] = 'WAP'; //Provided by Paytm
    $paramList["TXN_AMOUNT"] = '10.00'; // transaction amount
    $paramList["WEBSITE"] = 'APP_STAGING';//Provided by Paytm
    $paramList["CALLBACK_URL"] = 'https://pguat.paytm.com/paytmchecksum/paytmCallback.jsp';
    
    **Android Activity.java**
    
    paramMap.put("MID" , "#########");
    paramMap.put( "ORDER_ID" , "hIquwhzvzTG7gvT");
    paramMap.put( "CUST_ID" , "CUST0001453");
    paramMap.put( "CHANNEL_ID" , "WAP");
    paramMap.put( "TXN_AMOUNT" , "10.00");
    paramMap.put( "WEBSITE" , "APP_STAGING");
    paramMap.put( "CALLBACK_URL" , "https://pguat.paytm.com/paytmchecksum/paytmCallback.jsp");
    paramMap.put( "CHECKSUMHASH" , "dR5OtEkuNkgamHTZDCHmF+CF3j9RdG1520mlHEb85oSZP1CaxVUsRY2sYric90HLm/vElaPZKoQ7b5/SyFpi3oBWXf2BQNy+r6iiBwg4AH4=");
    paramMap.put("INDUSTRY_TYPE_ID" , "Retail");
    
    **NOTE : Please keep in mind to send paytm server exact parameters plus one checksum.....**
    

相关问题