2014-04-02 13 views
7

Ich benutze Zahlungs-Gateway in meiner Android-App.Ich verwende Webview, um Zahlung Seite laden.Ich habe eine Weiterleitungs-URL zum Zahlungs-Gateway zur Verfügung gestellt, in die das Webview nach der Bestätigung der Zahlung umgeleitet wird. Die Bestätigung der Bank (Erfolg/Misserfolg) wird an diese URL zurückgesandt. Ich kann meine Webansicht zu dieser URL umleiten, um dem Kunden zu zeigen, dass die Transaktion erfolgreich ist. Ich muss die POST-Daten abrufen, die an die Weiterleitungs-URL gesendet werden. Ich muss die Bestellung in meiner App platzieren, wenn die Transaktion erfolgreich ist. Was ich gerade mache ist, dass ich die Weiterleitungs-URL überprüfe, ob es für eine erfolgreiche Transaktion ist. Ich würde gerne wissen, ob es eine andere Methode gibt, mit der ich den Status meiner Transaktion überprüfen kann? Hier ist mein Code,POST-Daten von Android Webview erhalten

mWebview = (WebView)findViewById(R.id.webView1); 

       mWebview.getSettings().setJavaScriptEnabled(true); // enable javascript 
       mWebview.getSettings().setAppCacheEnabled(false); 
       mWebview.getSettings().setLoadWithOverviewMode(true); 
       mWebview.getSettings().setUseWideViewPort(true); 
       mWebview.getSettings().setBuiltInZoomControls(true); 


       mWebview.setWebViewClient(new WebViewClient() { 
        public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
         Toast.makeText(activity, description, Toast.LENGTH_SHORT).show(); 
        } 

        @Override 
        public void onPageStarted(WebView view, String url, Bitmap favicon) 
        { 
         pd.show(); 
        } 


        @Override 
        public void onPageFinished(WebView view, String url) { 
         pd.dismiss(); 


         String webUrl = mWebview.getUrl(); 


         Log.i("RETURN URL", "RETURN URL IS "+webUrl); 


          if(url.equals("http://www.mydomain.in/trxn_complete")) //This is my method.But I think its ugly one 
         { 
           AlertDialog alertDialog = new AlertDialog.Builder(OnlinePaymentActivity.this).create();    

           alertDialog.setMessage("Transaction successful.Press OK to continue"); 
           alertDialog.setButton("OK", new DialogInterface.OnClickListener() { 
             public void onClick(DialogInterface dialog, int which) { 
              // TODO Add your code for the button here. 


               //Transaction success, So place order 
               new Orderitems(OnlinePaymentActivity.this).execute(); 




             } 
            }); 
           alertDialog.show(); 
         } 




} 

}); 


     mWebview .loadUrl("http://263.134.260.173/gateway/epi/fts?ttype="+type+"&tempTxnId="+tempTxnId+"&token="+token+"&txnStage="+txnStage); 




     } 
+0

Haben Sie gelöst Ihr Problem? –

Antwort

0

Versuchen mit diesem:

private static final String paymentReturnUrl="http:/yourUrl"; 

private class FormDataInterface { 

     @JavascriptInterface 
     public void processFormData(String url,String formData) { 
      Log.d(DEBUG_TAG,"Url:"+url+" form data "+formData); 
      if(url.equals(paymentReturnUrl)){ 
       HashMap<String,String> map=new HashMap<>(); 
       String[] values = formData.split("&"); 
       for(String pair :values){ 
        String[] nameValue=pair.split("="); 
        if(nameValue.length==2){ 
         Log.d(DEBUG_TAG,"Name:"+nameValue[0]+" value:"+nameValue[1]); 
         map.put(nameValue[0],nameValue[1]); 
        } 
       } 

       return; 
      } 
     } 
    } 

    private class CustomWebViewClient extends WebViewClient{ 
     private final String jsCode ="" + "function parseForm(form){"+ 
      "var values='';"+ 
      "for(var i=0 ; i< form.elements.length; i++){"+ 
      " values+=form.elements[i].name+'='+form.elements[i].value+'&'"+ 
      "}"+ 
      "var url=form.action;"+ 
       "console.log('parse form fired');"+ 
       "window.FORMOUT.processFormData(url,values);"+ 
    " }"+ 
     "for(var i=0 ; i< document.forms.length ; i++){"+ 
     " parseForm(document.forms[i]);"+ 
       "};"; 



     private static final String DEBUG_TAG = "CustomWebClient"; 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      if(url.equals(paymentReturnUrl)){ 
       Log.d(DEBUG_TAG,"return url cancelling"); 
       view.stopLoading(); 
       return; 
      } 
      super.onPageStarted(view, url, favicon); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      Log.d(DEBUG_TAG, "Url: "+url); 
      if(url.equals(paymentReturnUrl)){ 
       return; 
      } 
      view.loadUrl("javascript:(function() { " + jsCode + "})()"); 

      super.onPageFinished(view, url); 
     } 

    } 

Und init die Webansicht mit:

webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setDomStorageEnabled(true); 
webView.addJavascriptInterface(new FormDataInterface(), "FORMOUT"); 
webView.setWebViewClient(new CustomWebViewClient());