前端做微信好友分享_前端-微信分享
1.绑定域名
公众号设置-》功能设置-》JS接口安全域名
加入要分享的工程域名
2.引入JS文件
因为在内网开发,如果直接引用在内网会报错,所以先判断是微信环境再引用js。
// 判断是否是微信浏览器的函数
isWeiXin : function() {
var ua = window.navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == 'micromessenger' && ua.indexOf('miniprogram') == -1) {
return true;
} else {
return false;
}
},
if(isWeiXin()){
var weixinJs = document.createElement('script');
weixinJs.src = '';
if(window.location.protocol == "https:"){
weixinJs.src = 'https://res/wx.qq.com/open/js/jweixin-1.6.0.js';
}else{
weixinJs.src = 'http://res/wx.qq.com/open/js/jweixin-1.6.0.js';
}
document.body.appendChild(weixinJs);
weixinJs.onload = function(){
//wx.config..
}
}
3.config
wx.config({
debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId: '', // 必填,公众号的唯一标识 timestamp: , // 必填,生成签名的时间戳 nonceStr: '', // 必填,生成签名的随机串 signature: '',// 必填,签名 jsApiList: [] // 必填,需要使用的JS接口列表});
3.1生成签名的随机串
function createNonceStr() {
return Math.random().toString(36).substr(2, 16);
}
3.2签名
3.2.1获取access_token
3.2.2获取jsapi_ticket
用access_token通过Get请求获取jsapi_ticket
返回内容:
{
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expires_in":7200
}
3.2.3生成签名
一共4个参数:noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分)。
参数需要安装ASCII 码从小到大排序:jsapi_ticket、noncestr、timestamp、url,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1:
jsapi_ticket=xx&noncestr=xx×tamp=xx&url=xx
对string1进行sha1签名,得到signature防止地址出现包含端口的情况,如http://a.com:8080/aaa.jhtml,截取:8080的前半段和后半段拼接起来
if(url.lastIndexOf(":")>5){
url = url.substring(0 ,url.lastIndexOf(":"))+url.substring(url.indexOf("/"),url.lastIndexOf(":"));
}
签名的逻辑需在服务器端实现。
3.3JS接口列表
分享给朋友:updateAppMessageShareData
分享到朋友圈:updateTimelineShareData
4.ready&调用api
如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。
wx.ready(function () { //需在用户可能点击分享按钮前就先调用//分享给好友wx.updateAppMessageShareData({
title: '', // 分享标题 desc: '', // 分享描述 link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: '', // 分享图标 success: function () {
// 设置成功 }
})
//分享到朋友圈wx.updateTimelineShareData({
title: '', // 分享标题 link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致 imgUrl: '', // 分享图标 success: function () {
// 设置成功 }
})
});
对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
5.封装函数
(function(){
var wxShare = function(opts){
var defaults = {
getWxConfigUrl: '', // 获取微信接口权限url
orDebug: false, // 是否开启调试模式
title: $("title").text, // 分享标题
desc: $("title").text, // 分享描述
link: window.location.href.split('#')[0], // 分享链接
imgUrl: '', // 分享图标
success: function(){}, // 用户确认分享后执行的回调函数
cancel: function(){} // 用户取消分享后执行的回调函数
};
var _opts = $.extend(defaults, opts);
// 获取微信权限
$.ajax({
url: _opts['getWxConfigUrl'],
type: 'POST',
dataType: 'json',
data: {link:encodeURIComponent(_opts['link']}),
})
.done(function(res) {
if(typeof res == 'object'){
// 通过config接口注入权限验证配置
wx.config({
// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
debug: _opts['orDebug'],
// 必填,公众号的唯一标识
appId: res.appId,
// 必填,生成签名的时间戳
timestamp: res.timestamp,
// 必填,生成签名的随机串
nonceStr: res.nonceStr,
// 必填,签名,见附录1
signature: res.signature,
// 必填,需要使用的JS接口列表
jsApiList: ['updateAppMessageShareData', 'updateTimelineShareData']
});
// 处理config验证成功或失败
_wxReady(res.url);
}else{
console.log('获取微信接口权限失败!');
}
})
.fail(function() {
console.log("获取微信接口权限失败!");
});
// 处理config验证成功或失败
var _wxReady = function(urls){
// wxConfig验证成功处理
wx.ready(function(){
// 分享到朋友圈
wx.updateTimelineShareData({
title: _opts['title'],
link: _opts['link'],
imgUrl: _opts['imgUrl'],
success: _opts['success'],
cancel: _opts['cancel']
});
// 分享给朋友
wx.updateAppMessageShareData({
title: _opts['title'],
desc: _opts['desc'],
link: _opts['link'],
imgUrl: _opts['imgUrl'],
success: _opts['success'],
cancel: _opts['cancel']
});
});
// wxConfig验证失败返回函数
wx.error(function(res){
console.log(res,'wxConfig验证失败')
});
};
};
window.wxShare = wxShare;
})();
6.后端请求接口
入参:link 当前url,需要urldecode
出参(对应wx.config的参数):appid
timestamp
nonceStr
signature
7.前端调用
if(isWeiXin()){
new wxShare({
title: '微信分享',
desc: '学习微信分享',
link: 'https://www.zhihu.com/people/hu-die-ying',
imgUrl:"https://pic3.zhimg.com/v2-86cf12a9563d739f7d6ab6738b29eef5_xl.jpg",
success:function(){
console.log("分享成功");
},
cancel:function(){
console.log("分享失败");
}
});
}
link参数可以和当前页面链接不同。
前端做微信好友分享_前端-微信分享相关推荐
- python微信好友_python 获取微信好友列表的方法(微信web)
如下所示: import urllib import urllib2 import os import time import re import cookielib import xml.dom.m ...
- 前端做微信好友分享_前端微信分享,调用微信分享,分享朋友圈,分享微信好友,分享qq空间,qq好友...
项目中很多使用到微信分享的地方,对于前端来说也算很简单了,建议写该功能时使用微信调试工具,便于调试,直接上代码 第一步,引入微信配置文件 //这里的AJAX用于获取后台数据,当然也可以不用这么写,您只 ...
- python爬取微信好友头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法...
初学python,我们必须干点有意思的事!从微信下手吧! 头像集样例如下: 大家可以发朋友圈开启辨认大赛哈哈~ 话不多说,直接上代码,注释我写了比较多,大家应该能看懂 import itchat im ...
- python微信好友分析_基于python实现微信好友数据分析(简单)
一.功能介绍 本文主要介绍利用网页端微信获取数据,实现个人微信好友数据的获取,并进行一些简单的数据分析,功能包括: 1.爬取好友列表,显示好友昵称.性别和地域和签名, 文件保存为 xlsx 格式 2. ...
- python微信好友检测_用Python调教微信,实现自动回复 和 微信好友分布,好友性别图,好友标签...
官方华丽的术语---略 一个自动回复机器人 微信自上线以来,一直没有自动回复的功能,想必是有他们的理念.但是有些人群,确实对此功能有一定需求,我举两个栗子: 不愿时刻被消息打扰的人 消息需要批量处理的 ...
- 微信好友只有昵称没有微信号_为什么微信好友的个人资料有的显示微信号,而有的只有个昵称?...
对方用手机号码注册微信,或者绑定了手机号码,而你又恰巧在手机里存了他的手机号码,这种情况微信就会显示他的手机号码.你没有存他的手机号码就不显示,可以防止信息泄露. 你一定用手机号码绑定了微信,并且把通 ...
- python微信好友助力_微信好友助力活动,discuz插件
[实例简介] 微信营销,好友助力活动discuz插件,有需要的小伙伴抓紧了,价值200元 [实例截图] [核心代码] tom微信好友助力2.3 └── tom微信好友助力2.3 └── tom_wei ...
- 使用代理爬去微信公众号_使用微信公众号开发模拟面试功能
猫 最近在整理我在大厂面试以及平时工作中遇到的问题,记录在 shfshanyue/Daily-Question[1] 中,但觉得对于时时回顾,常常复习仍然做的不够. 于是在微信公众号中开发了随机生成模 ...
- Spring Boot+微信小程序_保存微信登录者的个人信息
1. 前言 微信小程序开发平台,提供有一类 API,可以让开发者获取到微信登录用户的个人数据.这类 API 统称为开放接口. Tip:微信小程序开发平台,会把微信登录用户的个人信息分为明文数据和敏感数 ...
最新文章
- 软件测试的发展空间大吗
- depot用例视图建模
- Burst trie(爆炸式字典树)解读
- HUST-2015 Multi-University Training Contest 9
- API网关和AWS Lambda进行身份验证
- vue使用python_如何使用Python和Vue创建两人游戏
- 渗透测试入门18之信息收集
- Google安装Kopernio插件
- instagram第三方登录
- 计算机专业如何改革创新的生力军,年轻干部如何真正成为改革创新的生力军?...
- 项目实训(十二)——FPS游戏枪械射击弹孔及子弹散射
- C语言课设-单位车辆调度管理
- Hunger Snake
- 图片滑块验证码的解决
- 穿山甲的广告聚合平台-GroMore
- Matlab谐波搭建
- 为什么说Java中只有值传递
- Poc/Exp漏洞验证利用脚本编写
- 考研小作文万能模板——17篇
- 腾讯云4核服务器和2核区别大吗?性能差异
热门文章
- mfc中StretchBlt缩放图像失真问题【zozo】
- Android使用keytool-importkeypair生成一个系统签名,只要打包的时候使用该签名,便可以获得系统所有权限
- 中国科研人员开发出“蚁群”微型机器人
- CSS - 鼠标移入悬停显示下拉菜单(导航栏鼠标经过 hover 时出现二级菜单)
- 系统开发建设要经过哪些流程?
- FPGA开发基本流程
- 医院信息科招聘计算机专业试题,医院信息科招收计算机科学与技术专业的笔试试题...
- 基于 Verilog 的经典数字电路设计(1)加法器
- 开篇“给自己定一个目标,明年7月去实现。希望不是一时的兴起。”
- 西瓜视频地址分析下载(2020-10-29)