JSSDK公众号微信分享功能

微信公众平台支持前端网页,点击右上角的‘...’,可以选择分享到朋友圈、分享给好友、QQ等微信功能。分享我在项目中添加分享到朋友圈,分享好友的功能的实现。即图一所示的效果。实现的效果为图二所示 

                          图一                                       

图二 

先要在项目中引入微信功能的支持文件,即WX的jssdk文件。我在项目中使用的是从外部引入

微信JSSDK,连接在此

1、为了项目整体结构 和 文件便于维护  创建wx.js,将所有wx方法封装

export default function(opts){
	let {config,data,success,cancel} = opts;		
	wx.config({
		debug: false,					//开启调试模式
		appId: config.appId,			//公众号的唯一标识
		timestamp: config.timestamp,	//生成签名的时间戳
		nonceStr: config.nonceStr,		//生成签名的随机串
		signature: config.signature,	//签名
		jsApiList: [ 'onMenuShareTimeline', 'onMenuShareAppMessage','hideMenuItems', 'checkJsApi']	//需要使用的JS接口列表
	});
	wx.ready(function () {
		// 分享到朋友圈
		wx.onMenuShareTimeline({
			title : data.title,		// 分享标题
			link : data.link,		// 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
			imgUrl : data.imgUrl,	// 分享图标
			success : function(res) {
				success && success(res)
			},
			cancel : function(res) {
				cancel && cancel(res)
			},
		});

		// 分享给朋友
		wx.onMenuShareAppMessage({ 
			title : data.title,		// 分享标题
			link : data.link,		// 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
			imgUrl : data.imgUrl,	// 分享图标
			desc : data.desc,		// 描述
			success : function(res) {
				success && success(res)
			},
			cancel : function(res) {
				cancel && cancel(res)
			},
		});
		
		wx.hideMenuItems({
			menuList : [ 'menuItem:editTag', 'menuItem:delete',
				'menuItem:copyUrl', 'menuItem:originPage',
				'menuItem:openWithQQBrowser', 'menuItem:openWithSafari',
				'menuItem:share:email', 'menuItem:share:brand',
				'menuItem:share:qq', 'menuItem:share:weiboApp',
				'menuItem:share:facebook', 'menuItem:share:QZone' ]
		});
	});
}

//是否显示分享
export function showWxShare(is){
	if (typeof WeixinJSBridge == "undefined") {
	    if (document.addEventListener) {
	    	if(is === true){
	    		document.addEventListener('WeixinJSBridgeReady', function(){
	    			WeixinJSBridge.call('showOptionMenu');
	    		}, false);
	    	}else{
	    		document.addEventListener('WeixinJSBridgeReady', function(){
	    			WeixinJSBridge.call('hideOptionMenu');
	    		}, false);
	    	}
	    } else if (document.attachEvent) {
	    	if(is === true){
	    		document.attachEvent('WeixinJSBridgeReady', function(){
	    		 	WeixinJSBridge.call('showOptionMenu');
	    		});
	    		document.attachEvent('onWeixinJSBridgeReady', function(){
	    		 	WeixinJSBridge.call('showOptionMenu');
	    		});
	    	}else{
	    		document.attachEvent('WeixinJSBridgeReady', function(){
	    		 	WeixinJSBridge.call('hideOptionMenu');
	    		});
	    		document.attachEvent('onWeixinJSBridgeReady', function(){
	    		 	WeixinJSBridge.call('hideOptionMenu');
	    		});
	    	}
	    }
	
	} else {
		if(is === true){
	    	WeixinJSBridge.call('showOptionMenu');
	   	}else{
	    	WeixinJSBridge.call('hideOptionMenu');
	    }
	}
}

2、新建处理签名数据的文件sign.js,使用sha1.js中的hex_sha1方法加密

import {hex_sha1} from '../plugins/sha1.js'		//签名
export default function(data){
	var urlN = window.location.href.split('#')[0];
	var timestampn = new Date().getTime().toString();
	var timestamp = timestampn.substring(0, 10);			//生成签名的时间戳
	var nonceStr = Math.random().toString(36).substr(2);	//生成签名的随机串
	var con = `jsapi_ticket=${data.ticket}&noncestr=${nonceStr}&timestamp=${timestamp}&url=${urlN}`
	var signature = hex_sha1(con);		//签名
	//签名处理后参数	
	return {
		appId : data.appId,
		timestamp : timestamp,
		nonceStr : nonceStr,
		signature : signature
	}
}

3、创建share.js,通过接口获取微信签名,对外暴露方法wxShare方法;

import wxShare from '@/wx/wx.js'	//微信支付
import wxSign from '@/wx/sign.js'		//处理签名数据
/**
 * 微信签名
 * @param {Object} params={}
 * @param {String} weixinName	
 */
export function getWxSign({weixinName='xdbx-zs'} = {}) {
	return http.get(`${URI.wx}/api/v1/weixin/get_token`, {params:{weixinName}})
}

export default function(data,signData){
	//先获取签名
	getWxSign(signData).then(res =>{
		if(res.code == 200){
			let config = wxSign({ticket:res.content.ticket,appId:res.content.appid})
			wxShare({
				config : config,
				data : data,
				success : function(res){
				},
				cancel : function(res){
				}
			})
		}
	})
}

4、index.vue页面调用

//index.vue 中调用
import wxShare from '@g/assets/js/wx/share.js'
//微信分享
wxShare(shareData)

//分享文案
shareData:{
    "title" : "分享标题",
	"link" : "分享链接",
	"imgUrl" : "分享小图",
	"desc" : "分享说明"
}
### 配置微信公众号 JS-SDK 使用指南 #### 1. 注册并认证服务号或订阅号 为了能够使用JS-SDK功能,需拥有已注册的服务号或订阅号,并完成相应的认证流程。 #### 2. 开启JS接口安全域名设置 进入微信公众平台后台管理页面,在“开发”->“基本配置”的菜单项下找到“JS接口安全域名”,在此处填写允许调用微信JS-SDK API的网页服务器地址[^1]。注意该网址必须以`http://` 或 `https://`开头,且不能携带参数。 #### 3. 获取access_token 通过官方提供的OAuth2.0授权机制获取用户的openid以及access_token。对于自定义分享功能,则需要开发者自行请求API来获得ticket和signature等必要签名信息[^2]。 #### 4. 引入jweixin库文件 在HTML文档<head>标签内加入如下代码片段用于加载最新的WeChat JavaScript SDK资源: ```html <script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script> ``` 此处版本号应根据实际需求选用最新稳定版[^4]。 #### 5. 初始化配置 当页面加载完成后立即执行wx.config()方法来进行初始化操作,传入必要的参数如appId、timestamp、nonceStr、signature等,这些数据可以通过后端PHP脚本向微信服务器发起HTTPS GET请求得到响应解析后的结果集传递过来。 ```javascript wx.config({ debug: false, // 开启调试模式, 调试阶段建议设为true appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名 jsApiList: [] // 必填,需要使用的JS接口列表 }); ``` #### 6. 错误处理与日志记录 如果遇到问题可以开启debug选项查看控制台输出的日志信息以便于排查错误原因;另外也可以利用try-catch语句捕获异常情况下的堆栈跟踪信息辅助定位问题所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值