如何使用微信JS-SDK实际分享功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用微信JS-SDK实际分享功能相关的知识,希望对你有一定的参考价值。

参考技术A 登录你的微信平台,点击逗公众号设置地。

2
点击逗功能设置地,然后点击逗设置地。

3
设置JS接口安全域名。这里填写的是一级域名,不带www和http。最多可以设置三个域名。设置完后点击确定。(多说一句,相比以前的分享没有任何域名限制,这里设置安全域名,目的是为了当发现此公众平台发现诱导分享行为时,可以根据此域名追溯到所有分享出去的链接,以及通过这些链接增加的粉丝。这样,微信就可以牢牢控制了你的微信平台,一旦发现违规,让分享链接失效,删除掉诱导行为增加的粉丝,是瞬间就可以完成的。因此,微信平台的开发者,一定要合理来使用分享功能,不要因小失大。等到你的微信平台被封,估计哭都来不及)

4
在开发者中心中获取你的AppID和AppSecret,接下来在获取令牌时,需要这两个信息。

5
获取令牌。在服务器端完成,代码如下:
function wx_get_token()
$token = S('access_token');
if (!$token)
$res = file_get_contents('' .'你的AppID'.'&secret=' .'你的AppSecret');
$res = json_decode($res, true);
$token = $res['access_token'];
// 注意:这里需要将获取到的token缓存起来(或写到数据库中)
// 不能频繁的访问,每日有次数限制
// 通过此接口返回的token的有效期目前为2小时。令牌失效后,JS-SDK也就不能用了。
// 因此,这里将token值缓存1小时,比2小时小。缓存失效后,再从接口获取新的token,这样
// 就可以避免token失效。
// S()是Thinkphp的缓存函数,如果使用的是不ThinkPhp框架,可以使用你的缓存函数,或使用数据库来保存。
S('access_token', $token, 3600);

return $token;


注意:返回的access_token长度至少要留够512字节。接口返回值:
"access_token":"ACCESS_TOKEN","expires_in":7200
"access_token":"vdlThyTfyB0N5eMoi3n_aMFMKPuwkE0MgyGf_0h0fpzL8p_hsdUX8VGxz5oSXuq5dM69lxP9wBwN9Yzg-0kVHY33BykRC0YXZZZ-WdxEic4","expires_in":7200

6
获取jsapi的ticket。jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。
function wx_get_jsapi_ticket()
$ticket = "";
do
$ticket = S('wx_ticket');
if (!empty($ticket))
break;

$token = S('access_token');
if (empty($token))
wx_get_token();

$token = S('access_token');
if (empty($token))
logErr("get access token error.");
break;

$url2 = sprintf("",
$token);
$res = file_get_contents($url2);
$res = json_decode($res, true);
$ticket = $res['ticket'];
// 注意:这里需要将获取到的ticket缓存起来(或写到数据库中)
// ticket和token一样,不能频繁的访问接口来获取,在每次获取后,我们把它保存起来。
S('wx_ticket', $ticket, 3600);
while(0);
return $ticket;


接口返回值:
"errcode":0,"errmsg":"ok","ticket":"sM4AOVdWfPE4DxkXGEs8VMKv7FMCPm-I98-klC6SO3Q3AwzxqljYWtzTCxIH9hDOXZCo9cgfHI6kwbe_YWtOQg","expires_in":7200

7
签名,将jsapi_ticket、noncestr、timestamp、分享的url按字母顺序连接起来,进行sha1签名。
noncestr是你设置的任意字符串。
timestamp为时间戳

$timestamp = time();
$wxnonceStr = "任意字符串";
$wxticket = wx_get_jsapi_ticket();
$wxOri = sprintf("jsapi_ticket=%s&noncestr=%s×tamp=%s&url=%s",
$wxticket, $wxnonceStr, $timestamp,
'要分享的url(从http开始,如果有参数,包含参数)'
);
$wxSha1 = sha1($wxOri);

END
步骤2 添加JS代码
生成签名后,就可以使用js代码了。在你的html中,进行如下设置即可。
<script type="text/javascript" src=""></script>
<script type="text/javascript">
// 微信配置
wx.config(
debug: false,
appId: "你的AppID",
timestamp: '上一步生成的时间戳',
nonceStr: '上一步中的字符串',
signature: '上一步生成的签名',
jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage'] // 功能列表,我们要使用JS-SDK的什么功能
);
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在 页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready 函数中。
wx.ready(function()
// 获取逗分享到朋友圈地按钮点击状态及自定义分享内容接口
wx.onMenuShareTimeline(
title: '分享标题', // 分享标题
link:"分享的url,以http或https开头",
imgUrl: "分享图标的url,以http或https开头" // 分享图标
);
// 获取逗分享给朋友地按钮点击状态及自定义分享内容接口
wx.onMenuShareAppMessage(
title: '分享标题', // 分享标题
desc: "分享描述", // 分享描述
link:"分享的url,以http或https开头",
imgUrl: "分享图标的url,以http或https开头", // 分享图标
type: 'link', // 分享类型,music、video或link,不填默认为link
);
);
</script>

微信公众号开发--微信JS-SDK分享到朋友圈和分享给朋友

之前写过一篇使用微信JS-SDK来实现扫一扫功能的博客

微信公众号开发–微信JS-SDK扫一扫功能

在该博客里介绍了微信JS-SDK的基本用法,其中包括以下几个步骤

技术分享图片

还详细介绍了通过config接口注入权限验证配置以及签名算法实现的Java版本

前两天在做微信分享的时候发现按照以前的思路每次都不能正确获取“分享到朋友圈”按钮点击状态及自定义分享内容接口,而是必须通过一个按钮先点击帮点事件,然后才能获取“分享到朋友圈”按钮点击状态及自定义分享内容接口。

回顾一下以前扫一扫的js代码

下面是wx.config的主代码

    <script type="text/javascript">
        $(function() {
            var timestamp = $("#timestamp").val();//时间戳
            var nonceStr = $("#noncestr").val();//随机串
            var signature = $("#signature").val();//签名
            wx.config({
                debug : true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                appId : ‘wx622ca8545e5c354b‘, // 必填,公众号的唯一标识
                timestamp : timestamp, // 必填,生成签名的时间戳
                nonceStr : nonceStr, // 必填,生成签名的随机串
                signature : signature,// 必填,签名,见附录1
                jsApiList : [ ‘scanQRCode‘ ]
            // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
            });
        });
    </script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

下面是扫一扫的代码

前提是有一个

<button id="scanQRCode">扫码</button>
  • 1
  • 2
        $("#scanQRCode").click(function() {
            wx.scanQRCode({
                needResult : 1,
                desc : ‘scanQRCode desc‘,
                success : function(res) {
                    //扫码后获取结果参数:htpp://xxx.com/c/?6123,截取到url中的防伪码后,赋值给Input
                    var url = res.resultStr;
                    /* var tempArray = url.split(‘?‘);
                    var tempNum = tempArray[1]; */
                    if(url.indexOf(",")>=0){
                        var tempArray = url.split(‘,‘);
                        var tempNum = tempArray[1];
                        $("#id_securityCode_input").val(tempNum);
                    }else{
                    $("#id_securityCode_input").val(url);
                    }

                }
            });
        });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

以上代码完全没有问题,但是当我配置获取“分享到朋友圈”按钮点击状态及自定义分享内容接口的时候却始终不能成功

解决方案

原来是wx.config执行需要时间,而我们把扫一扫放在外面完全没影响。是因为,我们点击扫码的时候wx.config已经加载好了,而我之前的点击一下再分享和扫码是一个道理,为了不让用户点击一下再分享需要将我上面讲的微信JS-SDK使用步骤中的第四步用到


转自 :
http://blog.csdn.net/frankcheng5143/article/details/51026996



以上是关于如何使用微信JS-SDK实际分享功能的主要内容,如果未能解决你的问题,请参考以下文章

浅谈js-sdk的场景-微信分享

c#微信开发,使用JS-SDK自定义分享功能,分享朋友圈,分享给朋友等

关于微信分享的一些链接

微信分享相关

微信公众号开发--微信JS-SDK分享到朋友圈和分享给朋友

自定义微信分享链接(使用JS-SDK) + 实现预览pdf