招行一网通集成

话说这一网通的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

** 过程 **

  • 首先服务器根据api生成支付数据,使用签名加密,再发送给app
  • app使用webview模拟一个post请求加载支付url
  • 中间过程不用app本地管
  • 我们需要做左上角的返回按钮和物流返回键,还有支付成功页中『返回商家』按钮的监听
  • 使用eventbus传递支结果

** 注意点 **

  • 标题栏自己写,返回键自己监听
Snip20170224_10.png
  • 标题栏一网通的H5页面是没有滴
  • 返回键需要自己监听,物流返回键同样需要监听,监听方式一样。
  • 我这得做法是,不管用户处于支付的那个环节,只要点了左上角返回键,或是物流返回键,就去查询支付结果。我这的服务器写了一个结果,可以查询订单的支付结果。要是服务器不给写,自己也可以去查,一网通提供了这个api
Snip20170224_11.png
Snip20170224_12.png
  • 支付成功监听
    一网通的支付成功会重定向到一个指定的成功页面,当然没有回调,需要我们自己实现
    先来看看图:
Snip20170224_13.png

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

  • 一网通SDK中的键盘,这个键盘是实际上一个activity页面,需要我们在webview的重定向监听中监听指定url,启动这个键盘页面,不过sdk中已经提供了这个方法,光网文档中没有写具体的调用方法,需要查看官方的demo才可以看到

键盘图片:


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

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容