微信H5分享到朋友圈,转发朋友功能随记[通俗易懂]

微信H5分享到朋友圈,转发朋友功能随记[通俗易懂]最近刚做了一个微信公众号H5项目,里面包含一个分享到朋友圈和分享给好友的功能。配置白名单以及公众号js安全域名这些就不赘述了,接下来简单介绍下实现这个功能的几个前端步骤因为是微信网页开发,项目里如果有用到一些分享,音频,视频的功能就必须接入它的SDK工具包,详情可以到官方文档里看一下第一步绑定域名先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。备注:登录后可在“开发者中心”查看对应的接口权限。第二步引入JS文件在需要调用JS接口的页面引入如下JS文件,(支持ht

大家好,又见面了,我是你们的朋友全栈君。

最近刚做了一个微信公众号H5项目,里面包含一个分享到朋友圈和分享给好友的功能。配置白名单以及公众号js安全域名这些就不赘述了,接下来简单介绍下实现这个功能的几个前端步骤

因为是微信网页开发,项目里如果有用到一些分享,音频,视频的功能就必须接入它的SDK工具包,详情可以到官方文档里看一下

第一步 绑定域名

先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

备注:登录后可在“开发者中心”查看对应的接口权限。

第二步 引入JS文件

在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.6.0.js

如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.6.0.js (支持https)。

备注:支持使用 AMD/CMD 标准模块加载方法加载

我这里是用的 npm 的方式引入,npm引入方式

	npm i weixin-js-sdk -D

或者

	npm i weixin-js-sdk --save-dev

使用

	const wx = require("weixin-js-sdk");
第三步 通过config接口注入权限验证配置

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。

使用

wx.config({ 
   
  // 开启调试模式,调用的所有api的返回值会在客户端alert出来,
  // 若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  debug: true, 
  appId: '', // 必填,公众号的唯一标识
  timestamp: , // 必填,生成签名的时间戳
  nonceStr: '', // 必填,生成签名的随机串
  signature: '',// 必填,签名
  jsApiList: [] // 必填,需要使用的JS接口列表
});

这里的timestamp,nonceStr,signature参数涉及的签名算法应由后端去进行获取,再通过接口调用返回给前端。详情请看签名文档,有对获取签名算法逻辑介绍。jsApiList的接口列表在附录3

本项目是uni-app开发,所以config的方法是在生命周期onReady里调用的

第四步 通过ready接口处理成功验证

这一步主要就是使用api了,我只用到了分享功能并且需要获取到分享的状态,所以jsApiList里就只添加了 “onMenuShareAppMessage”, “onMenuShareTimeline” 这两个api。虽然分享接口里这两个是属于即将弃用的api,但是”updateAppMessageShareData”, “updateTimelineShareData” 无法获取状态,所以就暂时没有用。等什么时候官方停止使用 “onMenuShareAppMessage”, “onMenuShareTimeline” 了之后再替换 ?

这一部分的代码大概就是这个样子

wx.ready(function () { 
   
	//需在用户可能点击分享按钮前就先调用
	// 分享给朋友
	wx.onMenuShareAppMessage({ 
   
		title, // 分享标题
		// desc: '朋友分享', // 分享描述
		link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
		imgUrl, // 分享图标
		success: () => { 
   
			// 设置成功
			uni.showToast({ 
   
				title:"分享成功",
				icon: "none"
			})
		}
	})
	// 分享到朋友圈
	wx.onMenuShareTimeline({ 
   
		title, // 分享标题
		// desc: '朋友分享', // 分享描述
		link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
		imgUrl, // 分享图标
		success:  () => { 
   
			// 设置成功
			uni.showToast({ 
   
				title:"分享成功",
				icon: "none"
			})
		}
	})
});

Tip:

  1. 由于这几个函数的嵌套调用,在使用官方示例时要注意 this 的一个指向问题
  2. 在进行第二步获取签名算法时,向后端发送的url地址参数不能写死,应根据当前页面的实际地址来进行调用 url: `${window.location.href.split("#")[0]}
  3. 在第四步调用分享 api 时的link参数应注意,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致,即如果本项目是属于非微信公众号内的h5项目,要分享公众号内某篇推文的链接,那么不能直接拿公众号链接过来使用,后端应做一个地址的重定向,转到本项目域名下,并且所有涉及到 地址的参数都应动态获取,不能写死。
  4. 在做分享功能测试时,如果以链接的形式进行调试,在微信PC端以及开发者工具上能正常分享链接,而在手机上则只有本页面的链接地址。那么此时可以用登录的链接去换取一个二维码,进行扫码进入之后再进行分享调试功能测试,看是否正常。这个问题的原因应该是微信官方对于这种明文链接有做限制或者说场景值有限制,具体还没有找到问题的答案。

在这里插入图片描述
这是我进行测试的结果
第一次成功的分享是调用登录链接在微信PC端访问了分享页面进行了好友分享,成功;
第二次失败的分享是在手机端掉用登录链接访问了分享页面进行了好友分享,就只有当前分享的链接
第三次和第四成功的分享是我用登录链接换取的二维码,通过二维码扫码进入分享页面进行分享,成功。

以上
这是我的项目总结,分享出来希望大家能共同探讨进步 ?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/137773.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Python小代码_9_求水仙花数

    Python小代码_9_求水仙花数foriinrange(100,1000):ge=i%10shi=i//10%10bai=i//100ifge**3+shi**3+bai

    2022年7月6日
    24
  • TCP拥塞控制基本原理

    TCP拥塞控制基本原理从拥塞控制原理来看,我们有两种方案来解决TCP拥塞控制问题。但是IP层并不提供显式的网路拥塞控制反馈。TCP采用的是方式是让每一个发送方根据感受的网络拥塞程度来限制其向连接发送流量的速率。拥塞控制TCP拥塞控制常被称为加性增,乘性减。这样的方式能够在拥塞的情形下,快速减少发送速率,从而避免严重的拥塞现象出现。慢启动TCP连接在刚开始建立的阶段,发送速率起始慢,T…

    2022年6月24日
    26
  • 深入了解zookeeper(三)

    一、ZooKeeper的实现1.1ZooKeeper处理单点故障我们知道可以通过ZooKeeper对分布式系统进行Master选举,来解决分布式系统的单点故障,如图所示。那么我们继续分析一下

    2021年12月28日
    46
  • 3s的基本概念_考研基础知识普及

    3s的基本概念_考研基础知识普及      一、什么是“3S”技术“3S”技术是英文遥感技术(RemoteSenescing  RS)、地理信息系统(GeographicalinformationSystem  GIS)、全球定位系统(GlobalPositioningSystem  GPS)这三种技术名词中最后一个单词字头的统称。二、为什么“3S”技术走到了一起人类有一个梦想,就是想只用一种方法,就把

    2022年8月30日
    3
  • python的标识符可以以汉字开头_Python标识符命名小知识[通俗易懂]

    python的标识符可以以汉字开头_Python标识符命名小知识[通俗易懂]简单地理解,标识符就是一个名字,就好像我们每个人都有属于自己的名字,它的主要作用就是作为变量、函数、类、模块以及其他对象的名称。Python中标识符的命名不是随意的,而是要遵守一定的命令规则,比如说:1.标识符是由字符(A~Z和a~z)、下划线和数字组成,但第一个字符不能是数字。2.标识符不能和Python中的保留字相同。有关保留字,后续章节会详细介绍。3.Python中的标识符中,不能…

    2025年9月1日
    3
  • 突然想去旅游[通俗易懂]

    突然想去旅游[通俗易懂]  突然想去旅游,一个人,静静的,去到那些宁静的自然风光中去,置身其中,什么也不想! 

    2022年4月29日
    34

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号