首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Android中实现Telenor easypay API

如何在Android中实现Telenor easypay API
EN

Stack Overflow用户
提问于 2017-03-24 22:28:03
回答 1查看 6.6K关注 0票数 3

我正在实现telenor easypay API,它由两个next服务组成,第一个我发布我的商店id和其他信息,这些信息给我成功的响应与Auth_token和postbackurl.When我发布身份验证令牌和回发url到下一个next服务URL https://easypaystg.easypaisa.com.pk/easypay/Confirm.jsf它重定向到easypaisa结帐屏幕,在easypay结帐屏幕上显示以下错误。

我的代码:

代码语言:javascript
复制
private class PostTask extends AsyncTask < String, String, String > {
 @Override
 protected void onPreExecute() {
  super.onPreExecute();
  mBT.setEnabled(false);
 }

 @Override
 protected String doInBackground(String...data) {

  OkHttpClient client; // = new OkHttpClient();
  client = getUnsafeOkHttpClient();
  client.setHostnameVerifier(new HostnameVerifier() {
   @Override
   public boolean verify(String hostname, SSLSession session) {
    return true;
   }
  });

  MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
  RequestBody body = RequestBody.create(mediaType, "amount=10&orderRefNum=110&storeId=xxxx&postBackURL=https://www.jeevaysehat.com/");
  Request request = new Request.Builder()
   .url("https://easypaystg.easypaisa.com.pk/easypay/Index.jsf")
   .post(body)
   .addHeader("content-type", "application/x-www-form-urlencoded")
   .addHeader("cache-control", "no-cache")
   .build();
  Response response = null;
  String resp = null;
  try {
   response = client.newCall(request).execute();
   resp = response.body().string();
  } catch (IOException e) {
   e.printStackTrace();
  }

  //return resp;
  return response.request().url().toString();
 }

 @Override
 protected void onPostExecute(String s) {
  super.onPostExecute(s);
  Log.e("data", s);
  try {
   mBT.setEnabled(true);
   String[] ist = s.split("=");
   String[] snd = ist[1].split("&");
   Token = snd[0];

   Log.e("token", Token);
   Log.e("posturl", ist[2]);

   pburl = ist[2];
   medPost.setText(pburl);
   medtoken.setText(Token);


   //  Log.e("pburl", pburl);
   /* Intent ii = new Intent(MainActivity.this, Payment_details.class);
    ii.putExtra("data", token);
     startActivity(ii);*/
   //http://jeevaysehat.com/?auth_token=260915100358342650147434472217522869797&postBackURL=http%3A%2F%2Fjeevaysehat.com%2F


  } catch (Exception e) {

  }
 }
}

private class PostTask1 extends AsyncTask < String, String, String > {
 String mtoken;
 String PBURL;

 public PostTask1(String token, String pb) {
  mtoken = token;
  PBURL = pb;
 }

 @Override
 protected String doInBackground(String...data) {


  OkHttpClient client; // = new OkHttpClient();
  client = getUnsafeOkHttpClient();
  client.setHostnameVerifier(new HostnameVerifier() {
   @Override
   public boolean verify(String hostname, SSLSession session) {
    return true;
   }
  });
  MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
  RequestBody body = RequestBody.create(mediaType, "auth_token=" + mtoken + "&postBackURL=https://www.jeevaysehat.com/");
  Request request = new Request.Builder()
   .url("https://easypaystg.easypaisa.com.pk/easypay/Confirm.jsf")
   .post(body)
   .addHeader("content-type", "application/x-www-form-urlencoded")
   .addHeader("cache-control", "no-cache")
   .build();

  Response response = null;
  String resp = null;
  try {
   response = client.newCall(request).execute();
   resp = response.body().string();
  } catch (Exception e) {
   e.printStackTrace();
  }

  return response.request().url().toString();
 }

 @Override
 protected void onPostExecute(String s) {
  super.onPostExecute(s);
  Log.e("data", s);
  //here i redirect to webview activity
  Intent ii = new Intent(MainActivity.this, Payment_details.class);
  ii.putExtra("data", s);
  startActivity(ii);
  // Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(s));
  // startActivity(browserIntent);

 }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-27 22:02:01

我已经解决了这个问题并实现了Telenor easypay API,神奇的是我们将在webview中做所有的事情……使用webview将数据张贴到第一个网址,它将返回auth_token和postbackurl附加到网址...然后在webview中的第二个网址上发布auth_token和postbackurl,它会成功地将你带到easypay结账屏幕。

代码语言:javascript
复制
public class Payment_details extends AppCompatActivity {
    private WebView webView;
    String postData = null;
    private RelativeLayout mConfirm;
    String data;
    boolean isFirst = true;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.payment_details);
        mConfirm = (RelativeLayout) findViewById(R.id.pd_confirm);


        webView = (WebView) findViewById(R.id.pdwebView);

        data = "https://easypaystg.easypaisa.com.pk/easypay/Index.jsf";
        Log.e("data", data);


        try {


            postData = URLEncoder.encode("amount", "UTF-8")
                    + "=" + URLEncoder.encode("10", "UTF-8");

            postData += "&" + URLEncoder.encode("storeId", "UTF-8") + "="
                    + URLEncoder.encode("xxxx", "UTF-8");

            postData += "&" + URLEncoder.encode("postBackURL", "UTF-8")
                    + "=" + URLEncoder.encode("your post back url any url", "UTF-8");

            postData += "&" + URLEncoder.encode("orderRefNum", "UTF-8")
                    + "=" + URLEncoder.encode("1111", "UTF-8");

        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        webView.setWebViewClient(new MyWebViewClient());
        WebSettings settings = webView.getSettings();
        settings.setJavaScriptEnabled(true);

        webView.postUrl(data, postData.getBytes());




    }

    private class MyWebViewClient extends WebViewClient {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);


            return true;
        }

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

            Log.e("purl", url);
            if(isFirst) {
                isFirst = false;
                String[] ist = url.split("=");
                String[] snd = ist[1].split("&");
                String Token = snd[0];

                Log.e("token", Token);
                Log.e("posturl", ist[2]);
                secondredirect(Token, view);
            }

        }

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




        }

        @Override
        public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
            handler.proceed();
        }

    }

    @Override
    public void onBackPressed() {
    }

   private void secondredirect(String token, WebView view){
       String sData = null;
       String sURL = "https://easypaystg.easypaisa.com.pk/easypay/Confirm.jsf";
       try {
           sData = URLEncoder.encode("auth_token", "UTF-8")
                   + "=" + URLEncoder.encode(token, "UTF-8");

           sData += "&" + URLEncoder.encode("postBackURL", "UTF-8") + "="
               + URLEncoder.encode("any url as a postback url", "UTF-8");
           view.postUrl(sURL, sData.getBytes());
       } catch (UnsupportedEncodingException e) {
           e.printStackTrace();
       }
   }
}
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43002086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档