uniapp开发微信公众号H5页面,跳转小程序及跳转过程中全部踩坑点记录

实现效果

老规矩,先放实现效果图

在这里插入图片描述

实现方案(很简单)

npm install weixin-js-sdk --save
<template>
	<view>
		<view v-show="showOpenWeapp">
			<wx-open-launch-weapp 
			id="launch-btn" 
			ref="launch_btn" 
			username="gh_79xxxxxxxxx"   要跳转的小程序username
			path="">
				<template>
					<script type="text/wxtag-template">
						<style>.btn { display:block;
								  border:none;
								  width:100%;
								  height:50px;
								  color:#ffffff;
								  font-weight:bold;
								  background-color:#07c261;
								  margin: 0 auto;}
						</style>
				        <button class="btn">去跳转</button>
				    </script>
				</template>
			</wx-open-launch-weapp>
		</view>
	</view>
</template>
<script>
	import jweixin from 'weixin-js-sdk';
	export default {
		data() {
			return {
				showOpenWeapp: false,
			};
		},
		mounted() {
			this.init();
		},
		methods: {
			init(info) {
					//初始化微信jdk
				jweixin.config({
					debug: false,
					appId: "XXXXXXXXX", // 找后端
					timestamp: "XXXXXXXXX", // 找后端
					nonceStr: "XXXXXXXXX", // 找后端
					signature: "XXXXXXXXX", // 找后端
					jsApiList: ['checkJsApi',
						        'openLocation',
						        'getLocation',
						        'closeWindow',
						        'scanQRCode',
						        'chooseWXPay',
						        'chooseImage',
						        'uploadImage',
						        'previewImage',
						        'getLocalImgData'
					],
                    openTagList: ['wx-open-launch-weapp'] // 跳转必要的参数,需要使用的开放标签列表,例如['wx-open-launch-app']
				})
						// 监听结果
				jweixin.error((err) => {
					console.error('微信 JSSDK 初始化失败', err);
				});
				jweixin.ready((res) => {
			 		console.log('微信 JSSDK 初始化成功',res)
			 		this.accredit();
				})
			},
			accredit() {
				let data = {
					orderNo: this.info.orderNo
				}
				authorize(data).then((res) => {
					console.log(res, "res")
						//获取跳转链接
						this.toUrl = res.data.data.linkUrl
						console.log(this.toUrl, 'this.toUrl')
						this.$nextTick(() => {
							let btn = document.getElementById('launch-btn');
							console.log(btn, "btnbtnbtn")
							console.log(this.$refs.launch_btn, "$refs$refs$refs$refs$refs")
							//赋值跳转链接
							btn.setAttribute("path", this.toUrl);
							this.showOpenWeapp = true;
							btn.addEventListener('launch', function(e) {
								console.log('success');
							});
							btn.addEventListener('error', function(e) {
								console.log('fail', e.detail);
							});
						})
				})
			}
		},
	}
</script>

实现原理

1、毋容置疑第一步肯定是装微信的SDK
2、初始化SDK
3、配置SDK开放标签也就是openTagList: [‘wx-open-launch-weapp’]
微信官方文档: https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html#21

注意点

截止到目前,其实你的跳转功能已经全部完成了。
不论你是vue建立的h5页面,还是uni创建的微信公众H5,用的都是这一套开放标签。
如果跳转不成功,更多精彩内容,细细往后看一步一步踩坑逻辑

踩坑点

一、本地启动了项目,但是为啥就报JSSDK初始化失败

在这里插入图片描述

答:升级到测试环境去看。本地为啥看不了,I don’t know

二、打包到测试环境,还是报SDK初始化失败

在这里插入图片描述

答:签名生成有问题,也就是初始化sdk的时候jweixin.config 后端给的签名那些参数不对,请求后端一起帮忙查看,以下四个参数
appId: “XXXXXXXXX”, // 找后端
timestamp: “XXXXXXXXX”, // 找后端
nonceStr: “XXXXXXXXX”, // 找后端
signature: “XXXXXXXXX”, // 找后端
vConsole 可以让你真机看到打印效果
vConsole Git地址: https://gitee.com/Tencent/vConsole

三、本地启动了项目,引入了wx-open-launch-weapp为啥报标签错误

在这里插入图片描述

答:一样的道理升级到测试环境去看。如果你想本地看也可以main.js引入(没啥意义)

在这里插入图片描述

四、最关键点!!!

1、没反应,跳转的按钮不出来
2、openTagList 没有返回 wx-open-launch-weapp等等

总结:你的测试环境不是已认证的服务号

在这里插入图片描述

在这里插入图片描述
微信社区: openTagList 没有返回 wx-open-launch-weapp
微信社区: wx.config begin中有openTagList,end后为空

总结:
当时排查这个点的时候,查了一天,所有的方法都搜遍了,配置这,配置那,但是死活点了就是没反应
领导知道有个现成的例子,专门还把代码要过来看了一圈,那个是拿vue建的h5项目。曾经怀疑难道是uni兼容问题。
最终发现完全不是,就是引入微信SDK,一个开放标签简单的一个逻辑。

var code = “e4a57a12-8281-44e9-beae-775ca5f8eacd”

//微信充值 //支付接口测试 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("验证失败!") }); } }) }
UniApp 开发微信公众号 H5 页面中实现跳转小程序的功能,需要借助微信提供的JS-SDK,特别是`wx.navigateToMiniProgram`或`wx.redirectToMiniProgram`这两个API。以下是步骤: 1. **引入微信JSSDK**: 首先,在公众号后台配置好微信开发者工具,获取到appID,然后在uni-app项目的pages中引入微信的JSBridge库,例如在index.html: ```html <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js" type="text/javascript"></script> ``` 2. **初始化JS-SDK**: 在相应的H5页面加载完成后,调用微信的`onLoad`生命周期函数,并初始化JS-SDK: ```javascript Page({ onLoad() { wx.config({ debug: false, // 是否开启调试模式,false生产环境 appId: 'your_app_id', // 必填,公众号的唯一标识 timestamp: '', // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '', // 必填,签名 jsApiList: ['checkJsApi', 'navigateToMiniProgram'] // 必填,需要使用的JS接口列表 }); wx.ready(function () { // 小程序路径,可以是一个小程序内的页面路径,也可以是统一下发的链接 let path = 'page/path/in/your/miniprogram'; // 跳转小程序 wx.navigateToMiniProgram({ path: path, success: function(res) { console.log('跳转成功'); }, fail: function(err) { console.error('跳转失败:', err); } }); }); } }); ``` 3. **检查并授权**:在使用某些特定接口之前,需要先检查用户是否已授权,例如`wx.checkJsApi`。 记得替换上述代码中的`your_app_id`、`timestamp`、`nonceStr`和`signature`为实际获取的值。在实际项目中,这些值通常由后端提供或者通过前端获取签名函数动态生成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值