【问题标题】:How to get response from webview after send the request to client向客户端发送请求后如何从 webview 获得响应
【发布时间】:2015-09-18 14:19:30
【问题描述】:

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

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

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

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

  2. 如何从客户端获取响应并返回活动?

默认情况下,我给出的成功 URL 是 Google.com,失败 URL 是 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();
}

}

【问题讨论】:

  • 您的意思是向服务器发送请求,不是吗?您的 webview_ClientPost 没有发帖。 loadUrl 只会导致获取。如果你能更好地解释你的问题,有人可能会给你更多线索。
  • @e4c5 嗨...向客户端的服务器发送请求。它工作正常,我完成了所有过程。但是在客户端完成所有操作之后。如何在 android 应用程序中返回响应。以及我的应用程序的成功和失败网址是什么。
  • 您当前形式的代码是不可读的,但有一些可疑的地方:您真的不想从 javascript 调用 onCreate。正如已经提到的 webview.loadurl() 只是 GET 而不是发布,你的 mapParams 只是浪费。
  • @e4c5 感谢您编辑和更正我的 Qn。
  • @Inzimam Tariq IT 感谢您的编辑。由于提交了1天以上的帖子。仍在等待解决方案。

标签: java android android-activity webview


【解决方案1】:
  1. 您应该传递自己的成功和失败 url。(两个 url 可以相同)。例如:www.yourwebsitename.com/payuresponse.php
  2. 您可以通过将 payu ($_POST['status']) 发送到您的成功或失败 url 即 payuresponse.php 的 post 参数来处理成功或失败
  3. 在 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 中做任何你想做的事情

  4. 只需在您的 android 代码中添加注释

@Javascript接口

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. 希望这对您有用。尽情享受吧!

【讨论】:

  • @shahid 我不明白你的回答。在 java 和纯原生应用程序中查看我的移动应用程序。我如何提供“www.yourwebsitename.com/payuresponse.php”网址。假设我会给我的 api 方法 url。它会在服务器端响应我。那么如何在 android 应用程序中获得响应。我明白你想说什么,但我怎么能在 PayMentGateWay 活动中调用函数 handleResponse() 。我知道我不能正确理解你的答案,但你能指导我吗?
  • 您的 api 方法 url(成功和失败 url)应该在实时服务器上而不是在本地主机上,因此 payu 可以在您的 api 方法 url 上点击他的响应。包含函数 success(long id, final String paymentId) 的内部类 PayUJavaScriptInterface 将帮助您从您的 api 方法 url 获得响应。请注意,您的 api 方法 url 必须包含 () 这个 javascript 函数。
猜你喜欢
  • 1970-01-01
  • 2014-09-13
  • 2018-10-12
  • 2018-06-30
  • 1970-01-01
  • 2020-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多