文档章节

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

银装素裹
 银装素裹
发布于 07/17 22:46
字数 1393
阅读 232
收藏 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
博文 44
码字总数 23598
作品 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
由覆盖mui.back()方法引起的闪屏

今天遇到了页面闪屏的一个问题,在网上看到各种优化白屏,闪屏的方法,都不管用,要闪屏的代码如下: 我想让该页面在返回时跳转到“homeView ”,但是发现一个很奇怪的现象,应用启动后,第一...

杜太神
2016/09/14
565
0

没有更多内容

加载失败,请刷新页面

加载更多

初级开发-编程题

` public static void main(String[] args) { System.out.println(changeStrToUpperCase("user_name_abc")); System.out.println(changeStrToLowerCase(changeStrToUpperCase("user_name_abc......

小池仔
今天
4
0
现场看路演了!

HiBlock
昨天
12
0
Rabbit MQ基本概念介绍

RabbitMQ介绍 • RabbitMQ是一个消息中间件,是一个很好用的消息队列框架。 • ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的s...

寰宇01
昨天
9
0
官方精简版Windows10:微软自己都看不过去了

微软宣布,该公司正在寻求解决方案,以减轻企业客户的Windows 10规模。该公司声称,企业客户下载整个Windows 10文件以更新设备既费钱又费时。 微软宣布,该公司正在寻求解决方案,以减轻企业...

linux-tao
昨天
14
0
TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部