首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Paypal支付:在webview中加载paypal时如何获取成功请求

Paypal支付:在webview中加载paypal时如何获取成功请求
EN

Stack Overflow用户
提问于 2016-06-01 15:13:56
回答 5查看 6K关注 0票数 20

编辑:

在贝宝登录后,我可以成功完成transaction.But我需要匹配贝宝的successUrl,以验证两个网址是相同的,然后显示成功的吐司消息。

但是我没有从payment.So获得成功的url,我无法匹配it.Below,我已经发布了相关代码:

WebActivity.java:

代码语言:javascript
复制
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);
                
            }
            
        });        
        
    }
    

    
}

清单:

代码语言:javascript
复制
<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.step我将截图和添加的内容放在一起,以便清楚地了解。

我收到此错误: message.So cant to match success request:

06-15 18:12:59.894: i/ be (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匹配?如果我得到任何建议,它将对我有帮助。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-06-18 15:23:47

我对你的查询的理解是,你有你的网站的网址,使用Paypal执行支付,在移动应用程序中,您正在执行相同的Webview(而不是Paypal SDK)。

__,你可以通过在你的Web端做一些编码来获得callback

含义:

无论何时任何用户导航到支付页面,那么您的服务器必须知道用户是否从网站访问或通过移动网络浏览,服务器可以发送additional parameter key到任何支付网关为他们的自定义逻辑。支付完成后,支付网关将返回相同的additional parameter key和结果(成功或失败)。

注意:每个支付网关都有一个Redirection url for Success/Failure设置

一旦贝宝在交易完成后重定向到结果url(成功/失败),服务器然后再次检查请求是否来自网站或移动Webview在additional parameter key的帮助下;检查下面的案例...

如果来自移动Webview,则为

  • 成功:重定向至URL www.myserver.com/success
  • Failure:重定向至URL www.myserver.com/failure

If from Webiew then Webiew

现在在您的手机的Webview中

代码语言:javascript
复制
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;
            }

});

就这样。

票数 6
EN

Stack Overflow用户

发布于 2016-06-15 20:02:39

支付成功后Paypal返回json响应如下

代码语言:javascript
复制
{
  "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网站上查看当前的交易。

请确保您已经执行了以下步骤: 1) private static final int REQUEST_CODE_PAYMENT = 1; private static String CONFIG_ENVIRONMENT=PayPalConfiguration.ENVIRONMENT_SANDBOX; //直播模式为PayPalConfiguration.ENVIRONMENT_PRODUCTION。2)

代码语言:javascript
复制
// 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);
票数 7
EN

Stack Overflow用户

发布于 2016-06-15 15:24:09

编辑

从屏幕截图看,你似乎是在网页视图中嵌入一个订阅页面,并试图将successUrl与返回的URL进行匹配。

  1. 如果要与定义的successUrl

进行匹配/验证,请检查答案in this post以首先在您的配置文件中设置retrun

  • 获取URL String webUrl = webView.getUrl();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37561830

复制
相关文章

相似问题

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