微信分享等api笔记

来源:互联网 发布:淘宝大码孕妇装排行 编辑:程序博客网 时间:2024/06/03 21:27

微信分享首先需要的条件

首先,公众号需要是认证过的,服务号。

开发前需要在微信公众号,填写安全域名。

当然,你需要知道你的appid和appsecret。



——————————————1 根据自己的业务逻辑,定义一个微信jssdk类,获得分享需要用到的数据—————————————————————



/**** @author 坏人小明** @jssdk 集成类***/class JSSDK {            public function outWeixin() {                        define("APPID", "你的<span style="font-family: Arial, Helvetica, sans-serif;">APPID</span>");            define("APPSECRET", "你的<span style="font-family: Arial, Helvetica, sans-serif;">APPSECRET</span>");                       $jsapi_ticket = $this->getJsApiTicket();            $nonceStr = '固定或自己定义的随机生成字段';                  $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//获取当前不带#和hash值的url                        $timestamp = NOW_TIME;//当前时间戳            $string1 = "jsapi_ticket=".$jsapi_ticket."&noncestr=".$nonceStr."×tamp=".$timestamp."&url=".$url;//按微信规定连接的字串
            $signature = sha1($string1);//加密                        $srcjs =  '<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>'; //加载js            $wxJsConfig =  "wx.config({//配置验证参数                debug:false,                 appId:'".APPID."',                 timestamp:".$timestamp.",                 nonceStr:'".$nonceStr."',                signature:'".$signature."',                jsApiList: [ //与步骤3中api列表对应                    'onMenuShareTimeline',                     'onMenuShareAppMessage'                ]             })";                       return array('srcjs'=>$srcjs,'wxJsConfig'=>$wxJsConfig);                }               private function getJsApiTicket() {                      $data = D('存放的表名')->where()->find();            if ($data['ticket_time'] < time()) {              $access_token = $this->getAccessToken();                       $jsapi_ticket = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi" ;            $res = file_get_contents($jsapi_ticket); //获取文件内容或获取网络请求的内容            //echo $res;            $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP 变量            $jsapi_ticket = $result['ticket'];                      $wxdata['jsapi_ticket'] = $result['ticket'];            $wxdata['ticket_time'] = time()+7000;            //存储access_token            $data = D('<span style="font-family: Arial, Helvetica, sans-serif;">存放的表名</span><span style="font-family: Arial, Helvetica, sans-serif;">')->where()->save($wxdata);</span>            $jsapi_ticket =  $wxdata['jsapi_ticket'];            // var_dump($jsapi_ticket);die();            } else {              $jsapi_ticket = $data['jsapi_ticket'];            }            return $jsapi_ticket;      }      private function getAccessToken() {                       $data = D('<span style="font-family: Arial, Helvetica, sans-serif;">存放的表名</span><span style="font-family: Arial, Helvetica, sans-serif;">')->where(array('id'=>1))->find();</span>                        if ($data['expire_time'] < time()) {               // var_dump(time());die();              $token_access_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . APPID . "&secret=" . APPSECRET;                          $res = file_get_contents($token_access_url); //获取文件内容或获取网络请求的内容                    $result = json_decode($res, true); //接受一个 JSON 格式的字符串并且把它转换为 PHP 变量              $wxdata['access_token'] = $result['access_token'];              $wxdata['expire_time'] = time()+7000;                          $data = D('<span style="font-family: Arial, Helvetica, sans-serif;">存放的表名</span><span style="font-family: Arial, Helvetica, sans-serif;">')->where(array('id'=>1))->save($wxdata);</span>               $access_token = $wxdata['access_token'];                        } else {              $access_token = $data['access_token'];            }            return $access_token;      }}




——————————————2 在需要用到的方法里引入jssdk,并传值到页面,根据各个框架不同方法不同—————————————————————

    require_once 'jssdk的路径';        $jssdk = new JSSDK();        $data = $jssdk->outWeixin(); 





——————————————3 在需要分享的页面,加载方法传过来的值,写出调用的api—————————————————————————————
 <span></span>wx.ready(function () {    wx.onMenuShareTimeline({    title: '分享标题', // 分享标题    link: '2222', // 分享链接    imgUrl: 'weixinshare.png', // 分享图标    success: function () {         // 用户确认分享后执行的回调函数        // alert('1');    },    cancel: function () {         // 用户取消分享后执行的回调函数         // alert('2');    }});wx.onMenuShareAppMessage({    title: '分享标题', // 分享标题    desc: '分享描述', // 分享描述    link: 'www.baidi.com', // 分享链接    imgUrl: '122', // 分享图标    type: '', // 分享类型,music、video或link,不填默认为link    dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空    success: function () {         // 用户确认分享后执行的回调函数    },    cancel: function () {         // 用户取消分享后执行的回调函数    }});      });

总结:

做的过程参考微信开发者文档即可。不多叙述。

遇到如下几个问题:

1 。url的获取,获取当前不带#和hash值的url   容易出错


2 。 签名错误时,先检查各个拼接字段,然后检查string连接是否写错,是否sha1加密。再去查access_token 和jsapi_ticket 


3 。需要注意的是,access_token 和jsapi_ticket 这两个值,都是7200有效期,每天的请求上线是2000次,所以需要在服务器进行缓存,可以写文件,可以存入缓存,可以写表等等 。如果超过上限,微信号将被取消使用分享的功能。


3 。 步骤3中调用的api需要写在

wx.ready(function () {
} 中


4   需要在公众号内  绑定微信安全域名,只有域名列表内的,才能使用api。

5 在缓存的时候access_token 和jsapi_ticket 的长度需要注意 

0 0