文档章节

mui集成微信H5支付(返回白屏问题已经解决)

银装素裹
 银装素裹
发布于 07/17 22:46
字数 1393
阅读 81
收藏 0
mui

一.项目需求

因为公司人员缺少,没有专门开发安卓和ios的人员,为了项目尽早上线采用了混合APP开发的方式,我选择了MUI混合开发框架,项目中需要在用户购买VIP会员的时候进行支付,所以需要在项目中解决这个问题,由于开发平台的支付没有申请下来,所以暂时先使用微信公众号H5支付.

二.在购买vip页面请求服务端接口获取H5支付的微信链接地址mweb_url

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title>喜登对</title>
    <script src="js/mui.min.js"></script>
    <script type="text/javascript" src="js/rem.js"></script>
    <link href="css/common.css" rel="stylesheet" />
    <link href="css/xxx.css" rel="stylesheet" />
</head>

<body>
    <div class="warp">
        <div class="header">
            <span class="goBack"></span>
            <p class="title">开通VIP</p>
        </div>
        <div class="payB">
            
            <div class="list">
                <ul id="vipList"></ul>
            </div>

            <div class="txt">
            	<p class="p1"><span class="fl"></span>升级为VIP,快速找到另一半<span class="fr"></span></p>
            	<div class="p2">
            		<p><i class="iconA"></i>交友成功率</p>
            		<p><i class="iconB"></i>收信次数</p>
            	</div>
            	<p class="p4"><span class="fl"></span>年费会员独享<span class="fr"></span></p>
            	<div class="p3">
            		<p><i class="icon01"></i>置顶推荐一天</p>
            		<p><i class="icon02"></i>高级搜索</p>
            		<p><i class="icon03"></i>无限畅聊</p>
            		<p><i class="icon04"></i>优先推荐</p>
            		<p><i class="icon05"></i>优先审核</p>
            		<p><i class="icon06"></i>隐身访问</p>
            		<p><i class="icon07"></i>查看全部</p>
            		<p><i class="icon08"></i>在线状态</p>
            	</div>
            </div>
            <div class="h"></div>
            <button id="buy">开通VIP</button>
        </div>
    </div>
</body>
<script src="js/me/base.js" type="text/javascript" charset="utf-8"></script>
<script>
	mui.init();	
	//点击开通vip
	mui('body').on('tap','#buy',function(){
        //从服务端获取微信公众号H5支付参数 package_id:礼包id(此处省略了部分业务代码)
		postVipApi(package_id)
	});
	
	//下订单
	function postVipApi(package_id)
	{
		mui.ajax(API_URL + 'vip/order',{
			data:{
				'package_id':package_id,
				'trade_type':'MWEB',
				 'wap_url':'https://xidengdui.com'
			},
			type:'POST',
			dataType:'json',
			headers:{Authorization:"Bearer " + getAppToken()},
			timeout:20000,
			success:function(data){
                //获取支付参数成功
				var payUrl = data.data.mweb_url;//这个是接口返回来的微信H5支付的连接地址
				//处理跳转支付问题(重点)
			},
			error:function(xhr){
				mui.toast('网络异常')
			}
		});
	}
</script>
</html>

三.处理微信H5支付连接mweb_url的跳转问题(重点)

这里一般会遇到这些问题:

问题1.跳转mweb_url链接后出现商家参数有误的问题(解决办法:没有设置好头信息里面的referer参数,或者referer参数填写的连接不是微信商户平台注册的安全域名)

问题2:能跳转到微信的支付页面,但是返回后出现页面空白,或者支付成功后点击完成出现页面空白的问题,解决的方案是:

把当前页面当做mweb_url支付页面的父级页面,不要用open的方式打开支付连接,而是以子页面的形式添加本页面中,且设置好子页面的显示样式就可以完美解决这个问题,完整的解决代码如下:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
    <title>喜登对</title>
    <script src="js/mui.min.js"></script>
    <script type="text/javascript" src="js/rem.js"></script>
    <link href="css/common.css" rel="stylesheet" />
    <link href="css/xxx.css" rel="stylesheet" />
</head>

<body>
    <div class="warp">
        <div class="header">
            <span class="goBack"></span>
            <p class="title">开通VIP</p>
        </div>
        <div class="payB">
            
            <div class="list">
                <ul id="vipList"></ul>
            </div>

            <div class="txt">
            	<p class="p1"><span class="fl"></span>升级为VIP,快速找到另一半<span class="fr"></span></p>
            	<div class="p2">
            		<p><i class="iconA"></i>交友成功率</p>
            		<p><i class="iconB"></i>收信次数</p>
            	</div>
            	<p class="p4"><span class="fl"></span>年费会员独享<span class="fr"></span></p>
            	<div class="p3">
            		<p><i class="icon01"></i>置顶推荐一天</p>
            		<p><i class="icon02"></i>高级搜索</p>
            		<p><i class="icon03"></i>无限畅聊</p>
            		<p><i class="icon04"></i>优先推荐</p>
            		<p><i class="icon05"></i>优先审核</p>
            		<p><i class="icon06"></i>隐身访问</p>
            		<p><i class="icon07"></i>查看全部</p>
            		<p><i class="icon08"></i>在线状态</p>
            	</div>
            </div>
            <div class="h"></div>
            <button id="buy">开通VIP</button>
        </div>
    </div>
</body>
<script src="js/me/base.js" type="text/javascript" charset="utf-8"></script>
<script>
	mui.init();
	mui.plusReady(function(){
	var self = plus.webview.currentWebview();
	//选择开通的vip
	mui('#vipList').on('tap','li',function(){
		var vip_id = this.getAttribute('vip-id');
		var cls = this.getAttribute('class');
		package_id = vip_id;
		if(cls.lastIndexOf('on')>0)return;
		mui('#vipList .on')[0].classList.remove('on');
		this.classList.add('on');		
	})
	
	//点击开通vip
	mui('body').on('tap','#buy',function(){
		postVipApi(package_id)
	});
	
	//下订单
	function postVipApi(package_id)
	{
		mui.ajax(API_URL + 'vip/order',{
			data:{
				'package_id':package_id,
				'trade_type':'MWEB',
				 'wap_url':'https://xidengdui.com'
			},
			type:'POST',
			dataType:'json',
			headers:{Authorization:"Bearer " + getAppToken()},
			timeout:20000,
			success:function(data){
				var payUrl = data.data.mweb_url;
				//处理跳转支付问题,此处巧妙在第三个参数,通过设置这个内嵌页面的样式来解决白屏问题,因为微信支付页面点击返回或者支付结束点击完成后都是默认返回唤起支付链接的页面,也就是payView这个创建出来的内嵌页面所以微信支付完成返回的页面payView视图上就会看不到了,达到了解决白屏的问题,其中additionalHttpHeaders:{referer:'http://xidengdui.com'}是解决出现商家参数有误的问题
				var payView = plus.webview.create(payUrl, 'pay-url', {
					top: '1000px',bottom: '1000px',
					additionalHttpHeaders:{referer:'http://xidengdui.com'}
				});
				self.append(payView);
			},
			error:function(xhr){
				mui.toast('网络异常')
			}
		});
	}

    });
</script>
</html>

 

© 著作权归作者所有

共有 人打赏支持
银装素裹
粉丝 1
博文 40
码字总数 21618
作品 0
广州
程序员
请在微信外付订单,微信外怎么打开订单

一、 普通用户遇到请在微信外付订单的解决方法 有些人在使用智能手机, 或者pad购物时, 会遇到“请在微信外打开订单,进行支付”的提示, 解决的方法很简单, 你只要不在微信里打开那个网页...

towtotow
02/22
0
0
小柒2012/springMvc-dubbo-pay

springMvc-dubbo-pay 此版本为springMvc整合版,boot版本见spring-boot-pay 有时候开发者想要的不一定是一个大而全的项目,而是可以集成到适合我们项目中的Demo。 以下所有支付Demo,绝非唬人...

小柒2012
2017/08/09
0
0
微信h5支付开发指南

前言 H5支付是基于公众号基础开发的一种非微信内浏览器支付方式(需要单独申请支付权限),可以满足在微信外的手机H5页面进行微信支付的需求。同时,由于H5链接传播十分方便、来源不易追踪,...

Tolonger
2017/11/29
0
0
小柒2012/spring-boot-pay

spring-boot-pay 支付服务:支付宝,微信,银联详细 代码案例 (除银联支付可以测试以外,支付宝和微信支付测试均需要企业认证,个人无法完成测试),项目启动前请仔细阅读 注意事项 。 API接口...

小柒2012
2017/08/02
0
0
支付宝H5支付和微信的H5支付

支付宝H5支付和微信的H5支付 PS:下面文章创建于2016年,当时微信还没有开放标准H5支付,只是可以通过公众号间接打通H5支付,所以下面的微信H5支付,归属于【公众号支付】方式 官网 支付宝:...

NO17
2016/08/30
546
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Confluence 6 删除垃圾内容

属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL。 如果你有很多垃圾用户在你的系统中创建了属性,你可以使用...

honeymose
今天
0
0
qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0
20180818 上课截图

小丑鱼00
今天
1
0
Springsecurity之SecurityContextHolderStrategy

注:下面分析的版本是spring-security-4.2.x,源码的github地址是: https://github.com/spring-projects/spring-security/tree/4.2.x 先上一张图: 图1 SecurityContextHolderStrategy的三个......

汉斯-冯-拉特
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部