2017-05-22 57 views
0

我在我的Android应用程序中集成了Paytm SDK。我必须将POST ORDER ID和callbackurl与其他paytm凭证一起使用。所有的值都传递正确。但OOPS错误正在显示。Paytm Sdk版本2 - 在Android应用程序中进行Paytm集成在doInBackground中抛出OOPS错误

代码 公共类Paytmgateway延伸活动{

System.out.println(paramMap); 

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室监听输出是

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 = BigfixGadgetW AP,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] 

我只是用第二码测试交易。但我必须使用第一个发布的代码,因为我必须从android应用程序发布ORDERID和CALLBACKURL到服务器。任何帮助将是可观的。

回答

0
**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.....**