如何在将请求发送到客户端后从webview获取响应

时间:2015-09-18 14:19:31

标签: java android android-activity webview

我是新来的。我过去3天都面临这个问题。我们有Web应用程序和Android应用程序。

在Web应用程序中,我们从客户端接收请求(POST方法),并根据结果重定向到成功或失败URL。

现在Android应用程序出现问题:使用Webview我向服务器发送相同的请求。我的代码正在执行,但我不知道几件事。

  1. Android的成功和失败网址是什么?

  2. 如何从客户端获得回复并返回活动?

  3. 默认情况下我给成功网址是Google.com,失败网址是Gmail.com。如果我给我的Web应用程序成功和失败URL,它将在服务器端给出响应。

    注意:在此代码JavaScript代码中,我不知道如何使用。我在其他地方提到。不使用PayUJavaScriptInterfacesuccess()popup()方法。如果我必须用来获得回复,那么告诉我如何使用。

    这是我的活动代码

     public class PayMentGateWay extends Activity {
     private ArrayList<String> post_val = new ArrayList<String>();
     private String post_Data="";
     WebView webView ;
     final Activity activity = this;
     private String tag = "PayMentGateWay";
     private String hash,hashSequence;
     String merchant_key="JBZaLc";
        String salt="GQs7yium";
        String action1 ="";
        String base_url="https://test.payu.in";
        int error=0;
        String hashString="";
        Map<String,String> params;
        String txnid ="";
    
        Handler mHandler = new Handler();
    
    
    @SuppressLint("JavascriptInterface")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
         final ProgressDialog progressDialog = new ProgressDialog(activity);
         getWindow().requestFeature(Window.FEATURE_PROGRESS);
        webView = new WebView(this);
        setContentView(webView);
    
        post_val.add("key");
        post_val.add("JBZaLc");
        post_val.add("txnid");
        post_val.add("5d59dae66618a14f5020");
        post_val.add("amount");
        post_val.add("100.00");
        post_val.add("productinfo");
    
        post_val.add("{paymentParts:[{name:abc,description:abcd,value:500,isRequired:true,settlementEvent:EmailConfirmation}], paymentIdentifiers:[{field:CompletionDate, value:25/06/2015}]}");
        post_val.add("firstname");
        post_val.add("pqrs");
        post_val.add("email");
        post_val.add("xxxx@xxxmail.com");
        post_val.add("phone");
        post_val.add("xxxxxxxxxx");
        post_val.add("surl");
        post_val.add("https://www.google.com");
        post_val.add("furl");
        post_val.add("https://www.gmail.com");
        post_val.add("hash");
        post_val.add("");
        post_val.add("provider");
        post_val.add("payu_paisa");
        Log.d(tag, "post_val: "+post_val);
        params= new HashMap<String,String>();
        for(int i = 0;i<post_val.size();){
            params.put(post_val.get(i), post_val.get(i+1));
    
            i+=2;   
        }
    
        if(empty(params.get("txnid"))){
            Random rand = new Random();
            String rndm = Integer.toString(rand.nextInt())+(System.currentTimeMillis() / 1000L);
            txnid=hashCal("SHA-256",rndm).substring(0,20);
            popup("txnid : " + txnid);
            System.out.println("......txnid...... " + txnid);
        } else {
            txnid=params.get("txnid");
            System.out.println("....else.......txnid...... " + txnid);
        }
    
            //String udf2 = txnid;
        String txn="abcd";
         hash="";
        String hashSequence = "key|txnid|amount|productinfo|firstname|email|udf1|udf2|udf3|udf4|udf5|udf6|udf7|udf8|udf9|udf10";
        if(empty(params.get("hash")) && params.size()>0) {
            if( empty(params.get("key"))
                || empty(params.get("txnid"))
                || empty(params.get("amount"))
                || empty(params.get("firstname"))
                || empty(params.get("email"))
                || empty(params.get("phone"))
                || empty(params.get("productinfo"))
                || empty(params.get("surl"))
                || empty(params.get("furl"))
                || empty(params.get("service_provider"))
    
        ) {
                String[] hashVarSeq = hashSequence.split("\\|");
                for (int i = 0; i < hashVarSeq.length; i++) {
                    System.out.println("<<<<<>>>>>>>> " + hashVarSeq[i]);
                }
    
                for(String part : hashVarSeq)
                {
                    hashString= (empty(params.get(part))) ? hashString.concat("") : hashString.concat(params.get(part));
                    hashString=hashString.concat("|");
                    System.out.println("??????? " + hashString);
                }
                hashString=hashString.concat(salt);
    
    
                 hash=hashCal("SHA-512",hashString);
                 System.out.println(hashString + " /////~~~~~~ " + hash);
                action1=base_url.concat("/_payment");
            }
        }
        else if(!empty(params.get("hash")))
        {
            hash=params.get("hash");
            action1=base_url.concat("/_payment");
            System.out.println("!!!!!!!!HASHHHHHHH!!!!!! " + hash);
        }
    
        webView.setWebViewClient(new WebViewClient(){
    
    
            @Override
            public void onReceivedError(WebView view, int errorCode,
                    String description, String failingUrl) {
                // TODO Auto-generated method stub
                System.out.println(">>>>>>>>>>>>>>onReceivedError>>>>>>>>>>>>>>>>>>");
                Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();
            }
    
            @Override
            public void onReceivedSslError(WebView view,
                    SslErrorHandler handler, SslError error) {
                // TODO Auto-generated method stub
                System.out.println(">>>>>>>>>>>>>>onReceivedSslError>>>>>>>>>>>>>>>>>>");
                Toast.makeText(activity, "SslError! " +  error, Toast.LENGTH_SHORT).show();
                 handler.proceed();
            }
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                // TODO Auto-generated method stub
                System.out.println(">>>>>>>>>>>>>>shouldOverrideUrlLoading>>>>>>>>>>>>>>>>>>");
                return super.shouldOverrideUrlLoading(view, url);
            }
    
            @Override
            public void onPageFinished(WebView view, String url) {
                // TODO Auto-generated method stub
                super.onPageFinished(view, url);
                System.out.println(">>>>>>>>>>>>>>onPageFinished>>>>>>>>>>>>>>>>>>");
            }
    
    
        });
    
    
        webView.setVisibility(0);
        webView.getSettings().setBuiltInZoomControls(true);
        webView.getSettings().setCacheMode(2);
        webView.getSettings().setDomStorageEnabled(true);
        webView.clearHistory();
        webView.clearCache(true);
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setSupportZoom(true);
        webView.getSettings().setUseWideViewPort(false);
        webView.getSettings().setLoadWithOverviewMode(false);
    
        webView.addJavascriptInterface(new PayUJavaScriptInterface(activity), "PayUMoney");
        Map<String, String> mapParams = new HashMap<String, String>();
        mapParams.put("key",merchant_key);
        mapParams.put("hash",PayMentGateWay.this.hash);
        mapParams.put("txnid",(empty(PayMentGateWay.this.params.get("txnid"))) ? "" : PayMentGateWay.this.params.get("txnid"));
        Log.d(tag, "txnid: "+PayMentGateWay.this.params.get("txnid"));
        mapParams.put("service_provider","payu_paisa");
    
            mapParams.put("amount",(empty(PayMentGateWay.this.params.get("amount"))) ? "" : PayMentGateWay.this.params.get("amount"));
            mapParams.put("firstname",(empty(PayMentGateWay.this.params.get("firstname"))) ? "" : PayMentGateWay.this.params.get("firstname"));
            mapParams.put("email",(empty(PayMentGateWay.this.params.get("email"))) ? "" : PayMentGateWay.this.params.get("email"));
            mapParams.put("phone",(empty(PayMentGateWay.this.params.get("phone"))) ? "" : PayMentGateWay.this.params.get("phone"));
    
            mapParams.put("productinfo",(empty(PayMentGateWay.this.params.get("productinfo"))) ? "" : PayMentGateWay.this.params.get("productinfo"));
            mapParams.put("surl",(empty(PayMentGateWay.this.params.get("surl"))) ? "" : PayMentGateWay.this.params.get("surl"));
            mapParams.put("furl",(empty(PayMentGateWay.this.params.get("furl"))) ? "" : PayMentGateWay.this.params.get("furl"));
            mapParams.put("lastname",(empty(PayMentGateWay.this.params.get("lastname"))) ? "" : PayMentGateWay.this.params.get("lastname"));
    
            mapParams.put("address1",(empty(PayMentGateWay.this.params.get("address1"))) ? "" : PayMentGateWay.this.params.get("address1"));
            mapParams.put("address2",(empty(PayMentGateWay.this.params.get("address2"))) ? "" : PayMentGateWay.this.params.get("address2"));
            mapParams.put("city",(empty(PayMentGateWay.this.params.get("city"))) ? "" : PayMentGateWay.this.params.get("city"));
            mapParams.put("state",(empty(PayMentGateWay.this.params.get("state"))) ? "" : PayMentGateWay.this.params.get("state"));
    
            mapParams.put("country",(empty(PayMentGateWay.this.params.get("country"))) ? "" : PayMentGateWay.this.params.get("country"));
            mapParams.put("zipcode",(empty(PayMentGateWay.this.params.get("zipcode"))) ? "" : PayMentGateWay.this.params.get("zipcode"));
            mapParams.put("udf1",(empty(PayMentGateWay.this.params.get("udf1"))) ? "" : PayMentGateWay.this.params.get("udf1"));
            mapParams.put("udf2",(empty(PayMentGateWay.this.params.get("udf2"))) ? "" : PayMentGateWay.this.params.get("udf2"));
    
            mapParams.put("udf3",(empty(PayMentGateWay.this.params.get("udf3"))) ? "" : PayMentGateWay.this.params.get("udf3"));
            mapParams.put("udf4",(empty(PayMentGateWay.this.params.get("udf4"))) ? "" : PayMentGateWay.this.params.get("udf4"));
            mapParams.put("udf5",(empty(PayMentGateWay.this.params.get("udf5"))) ? "" : PayMentGateWay.this.params.get("udf5"));
            mapParams.put("pg",(empty(PayMentGateWay.this.params.get("pg"))) ? "" : PayMentGateWay.this.params.get("pg"));
            webview_ClientPost(webView, action1, mapParams.entrySet());
    
    }
    public class PayUJavaScriptInterface {
        Context mContext;
    
        /** Instantiate the interface and set the context */
        PayUJavaScriptInterface(Context c) {
            mContext = c;
        }
    
    
        public void success(long id, final String paymentId) {
    
        mHandler.post(new Runnable() {
    
        public void run() {
    
        mHandler = null;
    
        Intent intent = new Intent(PayMentGateWay.this, MainActivity.class);
    
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |Intent.FLAG_ACTIVITY_SINGLE_TOP);
    
        intent.putExtra("result", "success");
    
        intent.putExtra("paymentId", paymentId);
    
        startActivity(intent);
    
        finish();
    
        }
    
        });
    
        }
    
    }
     public void webview_ClientPost(WebView webView, String url, Collection< Map.Entry<String, String>> postData){
            StringBuilder sb = new StringBuilder();
    
            sb.append("<html><head></head>");
            sb.append("<body onload='form1.submit()'>");
            sb.append(String.format("<form id='form1' action='%s' method='%s'>", url, "post"));
            for (Map.Entry<String, String> item : postData) {
                sb.append(String.format("<input name='%s' type='hidden' value='%s' />", item.getKey(), item.getValue()));
            }
            sb.append("</form></body></html>");
            Log.d(tag, "webview_ClientPost called");
           webView.loadData(sb.toString(), "text/html", "utf-8");
     }
    
    
     public void success(long id, final String paymentId) {
    
     mHandler.post(new Runnable() {
    
     public void run() {
    
     mHandler = null;
    
     Intent intent = new Intent(PayMentGateWay.this, MainActivity.class);
    
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |Intent.FLAG_ACTIVITY_SINGLE_TOP);
    
     intent.putExtra(Constants.ACCOUNT_NAME, "success");
    
     intent.putExtra(Constants._ID, paymentId);
    
     startActivity(intent);
    
     finish();
    
     }
    
     });
    
     }
    
    
    public boolean empty(String s)
    {
        if(s== null || s.trim().equals(""))
            return true;
        else
            return false;
    }
    
    public String hashCal(String type,String str){
        byte[] hashseq=str.getBytes();
        StringBuffer hexString = new StringBuffer();
        try{
        MessageDigest algorithm = MessageDigest.getInstance(type);
        algorithm.reset();
        algorithm.update(hashseq);
        byte messageDigest[] = algorithm.digest();
    
    
    
        for (int i=0;i<messageDigest.length;i++) {
            String hex=Integer.toHexString(0xFF & messageDigest[i]);
            if(hex.length()==1) hexString.append("0");
            hexString.append(hex);
        }
    
        }catch(NoSuchAlgorithmException nsae){ }
    
        return hexString.toString();
    
    
    }
    
    public void popup(String msg) {
        Toast.makeText(PayMentGateWay.this, "" + msg, Toast.LENGTH_LONG).show();
    }
    

    }

1 个答案:

答案 0 :(得分:1)

  1. 您应该通过自己的成功和失败网址。(两个网址都可以相同)。例如:www.yourwebsitename.com/payuresponse.php
  2. 您可以通过payu($ _POST ['status'])将post参数发送到您的成功或失败网址,即payuresponse.php
  3. 来处理成功或失败。
  4. 在payuresponse.php底部添加以下代码作为javascript代码

    功能成功(){

         Android.success(id,paymentId);
    
        /*u can pass more parameter too.
         Note : the number of parameter you pass from here should be      
                same you will recieve in PayMentGateWay.java class in   
                your android application*/
       }
       success();
    

    您还可以在payuresponse.php

  5. 中执行任何操作
  6. 只需在Android代码中添加anotation
  7. @JavascriptInterface

    public void success(long id,final String paymentId){

    / *              你也可以收到更多的参数。              注意:您在此处收到的参数数量应为
                        你从payuresponse.php寄来的 * /

    mHandler.post(new Runnable() {
    
    public void run() {
    
    mHandler = null;
    
    Intent intent = new Intent(PayMentGateWay.this, MainActivity.class);
    
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |Intent.FLAG_ACTIVITY_SINGLE_TOP);
    
    intent.putExtra("result", "success");
    
    intent.putExtra("paymentId", paymentId);
    
    startActivity(intent);
    
    finish();
    
    }
    
    });
    
    }
    
    1. 希望这对你有用。享受!