安卓非微信内置浏览器中的网页调起微信支付的方案研究》_网页跳转微信

《安卓非微信内置浏览器中的网页调起微信支付的方案研究》

编辑:小网友 发表于:2018年09月23日
安卓非微信内置浏览器中的网页调起微信支付的方案研究 博客学院下载图文课TinyMind论坛APP问答商城VIP会员活动招聘ITeyeGitChat写博客发Chat传资源登录注册转安卓非微信内置浏览器中的网页调起微信支付的方案研究2016年07月13日133928huangwenkui1990阅读数13456更多个人分类android问题来源之前在app中集成过微信支付此种微信支付方式为app支付即在我们自己的应用中嵌入微信支付SDK由Native代码调起微信支付后来由于业务需要在我们app的WebView中打开第三方店铺的网页在第三方网页中有微信支付按钮测试反馈说ios可以调起微信支付而android不可以后来网上看到说微信内置Webview和京东的网页也可以调起微信支付微信自己没什么奇怪的而京东可以的话如果它跟微信没什么合作协议的话那么其他app应该也可以在网页中调用微信支付探索由于ios可以支持因此找ios同事测试了一下发现ios内置浏览器中只要输入相关协议都可以调起相关app的比如1输入weixin可以调起微信2输入alipay可以调起支付宝这样就不难解释为什么ios的webview中第三方网页可以调起微信支付了但android在浏览器中输入上述协议没有任何响应因此本文主要探讨是基于android平台的后来终于找到微信支付商户平台开发者文档作为客户端开发者是不会想到这个开发文档的当时集成app支付的时候所查阅的文档也未提到H5支付的方式在文档的使用场景介绍中有这么一段H5支付是基于公众号基础开发的一种非微信内浏览器支付方式需要单独申请支付权限可以满足在微信外的手机H5页面进行微信支付的需求同时由于H5链接传播十分方便来源不易追踪商户需要特别注意做好防钓鱼防刷单的处理控制风险由此看来确实官方是支持在非微信内置浏览器中调起微信支付的在文档中微信给了一个官方的测试链接httpwxpayweixinqqcompub_v2paywapv2php在手机浏览器中打开该页面点击立即购买就可以调起微信支付我测试了Nexus手机的Chorme浏览器和Sony手机的自带浏览器均可以具体效果如下图这里写图片描述这里写图片描述通过查看网页源代码发现立即购买是一个按钮其连接点击协议是这样的hrefweixinwappayappid3Dwx2421b1c4370ec43b26noncestr3D3e84679af4efab5f32ee9ea01b2ec29026package3DWAP26prepayid3Dwx20160504154919fdacd7bc0d012791878026timestamp3D146234815926sign3DC40DC4BB970049D6830BA567189B463B瞬间觉得非常熟悉以前集成app支付的关键代码是这样的IWXAPIapiPayReqrequestnewPayReqrequestappIdwxd930ea5d5a258f4frequestpartnerId1900000109requestprepayId1101000000140415649af9fc314aa427requestpackageValueSignWXPayrequestnonceStr1101000000140429eb40476f8896f4c9requesttimeStamp1398746574requestsign7FFECB600D7157C5AA49810D2D8F28BC2811827BapisendReqreq上述a链接里的协议就是app支付里面的各种参数因此可以得到结论weixinwappay是微信定义的一种支付协议用于网页端支付微信app必定设置了名为weixin的scheme因此可以在网页上唤起微信app在通过约定的参数名称获取各种参数从而可以完成支付具体机制跟app支付是相同的至于上面一系列参数是第三方网页端跟微信那边获取的均由第三方服务端处理客户端不必关心知道了以上原理就该讨论解决方案了下面有几种可行的方案解决方案1上面可知微信的H5支付协议可以在浏览器中调起微信这也是最简单的方案如果我们的app打开第三方网页用的是手机浏览器的话就不用做什么直接可以调起微信支付了按微信文档所说应该大部分浏览器都支持我只是简单测试了两款解决方案2第一种方案固然简单但事实上我们往往使用WebView来打开第三方网页而不是手机浏览器因此如何让WebView也支持调起微信支付才是核心问题经过测试发现原生WebView是可以唤起微信支付的核心代码如下webViewnewWebViewthiswebViewgetSettingssetJavaScriptEnabledtruewebViewloadUrlhttpwxpayweixinqqcompub_v2paywapv2phpcode对就这样简单就OK了然而往往我们的app中使用自定义的WebView经测试发现如果为WebView设置了WebViewClient如下webViewsetWebViewClientnewWebViewClientsomelogic那么就不能唤起微信支付了errorCode返回10提示不支持该协议联系到可以在浏览器中唤起微信支付因此我的解决方案如下经测试是可以的webViewsetWebViewClientnewWebViewClientOverridepublicbooleanshouldOverrideUrlLoadingWebViewviewStringurl如下方案可在非微信内部WebView的H5页面中调出微信支付ifurlstartsWithweixinwappayIntentintentnewIntentintentsetActionIntentACTION_VIEWintentsetDataUriparseurlstartActivityintentreturntruereturnsupershouldOverrideUrlLoadingviewurlOverridepublicvoidonPageFinishedWebViewviewStringurlTODOAutogeneratedmethodstubsuperonPageFinishedviewurlOverridepublicvoidonReceivedErrorWebViewviewinterrorCodeStringdescriptionStringfailingUrlTODOAutogeneratedmethodstubsuperonReceivedErrorviewerrorCodedescriptionfailingUrl第二种解决方案的效果图如下注意使用了WebView打开的网页这里写图片描述这里写图片描述解决方案3跟前两种方案相比第三种就算直接暴力了结合之前嵌入SDK的app支付方式我们可以在WebView里拦截H5的支付协议从上述协议中取出各个参数完全可以走微信APP支付的方式了可以发现H5的支付协议中唯独少了partnerIdpartnerId指商户ID在注册微信支付时都会有至于为什么没有商户id猜测一是为了安全另外第三方自家的网页当然已知partnerId了如京东的网页京东在微信的商户id当然知道的就没必要放到协议中去如果我们的app知道第三方的partnerId的话这样就能拿到所有参数的话理论上完全可以转走app支付的方式具体我没有测试有兴趣的可以试一下阅读更多想对作者说点什么我来说一句jianquanbiao1758envious1758假如没有安装微信就崩溃了061912021楼点击链接打开微信再跳转到微信内部浏览器的解决方案qq10524412725773了解了一下httpxykcmbchinacomLattewx20150520wkffromISTA004ampampclientid招行的这个跳转发现后台返回的这个数据Android的Webview中H5支付调起微信支付fuzhongbin17万1问题之前在app中集成过微信支付此种微信支付方式为app支付即在我们自己的应用中嵌入微信支付SDK由Native代码调起微信支付后来由于业务需要在我们app的WebView中打开自微信公众平台开发入门本套课程的设计完全是为初学者量身打造课程内容由浅入深课程讲解通俗易懂代码实现简洁清晰通过本课程的学习学员能够快速入门微信公众平台开发能够胜任企业级的订阅号服务号企业号的应用开发工作Androidapp嵌入h5并调用h5的微信支付界面linidserggbvxdsefgh1191webviewsetWebViewClientnewWebViewClient覆写shouldOverrideUrlLoading实现内部显示网页Overrid打不开微信支付链接weixinwxpaybizpayurlprxxx跳转无法访问towtotow6631做微信扫码支付开发时会生成类似weixinwxpaybizpayurlpr这种链接是微信特有的链接当用户扫码微信支付二维码后会自动发起微信支付有学员问子恒老师让用户点击这个链接支付开发一微信支付开发之H5非微信浏览器支付JAVA版u0117815219358微信支付一共有以下几种1刷卡支付刷卡支付是用户展示微信钱包内的刷卡条码二维码给商户系统扫描后直接完成支付的模式主要应用线下面对面收银的场景2扫码支付扫微信公众号支付WeixinJSBridgeb85082414万微信公众号中直接发起支付此前开发更具官方文档一直在使用wxchooseWXPay方法完成支付WeixinJSBridge最开始开发微信的时候也有使用但是经常出问题支付不能发起当时查找好糖友注意它是天然胰岛素有助于降血糖龙城燨燚AndroidWebView调起微信支付宝支付xiaoxiao_ming4841webViewgetSettingssetAllowFileAccesstrue如果访问的页面中有Javascript则webview必须设置支持Javascriwebview调起微信支付phenomenon1238865项目中需要在App中使用webview通过访问url最终调起微信支付mWebViewWebViewfindViewByIdRidwv_actionmWebViewebview打开微信支付webviewh5页面中调用小程序支付小程序webview高级用法11towtotow5806webview组件中h5页面并不能直接调用微信支付因为webview的JSSDK没有wxchooseWXPay或者wxrequestPayment接口h5页面实现小程序支付其实是H5调用微信app支付qq_38373150187开发文档地址httpspayweixinqqcomwikidocapiH5phpchapter15_2相关热词as安卓this安卓安卓as安卓at安卓获取安卓信息huangwenkui1990关注原创16粉丝9喜欢1评论21等级访问5万积分662排名8万最新文章Android全局配置引用ttf字体包android40BLE开发官方文档介绍代码重构的方法安卓WebView与JavaScript交互安卓WebView中全屏播放网页视频个人分类Java基础整理9篇Java基础2篇android14篇归档2018年9月1篇2017年7月3篇2016年12月2篇2016年10月1篇2016年7月2篇2016年6月1篇2015年9月1篇2015年7月1篇2015年1月1篇2014年9月1篇2014年8月1篇2014年7月1篇2014年6月9篇展开热门文章解决安卓webview不支持inputtypefile问题阅读量15915安卓非微信内置浏览器中的网页调起微信支付的方案研究阅读量13453androidiosphp之间AES加密解密阅读量8407解决android50webview不能加载http与https混合内容的问题阅读量6093通过uri呼起本地app阅读量1290最新评论安卓非微信内置浏览器中的网页调起微jianquanbiao1758假如没有安装微信就崩溃了androidiosphp之间zyc_chun我试了一下ios如何对太长的字符串就行加密解密时就会失败不知道你有没有碰到不知道怎么解决安卓webview不支持inpu010071930replywangzizhong201205reply同问解决安卓webview不支持inpZguowang这个代码是放在哪里的啊解决安卓webview不支持inpqq_36640019replywangzizhong201205reply解决了吗我也是同样的问题联系我们客服请扫描二维码联系客服webmastercsdnnet4006600108QQ客服客服论坛关于招聘广告服务网站地图2018CSDN版权所有京ICP证09002463号百度提供搜索支持app经营性网站备案信息网络110报警服务中国互联网举报中心北京互联网违法和不良信息举报中心CSDNAPP注册
《安卓非微信内置浏览器中的网页调起微信支付的方案研究》—相关链接
245613162122242728293038394044496570


《安卓非微信内置浏览器中的网页调起微信支付的方案研究》