微信服务号内容分享和自定义分享

之前的文章后台通过useragent判断用户是否从手机端访问页面,公司申请了微信服务号,基础功能完成之后,发现一个问题就是服务号中所有右上角中点击之后可以分享到朋友圈,发送给朋友,分享到QQ,最开始想的办法是隐藏。不过后来发现大多数的公共账号并没有隐藏,只是在分享的时候修改跳转链接。如果没有做过微信开发估计需要思考一下,不用很久你就知道有一个插件叫微信JS-SDK。

开发步骤

微信JS-SDK使用起来很方便,不过大多数的时候我们耗费的时候是在config上面,服务端的Access_Token和JS_Ticket保存当然也是必要的步骤,以下步骤是个人根据实际开发总结的步骤,可根据个人习惯自行安排。

①在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js,请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixin-1.0.0.js ,否则将无法在iOS9.0以上系统中成功使用JSSDK;(官方)

②获取Access_Token,https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET,其中APPID和APPSECRET是微信公共号的ID和密钥,有效期为7200s.

③通过获取的Access_Token然后获取生成签名之前需要先获取jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

④由于Access_Token和JSjsapi_ticket有效期都是两个小时,每天都有一定的次数限制,因为请自行在获取Access_Token和Ticket之后保存在自己的数据库中,方便测试也方便上线,同时需要定时刷新Access_Token和Ticket;

⑤根据配置文件中的参数信息配置参数,appId不需要解释,就是签名比较难搞定,对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1,然后对string1进行sha1签名,可以获取签名:

wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: ‘‘, // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: ‘‘, // 必填,生成签名的随机串
    signature: ‘‘,// 必填,签名,见附录1
    jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});

签名参数顺序如下所示:

jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value

⑥登录公共号平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

⑦将所有的操作都放在wx.ready中执行:

wx.ready(function(){

    // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
});

开发历程

①如果单纯只是开发步骤稍微都凑点字数和图片也能搞成一篇文章,不过程序猿还是务实点比较好,对于上面的步骤你有可能有迷惑的地方,有不理解的地方,比较重点的问题是关于config的参数的形式,代码参考如下:

var jsSHA = require(‘jssha‘);

var createNonceStr = function() {
    return Math.random().toString(36).substr(2, 15);
};

var createTimestamp = function() {
    return parseInt(new Date().getTime() / 1000) + ‘‘;
};

var raw = function(args) {
    var keys = Object.keys(args);
    keys = keys.sort();
    var newArgs = {};
    keys.forEach(function(key) {
        newArgs[key.toLowerCase()] = args[key];
    });

    var string = ‘‘;
    for (var k in newArgs) {
        string += ‘&‘ + k + ‘=‘ + newArgs[k];
    }
    string = string.substr(1);
    return string;
};

/**
 * 传入Ticket和Url,Url应该是在配置的域名之下
 *
 * @returns
 */
var sign = function(jsapi_ticket, url) {
    var ret = {
        jsapi_ticket: jsapi_ticket,
        nonceStr: createNonceStr(),
        timestamp: createTimestamp(),
        url: url
    };

    var string = raw(ret);
    shaObj = new jsSHA("SHA-1", "TEXT");
    shaObj.update(string);
    ret.signature = shaObj.getHash("HEX");
    return ret;
};

exports.sign = sign;

需要jssha进行sha-1签名,如果不了解可以参考一下官网,最新版本是2.0.2;

②关于定时刷新本人使用的node-schedule,当然也可以使用later,代码参考如下:

exports.tokenSchedule = function() {
    var rule = new schedule.RecurrenceRule();
    rule.minute=0;
    var job = schedule.scheduleJob(rule, function() {  
        // 刷新
    });
};

③自定义分享代码参考如下:

  wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: ‘<%=appId%>‘, // 必填,公众号的唯一标识
        timestamp: ‘<%=timestamp%>‘, // 必填,生成签名的时间戳
        nonceStr: ‘<%=nonceStr%>‘, // 必填,生成签名的随机串
        signature: ‘<%=signature%>‘, // 必填,签名,见附录1
        jsApiList: [‘hideOptionMenu‘, ‘onMenuShareAppMessage‘, ‘onMenuShareTimeline‘, ‘onMenuShareQQ‘] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    });
    wx.ready(function() {
        // wx.hideOptionMenu(); 隐藏分享
        wx.onMenuShareTimeline({
            title: ‘博客园-FlyElephant‘, // 分享标题
            link: ‘http://www.cnblogs.com/xiaofeixiang/‘, // 分享链接
            imgUrl: ‘‘, // 分享图标
            success: function() {
                // 用户确认分享后执行的回调函数
            },
            cancel: function() {
                // 用户取消分享后执行的回调函数
            }
        });
    });

这样一看微信开发就很简单了~

时间: 2024-12-17 23:07:42

微信服务号内容分享和自定义分享的相关文章

PHP 开发社区微信服务号实战图解

本博文就月初刚上线的微信服务号,图文进行总结分享给大家. 去年年底,我所在的团队讨论要开发微信号,话题由此拉开: 原来有一个3年前注册的微信号,但是后台操作无法从"订阅号"变更为"服务号",随即找腾讯的客服沟通,客服还算是热情,mm耐心的告之系统已经更新,对于无法升级的微信号,只能重新注册----"*#*(*¥)¥K30#$e&#)",一阵抓狂后,只能重新注册了,下面就开始从注册到内部需求讨论,到开发的图文总结. Step1:微信注册 在

微信服务号如何用编辑模式设置自定义菜单

1.登录该微信服务号,点击高级功能,选择编辑模式. 2.开启编辑模式. 3.设置自定义菜单,菜单管理—添加.排序.设置动作. 4.添加一级菜单(最多3个).二级菜单(一级菜单下最多5个二级菜单),比如我可以添加百度经验,在百度经验下面我可以设置经验1,经验2. 5.设置菜单内容:点击你选择的菜单,设置点击该菜单后的动作(发送消息.跳转网页). a)发送消息:编辑你要发送的文章.图片.语音.视频.图文消息. b)跳转到网页:你有WAP站的话,直接就跳转到你的手机网站了.

微信分享网页自定义分享标题,图片,说明

在微信中,分享网页到朋友或朋友圈时,微信会自动获取该网页的图片和标题,但是有时候我们需要自己定义分享的图片和标题的话,就需要调用微信的接口来实现,weixin_share.js地址: 调用方法 <script src="/crowd/js/weixin_share.js"></script> $(document).ready(function () { wx_share_handle() }); function wx_share_handle(){ var

百度分享(自定义分享内容)

百度分享默认的分享内容为您当前页面的title,但您可以通过如下方法来自定义您想要分享出去的内容. 1.通过全局配置进行修改: <!-- Baidu Button BEGIN --> <div id="bdshare" class="bdshare_t bds_tools get-codes-bdshare"> <a class="bds_qzone">QQ空间</a> <a class=&q

微信服务号、订阅号和企业号的区别(运营和开发两个角度)

博客转载自:http://blog.csdn.net/u013142781 为了以后便于查找,转载此博客,在此感谢原博主的无私分享. 一.运营的角度 1.1.概括 订阅号: 微信最初的形态是一个纯粹的社交工具,也就是人与人之间的联系工具,其中又分熟人之间的联系和陌生人之间的联系,于是就诞生了朋友圈和订阅号.而订阅号的作用就是媒体社交,订阅号最主要是自媒体或媒体为读者用户提供优质的对他们感兴趣或有价值的内容,从而与关注者建立关系或使用户对自身品牌的认可. 服务号: 相比于订阅号,服务号要复杂的多,

微信服务号、订阅号和企业号的差别(运营和开发两个角度)

一.运营的角度 1.1.概括 订阅号: 微信最初的形态是一个纯粹的社交工具,也就是人与人之间的联系工具,当中又分熟人之间的联系和陌生人之间的联系.于是就诞生了朋友圈和订阅号. 而订阅号的作用就是媒体社交.订阅号最主要是自媒体或媒体为读者用户提供优质的对他们感兴趣或有价值的内容.从而与关注者建立关系或使用户对自身品牌的认可. 服务号: 相比于订阅号.服务号要复杂的多,当微信有了朋友圈能够卖商品,订阅号能够做营销. 那么当出现人与商业之间的联系需求时.服务号便诞生了,它不仅要要做一个服务者还要做一个

微信 服务号开发

tp5.0  一个入口文件,一个wx类 //WxAction.php 入口 <?php /** * Created by PhpStorm. * User: lxd * Date: 17/10/31 * Time: 18:01 * 微信请求统一入口,单独的类,无需基础其他类 */ namespace app\index\controller; use telerr\Chaoxin; use think\Config; use think\Request; use wx\Wx; class WxA

微信服务号如何认证

日前,徽州区委组织部在全市率先建立党建微信公众平台.该区党建微信公众平台每期微刊内容包括要闻微扫描.党课微推荐.亮点微展示.党员微故事等4个特色栏目,注重“短精活”.“快新准”,通过文字.语音.图片和视频等多种形式,宣传党的路线方针政策.开展党员教育管理.展示党建工作成果.自开通以来不到一个月时间,党建微信公众平台已被260余人关注,收到党员群众意见建议20余条,解决问题12个. 怎样开通这种微信平台并且通过认证呢? 微信公众平台简介 微信公众平台是面向名人.政府.媒体.企业等推出的合作推广业务

shell和Python调用企业微信服务号进行报警

#!/bin/bash corpid="wxd6b3" corpsecret="aJTaPaGjW" access_token=`curl -s  "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpid&corpsecret=$corpsecret" |jq '.access_token' | awk -F'"' '{print $2}'` curl -l -H