微信公众号开发(七)JSSDK-监听分享朋友圈事件

微信JS-SDK是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包。

通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券、支付等微信特有的能力,为微信用户提供更优质的网页体验。

实现步骤

一:绑定域名
在公众号管理页面,设置JS接口安全域名,表示该域名下的所有页面,都拥有使用JSSDK的权限。

二:页面中引入JS文件

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

三:通过config接口注入权限验证配置
所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用JSSDK的相关API。

在页面中添加这段js代码

参数介绍
debug:true为开启调试模式,调用的所有api的返回值会在客户端alert出来,若是生产环境则设置为false
appId:必填,公众号的唯一标识
timestamp:必填,时间戳
nonceStr:必填,随机生成的字符串
signature:必填,根据timestamp与nonceStr与jsapi_ticket按照某种算法生成的签名
jsApiList:必填,需要使用的JS接口权限,如:使用分享朋友圈接口,则填入onMenuShareTimeline,其他接口的名称可以在开发文档中找到。

jsapi_ticket:

生成签名signature还需要一个叫jsapi_ticket的参数,jsapi_ticket是公众号用于调用微信JS接口的临时票据,可以通过基础接口的access_token来获取,有效期为7200秒,调用次数有限,所以在后台也需要全局缓存jsapi_ticket。

获取jsapi_ticket的接口:https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

代码:

//获取JSSDk的接口地址
   public static final String GET_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi";

/**
    * 获取JSTicket
    */
   public static void getJsapi_ticket() {
	   //发送请求到指定的接口
	   String result=HttpUtil.sendGet(GET_TICKET_URL.replace("ACCESS_TOKEN",getAccessToken()),"");
	   System.out.println("JsTicket="+result);
   }

getAccessToken是之前开发教程(四)已经实现好的,有需要的可参考

成功即返回如下JSON:

{
    "errcode":0,
    "errmsg":"ok",
    "ticket":"bxLdikRXVbTPdHFKA",
    "expires_in":7200
}

获得jsapi_ticket之后,就可以生成JS-SDK权限验证的签名了。

签名算法:
规则如下:参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分) 。对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。最后对string1作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。

注意事项:
1.签名用的noncestr和timestamp必须与wx.config中的nonceStr和timestamp相同。
2.签名用的url必须是调用JS接口页面的完整URL。
3.出于安全考虑,开发者必须在服务器端实现签名的逻辑。

验证签名算法是否正确,可以打开https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign

当在页面引入微信js之后,用户跳转到页面的时候我们发送ajax请求,将当前页面的url传递到后台获取signature

页面请求代码:

后台Controller作用是拿到最终的签名signature,代码如下:

后台获取到signature之后前台取出来进行config注入:

	<script>
		$(function() {
			//进页面之后ajax发送后台生成签名,前台拿到签名进行config注入
			// alert(window.location.href);
			$.ajax({
				type : 'post',
				dataType : 'json',
				data : {
					'url' : window.location.href
				},
				url : '../getJSSDKSignature',
				success : function(data) {
					if (data.code == '200') {
						// alert(data.sn+";"+data.appid+";"+data.timestamp+";"+data.noncestr);
						//进行config注入工作
						wx.config({
							debug : false,
							appId : data.appid,
							timestamp : data.timestamp,
							nonceStr : data.noncestr,
							signature : data.sn,
							jsApiList : [ 'onMenuShareTimeline' ]
						//调用的接口
						});
					}
				}
			})
		})
				wx.ready(function() {
					// 在页面加载时就调用相关接口,如:分享到朋友圈、获取位置信息等接口
					wx.checkJsApi({
						jsApiList : [ 'onMenuShareTimeline' ],
						success : function(res) {
							if (res.errMsg == 'checkJsApi:ok') {
								//分享到朋友圈接口
								wx.onMenuShareTimeline({
									title : '抽奖活动', // 分享时的标题
									link : 'http://ansheng.nat300.top/getUserInfo.html', // 分享时的链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
									//用户确认分享后执行的回调函数
									imgUrl : 'https://imgsrc.baidu.com/baike/pic/item/f3d3572c11dfa9ec47272dce6cd0f703908fc1da.jpg', // 分享时显示的图标
									success : function() {
										//给用户添加1次抽奖机会
										alert("恭喜你,分享成功");
									},
									//用户取消分享后执行的回调函数
									cancel : function() {
										alert("取消分享");
									}
								});
							} else {
								alert("失败了.......");
							}
						}
					});
				});
		wx.error(function(res) {
			alert("error");
		});
	</script>

效果图: 

总结:1.获取Access_Token,根据Access_Token获取jsapi_ticket,根据jsapi_ticket通过算法整合拿到签名Signature,然后cinfig注入验证,验证成功可调用JSSDK方法

 

感兴趣的小伙伴可以扫码关注下公众号哦,公众号会分享高质量的技术文章哦

步骤一:引入JS文件 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.2.0.js 备注:支持使用 AMD/CMD 标准模块加载方法加载 步骤二:通过config接口注入权限验证配置 所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。 wx.config({ debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '', // 必填,企业号的唯一标识,此处填写企业号corpid timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名,见附录1 jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); 步骤三:通过ready接口处理成功验证 wx.ready(function(){ // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。 }); 步骤四:通过error接口处理失败验证 wx.error(function(res){ // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 }); 接口调用说明 所有接口通过wx对象(也可使用jWeixin对象)来调用,参数是一个对象,除了每个接口本身需要传的参数之外,还有以下通用参数: success:接口调用成功时执行的回调函数。 fail:接口调用失败时执行的回调函数。 complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。 cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。 trigger: 监听Menu中的按钮点击时触发的方法,该方法仅支持Menu中的相关接口。
### 回答1: 可以使用 JavaScript 来禁止点击右上角菜单时出现复制链接的功能。可以在页面的 JavaScript 代码中添加如下代码: ``` document.addEventListener('contextmenu', function(e){ e.preventDefault(); }, false); ``` 这样就可以禁止右键菜单了。 同时可以使用如下代码来支持转发给好友和分享朋友圈: ``` <a href="javascript:void(0);" onclick="wx.ready(function(){wx.updateAppMessageShareData({ title: '分享标题', // 分享标题 desc: '分享描述', // 分享描述 link: '分享链接', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: '图片链接', // 分享图标 success: function () { // 设置成功 } });wx.updateTimelineShareData({ title: '分享标题', // 分享标题 link: '分享链接', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: '图片链接', // 分享图标 success: function () { // 设置成功 } });});">分享给好友和朋友圈</a> ``` 但是需要注意的是,这需要您的网页已经与微信公众平台接入并配置了 JSSDK。 ### 回答2: 禁止微信H5页面点击右上角菜单时出现复制链接,但支持转发给好友和分享朋友圈,可以通过以下方法实现。 首先,要禁止复制链接的功能,可以在微信H5页面的代码中添加一段JavaScript代码,通过对右上角菜单的点击事件进行拦截和处理。可以使用`document.addEventListener`方法监听菜单的点击事件,然后判断点击的是哪个菜单选项,如果是复制链接,则阻止默认行为。具体的代码如下所示: ```javascript document.addEventListener('WeixinJSBridgeReady', function() { WeixinJSBridge.on('menu:share:appmessage', function(){ // 阻止复制链接菜单的默认行为 event.preventDefault(); }); }); ``` 以上代码通过使用WeixinJSBridge对象来添加事件监听器,在菜单选中之前拦截了这个事件,并阻止了复制链接菜单的默认行为。 然后,要支持转发给好友和分享朋友圈,可以通过微信的OpenAPI提供的接口来实现。具体来说,可以使用`onMenuShareAppMessage`方法和`onMenuShareTimeline`方法来设置分享给好友和分享朋友圈的功能。示例如下所示: ```javascript wx.ready(function(){ // 设置分享给好友的功能 wx.onMenuShareAppMessage({ title: '分享标题', desc: '分享描述', link: '分享链接', imgUrl: '分享图标', success: function () { // 分享成功后的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); // 设置分享朋友圈的功能 wx.onMenuShareTimeline({ title: '分享标题', link: '分享链接', imgUrl: '分享图标', success: function () { // 分享成功后的回调函数 }, cancel: function () { // 用户取消分享后执行的回调函数 } }); }); ``` 以上代码通过使用wx对象来调用微信的接口方法,设置了分享给好友和分享朋友圈的功能,并可以根据需要自定义分享的标题、描述、链接和图标。 通过以上方法,可以实现禁止微信H5页面点击右上角菜单时出现复制链接的功能,并支持转发给好友和分享朋友圈的功能。 ### 回答3: 为了禁止微信H5页面点击右上角菜单时出现复制链接的功能,可以通过以下方法实现。首先,在页面加载完成后或者点击菜单时,可以通过JavaScript禁用右上角菜单中的复制链接功能。 可以使用以下代码片段来实现禁止复制链接的功能: ``` document.addEventListener('WeixinJSBridgeReady', function() { WeixinJSBridge.call('hideOptionMenu'); }); ``` 在这个代码片段中,我们使用WeixinJSBridge的hideOptionMenu方法来隐藏右上角菜单。这样,当用户点击菜单时,就不会出现复制链接的选项。 然而,我们还需要支持转发给好友和分享朋友圈的功能。为了实现这个目标,我们可以自定义右上角菜单。 通过WeixinJSBridge的invoke方法,我们可以调用微信的API实现自定义菜单。下面是一个示例代码片段: ``` document.addEventListener('WeixinJSBridgeReady', function() { WeixinJSBridge.invoke('setNavigationBarRightButton', { text: '分享', // 自定义菜单的文本 show: true // 是否显示菜单 }, function(res) { if (res.err_msg === 'setNavigationBarRightButton:ok') { // 点击菜单后执行的回调函数 WeixinJSBridge.call('showOptionMenu'); } }); }); ``` 在这个示例中,我们首先调用setNavigationBarRightButton方法来设置右上角菜单的文本和是否显示菜单。然后,在回调函数中再次调用showOptionMenu方法来显示右上角菜单。 通过这种方式,我们禁止了复制链接的功能,同时支持用户转发给好友和分享朋友圈的操作。这样,用户就可以方便地与他人分享H5页面的内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

酒书

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值