微信分享 JSSDK的使用

我现在做过的在微信中运行的项目,基本上都有微信分享功能,所以,会使用JSSDK分享页面是非常重要的。
分享功能的代码一般会放在beforeCreate或mounted钩子中,代码如下:

 this.$http.get("group/identity")
       .then(({data:{code, content, jssdk, msg}}) => {
            if (code == 0) {
                 this.group_id = content.group_id;
                 if(this.group_id){
                      this.isSignUpBtn = false;
                      this.isMyBtn = true;

                      // 这里放分享功能的代码 

                 }
            } else {
                 MessageBox('提示', msg)
           }
    }, ({data:{msg}}) => {
          MessageBox('提示', msg);
});

假如下面是我们请求接口的数据

{
  "code": 0,
  "msg": "请求成功的消息",
  "content": "这里放数据",
  "is_mobile_user": true,
  "jssdk": {
    "appId": "wxec4d172a4f73ee6f",
    "timestamp": "1487756879",
    "nonceStr": "58ad5e4f70226",
    "signature": "418034b044c61eef9375ada45a1dc373a5e4b7db"
  }
}

一切准备就绪之后,我们来根据不同页面的使用方式一一分解:

先说引入的问题:
// 首先,在index.html页面先引入JSSDK文件。

<script type="text/javascript">
    var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");
    document.write(decodeURI("%3Cscript src='" + _bdhmProtocol + "res.wx.qq.com/open/js/jweixin-1.0.0.js' type='text/javascript'%3E%3C/script%3E"));
</script>

// 当然,你也可以用最简单的方式引入
<script src='https://res.wx.qq.com/open/js/jweixin-1.0.0.js'></script>

// 我个人比较喜欢第一种。

下面就开始使用了,先来一个代码初级版本的方式:
// 方式一,所有代码直接写在页面里面上,分享出去后,用户直接点击分享的链接就回到当前这个页,不需要拼接link,有动态参数。

// 获取jssdk需要的数据
let jssdk = data.jssdk;
// 配置功能
wx.config({
    debug: false,
    appId: jssdk.appId,
    timestamp: parseInt(jssdk.timestamp),
    nonceStr: jssdk.nonceStr,
    signature: jssdk.signature,
    jsApiList: [
        "onMenuShareTimeline",
        "onMenuShareAppMessage"
    ]
});
wx.ready(function () {
    wx.onMenuShareTimeline({
        title: "我们的班级我们的团,快来为" + self.headerData.class + "班级荣誉而战!", // 分享标题
        desc: "哥们儿,咱多久没一起喝酒吃饭了,多久没促膝长谈了,Hey兄弟们!咱该聚聚了!",
        link: location.href, // 分享链接
        imgUrl: "https://tup.iheima.com/sport.png", // 分享图标
        success: function () {
            // alert("成功");
        },
        cancel: function () {
            // alert("失败")
        }
    });
    wx.onMenuShareAppMessage({
        title: "我们的班级我们的团,快来为" + self.headerData.class + "班级荣誉而战!", // 分享标题
        desc: "哥们儿,咱多久没一起喝酒吃饭了,多久没促膝长谈了,Hey兄弟们!咱该聚聚了!",
        link: location.href, // 分享链接
        imgUrl: "https://tup.iheima.com/sport.png", // 分享图标
        success: function () {
            // alert("成功");
        },
        cancel: function () {
            // alert("失败")
        }
    });
});
//  self.headerData.class 为需要动态传入的参数,获取数据的时候直接取出来就行。

// 方式二,所有代码直接写在页面里面上,需要拼接link,一般放在首页或对外分享的主页面,没有动态参数。

// 获取jssdk需要的数据
let jssdk = data.jssdk;
// 配置功能
wx.config({
    debug: false,
    appId: jssdk.appId,
    timestamp: parseInt(jssdk.timestamp),
    nonceStr: jssdk.nonceStr,
    signature: jssdk.signature,
    jsApiList: [
        "onMenuShareTimeline",
        "onMenuShareAppMessage"
    ]
});
var hostName = 'https://wx.chuangyejia.com/';
var pathName = 'fe-sport/#/home';
wx.ready(function() {
    wx.onMenuShareTimeline({
        title: "第四届黑马运动会正在招团长,快来一战成名!", // 分享标题
        desc: "Hey,兄弟,好久不见!3月25日,黑马校友运动会,北京见。",
        link: process.env.NODE_ENV === 'development' ? hostName + 'dev/' + pathName : hostName + pathName, // 分享链接
        imgUrl: "https://tup.iheima.com/sport.png", // 分享图标
        success: function() {
            // alert("成功");
        },
        cancel: function() {
            // alert("失败")
        }
    });

    wx.onMenuShareAppMessage({
        title: "第四届黑马运动会正在招团长,快来一战成名!", // 分享标题
        desc: "Hey,兄弟,好久不见!3月25日,黑马校友运动会,北京见。",
        link: process.env.NODE_ENV === 'development' ? hostName + 'dev/' + pathName : hostName + pathName, // 分享链接
        imgUrl: "https://tup.iheima.com/sport.png", // 分享图标
        success: function() {
            // alert("成功");
        },
        cancel: function() {
            // alert("失败")
        }
    });
});

// 方式三,将分享的代码单独剥离出来成一个js文件,然后在需要的地方引入这个js文件。(推荐)
// utils.js文件中有如下代码

const shareJs = function(jssdk, options) {
    wx.config({
        debug: false,
        appId: jssdk.appId,
        timestamp: parseInt(jssdk.timestamp),
        nonceStr: jssdk.nonceStr,
        signature: jssdk.signature,
        jsApiList: [
            "onMenuShareTimeline",
            "onMenuShareAppMessage"
        ]
    });
    var defaults = {
        title: "分享的标题",
        desc: "分享的描述",
        link: location.href, //分享页面地址,不能为空
        imgUrl: 'https://tup.iheima.com/sport.png', //分享是封面图片,不能为空
        success: function() {}, //分享成功触发
        cancel: function() {} //分享取消触发,需要时可以调用
    }
    options = Object.assign({}, defaults, options);
    wx.ready(function() {
        var thatopts = options;
        wx.onMenuShareTimeline({
            title: thatopts.title, // 分享标题
            desc: thatopts.desc, // 分享描述
            link: thatopts.link, // 分享链接
            imgUrl: thatopts.imgUrl, // 分享图标
            success: function() {
                // alert("成功");
            },
            cancel: function() {
                // alert("失败")
            }
        });
        wx.onMenuShareAppMessage({
            title: thatopts.title, // 分享标题
            desc: thatopts.desc, // 分享描述
            link: thatopts.link, // 分享链接
            imgUrl: thatopts.imgUrl, // 分享图标
            success: function() {
                // alert("成功");
            },
            cancel: function() {
                // alert("失败")
            }
        });
    });
}


module.exports = {
    shareJs
};

// 在home.vue页面中使用。

<script type="text/ecmascript-6">
import { shareJs } from './../utils';  // 引入分享功能的js文件
// 需要拼接地址的地方
let jssdk = data.jssdk;
var hostName = 'https://wx.chuangyejia.com/';
var pathName = 'fe-sport/#/home';
let optionData = {
    title: "第四届黑马运动会正在招团长,快来一战成名!",
    desc: "Hey,兄弟,好久不见!3月25日,黑马校友运动会,北京见。",
    link: process.env.NODE_ENV === 'development' ? hostName + 'dev/' + pathName : hostName + pathName,
    imgUrl: "https://tup.iheima.com/sport.png"
};
shareJs(jssdk, optionData);


// 不需要拼接地址的地方
let jssdk = data.jssdk;
// 准备好要传入到utils.js文件中的参数。
let optionData = {
    title: "我们的班级我们的团,快来为" + self.headerData.class + "班级荣誉而战!",
    desc: "哥们儿,咱多久没一起喝酒吃饭了,多久没促膝长谈了,Hey兄弟们!咱该聚聚了!",
    link: location.href,
    imgUrl: "https://tup.iheima.com/sport.png"
};
// 将jssdk和分享后展示的参数传入
shareJs(jssdk, optionData);

//  self.headerData.class 为需要动态传入的参数,获取数据的时候直接取出来就行。

// 或者还可以像下面这样写,先将分享的内容准备后,然后以更简洁的方式赋值给专入到utils.js中。

<script>
let fromPath = '';
beforeRouteEnter (to, from, next) {
      fromPath = from.path;
      next();
},
// 获取fromPath
</script>
let toLink = location.href;
let titleDetail = "我们的班级我们的团,快来为" + self.headerData.class + "班级荣誉而战!";
let destDetail = "哥们儿,咱多久没一起喝酒吃饭了,多久没促膝长谈了,Hey兄弟们!咱该聚聚了!";
// 根据不同的情况来修改分享后显示的文案。
if(fromPath.substr(-1) == "/"){
      toLink = "http://wx.chuangyejia.com/mobile/sport/whoami";
      titleDetail = "商场王者,快来测试你是王者荣耀里的谁?";
      destDetail = "黑马运动会开幕在即,众多商业大佬已整装待发,速来测试你的王者基因,你更适合加入哪支黑马战队?"
}

let myJssdk = jssdk;
let optionData = {
      title: titleDetail,
      desc: destDetail,
      link: toLink,
      imgUrl: "https://tup.iheima.com/sport.png"
};
shareJs(myJssdk, optionData);

有了上面的这些代码之后,下一次再遇到这类需求时,我就更得心应手了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容