2014-04-02 16 views
7

Tôi đang sử dụng cổng thanh toán trong ứng dụng Android của mình. Tôi đang sử dụng webview để tải trang thanh toán. Tôi đã cung cấp URL chuyển hướng đến cổng thanh toán, trong đó webview sẽ được chuyển hướng sau khi xác nhận thanh toán. Xác nhận từ Ngân hàng (thành công/thất bại) sẽ được đăng lại URL này. Tôi có thể chuyển hướng webview của tôi đến URL này để cho khách hàng thấy rằng giao dịch thành công. Tôi cần tìm nạp dữ liệu POST được gửi đến URL chuyển hướng. Tôi cần đặt hàng trong ứng dụng của mình nếu giao dịch thành công. Những gì tôi hiện đang làm là, tôi đang kiểm tra url chuyển hướng, cho dù đó là giao dịch thành công. Tôi muốn biết liệu có phương pháp nào khác mà tôi có thể sử dụng để kiểm tra trạng thái giao dịch của mình không? Đây là mã của tôi,Nhận dữ liệu POST từ 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

Bạn đã giải quyết vấn đề của bạn? –

Trả lời

0

Hãy thử với điều này:

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

    } 

Và init webview với:

webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setDomStorageEnabled(true); 
webView.addJavascriptInterface(new FormDataInterface(), "FORMOUT"); 
webView.setWebViewClient(new CustomWebViewClient()); 
Các vấn đề liên quan