Android第三方继承汇总

招行一网通集成

2017-02-24  本文已影响206人  前行的乌龟

话说这一网通的api和说好的完全不一样啊,封装何在,android 本地适配何在,语言适配还要自己注意,居然默认是适配英文的,我倒~~

一网通开发文档地址

** 核心思路 **
一网通本质上是招行的一套H5页面,目的是:使用H5兼容所有平台。那么对于开发者来说,就是完全没有封装性啊。

** 总体思路 **

  1. 自己写一个activity页面,标题栏自己写,招行的H5里面没有一般页面左上角的返回按钮,然后用webview加载招行的url
  2. 需要自己拦截招行的键盘输入uri,招行的键盘用的是我们集成进来的jar包里的,需要我们的webview拦截指定的uri
  3. 招行支付成功是展示页面,不论支付成功还是支付失败均没有回调,需要我们自己想办法。期中支付成功页有一个返回的按钮,这个按钮的url地址是可以自己配的,我们webview可以拦截这个url

** 先来看看招行支付,例子是滴滴的 **

Snip20170224_4.png Snip20170224_5.png Snip20170224_6.png

** 过程 **

** 注意点 **

Snip20170224_10.png Snip20170224_11.png Snip20170224_12.png Snip20170224_13.png

红圈中的按钮就是我们需要监听的,他的监听逻辑是webview监听特定url的重定向,这个url地址是由开发者自己指定的,需要联系招行。

键盘图片:


Snip20170224_14.png

demo的api:

                CMBKeyboardFunc kbFunc = new CMBKeyboardFunc(YiWangTongPayActivity.this);
                // 监听一网通键盘url
                if (!kbFunc.HandleUrlCall(webView, url)) {
                    return false;
                }

注意一点,键盘中默认的文字是英文的,必须导入中文的values-zh文件才可显示中文


Snip20170224_15.png

官方文档有很多说的不是很清晰,尽量看看官方的demo,起码没什么问题

           public class YiWangTongPayActivity extends AppCompatActivity {

    private static final String TAG = "ehome" + YiWangTongPayActivity.class.getName();
    private static final String KEY_ATTACH = "key_attach";
    private static final String KEY_ORDER_ID = "key_order_id";
    private static final String KEY_ORDER_TYPE = "key_order_type";
    // 支付成功页面中的按钮的url
    private static final String URL_BACK = "http://cmbc/success"; 
    private WebView webView;
    private View view_goBack;
    private View view_loading;

    private String orderId;
    private String orderType;
    // 记录是否正在查询支付结果
    private boolean isQueryPayResult = false;

    public static Intent getIntent(Activity activity, String orderId, String orderType, String attack) {
        if (BaseUtils.isEmpty(attack)) {
            return null;
        }
        Intent intent = new Intent(activity, YiWangTongPayActivity.class);
        intent.putExtra(KEY_ATTACH, attack);
        intent.putExtra(KEY_ORDER_ID, orderId);
        intent.putExtra(KEY_ORDER_TYPE, orderType);
        return intent;
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_yiwangtongpay);
        initView();
        initClick();
        initWebView();

        // 获取数据
        Intent intent = getIntent();
        if (intent == null) {
            EventBus.getDefault().post(new YWTPayRayResult(YWTPayRayResult.ERROR, "支付失败"));
            YiWangTongPayActivity.this.finish();
            return;
        }
        String attach = intent.getStringExtra(KEY_ATTACH);
        orderId = intent.getStringExtra(KEY_ORDER_ID);
        orderType = intent.getStringExtra(KEY_ORDER_TYPE);
        String url = ConfigFactory.newInstance().getYiWangTongPayUrl();
        String parame = "jsonRequestData=" + attach;
        webView.postUrl(url, parame.getBytes());
    }

    private void initView() {
        webView = (WebView) findViewById(R.id.view_webview);
        view_goBack = findViewById(R.id.pay_back);
        view_loading = findViewById(R.id.announcement_list_loading);
    }

    private void initClick() {
        view_goBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 查询支付是否成功
                if (!isQueryPayResult) {
                    queryPayResult(orderId, orderType);
                }
            }
        });
    }

    private void initWebView() {
        // 对WebView进行设置
        webView.getSettings().setUserAgentString(Environment.getInstance().getWebUserAgentEx(webView.getSettings().getUserAgentString()));
        webView.getSettings().setDefaultTextEncodingName("utf-8");
        webView.getSettings().setJavaScriptEnabled(true);
        webView.getSettings().setSupportZoom(false);
        webView.getSettings().setSavePassword(false);
        webView.getSettings().setSaveFormData(false);
        webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
        webView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                DebugLog.d(TAG, "监听到重定向url:" + url);

                // 使用当前的WebView加载页面
                CMBKeyboardFunc kbFunc = new CMBKeyboardFunc(YiWangTongPayActivity.this);
                // 监听支付成功按钮的特定url
                if (url.equals(URL_BACK)) {
                    isQueryPayResult = false;
                    EventBus.getDefault().post(new YWTPayRayResult(YWTPayRayResult.SUCCESS, "支付成功"));
                    YiWangTongPayActivity.this.finish();
                    return false;
                }
                // 监听一网通键盘url
                if (!kbFunc.HandleUrlCall(webView, url)) {
                    return false;
                }



                return true;
            }
        });
    }

    private void queryPayResult(String orderId, String orderType) {

        isQueryPayResult = true;
        view_loading.setVisibility(View.VISIBLE);
        YiWangTongPayHelper.getPayInfo(new YiWangTongPayRequest(orderType, orderId), new YiWangTongPayHelper.IYiWangTongPayCallBack() {
            @Override
            public void success() {
                view_loading.setVisibility(View.GONE);
                isQueryPayResult = false;
                EventBus.getDefault().post(new YWTPayRayResult(YWTPayRayResult.SUCCESS, "支付成功"));
                YiWangTongPayActivity.this.finish();
            }

            @Override
            public void error(String message) {
                view_loading.setVisibility(View.GONE);
                isQueryPayResult = false;
                EventBus.getDefault().post(new YWTPayRayResult(YWTPayRayResult.ERROR, message));
                YiWangTongPayActivity.this.finish();
            }
        });
    }

    /**
     * 强制处理返回键,检测支付结果
     */
    @Override
    public void onBackPressed() {
        if (!isQueryPayResult) {
            queryPayResult(orderId, orderType);
        }
    }

}
上一篇 下一篇

猜你喜欢

热点阅读