微信公众号自定义分享的描述和图片

准备:
一:在公众号设置里面设置——JS接口安全域名,所填域名必须通过ICP备案的验证,把里面提供的一个MP_verify_xxxxxx.txt的文本上传到根目录。
二:在公众号基本配置里面获取开发者的AppID和AppSecret。
三:在安全中心里面设置IP白名单。
最后在需要分享的页面调用:

<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script type="text/javascript">
			$(function(){
    
    
		        var siteUrl = window.location.href; 
				$.post('/?m=WeixinShare&a=signature',{
    
    url:siteUrl},function(res){
    
    
					var res = eval('('+res+')');
					wx.config(res); 
				});
				wx.ready(function(){
    
    
				  wx.updateAppMessageShareData({
    
     
				    title: '<?php echo $title; ?>',
				    desc: '<?php echo $description; ?>', 
				    link: siteUrl, 
				    imgUrl: 'http://<?php echo $_SERVER['HTTP_HOST'].$thumb; ?>', 
				    success: function(res){
    
    }
				  })
				  wx.updateTimelineShareData({
    
     
				    title: '<?php echo $title; ?>',
				    link: siteUrl, 
				    imgUrl: 'http://<?php echo $_SERVER['HTTP_HOST'].$thumb; ?>', 
				    success: function(res){
    
    }
				  })
				}); 
		    });
		</script>

lib里面写入方法:

<?php

if(!defined("Szflame")) exit("Access Denied");
class WeixinShareAction extends Action{
    
    
    public $appId = 'wx............';
    public $appSecret = '.........................';
    # 请求是要请求 signature() 这个方法
    public function signature(){
    
    
        $url = $_REQUEST['url'];
        $time = time();
        $time = (string)$time;
        #生成的随机字符串
        $nonceStr = $this->nonceStr();
        #制作签名的四个参数
        $params = array('url'=>$url,'noncestr'=>$nonceStr,'jsapi_ticket'=>$this->getJsapi(),'timestamp'=>$time);
        $link = $this->getSign($params);
        $signature = sha1($link);
        #前端config需要注入配置的参数
        $data = json_encode(array('debug'=>false,
            'appId'=>$this->appId,'timestamp'=>$time,
            'nonceStr'=>$nonceStr,'signature'=>$signature,'jsApiList'=>array( "updateAppMessageShareData","updateTimelineShareData")));
        echo $data;
    }
    #将取到的值以键值对方式拼接
    public function getSign($params)
    {
    
    
        ksort($params);
        $str = "";
        foreach ($params as $k => $v){
    
    
            $str .= $k . "=" . $v . "&";
        }
        $data = substr($str,0,-1);
        return $data;
    }
    # 随机字符串的生成
    public function nonceStr($length = 16)
    {
    
    
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        $str   = "";
        for ($i = 0;$i < $length;$i++){
    
    
            $str.= substr($chars,mt_rand(0,strlen($chars)-1),1);
        }
        return $str;
    }
    #获取access_token 不是网页授权的access_token
    //[获取access_token的方法](https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183)
    public function signToken(){
    
    
        $url =  "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appId."&secret=".$this->appSecret."";
        $data = $this->httpGet($url);
        return $data['access_token'];
    }
    #这里的access_token做了存文件的处理 你也可以选择进行存库定时刷新 3-5分钟刷新一次(linux的定时任务)
    public function getToken(){
    
    
        $result = F('web_token.json');
        if(empty($result))
        {
    
    
            $result['access_token'] = $this->signToken();
            $result['expires']=time()-7000;
            F('web_token.json',$result);
        }
        if (time() > $result['expires'] || empty($result['access_token'])){
    
    
            $result['access_token'] = $this->signToken();
            $result['expires']=time()+7000;
            F('web_token.json',$result);
            return $result['access_token'];
        }else{
    
    
            return $result['access_token'];
        }
    }
    #这里的Ticket做了存文件的处理 你也可以选择进行存库定时刷新 3-5分钟刷新一次(linux的定时任务)
    public function getTicket()
    {
    
    
        #获取access_token的链接https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183
        $token = $this->getToken();
        $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$token."&type=jsapi";
        $ticket = $this->httpGet($url);
        return $ticket['ticket'];
    }
    public function getJsapi()
    {
    
    
        $result = F('ticket.json');
        if(empty($result))
        {
    
    
            $result['access_token'] = $this->getTicket();
            $result['expires']=time()-7000;
            F('ticket.json',$result);
        }
        if (time() > $result['expires'] || empty($result['access_token'])){
    
    
            $result['access_token'] = $this->getTicket();
            $result['expires']=time()+7000;
            F('ticket.json',$result);
            return $result['access_token'];
        }else{
    
    
            return $result['access_token'];
        }
    }
    public function httpGet($url){
    
    
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($ch);
        curl_close($ch);
        return json_decode($output, true);
    }
}
?>

猜你喜欢

转载自blog.csdn.net/baidu_39043816/article/details/119674175