2017-03-24 7 views
0

私は最初の2つのWebサービスからなるtelenor easypay APIを実装しています。私の店舗IDとAuth_tokenとpostbackurlで成功した応答を与えるその他の情報を投稿します。次のWebサービスURL "https://easypaystg.easypaisa.com.pk/easypay/Confirm.jsf"への認証トークンとポストバックURL ... easypayayチェックアウト画面で次のエラーを表示するeasypaisaチェックアウト画面にリダイレクトされます... [エラースクリーンショットを表示するには、下のリンクをクリックしてください] [1] おかげAndroidでTelenor easypay APIを実装する方法

[1]: https://i.stack.imgur.com/98PYq.jpg 

次は私のコードです

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

     } 
    } 

答えて

3

私はこの問題を解決し、Telenor easypay APIを実装しました。魔法はwebviewですべてのことを行います... webviewを使用すると、URLに添付されたauth_tokenとpostbackurlが返されます。 auth_tokenとpostbackurlをwebviewの2番目のURLに投稿すると、easypayチェックアウト画面に正常に到着します。

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(); 
     } 
    } 
} 
関連する問題