千家信息网

微信JS-SDK如何实现微信分享接口开发

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,这篇文章给大家分享的是有关微信JS-SDK如何实现微信分享接口开发的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最近项目中的网页通过微信分享朋友或朋友圈等功能出现了无法显示
千家信息网最后更新 2025年11月08日微信JS-SDK如何实现微信分享接口开发

这篇文章给大家分享的是有关微信JS-SDK如何实现微信分享接口开发的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

最近项目中的网页通过微信分享朋友或朋友圈等功能出现了无法显示分享图片等信息,后经过排查发现是微信版本升级导致,采用js-sdk完成分享接口,为了快速实现该功能效果,于是我打算通过前台js进行实现来看看分享效果。

通过查看微信公众平台文档,找到自己所需要的说明文档,明确开发步骤,说明文档截图如下:


开发步骤:

1、按照说明文档完成步骤1.1.1


2、引入js文件

在分享的页面中添加js文件

                                                                      微信分享开发         banner01  

3、配置wxShare.js

 var $wx_account = wxdata.wx_account, // 自定义数据,见wxShare_data.js   $wx_share = wxdata.wx_share;  // 自定义数据 ,见wxShare_data.js //配置微信信息wx.config ({  debug : false,  // true:调试时候弹窗  appId : $wx_account[0], // 微信appid  timestamp : $wx_account[1], // 时间戳  nonceStr : $wx_account[2], // 随机字符串  signature : $wx_account[3], // 签名  jsApiList : [    // 所有要调用的 API 都要加到这个列表中    'onMenuShareTimeline',    // 分享到朋友圈接口    'onMenuShareAppMessage', // 分享到朋友接口    'onMenuShareQQ',     // 分享到QQ接口    'onMenuShareWeibo'   // 分享到微博接口  ]});wx.ready (function () {  // 微信分享的数据  var shareData = {    "imgUrl" : $wx_share[0],  // 分享显示的缩略图地址    "link" : $wx_share[1],  // 分享地址    "desc" : $wx_share[2],  // 分享描述    "title" : $wx_share[3],  // 分享标题    success : function () {          // 分享成功可以做相应的数据处理        //alert("分享成功"); }       };     wx.onMenuShareTimeline (shareData);     wx.onMenuShareAppMessage (shareData);     wx.onMenuShareQQ (shareData);     wx.onMenuShareWeibo (shareData);});  wx.error(function(res){    // config信息验证失败会执行error函数,如签名过期导致验证失败,  // 具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,   //对于SPA可以在这里更新签名。   alert("好像出错了!!");});

4、组装微信的配置信息wxShare_data.js

var wxdata = {        wx_account : new Array(4),        wx_share : new Array(4),        wx_myuser : new Array("appid","appsecret"),                access_token : "", // 凭证        token_expires_in : "" , // 凭证过期时间 单位:s        jsapi_ticket : "", // 凭证        ticket_expires_in : "" , // 凭证过期时间 单位:s        url : "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wxdata.wx_myuser[0] + "&secret=" + wxdata.wx_myuser[1],            // 获取access_token         // *注意* 经过实际开发测试,微信分享不支持跨域请求,因此获取access_token的请求必须从服务器发起,否则无法获取到access_token        get_access_token : function (){                        $.ajax({                        type : "GET",                        url : wxdata.url                        dataType : "jsonp", // 解决跨域问题,jsonp不支持同步操作                        cache : false,                //      jsonp :'callback',                        success : function(msg) {                         // 获取正常 {"access_token":"ACCESS_TOKEN","expires_in":7200}                        // 获取失败 {"errcode":40013,"errmsg":"invalid appid"}                                wxdata.access_token = msg.access_token; // 获取到的交互凭证 需要缓存,存活时间token_expires_in 默认为7200s                                wxdata.token_expires_in = msg.expires_in; // 过期时间 单位:s                                if (access_token != "" || access_token != null) {                                        console.log("get access_token success: " + wxdata.access_token);                                } else {                                        console.log("get access_token fail " +wxdata.access_token);                                }                        },                        error : function(msg){                                alert("get access_token error!! : ");                        }                });        },                // 获取jsapi_ticket        // *注意* 经过实际开发测试,微信分享不支持跨域请求,因此获取jsapi_ticket的请求必须从服务器发起,否则无法获取到jsapi_ticket        get_jsapi_ticket : function(){                $.ajax({                        type : "GET",                        url : "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + wxdata.access_token +"&type=jsapi",                        dataType : "jsonp",                        cache : false,                        async : false,                        jsonp :'callback',                        success : function(msg) {                         /*                                 {                                        "errcode":0,                                        "errmsg":"ok",                                        "ticket":"e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",                                        "expires_in":7200                                }                         */                                if(msg.errcode == 0){                                        wxdata.jsapi_ticket = msg.ticket; // 需要缓存,存活时间ticket_expires_in 默认为7200s                                        wxdata.ticket_expires_in = msg.expires_in; // 过期时间 单位:s                                        console.log("get jsapi_ticket success");                                } else {                                        console.log("get jsapi_ticket fail");                                }                        },                        error : function(msg){                                alert("get jsapi_ticket error!!! ");                        }                });        },        // 数据签名         create_signature : function(nocestr,ticket,timestamp,url){                var signature = "";                // 这里参数的顺序要按照 key 值 ASCII 码升序排序                var s = "jsapi_ticket=" + ticket + "&noncestr=" + nocestr + "×tamp=" + timestamp + "&url=" + url;                return hex_sha1(s);         },         // 自定义创建随机串 自定义个数0 < ? < 32         create_noncestr : function () {       var str= "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";       var val = "";      for (var i = 0; i < 16; i++) {         val += str.substr(Math.round((Math.random() * 10)), 1);       }    return val;  },                // 自定义创建时间戳        create_timestamp : function () {    return new Date().getSeconds();  }        } //wxdata.get_access_token(); // 1wxdata.access_token = "B06fRIti5GDmvNLKsV5OkJ4fU1qd3YyyW0cgwenxhqI7XwmpTrpwY6Uc7nNtnumdJvnPJXcACAVPD"; //2 //wxdata.get_jsapi_ticket(); //3wxdata.jsapi_ticket = "XGEs8VD-_kgoxt8jcijupT7j_EA-nP07ro_MmUNDVD0oR8unfqY4C_YIMXAQvhztlTk8j2A" //4 // ----- 5 开始 ------var timestamp = wxdata.create_timestamp();  // timestampvar noncestr = wxdata.create_noncestr(); // noncestrvar url = _window.location.href; wxdata.wx_account[0] = wxdata.wx_myuser[0]; // appidwxdata.wx_account[1] = timestamp;  // timestampwxdata.wx_account[2] = noncestr; // noncestrwxdata.wx_account[3] = wxdata.create_signature(noncestr, wxdata.jsapi_ticket ,timestamp ,url);//signature wxdata.wx_share[0] = "http://www.123456.com/img/123.jpg"; // share_img 分享缩略图图片wxdata.wx_share[1] = _window.location.href;// share_link 分享页面的url地址,如果地址无效,则分享失败wxdata.wx_share[2] = "this is share_desc";// share_descwxdata.wx_share[3] = "this is share_title";// share_title//  --------  5 结束 ----------

说明:

4.1 分享流程:

用户创建时间戳,随机字符串,当前需要分享的页面的url三个变量,接着将自己的appid和APPsecret作为请求参数获取access_token,再根据access_token获取jsapi_ticket, 然后将获取的jsapi_ticket,以及自己创建的三个变量进行签名,注意签名过程案按照 key 值 ASCII 码升序排序,具体参加程序,

4.2 请求后的响应程序无法处理 问题

get_access_token()函数中对微信发起获取access_token的请求,存在跨域问题,设置dataType:"jsonp"无法解决,通过浏览器查看请求发现微信相应的数据并没有包装数据,猜测微信不支持这个请求的跨域,因为ajax程序无法通过程序正常获取access_token的值,但可以在浏览器调式获取access_token的值,这个值有7200s,足够去获取jsapi_ticket ,获取jsapi_ticket的请求过程存在同样的问题,因此获取access_token和jsapi_token必须从服务端后端代码。

这篇文章主要是想用js请求来完成分享的效果属于介绍篇,因而没有开发服务器端请求代码(勿喷),服务器篇代码见后续的应用篇

那么如何正常才能让程序跑起来,正常的分享页面呢??

在wxShare_data.js 代码中,首先发起 wxdata.get_access_token(); 注释②③④⑤代码,将浏览器获取的access_token,手动的放到②变量处,

手动完成了access_token的赋值后,注释①,打开②③,开始 wxdata.get_jsapi_ticket(); 注释④⑤处代码

同样的操作 从浏览器获取 jsapi_ticket值将其赋值给④处变量,注释①③,打开②④⑤处代码,最终代码见wxShare_data.js

5、wxShare_sha1.js

对数据进行签名 sha1.js下载

6、此时页面可以正常运行并完成微信分享了,

成功页面展示

微信分享给朋友

至此完成想要的验证效果,接下来就可以在服务器带开发代码了!!!期待完整版微信分享

感谢各位的阅读!关于"微信JS-SDK如何实现微信分享接口开发"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

开发 代码 时间 数据 接口 页面 服务 信息 凭证 朋友 服务器 程序 单位 变量 地址 效果 文档 注释 浏览器 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发著作雇佣合同 深圳商城软件开发哪家效益快 国三网络技术综合题 网络安全总体战略目标 徐汇区无线网络技术内容 电力系统网络安全应急预案演练 网络技术的使用范围 大学生网络安全知识竞赛能答几次 网络安全模型中 什么是基石 奈飞app无法访问服务器 湖北在线审批管控软件开发平台 2009年美国将网络安全 工业软件开发基础知识 小型服务器怎么进入节能模式 数据库与基础知识 河南高科技软件开发材料 数据库的应用环境有哪些 我的梦想软件开发工作者 天津网络技术服务优势 综合软件开发推荐厂家 vr软件开发就业率 辽宁盘位机架式服务器虚拟主机 皖新十分钟学校服务器连接超时 华为软件开发工程师月薪多少 网络技术开发的税率 用svn上传到服务器 网络安全哥信息化人才发展规划 rust数据库包 sql语句防数据库 徐汇区视频系统服务器
0