Paypal payment: Как получить запрос успеха при загрузке PayPal в webview

Edit:

После входа в PayPal я смог успешно завершить транзакцию. Но мне нужно сопоставить successUrl в paypal, чтобы проверить, что оба URL одинаковы, а затем отобразить успешное сообщение с тостом.

Но я не получаю URL-адрес успеха от платежа. Поэтому я не могу сопоставить его. Ниже я разместил соответствующий код:

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

            }

        });        

    }



}

манифеста:

<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" />

проверьте этот discussion. Шаг за шагом я разместил скриншоты и добавил контент для четкого понимания.

Я получаю сообщение . Это может не соответствовать запросу:

06-15 18: 12: 59.894: I/хром (3273): [INFO: CONSOLE (0)] "Смешанный Содержание: страница в 'https://www.sandbox.paypal.com/us/cgi-bin/webscr?SESSION=LTy9Q59%5fia3wiAdHTQjgQxvUF1BTzLjgXgelCew4AS%2dGAutAfB5WjZXVuX8&dispatch=5885d80a13c0db1f8e263663d3faee8dcce3e160f5b9538489e17951d2c62172' был загружен через безопасное соединение, но содержит форму, для которой небезопасная конечная точка 'http://www.myapi-entertainment.com/page_managements/page_featured_subscription_payment_success/4. этот контент также должен быть представлен через HTTPS. https://www.sandbox.paypal.com/us/cgi-bin/webscr?SESSION=LTy9Q59%5fia3wiAdHTQjgQxvUF1BTzLjgXgelCew4AS%2dGAutAfB5WjZXVuX8&dispatch=5885d80a13c0db1f8e263663d3faee8dcce3e160f5b9538489e17951d2c62172(0)

Это мой ответ на успех http://www.myapi-entertainment.com/page_managements/page_featured_subscription_payment_success/4" → Изменено имя сервера.

Можно ли сопоставить запрос успеха с paypal? Если я получу какое-либо предложение, это будет полезно для меня.

Ответ 1

Что я понимаю с вашим запросом, у вас есть URL вашего веб-сайта, который выполняет оплату через Paypal, а в мобильном приложении вы выполняете то же самое с помощью Webview (не SDK Paypal).

Да, вы можете получить callback, выполнив некоторую кодировку на своем веб-конце.

Значение:

Всякий раз, когда какой-либо пользователь переходит к странице "Оплата", ваш сервер должен знать, посетил ли Пользователь с веб-сайта или через Mobile Webview, сервер может отправить additional parameter key на любой платежный шлюз для своей пользовательской логики. Позже, как только платеж будет выполнен, платежный шлюз вернет те же additional parameter key вместе с результатом (Успех или Сбой).

Примечание. Каждый платежный шлюз имеет настройку Redirection url for Success/Failure

После перенаправления Paypal на URL-адрес результата (Success/Failure) после завершения транзакции сервер затем снова проверяет, был ли запрос выполнен с веб-сайта или из Mobile Webview с помощью additional parameter key; проверьте регистр ниже...

Если из Mobile Webview

  • Успех: перенаправлено на URL www.myserver.com/success
  • Отказ: перенаправлено на URL www.myserver.com/failure

Если из Webiew затем Normal flow

Теперь в вашем Mobile Webview

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

});

Что это.

Ответ 2

Paypal возвращает ответ json после успешного платежа, как показано ниже

{
  "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"
}

Вам нужно проверить объект ответа json. если государство одобрено, что означает, что платеж в PayPal будет успешным. Затем вы можете проверить веб-сайт Paypal для текущих транзакций.

Убедитесь, что вы выполнили следующие шаги: 1) private static final int REQUEST_CODE_PAYMENT = 1; private static String CONFIG_ENVIRONMENT=PayPalConfiguration.ENVIRONMENT_SANDBOX; // Это будет PayPalConfiguration.ENVIRONMENT_PRODUCTION для живого режима. 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);

Ответ 3

Edit

Кажется, из снимков экрана вы вставляете страницу подписки в свой веб-просмотр и пытаетесь сопоставить successUrl с обратным URL.

  • Проверьте ответ в этом сообщении, чтобы настроить URL-адрес извлечения в своем профиле

  • Получите URL String webUrl = webView.getUrl();, если вы хотите сделать совпадение/проверку с помощью определенного successUrl

Ответ 4

Как упоминалось выше,

u нужно проверить объект ответа json. если состояние одобрено, что означает, что платеж PayPal является успешным. Затем вы можете проверить веб-сайт Paypal для текущих транзакций.

Ответ 5

Я получаю запрос на успешное выполнение платежа или сбой, используя приведенные ниже коды:

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