dcloud中Intent scheme的使用,外部APP唤醒微信公众号支付

公司要上线一款APP软件,采用的是H5开发,用的dcloud.io。APP有支付功能,支付宝和银联都已搞定,只有微信支付卡住了。javascript

微信支付有html

一、微信APP支付,原生SDK的,不过dcloud有集成,但由于没有审核经过因此没法使用;java

二、微信H5支付,这个强大的功能···微信并无对外部开放,只有像京东啊这类大平台有权限;android

这样看来貌似无法,只有等审核经过了···因而咱们又找了许多第三方平台,偶然发现有平台打出旗号说能够在微信调用公众号支付···咱们开始还觉得对方搞错了,没想到咱们本身找到一款APP,竟然就能在微信外部唤醒微信并打开公众号支付,是的,没看错,就是在微信外面调用本应该只能在微信内浏览器才能用的公众号支付,既然别人能实现,咱们就也应该能够。后端

反编译了下找到的那款APP,又和第三方给的SDK作了对比,发现他们的调用方法同样,并且参数也同样,据猜想参数应该是某个大平台的。浏览器

intent://dl/businessWebview/link?(后面是参数,略)

既然有了方法拿来用就是了,结果发现高兴早了。微信

dcloud中能够用<a>标签来设置UrlScheme唤醒第三方,例如:函数

weixin://

结果我把intent://换上以后发点击无效,而在手机浏览器中直接打开页面则能够正常跳转到微信内部浏览器,因而又是新的一轮查资料~微信支付

说实话,我一个PHP后端开发为啥老干不沾边的事儿····没想到这一查资料,就走远了···url

一、Intent scheme URL attack 这里介绍了intent的一种攻击方法,也就是intent://能唤醒其它APP的原理。

二、Android 解析 Intent 协议并打开程序,接着又看了Android的原生写法,看不懂···

三、5+ App开发Native.js入门指南,还要研究下Native.js如何调用Android原生函数···看懵比了

开始模仿写,先看下第三方给的SDK接口的原生写法:

Intent intent = null;
        try {
            intent = Intent.parseUri(URL, 1);
            intent.addCategory("android.intent.category.BROWSABLE");
            intent.setComponent(null);
            startActivity(intent);
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }

而后用Native.js模拟调用···我其实不懂咋写,写的乱七八糟,后来dcloud官方的磊子给作了改正:

var Intent = plus.android.importClass("android.content.Intent");
var context = plus.android.runtimeMainActivity();
    // 建立Intent的实例对象
    var intent = new Intent(URL,1);
    intent.addCategory("android.intent.category.BROWSABLE");
    intent.setComponent(null);
    context.startActivity(intent);

其中的URL就是intent://地址,其实这就至关于一个连接,能够唤醒指定Scheme的APP。将URL换成intent://dl/businessWebview/link?并把代码放到Dcloud中用同步到手机APP中,就能够成功唤醒微信内部浏览器,加上相应的参数就能够调用公众号支付了。

后来,在和Dcloud群里一热心网友交流时,他发来plus.runtime.openURL让我试试看,果真一句代码就搞定了……

plus.runtime.openURL("intent://dl/businessWebview/link/?");

查了下资料http://ask.dcloud.net.cn/article/670,plus.runtime.openURL是5+ API,能够启动url scheme,能够说这句代码就是对上面原生的一个“封装”。

至此,功能实现了,虽然解决过程当中走了不弯路,幸亏学到了不少知识~

我一个后端,涨了很多姿式~

相关文章
相关标签/搜索