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&timestamp=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参数可以和当前页面链接不同。

前端做微信好友分享_前端-微信分享相关推荐

  1. python微信好友_python 获取微信好友列表的方法(微信web)

    如下所示: import urllib import urllib2 import os import time import re import cookielib import xml.dom.m ...

  2. 前端做微信好友分享_前端微信分享,调用微信分享,分享朋友圈,分享微信好友,分享qq空间,qq好友...

    项目中很多使用到微信分享的地方,对于前端来说也算很简单了,建议写该功能时使用微信调试工具,便于调试,直接上代码 第一步,引入微信配置文件 //这里的AJAX用于获取后台数据,当然也可以不用这么写,您只 ...

  3. python爬取微信好友头像_使用python itchat包爬取微信好友头像形成矩形头像集的方法...

    初学python,我们必须干点有意思的事!从微信下手吧! 头像集样例如下: 大家可以发朋友圈开启辨认大赛哈哈~ 话不多说,直接上代码,注释我写了比较多,大家应该能看懂 import itchat im ...

  4. python微信好友分析_基于python实现微信好友数据分析(简单)

    一.功能介绍 本文主要介绍利用网页端微信获取数据,实现个人微信好友数据的获取,并进行一些简单的数据分析,功能包括: 1.爬取好友列表,显示好友昵称.性别和地域和签名, 文件保存为 xlsx 格式 2. ...

  5. python微信好友检测_用Python调教微信,实现自动回复 和 微信好友分布,好友性别图,好友标签...

    官方华丽的术语---略 一个自动回复机器人 微信自上线以来,一直没有自动回复的功能,想必是有他们的理念.但是有些人群,确实对此功能有一定需求,我举两个栗子: 不愿时刻被消息打扰的人 消息需要批量处理的 ...

  6. 微信好友只有昵称没有微信号_为什么微信好友的个人资料有的显示微信号,而有的只有个昵称?...

    对方用手机号码注册微信,或者绑定了手机号码,而你又恰巧在手机里存了他的手机号码,这种情况微信就会显示他的手机号码.你没有存他的手机号码就不显示,可以防止信息泄露. 你一定用手机号码绑定了微信,并且把通 ...

  7. python微信好友助力_微信好友助力活动,discuz插件

    [实例简介] 微信营销,好友助力活动discuz插件,有需要的小伙伴抓紧了,价值200元 [实例截图] [核心代码] tom微信好友助力2.3 └── tom微信好友助力2.3 └── tom_wei ...

  8. 使用代理爬去微信公众号_使用微信公众号开发模拟面试功能

    猫 最近在整理我在大厂面试以及平时工作中遇到的问题,记录在 shfshanyue/Daily-Question[1] 中,但觉得对于时时回顾,常常复习仍然做的不够. 于是在微信公众号中开发了随机生成模 ...

  9. Spring Boot+微信小程序_保存微信登录者的个人信息

    1. 前言 微信小程序开发平台,提供有一类 API,可以让开发者获取到微信登录用户的个人数据.这类 API 统称为开放接口. Tip:微信小程序开发平台,会把微信登录用户的个人信息分为明文数据和敏感数 ...

最新文章

  1. 软件测试的发展空间大吗
  2. depot用例视图建模
  3. Burst trie(爆炸式字典树)解读
  4. HUST-2015 Multi-University Training Contest 9
  5. API网关和AWS Lambda进行身份验证
  6. vue使用python_如何使用Python和Vue创建两人游戏
  7. 渗透测试入门18之信息收集
  8. Google安装Kopernio插件
  9. instagram第三方登录
  10. 计算机专业如何改革创新的生力军,年轻干部如何真正成为改革创新的生力军?...
  11. 项目实训(十二)——FPS游戏枪械射击弹孔及子弹散射
  12. C语言课设-单位车辆调度管理
  13. Hunger Snake
  14. 图片滑块验证码的解决
  15. 穿山甲的广告聚合平台-GroMore
  16. Matlab谐波搭建
  17. 为什么说Java中只有值传递
  18. Poc/Exp漏洞验证利用脚本编写
  19. 考研小作文万能模板——17篇
  20. 腾讯云4核服务器和2核区别大吗?性能差异

热门文章

  1. mfc中StretchBlt缩放图像失真问题【zozo】
  2. Android使用keytool-importkeypair生成一个系统签名,只要打包的时候使用该签名,便可以获得系统所有权限
  3. 中国科研人员开发出“蚁群”微型机器人
  4. CSS - 鼠标移入悬停显示下拉菜单(导航栏鼠标经过 hover 时出现二级菜单)
  5. 系统开发建设要经过哪些流程?
  6. FPGA开发基本流程
  7. 医院信息科招聘计算机专业试题,医院信息科招收计算机科学与技术专业的笔试试题...
  8. 基于 Verilog 的经典数字电路设计(1)加法器
  9. 开篇“给自己定一个目标,明年7月去实现。希望不是一时的兴起。”
  10. 西瓜视频地址分析下载(2020-10-29)