vue h5移动端 签名错误 ios端签名错误 分享刷新后分享链接到首页面 等微信分享的坑 微信支付ios url支付失败 无法调起 当前页面未注册

最近做vue 移动端分享 引入sdk做分享支付的功能 本来都好好的一路顺风 但是后面发现ios端签名无效

坑1: ios签名无效解决办法

查了好多最后发现 《ios是要用每回进入项目的第一个页面的路径去注入微信sdk》

《App.vue》
	    methods: {
			wxsdk() {
				let dataarr = {};
				dataarr.url = window.location.href;
				lypi.exams.yinrusdk(dataarr, (state, res) => {     //这个是后太去换取签名等信息的接口
					let sdk = res.data.data;
					wx.config({
						debug: false, // 是否开启调试模式
						appId: '', //appid
						timestamp: sdk.timestamp, // 时间戳
						nonceStr: sdk.nonceStr, // 随机字符串
						signature: sdk.signature, // 签名
						jsApiList: [
							'onMenuShareTimeline',
							'onMenuShareAppMessage',
							'onMenuShareQQ',
							'onMenuShareWeibo',
							'onMenuShareQZone'
						], // 需要使用的JS接口列表
					})
				})
			}
		},
		watch: {
			'$route': 'wxsdk'    //路由监听发生变化的时候去调用  wxsdk()  
		}

这样的话注入签名就没有问题了 <<这个方法不是最好的解决办法 如有更好的解决办法 欢迎留言哦>>

你以为就这样就结束了 on

坑2: 页面进行刷新后分享出去的链接《跳到了首页》

原因: 是因为我们使用vue的路由 vue-router 中 history 模式下的问题 ios的url解析机制不同造成的

解决办法: 使用重定向! (网上最普遍的方法 本来想找出问题的 但时间有限先这样解决了 )

  1. 在static>html 路径下创建redirect.html html页面
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
	</body>
	<script>
		let url = location.href.split('?')
		let pars = url[1].split('&')
		let data = {}
		pars.forEach((n, i) => {
			let p = n.split('=')
			data[p[0]] = p[1]
		})
		if (!!data.app3Redirect) {
			self.location = decodeURIComponent(data.app3Redirect)
		}
	</script>
</html>

  1. 创建好重定向的页面后 开始使用>
      const protocol = window.location.protocol;
      const host = window.location.host;
      const hosturl = `${protocol}\/\/${host}/`;  //获取当前页面前面域名部分  (拼接重定向页面的路径)
      var shareWxLink = hosturl +  "static/html/redirect.html?app3Redirect=" + encodeURIComponent(window.location.href);
      var data = {
        title: "惠多旅游", // 分享标题
        desc: this.scenery.title, // 分享描述
        link: shareWxLink, // 分享链接  
        imgUrl: this.scenery.sceneryImgs[0], // 分享图标
        success: function() {
          console.log("分享成功");
        },
        cancel: function() {
          console.log("分享失败");
        }
      };

在这里插入图片描述

坑3: 发起微信支付的时候 安卓一切正常 但是ios报错 当前页面未注册

原因: 如果你刷新页面后就会发起支付了 这是因为ios注册签名是用的第一次进入项目的url路径 所以你如果是从别的页面跳转进来的就会报你第一个进入的页面没有注册支付功能 没有设置成支付页面在这里插入图片描述

想了好长时间 最后决定的解决办法是在进入支付页面的时候使用路由守卫拦截 然后使用 location.href 进行跳转

beforeRouteEnter(to, from, next) {
			if (from.name == 'suborder') {   //拦截是否是从你上个页面指定页面跳转过来的
				const protocol = window.location.protocol;
				const host = window.location.host;
				const hosturl = `${protocol}\/\/${host}`;     //获取到的当前域名部分
				window.location.href = hosturl + to.fullPath;   //进行跳转拼接   《to.fullPath》 是你从上个页面传的值
			} else {
				next();   //放行
		   }
},

微信提示 beforeRouteEnter做路由守卫的话得放到你的第一个页面 要不会失效!!

现在微信ios 上的这些坑就解决了 但这都不是最好的解决办法 如果有更好的解决办法我会给大家更新 如果有大神有更高好的解决办法 ,欢迎留言学习哦!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
//微信充值 //支付接口测试 function balance(url, data) { uni.request({ url: cfg.originUrl + '/wx/mp/js_sig.do', data: { route: url }, method: 'GET', success: (res) => { jweixin.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户alert出来 appId: res.data.appId, // 必填,公众号的唯一标识 timestamp: res.data.timestamp, // 必填,生成签名的时间戳 nonceStr: res.data.nonceStr, // 必填,生成签名的随机串 signature: res.data.signature, // 必填,签名 jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表 }); jweixin.ready(function() { uni.request({ url: cfg.originUrl + '/wx/recharge/pay.do', method: 'POST', header: { 'Content-type': "application/x-www-form-urlencoded", }, data: JSON.stringify(data), success: function(res) { alert("下单成功"); alert(JSON.stringify(res)); alert(res.data.order_id); all.globalData.orderId = res.data.order_id; uni.setStorageSync('orderId', res.data.order_id); jweixin.chooseWXPay({ timestamp: res.data.payParams.timeStamp, // 支付签名时间戳 nonceStr: res.data.payParams.nonceStr, // 支付签名随机串 package: res.data.payParams.package, // 接口返回的prepay_id参数 signType: res.data.payParams.signType, // 签名方式 paySign: res.data.payParams.paySign, // 支付签名 success: function(e) { alert("支付成功"); alert(JSON.stringify(e)); // 支付成功后的回调函数 } }); } }) }); jweixin.error(function(res) { // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 console.log("验证失败!") }); } }) }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值