2016-06-01 29 views
18

Edit:pagamento di Paypal: Come ottenere il successo richiesta quando si carica il paypal in WebView

Dopo il login paypal, ho potuto completare con successo transaction.But ho bisogno di corrispondere al successUrl in PayPal per verificare sia url è lo stesso e quindi visualizza il messaggio di toast riuscito.

Ma io non sto ottenendo il successo url da payment.So non riesco a corrispondere it.Below Ho inviato il codice in questione:

WebActivity.java:

public class PaypalWebActivity extends Activity { 

    private WebView webView; 

    String payUrlStr; 

    ProgressDialog dialog; 

    String successUrl; 


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

     setContentView(R.layout.paypal_web_layout); 

     successUrl = LOAD_WEBVIEW_PAYMENT_PAYPAL_SUCCESS; 

     dialog = ProgressDialog.show(PaypalWebActivity.this, "", "Please wait..", false); 

     loadWebViewPaypal(); 

    } 

    private void loadWebViewPaypal() { 

     payUrlStr = LOAD_WEBVIEW_PAYMENT_PAYPAL(PAGE_ID);  

     Log.e("payUrlStr", ""+payUrlStr); 

     webView = (WebView) findViewById(R.id.webView); 
     webView.loadUrl(payUrlStr); 
     webView.getSettings().setJavaScriptEnabled(true); 

     @SuppressWarnings("unused") 
     WebSettings settings= webView.getSettings(); 
     if (Build.VERSION.SDK_INT >= 21) { 
      webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); 
      } 

     webView.setWebViewClient(new WebViewClient() { 

      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       Log.e("Loading url...", url); 
       view.loadUrl(url); 

       String loadWebUrl = view.getUrl(); 

       Log.e("loadWebUrl", ""+loadWebUrl); 

       return true; 
      } 

      @Override 
      public void onPageFinished(WebView view, String url) { 
       Log.e("Finished url...", url); 

       String webUrl = view.getUrl(); 

       Log.e("webUrl", ""+webUrl); 


       if(webUrl.substring(0,95).equals(successUrl)){ 

        Log.e("Getting Success Request", "Test"); 

       }else{ 

        Log.e("Failed to get Request", "Test"); 

       } 

       if(dialog.isShowing()){ 
        dialog.dismiss(); 
       } 

      } 

      @Override 
      public void onReceivedError(WebView view, int errorCode, 
        String description, String failingUrl) { 

       Log.e("Error in url...", description); 
       Log.e("Error in failingUrl...", failingUrl); 

      } 

     });   

    } 



} 

manifesto:

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

controllo questo discussion .step dopo passo ho messo le immagini e aggiunto contenuto per una chiara comprensione.

sto ottenendo questo errore message.So non posso in grado di eguagliare il successo richiesta:

06-15 18: 12: 59,894: I/cromo (3273): [INFO: CONSOLE (0) ] "Mixed contenuti: La pagina all'indirizzo 'https://www.sandbox.paypal.com/us/cgi-bin/webscr?SESSION=LTy9Q59%5fia3wiAdHTQjgQxvUF1BTzLjgXgelCew4AS%2dGAutAfB5WjZXVuX8&dispatch=5885d80a13c0db1f8e263663d3faee8dcce3e160f5b9538489e17951d2c62172' è stato caricato su una connessione protetta, ma contiene una forma che si rivolge un endpoint insicuro 'http://www.myapi-entertainment.com/page_managements/page_featured_subscription_payment_success/4 questo contenuto vanno comunicati anche tramite HTTPS https://www.sandbox.paypal.com/us/cgi-bin/webscr?SESSION=LTy9Q59%5fia3wiAdHTQjgQxvUF1BTzLjgXgelCew4AS%2dGAutAfB5WjZXVuX8&dispatch=5885d80a13c0db1f8e263663d3faee8dcce3e160f5b9538489e17951d2c62172 (0)..

Questa è la mia risposta di successo "http://www.myapi-entertainment.com/page_managements/page_featured_subscription_payment_success/4" -> Nome server modificato.

è possibile abbinare richiesta di successo con paypal? Se avrò qualche suggerimento, mi sarà d'aiuto.

+0

Credo u bisogno di chiedere il permesso in fase di esecuzione –

+0

riferimento questo http://stackoverflow.com/questions/37458157/error- failed-to-connect-to-camera-service-android-marshmallow/37458251 # 37458251 –

+0

Inserisci il codice della tua pagina web di 'payUrlStr', ti sei integrato con il semplice pulsante di pagamento o l'API di PayPal Express? –

risposta

6

Quello che ho capito con la tua domanda è che hai un URL del tuo sito web che esegue il pagamento usando Paypal e nell'app mobile stai eseguendo lo stesso utilizzando la Webview (non SDK Paypal).

, è possibile ottenere il callback facendo qualche codifica a vostra fine WEB.

Significato:

Ogni volta che un utente passare alla pagina di pagamento, allora il server deve sapere se l'utente visitato dal sito web o tramite cellulare Webview, Server può inviare additional parameter key a qualsiasi gateway di pagamento per la loro logica personalizzata. Successivamente, una volta completata la transazione di pagamento, il gateway di pagamento restituirà lo stesso additional parameter key insieme al risultato (positivo o negativo).

Nota: Ogni Gateway di pagamento ha un'impostazione di Redirection url for Success/Failure

Una volta Paypal reindirizzare a causare url (successo/insuccesso) dopo la transazione si completa, Server poi ancora verificare se la richiesta è stata fatta dal Sito Web o da Webview mobile con l'aiuto di additional parameter key; verificare caso qui di seguito ...

Se da Mobile Webview

  • Successo: Redirect a URL www.myserver.com/success
  • Fallimento: Redirect a URL www.myserver.com/failure

Se da Webiew poi Normal flow

Ora nella visualizzazione Web del cellulare

webView.setWebViewClient(new WebViewClient() { 

      @Override 
      public boolean shouldOverrideUrlLoading(WebView view, String url) 
       if(url.equalsIgnoreCase("www.myserver.com/success")) 
        //Success Toast 
       else if(url.equalsIgnoreCase("www.myserver.com/failure")) 
        //Failure Toast 
       return true; 
      } 

}); 

Questo è tutto.

+0

Ciao ho provato la tua risposta.Ma non sto ottenendo url risposta di successo nel log.Quindi non posso gestire quello. – Steve

+0

It (URL risposta riuscita) non verrà automaticamente, è necessario codice a fine server. Leggi "Significato". –

+0

ok Controlla e ti dico – Steve

4

Modifica

Sembra dalle schermate si sta incorporando una pagina di sottoscrizione nel vostro WebView, e cercando di abbinare successUrl con l'URL di ritorno.

  1. Controllare la risposta in this post per impostare l'URL retrun prima nel tuo profilo

  2. Ottenere l'URL String webUrl = webView.getUrl(); se si vuole fare in partita/verifica con l'definita successUrl

7

Paypal restituisce la risposta json dopo il pagamento riuscito come sotto

{ 
    "client": { 
    "environment": "sandbox", 
    "paypal_sdk_version": "2.14.1", 
    "platform": "Android", 
    "product_name": "PayPal-Android-SDK" 
    }, 
    "response": { 
    "create_time": "2016-06-15T11:38:04Z", 
    "id": "PAY-6CN54299U76194116K5QT4BY", 
    "intent": "sale", 
    "state": "approved" 
    }, 
    "response_type": "payment" 
} 

È necessario verificare la risposta oggetto json. se lo stato è approvato significa che il pagamento con paypal ha esito positivo. Quindi è possibile controllare sul sito Web di Paypal per le transazioni correnti.

assicurarsi di aver seguito i passaggi qui sotto: 1) private static final int REQUEST_CODE_PAYMENT = 1; private static String CONFIG_ENVIRONMENT=PayPalConfiguration.ENVIRONMENT_SANDBOX; // Sarà PayPalConfiguration.ENVIRONMENT_PRODUCTION per la modalità live. 2)

// note that these credentials will differ between live & sandbox environments. 
private static final String CONFIG_CLIENT_ID = "ATBvU5urlaPOhpCrAhFsoG4u63RvNoKUocFPs9yR5q_sbM0yecZawUjoJhIilW8DNg5RrJcRHgRuEP_1"; 

private static PayPalConfiguration config = new PayPalConfiguration() 
            .environment(CONFIG_ENVIRONMENT) 
            .clientId(CONFIG_CLIENT_ID) 
              // The following are only used in PayPalFuturePaymentActivity. 
            .merchantName("Example Merchant") 
            .merchantPrivacyPolicyUri(Uri.parse("https://www.example.com/privacy")) 
            .merchantUserAgreementUri(Uri.parse("https://www.example.com/legal")); 
          Intent intent = new Intent(getActivity(), PayPalService.class); 
          intent.putExtra(PayPalService.EXTRA_PAYPAL_CONFIGURATION, config); 
          getActivity().startService(intent); 
+0

@Naruto Ho integrato Paypal seguendo questo e il mio processo di pagamento funziona correttamente. Fammi sapere se hai qualche problema in questo. –

+0

Ho bisogno di usare webview per caricare paypal. Inoltre non ho alcuna chiave paypal. Hanno creato l'account e fornito l'accesso login. Questo lo fa – Steve

+0

@Naruto Hai le credenziali di accesso paypal. Hai creato app su PayPal ?? –

1

Come menzionato sopra,

u necessità di controllare la risposta oggetto JSON. se lo stato è approvato significa che il pagamento paypal ha esito positivo.quindi puoi controllare sul sito web Paypal per le transazioni correnti

0

sto ottenendo una richiesta di pagamento il successo o il fallimento utilizzando questo qui sotto: Codici

private void loadWebViewPaypal() { 

     payUrlStr = LOAD_WEBVIEW_PAYMENT_PAYPAL(PAGE_ID);  

     Log.e("payUrlStr", "" + payUrlStr); 

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

     webView.setWebViewClient(new WebClient()); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.loadUrl(payUrlStr); 


     @SuppressWarnings("unused") 
     WebSettings settings= webView.getSettings(); 

     if (Build.VERSION.SDK_INT >= 21) { 
      webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); 
      } 


    } 

    public class WebClient extends WebViewClient 
    { 
     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 

      Log.e("Page Started", ""+url); 

      super.onPageStarted(view, url, favicon); 



      if(url.contains(successUrl)) { 

       Log.e("Getting Success Request", "Test"); 

       Intent i = new Intent(PaypalWebActivity.this, TabhostActivity.class); 

       PAYPAL_WEB_BACK = "fulfilled"; 
       startActivity(i); 
       finish(); 

      } else if(url.equalsIgnoreCase(failureUrl)) { 

       Intent i = new Intent(PaypalWebActivity.this, TabhostActivity.class); 

       PAYPAL_WEB_BACK = "fulfilled"; 
       startActivity(i); 
       finish(); 

      } 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 

      Log.e("Override Url", ""+url); 

      view.loadUrl(url); 
      return true; 

     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      // TODO Auto-generated method stub 
      super.onPageFinished(view, url); 

      Log.e("Finished Url :", "" + url); 

      if(dialog.isShowing()){ 
       dialog.dismiss(); 
      } 
     } 
    }