微信分享 php jssdk

https://www.weixinsxy.com/jssdk/ 示例

https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html#3  微信官网接口

 

jssdk类

<?php
namespace fast;

    class Jssdk3
    {
        private $appId;
        private $appSecret;
        
        // public function __construct($appId, $appSecret) {
        //     $this->appId = $appId;
        //     $this->appSecret = $appSecret;
        // }
        
        // public function getSignPackage() {
        //     $jsapiTicket = $this->getJsApiTicket();
            
        //     // 注意 URL 一定要动态获取,不能 hardcode.
        //     $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        //     $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
            
        //     $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 应该全局存储与更新,以下代码以写入到文件中做示例
        //     if(file_get_contents("jsapi_ticket.json")){
        //         $data = json_decode(file_get_contents("jsapi_ticket.json"));
        //     }else{
        //         $data = null;
        //     }
            

        //     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;
        // }


  //       private $appId='你的appid';

  // private $appSecret='你的appSecret';

 public function __construct($appId, $appSecret) {

   $this->appId = $appId;

   $this->appSecret = $appSecret;

 }

  public function getSignPackage() {

 

    $jsapiTicket = $this->getJsApiTicket();

    $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

    $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($this->getCacheTicket(),true);
    // dump($data);
    if ($data['expire_time'] < time()) {

      $accessToken = $this->getAccessToken();

      $url = "http://api.weixin.qq.com/cgi-bin/ticket/getticket?type=1&access_token=$accessToken";

      $res = json_decode($this->httpGet($url));

      $ticket = $res->ticket;

      if ($ticket) {

        $data['expire_time'] = time() + 7000;

        $data['jsapi_ticket'] = $ticket;

        $this->setCacheTicket(json_encode($data));

      }

    } else {

      $ticket = $data['jsapi_ticket'];

    }

    return $ticket;

  }

  private function getAccessToken() {

    // access_token 应该全局存储与更新,以下代码以写入到文件中做示例

    $data = json_decode($this->getCacheToken(),true);

    if ($data['expire_time'] < time()) {

      $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;

        $this->setCacheToken(json_encode($data));

      }

    } 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_URL, $url);

    $res = curl_exec($curl);

    curl_close($curl);

    return $res;

  }

  

  private function getCacheToken()

   {
        return file_get_contents('weixin_share_token.json');
     

   }

   private function setCacheToken($token)

   {
        return file_put_contents('weixin_share_token.json', $token);
      // return MEM::mset("weixin_share_token",$token,7000); 

   }

   

   private function getCacheTicket()

   {

       return file_get_contents('jsapi_ticket.json');  //缓存获取,也可自己放入数据库存储

   }

   private function setCacheTicket($ticket)

   {

      return file_put_contents('jsapi_ticket.json', $ticket);  //设置缓存

   }






//         private function getAccessToken() {

//             $data = json_decode($this->getCacheToken());  

//             if ($data->expire_time < time()) {  //判断是否过期

//               $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)); //请确保你已经开启CURL

//               $access_token = $res->access_token;

//               if ($access_token) {

//                 $data->expire_time = time() + 7000;

//                 $data->access_token = $access_token;

//                 $this->setCacheToken(json_encode($data));

//               }

//             } else {

//               $access_token = $data->access_token;

//             }

//             return $access_token;

//           }





//           // jsapi_ticket 全局存储与更新

// private function getJsApiTicket() {

//     $data = json_decode($this->getCacheTicket());   //从缓存获取Ticket

//     if ($data->expire_time < time()) {

//       $accessToken = $this->getAccessToken();     //从缓存获取token

//       $url = "http://api.weixin.qq.com/cgi-bin/ticket/getticket?type=1&access_token=$accessToken";

//       $res = json_decode($this->httpGet($url));   //重新获取Ticket

//       $ticket = $res->ticket;

//       if ($ticket) {

//         $data->expire_time = time() + 7000;

//         $data->jsapi_ticket = $ticket;

//         $this->setCacheTicket(json_encode($data));

//       }

//     } else {

//       $ticket = $data->jsapi_ticket;

//     }



//         //获取配置信息

// public function getSignPackage() { 

//     $jsapiTicket = $this->getJsApiTicket();

//     $url = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";

//     $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; 

//   }






    }

 

posted @ 2019-12-07 15:39  xiaohe520  阅读(370)  评论(0编辑  收藏  举报