微信自定义分享功能二次封装
我原本是纯后端开发,但是最近因为工作原因,做了微信公众号的二次开发,说实话写H5调CSS调得头大,还是得术业有专攻才行。话不多说,因为要做微信自定义分享,网上其实已经有很多轮子了,但是100个人就有100种不同的写法,最终还是觉得自己造的轮子要好使一点?因此做了以下的封装,直接上代码(注:UI框架使用的是MUI):
- 页面引用jssdk:
<script type="application/javascript" src='http://res.wx.qq.com/open/js/jweixin-1.4.0.js'></script>
- 分享按钮:
<span class="mui-icon mui-icon-paperplane" id="wx_share_to_app_message" οnclick="go_to_the_wx_share()"></span>
- 点击分享后的遮罩层:
<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>
- 分享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));}}); });
- 里面得获取签名字符串得方法网上很多,就不分享了
- 遮罩层背景图片地址:http://588ku.com/sucai/6462380.html
- 遮罩层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; }
- 需要注意的是,分享的链接域名或路径必须与当前页面对应的公众号JS安全域名一致。
转载于:https://www.cnblogs.com/zhao-yi/p/9777049.html
微信自定义分享功能二次封装相关推荐
- 微信自定义分享功能实现
微信自定义分享功能实现 微信自定义分享功能实现 一.实现的关键 1.后端的任务 2.前台的任务 二.实现具体步骤 1.js安全域名配置(被分享的网址必须实现) 2.添加服务器配置(成为开发者) 3.生 ...
- php 微信分享功能_基于thinkPHP实现的微信自定义分享功能
这篇文章主要介绍了基于thinkPHP实现的微信自定义分享功能,结合实例形式分析了thinkPHP调用微信接口实现自定义分享功能的相关操作技巧,需要的朋友可以参考下 本文实例讲述了基于thinkPHP ...
- 微信自定义分享、二次分享解决方案
转自:https://www.cnblogs.com/backtozero/p/7064247.html 前言 刚进入一家新公司,接到的第一个任务就是需要需要自定义微信分享的效果(自定义缩略图,标题, ...
- 微信自定义分享限制分享
微信自定义分享&限制分享 一.微信自定义分享 [ (* ̄︶ ̄)微信官方文档 ] 业务需求: 开发过程中有些业务需要借助微信进行推广和宣传.难免需要使用微信提供的一些功能,比如微信的二次分享(也 ...
- 微信JS-SDK实现自定义分享功能,分享给朋友,分享到朋友圈
微信JS-SDK实现自定义分享功能,分享给朋友,分享到朋友圈 导语: 微信分享在手机右上角的三个点一键分享就ok了,那么对于分享到朋友圈,分享给朋友是怎么实现的呢?对于那种活动分享送流量是怎么定位分享 ...
- java 微信 jssdk 分享朋友圈_JSSDK微信自定义分享朋友圈
背景:15年之前的微信分享只需要加入一段js就可以实现.后来微信官方全部禁止了.现在的微信分享全部得使用jssdk. 一.分享功能: 在微信内(必须在微信里)打开网站页面,分享给朋友或者分享到朋友圈时 ...
- typecho图标_Typecho微信自定义分享插件WeChatShare 自定义标题描述小图标
前言 张小龙带领微信走进了大众的生活,在十亿用户的生活里扎根.于是我们不管是阅读.聊天.看视频,基本上都离不开微信.好东西分享给用户,第一时间想到的肯定是微信. 很久以前,一个网页分享到微信聊天,系统 ...
- 【vue/uni-app】微信sdk分享功能在vue中开发中的一些个人纪录
在vue开发微信sdk分享功能中的一些个人纪录 先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名". 我这里用的是 ...
- 微信分享源码PHP版JS-SDK接口_微信JSSDK分享功能图文实例详解
本文实例讲述了微信JSSDK分享功能.分享给大家供大家参考,具体如下: 这里以微信分享到朋友圈,分享给微信好友为例为参考,进行调用测试,想添加其他的功能,自行查看开发人员文档即可 工欲善其事,必先利其 ...
最新文章
- 如何获得更多的自由开发者客户
- Saltstack grains组件
- overleaf文章管理
- leetcode刷题集:栈与队列
- liunx驱动----异步通知
- Archiva 2.2.3 安装运行的时候出现协议版本错误
- Spring : 连接池-HikariCP
- waitpid调用返回出错提示: No child processes问题
- mysql 数据增量抽取_通过Maxwell实时增量抽取MySQL binlog并通过stdout展示
- banner图/轮播图----html
- 常用的webservice接口(转)
- 微信H5生成海报图片并保存到手机
- 主机识别SDIO接口卡过程
- HTTP中的301、302、303、307、308
- Ecshop及大商创198版本,解决Deprecated: preg_replace()报错
- 相机跟频闪灯(LAMP-S25)、爆闪灯(LAMP-F25)、频爆一体灯(LAMP-SF25)信号线如何连接?
- 项城户口迁移联系电话
- mac修改mysql端口
- 这四款良心好用的优质软件,我用了多年,百用不腻
- 【有限元分析】支架静力、屈曲及模态分析