H5页面调用支付宝客户端

公司的项目需要用到支付功能,申请的是网页支付功能。在手机端希望点击付款的时候调用支付宝客户端。但是始终无法调用起来。

在测试中发现,UC和Chrome等浏览器可以唤起支付宝客户端。那么问题应该就出现在Webview上了。由于我们使用的是原生的Webview。刚开始的时候大体看了下付款跳转页面源码里的js,里面是通过UA来判断可不可以启动客户端,结果改了UA依然不行。在调试中发现Webview会打开如下网址。

0170301165233

看到这个可以说是令人眼前一亮,别的浏览器都能打开,肯定是在URL里传了这个特殊的URI,利用这个URI构造一个Intent然后启动就行了。试验后发现果然如此。特地发出来记录一下。

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.AttributeSet;
import android.util.Log;
import android.webkit.WebView;
import android.widget.Toast;

/**
 * Created by Jzhung on 2016/4/28.
 */
public class JWebView extends WebView {
    private static final String TAG = "JWebView";

    public JWebView(Context context) {
        super(context);
    }

    public JWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public JWebView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void loadUrl(String url) {
        Log.i(TAG, "loadUrl: " + url);
        if (url.startsWith("alipays://")) {
            startAlipay(url);
            //放到else里防止返回按钮引起多次弹出支付
        } else {
            super.loadUrl(url);
        }
    }

    private void startAlipay(String url) {
        Log.i(TAG, "启动支付宝客户端");
        try {
            getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(getContext(), "未发现支付宝APP,请点击“继续支付”", Toast.LENGTH_SHORT).show();
        }
    }
}

 

1 条思考于 “H5页面调用支付宝客户端

发表评论

电子邮件地址不会被公开。 必填项已用*标注