首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >uni-app 微信公众号内嵌H5 自定义分享开发踩坑

uni-app 微信公众号内嵌H5 自定义分享开发踩坑

作者头像
玖柒的小窝
修改于 2021-10-26 07:18:50
修改于 2021-10-26 07:18:50
5K00
代码可运行
举报
文章被收录于专栏:各类技术文章~各类技术文章~
运行总次数:0
代码可运行

描述:

首次开发卡片式分享链接,过程中遇到许多坑, 终于完成了这个功能,记录的开发过程不一定符合你的需求,但如果你也是用uniapp开发,希望本篇能够帮助到你。

效果图:

准备工作:

  • 设置JS安全域名:设置>公众号设置>功能设置;把服务器域名填入JS接口安全域名。 (重要:会得到下载校验文件)
  • 设置IP白名单:设置>安全中心>IP白名单;把服务器IP地址填入IP白名单。
  • 注意:配置后需下载效验文件并上传你自己的服务器根目录。

引入js文件:

方案一

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// cmd 安装
npm install jweixin-module --save  



// 需要引入的位置引入
let jweixin = require('jweixin-module') 

复制代码

方案二

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 在html的 head头部
<script src="http://res2.wx.qq.com/open/js/jweixin-1.6.0.js"></script>


// 使用dom方式 在onLoad() 中使用
var hm = document.createElement("script");
hm.src = "https://res2.wx.qq.com/open/js/jweixin-1.6.0.js";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
复制代码

通过config接口注入权限验证配置

  • 后端需要写一个签名认证的接口,去返回如下几个必要参数(这块和你们自己的后端协调,看他怎么给你处理,如何生成签名的算法在开发者文档里面都是有的)
  • 点这里:developers.weixin.qq.com/doc/offiacc…

所有js接口列表

地址: developers.weixin.qq.com/doc/offiacc…

全部代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 调用的页面
import weixinModule from "./weixinModule.js"


onLoad() {
    weixinModule.WXConfig(this);
}
复制代码
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// weixinModule.js
var jweixin = require('jweixin-module')
function WXConfig(_this){
//这个URL 路径中不可以带有hash值 即不能又 #后面的的内容(包含#)
//这里使用到了encodeURIComponent() 下文中会说明原因为什么要使用它
let URL = window.encodeURIComponent(location.href.split('#')[0])
		console.log(URL);
	
	_this.api({
		url: URL //我这里将当前页面的URL传给后端进行签名
	}).then(response => {
		console.log('response', response);
		let res = response.data
		
		if (res.codes === '200') {
			
			jweixin.config({
                          debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 
                          appId: res.appId, // 和获取Ticke的必须一样------必填,公众号的唯一标识
                          timestamp: res.timestamp, // 必填,生成签名的时间戳
                          nonceStr: res.nonceStr, // 必填,生成签名的随机串
                          signature: res.signature, // 必填,签名,见附录1
                          //需要分享的列表项:发送给朋友,分享到朋友圈,分享到QQ,分享到QQ空间
                          jsApiList: ["updateAppMessageShareData", "updateTimelineShareData"]
                        });
			jweixin.ready(function(){
				// 分享给朋友
				jweixin.updateAppMessageShareData({ 
				    title: '快看!这里有个帅哥', // 分享标题
				    desc: '你看我帅不帅', // 分享描述
					 // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
				    link: 'http://你的域名/index?inviteCode=2222',//这里可带参数,必须是同配置的JS安全域名一致
					imgUrl:'http://你的域名/images/shuai.png',// 必须是同配置的JS安全域名一致
				    success: function () {}
				})
			})
			wx.error(function(res){
			  // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
			  console.log("出现错误了", res);
			});
		}
	})
}


export default {
	WXConfig
}
复制代码

常见错误及原因

invalid signature签名错误。建议按如下顺序检查:

1.确认签名算法正确,可用官方工具进行校验。(mp.weixin.qq.com/debug/cgi-b…

2.确认confignonceStrjs中驼峰标准大写S), timestamp与用以签名中的对应noncestr, timestamp一致。

3.确认url是页面完整的url(请在当前页面alert(location.href.split('#')[0])确认),包括'http(s)://'部分,以及’?'后面的GET参数部分,但不包括'#'hash后面的部分。

4.确认 config中的 appid与用来获取jsapi_ticket的 appid一致。

5.确保一定缓存access_tokenjsapi_ticket。(token已缓存再请求中,ticket我是请视情况而定)

6.确保你获取用来签名的url是动态获取的,如果是html的静态页面在前端通过ajaxurl传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。

7.最重要: 准备工作做了吗

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 描述:
  • 效果图:
  • 准备工作:
  • 引入js文件:
  • 通过config接口注入权限验证配置
  • 所有js接口列表
  • 全部代码
  • 常见错误及原因
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档