微信JS-SDK 修改分享标题 分享图片

正常网页分享到朋友圈不做任何设置的话 微信会自动设置主图片和title作为分享标题。如果想自行设置,可修改jssdk进行设置。具体方法如下:

准备条件:

1,AppID----应用ID

2,AppSecret---应用密钥

3,域名

这两个在微信公众平台->基本配置里可见。

注意:公众号必须是服务号 订阅号不可用哦 

参考文献:http://mp.weixin.qq.com/wiki/home/index.html 具体使用过程所遇问题如下:

使用步骤:

1,绑定域名

微信公众平台->公众号设置->功能配置里面设置js接口安全域名。此域名是顶级域名,eg:http://campaign.mioji.com/ 只需输入mioji.com即可

2,引入js文件 http://res.wx.qq.com/open/js/jweixin-1.0.0.js

3,通过设置config接口注入权限验证配置

据开发者文档需求如下:

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

wx.config({
   debug: true, 
   appId: 'wx335239fda95ea29', // 公众号的唯一标识
   timestamp: '1450789389', // 生成签名的时间戳 
   nonceStr: 'ss1200DD467', // 生成签名的随机串 
   signature: '4067720c9b92b7dba6d65f13342c7febb6c8d464',// 签名
   jsApiList: ['onMenuShareTimeline'] // 需要使用的JS接口列表
});

备注:有关签名signature生成:

a:首先生成tocken:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx335239fda95ea29&secret=07274d2729e500793b6691a4a9561cc

b:利用tocken生成ticket:https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=XI7aUvykPzyuWLQGsVuJcJ&type=jsapi

c:利用ticket、nonceStr随机串、timestamp时间戳、url生成string:

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

d:利用生成的string进行sha1生成签名signature

0f9de62fce790f9a083d5c99e95740ceb90c27ed


第二次尝试:
由于时间戳并不是固定的 所以签名也不是固定的 PHP修改:

<?php 
    $timestamp = time(); 
    $nonceStr = 'Wm3WZYTPz0wzccnd';
    $ticket = 'sM4AOVdWfPE4DxkXGEs8VOO9lGIrxq5';
    $signature = 'jsapi_ticket='.$ticket.'&noncestr='.$nonceStr.'&timestamp='.$timestamp.'&url=http://campaign.mioji.com/online/xmas2015';
$signature = sha1($signature);
    ?>
    <script type="text/javascript">
      wx.config({
   debug: true, 
     appId: 'wx335239fda952a29', // 公众号的唯一标识
   timestamp: '<?php echo $timestamp; ?>', // 生成签名的时间戳
   nonceStr: '<?php echo $nonceStr; ?>', // 生成签名的随机串
   signature: '<?php echo $signature; ?>',// 签名
     jsApiList: ['onMenuShareTimeline'] // 需要使用的JS接口列表
  });

</script> 

第三次尝试:

ticket失效时间是两个小时,所以不可以写死ticket,php获取

<?php 
     $timestamp = time(); 
     $nonceStr = 'Wm3WZYTPz0wzccnd';
     $ticket = Xmas2015::model()->getTicket();
     $signature = 'jsapi_ticket='.$ticket.'&noncestr='.$nonceStr.'&timestamp='.$timestamp.'&url=http://campaign.mioji.com/online/xmas2015';
$signature = sha1($signature);
     ?>
     <script type="text/javascript">
      wx.config({
    debug: true, 
      appId: 'wx335239fda952a29', // 公众号的唯一标识
    timestamp: '<?php echo $timestamp; ?>', // 生成签名的时间戳
    nonceStr: '<?php echo $nonceStr; ?>', // 生成签名的随机串
    signature: '<?php echo $signature; ?>',// 签名
      jsApiList: ['onMenuShareTimeline'] // 需要使用的JS接口列表
  });

</script> 

getTicket()实现方法如下:

public function getTicket()
    {
        $token_url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx335239fda9e2a&secret=07274d2729e5020793b661a1';
        $re = $this->curl(array(
            'url' => $token_url,
            'timeout' => 120
        ));
        $token_arr = json_decode($re, true);
        $token = $token_arr['access_token'];

        $ticket_url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$token.'&type=jsapi';
        $re = $this->curl(array(
            'url' => $ticket_url,
            'timeout' => 120
        ));
        $ticket_arr = json_decode($re, true);
        $re = $ticket_arr['ticket'];
        return $re;
    }

第四次尝试:
分享多个页面时只有首页可分享,是signature中的url错误导致,每个页面URL写自身页面的url即可
4,通过ready 处理成功验证
wx.ready(function(){   
                wx.onMenuShareTimeline({
                    title: '成功分享哦',
                    link: 'http://www.baidu.com',
                    imgUrl: 'http://wx.vland.cc/resource/attachment/images/7/2015/01/fl2Lk2p5o3iOJP3jdp9iPXI9i93iPm.jpg',
                    trigger: function (res) {
                        alert('用户点击分享到朋友圈');
                    },
                    success: function (res) {
                        alert('已分享');
                    },
                    cancel: function (res) {
                        alert('已取消');
                    },
                    fail: function (res) {
                        alert('wx.onMenuShareTimeline:fail: '+JSON.stringify(res));
                    }                        
                });
});
大功告成啦 啦啦啦 不容易(=@__@=)
所遇坑:腾讯允许每天生成最多2000个access_token,一个有效时间2hour 足够用 但是要注意保存tocken值,判断其发生变化再进行替换~否则这一天的公众号会失效的哦~

二次分享上面设置图片标题不会生效,因为分享出去之后链接会发生改变,它和生成签名用的url不同导致设置失效
解决方法:
图片:在页面头部隐藏分享要用的图片,微信分享默认获取第一张图片
标题:生成签名用当前页面地址。即用window.location.href获取页面地址 做一次转码再传递给后台做授权生成签名


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值