当前位置: 首页 > news >正文

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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

一.项目需求

因为公司人员缺少,没有专门开发安卓和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>

 

转载于:https://my.oschina.net/u/3223370/blog/1858475

相关文章:

  • JVM学习笔记二:内存结构规范
  • React Native中获取屏幕的宽高、分辨率
  • POI技术
  • 微信公众号之模板消息使用
  • Windows Unity ARKit发布到IOS相关设置及错误解决
  • Spring配置补充
  • 基于 HTML5 结合互联网+ 的 3D 隧道
  • Ligowave无线网桥15级手拉手链路设计及稳定性保障
  • JAVAOOP异常
  • RxJava mini
  • 从零开始的程序逆向之路 第一章——认识OD(Ollydbg)以及常用汇编扫盲
  • 使用在线yum源安装maridb并配置,以及跳过密码并修改。
  • 绝对音乐No.1
  • 阿里云和腾讯云VPC互通配置
  • java成神之路截图
  • [译]Python中的类属性与实例属性的区别
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • axios 和 cookie 的那些事
  • const let
  • flutter的key在widget list的作用以及必要性
  • github从入门到放弃(1)
  • GitUp, 你不可错过的秀外慧中的git工具
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Less 日常用法
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • PHP CLI应用的调试原理
  • PHP那些事儿
  • spring学习第二天
  • XForms - 更强大的Form
  • 大快搜索数据爬虫技术实例安装教学篇
  • 仿天猫超市收藏抛物线动画工具库
  • 关于Android中设置闹钟的相对比较完善的解决方案
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 面试总结JavaScript篇
  • 那些被忽略的 JavaScript 数组方法细节
  • 区块链将重新定义世界
  • 容器服务kubernetes弹性伸缩高级用法
  • 提醒我喝水chrome插件开发指南
  • 为视图添加丝滑的水波纹
  • 用 Swift 编写面向协议的视图
  • 云大使推广中的常见热门问题
  • 中文输入法与React文本输入框的问题与解决方案
  • 自制字幕遮挡器
  • No resource identifier found for attribute,RxJava之zip操作符
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • ​【已解决】npm install​卡主不动的情况
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (175)FPGA门控时钟技术
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (附源码)小程序 交通违法举报系统 毕业设计 242045