我原本是纯后端开发,但是最近因为工作原因,做了微信公众号的二次开发,说实话写H5调CSS调得头大,还是得术业有专攻才行。话不多说,因为要做微信自定义分享,网上其实已经有很多轮子了,但是100个人就有100种不同的写法,最终还是觉得自己造的轮子要好使一点?因此做了以下的封装,直接上代码(注:UI框架使用的是MUI):

  1. 页面引用jssdk:

    <script type="application/javascript" src='http://res.wx.qq.com/open/js/jweixin-1.4.0.js'></script>

  2. 分享按钮:
    <span class="mui-icon mui-icon-paperplane" id="wx_share_to_app_message" οnclick="go_to_the_wx_share()"></span>

  3. 点击分享后的遮罩层:
    <div id="wx_share_background" οnclick="document.getElementById('wx_share_background').style.display='';" style="width: 100%;height:100%;display: none;"><img src="../content/images/wx_share.png" width="100%" />
    </div>

  4. 分享JS代码
    $(function() {load_jssdk_config();
    })/*** 分享*/
    function go_to_the_wx_share() {document.getElementById('wx_share_background').style.display = 'block';var title = "我是用于测试微信自定义分享的标题";var desc = "我是用于测试微信自定义分享的描述";var link = "http://192.168.100.110:4423/index.html?userId=oTUgw1XkWXYXSdbL2Vqf6hA_q00E&storeId=8560774594560";var imgUrl = "http://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTIzGH0DW72UgiabThqwkTgia2StdXx970y1VpLgRLvHkRib7Aly3skVGbkwspnlPUMFU5RiadowSHicEWA/132";var type = "link"; // 分享类型,music、video或link,不填默认为linkvar dataUrl = ''; // 如果type是music或video,则要提供数据链接,默认为空var wx_share_parm_obj = {title: title, //分享标题desc: desc, //分享描述link: link, //分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: imgUrl, //分享图标type: 'link', // 分享类型,music、video或link,不填默认为linkdataUrl: "", // 如果type是music或video,则要提供数据链接,默认为空callback: wx_share_callback //分享成功后执行方法};load_wx_share(wx_share_parm_obj);
    }/*** 分享成功后执行方法* @param {Object} res*/
    function wx_share_callback(res) {//res-->success,cancel,fail,completeswitch(res) {case "success":break;case "cancel":break;case "fail":break;case "complete":break;}document.getElementById('wx_share_background').style.display = 'none';
    }/*** 微信自定义分享* @param {Object} wx_share_parm_obj*/
    function load_wx_share(wx_share_parm_obj) {//分享到朋友wx.onMenuShareAppMessage({title: wx_share_parm_obj.title, // 分享标题desc: wx_share_parm_obj.desc, // 分享描述link: wx_share_parm_obj.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: wx_share_parm_obj.imgUrl, // 分享图标type: wx_share_parm_obj.type, // 分享类型,music、video或link,不填默认为linkdataUrl: wx_share_parm_obj.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空success: function() {// 用户确认分享后执行的回调函数wx_share_parm_obj.callback("success");},cancel: function() {// 用户取消分享后执行的回调函数mui.toast('取消分享');wx_share_parm_obj.callback("cancel");},trigger: function(res) {console.log('用户点击发送给朋友');},complete: function(res) {console.log("完成分享-->" + res.errMsg);wx_share_parm_obj.callback("complete");},fail: function(res) {console.log("分享失败-->" + res.errMsg);wx_share_parm_obj.callback("fail");}});//分享到朋友圈wx.onMenuShareTimeline({title: wx_share_parm_obj.title, // 分享标题link: wx_share_parm_obj.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: wx_share_parm_obj.imgUrl, // 分享图标success: function() {// 用户确认分享后执行的回调函数wx_share_parm_obj.callback("success");},cancel: function() {// 用户取消分享后执行的回调函数mui.toast('取消分享');wx_share_parm_obj.callback("cancel");},trigger: function(res) {console.log('用户点击分享到朋友圈');},complete: function(res) {console.log("完成分享-->" + res.errMsg);wx_share_parm_obj.callback("complete");},fail: function(res) {console.log("分享失败-->" + res.errMsg);wx_share_parm_obj.callback("fail");}});//分享到QQwx.onMenuShareQQ({title: wx_share_parm_obj.title, // 分享标题desc: wx_share_parm_obj.desc, // 分享描述link: wx_share_parm_obj.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: wx_share_parm_obj.imgUrl, // 分享图标success: function() {// 用户确认分享后执行的回调函数wx_share_parm_obj.callback("success");},cancel: function() {// 用户取消分享后执行的回调函数mui.toast('取消分享');wx_share_parm_obj.callback("cancel");},trigger: function(res) {console.log('用户点击分享到QQ');},complete: function(res) {console.log("完成分享-->" + res.errMsg);wx_share_parm_obj.callback("complete");},fail: function(res) {console.log("分享失败-->" + res.errMsg);wx_share_parm_obj.callback("fail");}});//分享到QQ空间wx.onMenuShareQZone({title: wx_share_parm_obj.title, // 分享标题desc: wx_share_parm_obj.desc, // 分享描述link: wx_share_parm_obj.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: wx_share_parm_obj.imgUrl, // 分享图标success: function() {// 用户确认分享后执行的回调函数wx_share_parm_obj.callback("success");},cancel: function() {// 用户取消分享后执行的回调函数mui.toast('取消分享');wx_share_parm_obj.callback("cancel");},trigger: function(res) {console.logmui.toast('用户点击分享到QQ空间');},complete: function(res) {console.log("完成分享-->" + res.errMsg);wx_share_parm_obj.callback("complete");},fail: function(res) {console.log("分享失败-->" + res.errMsg);wx_share_parm_obj.callback("fail");}});//分享到腾讯微博wx.onMenuShareWeibo({title: wx_share_parm_obj.title, // 分享标题desc: wx_share_parm_obj.desc, // 分享描述link: wx_share_parm_obj.link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: wx_share_parm_obj.imgUrl, // 分享图标success: function() {// 用户确认分享后执行的回调函数wx_share_parm_obj.callback("success");},cancel: function() {// 用户取消分享后执行的回调函数mui.toast('取消分享');wx_share_parm_obj.callback("cancel");},trigger: function(res) {console.log('用户点击分享到腾讯微博');},complete: function(res) {console.log("完成分享-->" + res.errMsg);wx_share_parm_obj.callback("complete");},fail: function(res) {console.log("分享失败-->" + res.errMsg);wx_share_parm_obj.callback("fail");}});
    }/*** 获取JSSDK配置信息*/
    function load_jssdk_config() {var jssdk_auth_url = location.href.split('#')[0];console.log("微信JSSDK授权地址:" + encodeURIComponent(jssdk_auth_url))var url = Wx_Config.BaseApiUrl + "api/StoreChose/GetJsSdkUiPackage?Url=" + encodeURIComponent(jssdk_auth_url);mui.ajax(url, {dataType: 'json', //服务器返回json格式数据type: 'get', //HTTP请求类型timeout: 10000, //超时时间设置为10秒headers: {'Content-Type': 'application/json'},async: false, //同步success: function(req) {//服务器返回响应,根据响应结果,分析是否登录成功if(req && req.code == 2000) {var data = req.data;if(data) {config_weixin(data.AppId, data.Timestamp, data.NonceStr, data.Signature);}} else {mui.toast(req.msg)}},error: function(xhr, type, errorThrown) {//异常处理mui.toast(type)}});
    }/*** 配置JSSDK* @param {Object} appId* @param {Object} timestamp* @param {Object} nonceStr* @param {Object} signature*/
    function config_weixin(appId, timestamp, nonceStr, signature) {wx.config({debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: appId,timestamp: timestamp,nonceStr: nonceStr,signature: signature,jsApiList: ['checkJsApi', //判断当前客户端版本是否支持指定JS接口'onMenuShareTimeline', //分享给好友'onMenuShareAppMessage', //分享到朋友圈'onMenuShareQQ', //分享到QQ'onMenuShareWeibo', //分享到微博'onMenuShareQZone' //分享到QQ空间]});
    }/*** config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,* 所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。* 对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。*/
    wx.ready(function() {/*** config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,* 也可以在返回的res参数中查看,对于SPA可以在这里更新签名。*/wx.error(function(res) {//mui.toast("调用微信JSSDK方法失败!");console.log("fail-->" + res.errMsg);});/*** 检查微信接口是否调用成功*/wx.checkJsApi({jsApiList: ['checkJsApi', //判断当前客户端版本是否支持指定JS接口'onMenuShareTimeline', //分享给好友'onMenuShareAppMessage', //分享到朋友圈'onMenuShareQQ', //分享到QQ'onMenuShareWeibo', //分享到微博'onMenuShareQZone' //分享到QQ空间],success: function(res) {// 以键值对的形式返回,可用的api值true,不可用为false// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}console.log("checkJsApi-->" + JSON.stringify(res));}});
    });

  5. 里面得获取签名字符串得方法网上很多,就不分享了
  6. 遮罩层背景图片地址:http://588ku.com/sucai/6462380.html
  7. 遮罩层CSS代码:
    #wx_share_background {position: fixed;top: 0;left: 0;width: 100%;height: 100%;background: rgba(0, 0, 0, 0.7);display: none;z-index: 20000;
    }#wx_share_background img {position: fixed;z-index: 999; right: 18px;
    }

  8. 需要注意的是,分享的链接域名或路径必须与当前页面对应的公众号JS安全域名一致。

转载于:https://www.cnblogs.com/zhao-yi/p/9777049.html

微信自定义分享功能二次封装相关推荐

  1. 微信自定义分享功能实现

    微信自定义分享功能实现 微信自定义分享功能实现 一.实现的关键 1.后端的任务 2.前台的任务 二.实现具体步骤 1.js安全域名配置(被分享的网址必须实现) 2.添加服务器配置(成为开发者) 3.生 ...

  2. php 微信分享功能_基于thinkPHP实现的微信自定义分享功能

    这篇文章主要介绍了基于thinkPHP实现的微信自定义分享功能,结合实例形式分析了thinkPHP调用微信接口实现自定义分享功能的相关操作技巧,需要的朋友可以参考下 本文实例讲述了基于thinkPHP ...

  3. 微信自定义分享、二次分享解决方案

    转自:https://www.cnblogs.com/backtozero/p/7064247.html 前言 刚进入一家新公司,接到的第一个任务就是需要需要自定义微信分享的效果(自定义缩略图,标题, ...

  4. 微信自定义分享限制分享

    微信自定义分享&限制分享 一.微信自定义分享 [ (* ̄︶ ̄)微信官方文档 ] 业务需求: 开发过程中有些业务需要借助微信进行推广和宣传.难免需要使用微信提供的一些功能,比如微信的二次分享(也 ...

  5. 微信JS-SDK实现自定义分享功能,分享给朋友,分享到朋友圈

    微信JS-SDK实现自定义分享功能,分享给朋友,分享到朋友圈 导语: 微信分享在手机右上角的三个点一键分享就ok了,那么对于分享到朋友圈,分享给朋友是怎么实现的呢?对于那种活动分享送流量是怎么定位分享 ...

  6. java 微信 jssdk 分享朋友圈_JSSDK微信自定义分享朋友圈

    背景:15年之前的微信分享只需要加入一段js就可以实现.后来微信官方全部禁止了.现在的微信分享全部得使用jssdk. 一.分享功能: 在微信内(必须在微信里)打开网站页面,分享给朋友或者分享到朋友圈时 ...

  7. typecho图标_Typecho微信自定义分享插件WeChatShare 自定义标题描述小图标

    前言 张小龙带领微信走进了大众的生活,在十亿用户的生活里扎根.于是我们不管是阅读.聊天.看视频,基本上都离不开微信.好东西分享给用户,第一时间想到的肯定是微信. 很久以前,一个网页分享到微信聊天,系统 ...

  8. 【vue/uni-app】微信sdk分享功能在vue中开发中的一些个人纪录

    在vue开发微信sdk分享功能中的一些个人纪录 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名". 我这里用的是 ...

  9. 微信分享源码PHP版JS-SDK接口_微信JSSDK分享功能图文实例详解

    本文实例讲述了微信JSSDK分享功能.分享给大家供大家参考,具体如下: 这里以微信分享到朋友圈,分享给微信好友为例为参考,进行调用测试,想添加其他的功能,自行查看开发人员文档即可 工欲善其事,必先利其 ...

最新文章

  1. 如何获得更多的自由开发者客户
  2. Saltstack grains组件
  3. overleaf文章管理
  4. leetcode刷题集:栈与队列
  5. liunx驱动----异步通知
  6. Archiva 2.2.3 安装运行的时候出现协议版本错误
  7. Spring : 连接池-HikariCP
  8. waitpid调用返回出错提示: No child processes问题
  9. mysql 数据增量抽取_通过Maxwell实时增量抽取MySQL binlog并通过stdout展示
  10. banner图/轮播图----html
  11. 常用的webservice接口(转)
  12. 微信H5生成海报图片并保存到手机
  13. 主机识别SDIO接口卡过程
  14. HTTP中的301、302、303、307、308
  15. Ecshop及大商创198版本,解决Deprecated: preg_replace()报错
  16. 相机跟频闪灯(LAMP-S25)、爆闪灯(LAMP-F25)、频爆一体灯(LAMP-SF25)信号线如何连接?
  17. 项城户口迁移联系电话
  18. mac修改mysql端口
  19. 这四款良心好用的优质软件,我用了多年,百用不腻
  20. 【有限元分析】支架静力、屈曲及模态分析

热门文章

  1. 股市大涨该买吗?教你用算法量化交易行为!
  2. 解决BLAST Database error: Error pre-fetching sequence data
  3. 计算机机房的安全知识有哪些,计算机公共机房安全管理制度
  4. 【python】计算miou
  5. 自动化手游测试视频震撼发布
  6. 是学不会的OD啊(一)->初次见面,请多指教
  7. SpringSecurityOauth中token(Basic、Bearer)
  8. Snowflake Snow Snowflakes(哈希表的应用)
  9. 光和颜料中的三原色,美术中的三原色
  10. azkaban 调度任务一直处于preparing状态