微信分享等api笔记

微信分享笔记(第二版)

: https://blog.youkuaiyun.com/qq_28018283/article/details/80642842


微信分享首先需要的条件

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

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

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



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



/**
** @author 坏人小明
** @jssdk 集成类
**
*/
class JSSDK {

  
          public function outWeixin() {
            
            define("APPID", "你的APPID");
            define("APPSECRET", "你的 APPSECRET ");
         
              $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 的长度需要注意 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值