2014-04-02 17 views
7

Używam bramki płatności w mojej aplikacji na Androida. Korzystam z podglądu strony internetowej, aby załadować stronę płatności. Przekazałem przekierowanie do bramki płatności, do której przekierowanie zostanie przekierowane po potwierdzeniu płatności. Potwierdzenie z banku (sukces/niepowodzenie) zostanie przesłane z powrotem do tego adresu URL. Mogę przekierować moją stronę internetową do tego adresu URL, aby pokazać klientowi, że transakcja się powiodła. Muszę pobrać dane POST, które są wysyłane do przekierowania. Muszę złożyć zamówienie w mojej aplikacji, jeśli transakcja się powiedzie. Obecnie robię to, sprawdzam adres URL przekierowania, czy ma to na celu pomyślną transakcję. Chciałbym wiedzieć, czy istnieje jakakolwiek inna metoda, za pomocą której mogę sprawdzić status mojej transakcji? Oto mój kod,Otrzymuj dane POST z Android Webview

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

Czy rozwiązać swój problem? –

Odpowiedz

0

Spróbuj z tym:

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

    } 

I init webview z:

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