最新文章:

首页 后端

静态页面 使用jssdk微信分享的方法

发布时间:2017年06月21日 评论数:抢沙发 阅读数:4500

    不多说直接上代码

    PS:微信需要认证,添加JS安全域名,域名得备案

    前台代:


    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script> 
    <script>
    	url=location.href;
    	$.ajax({
    		type : "get",
    		url : "http://xxxxxxxxx/jssdk.php?url="+encodeURIComponent(url),//替换网址 编码为了带参
    		dataType : "jsonp",
    		jsonp: "callback",
    		jsonpCallback:"success_jsonpCallback",
    		success : function(data){
    			wx.config({
    			appId: data.appId,
    			timestamp: data.timestamp,
    			nonceStr: data.nonceStr,
    			signature: data.signature,
    			jsApiList: [
    				   "onMenuShareTimeline", //分享给好友
    				   "onMenuShareAppMessage", //分享到朋友圈
    				   "onMenuShareQQ",  //分享到QQ
    				   "onMenuShareWeibo" //分享到微博
    			]
    			});
    		},error:function(data){
    			alert("连接失败!");
    		}
    	});
    	wx.ready(function (){
    	  var shareData = {
    		  title: '标题',
    		  desc: '简介',//这里请特别注意是要去除html
    		  link: '链接',
    		  imgUrl: '题图'
    	  };
    	  wx.onMenuShareAppMessage(shareData);
    	  wx.onMenuShareTimeline(shareData);
    	  wx.onMenuShareQQ(shareData);
    	  wx.onMenuShareWeibo(shareData);
    	});
    </script>


    服务端文件jssdk.php


    <?php
    $url = $_GET['url'];
    
    class JSSDK
    {
        private $appId;
        private $appSecret;
        private $url;
    
        public function __construct($appId, $appSecret, $url)
        {
            $this->appId = $appId;
            $this->appSecret = $appSecret;
            $this->url = $url;
        }
    
    
        public function getSignPackage()
        {
            $jsapiTicket = $this->getJsApiTicket();
            $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
            // $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
            $url = $this->url;
            $timestamp = time();
            $nonceStr = $this->createNonceStr();
    
    
            // 这里参数的顺序要按照 key 值 ASCII 码升序排序
            $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
    
    
            $signature = sha1($string);
    
    
            $signPackage = array(
                "appId" => $this->appId,
                "nonceStr" => $nonceStr,
                "timestamp" => $timestamp,
                "url" => $url,
                "signature" => $signature,
                "rawString" => $string
            );
            return $signPackage;
        }
    
    
        private function createNonceStr($length = 16)
        {
            $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            $str = "";
            for ($i = 0; $i < $length; $i++) {
                $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
            }
            return $str;
        }
    
    
        private function getJsApiTicket()
        {
            // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
            $data = json_decode(file_get_contents("jsapi_ticket.json"));
            if ($data->expire_time < time()) {
                $accessToken = $this->getAccessToken();
                // 如果是企业号用以下 URL 获取 ticket
                // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
                $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
                $res = json_decode($this->httpGet($url));
                $ticket = $res->ticket;
                if ($ticket) {
                    $data->expire_time = time() + 7000;
                    $data->jsapi_ticket = $ticket;
                    $fp = fopen("jsapi_ticket.json", "w");
                    fwrite($fp, json_encode($data));
                    fclose($fp);
                }
            } else {
                $ticket = $data->jsapi_ticket;
            }
    
    
            return $ticket;
        }
    
    
        private function getAccessToken()
        {
            // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
            $data = json_decode(file_get_contents("access_token.json"));
            if ($data->expire_time < time()) {
                // 如果是企业号用以下URL获取access_token
                // $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
                $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
                $res = json_decode($this->httpGet($url));
                $access_token = $res->access_token;
                if ($access_token) {
                    $data->expire_time = time() + 7000;
                    $data->access_token = $access_token;
                    $fp = fopen("access_token.json", "w");
                    fwrite($fp, json_encode($data));
                    fclose($fp);
                }
            } else {
                $access_token = $data->access_token;
            }
            return $access_token;
        }
    
        private function httpGet($url)
        {
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 500);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($curl, CURLOPT_URL, $url);
            $res = curl_exec($curl);
            curl_close($curl);
            return $res;
        }
    }
    
    $jssdk = new JSSDK("公众号ID", "公众号密钥", $url);//按照自己的公众号填写
    $signPackage = $jssdk->GetSignPackage();
    $tmp = json_encode(array('appId' => $signPackage["appId"], 'timestamp' => $signPackage["timestamp"], 'nonceStr' => $signPackage["nonceStr"], 'signature' => $signPackage["signature"], 'url' => $signPackage["url"]));
    $callback = $_GET['callback'];
    echo $callback . '(' . $tmp . ')';
    exit;
    ?>



二维码加载中...
本文作者:初心      文章标题: 静态页面 使用jssdk微信分享的方法
本文地址:http://www.5wcx.com/back/22.html
版权声明:若无注明,本文皆为“许敬轩的个人主页 - 勿忘初心,方得始终,个人博客,技术经验分享”原创,转载请保留文章出处。
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论
sitemap