ccdr
public function actionStationShare(){
        $appId = "";
        $Secret = "";
        $url = Yii::$app->request->get(\'url\');
        $token = $this->getAccessToken($appId,$Secret);
        $ticket = $this->getJsApiTicket($token);
        $timestamp = time();
        $nonceStr = $this->createNonceStr();
        $string = "jsapi_ticket=".$ticket."&noncestr=".$nonceStr."&timestamp=".$timestamp."&url=".$url;
        $signature = sha1($string);
        $signPackage = array(
          "appId"     => $appId,
          "noncestr"  => $nonceStr,
          "timestamp" => $timestamp,
          "url"       => $url,
          "signature" => $signature,
          "rawString" => $string
        );
        return Helper::format_data ( SUCC, $signPackage );
    }

 

private function getAccessToken($appId,$Secret) {
        // access_token 应该全局存储与更新,以下代码以写入到文件中做示例
          // 如果是企业号用以下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=".$appId."&secret=".$Secret;
          $res = json_decode($this->httpGet($url));
          $access_token = $res->access_token;
          return $access_token;
      }

 

private function getJsApiTicket($token) {
        // jsapi_ticket 应该全局存储与更新,以下代码以写入到文件中做示例
          // 如果是企业号用以下 URL 获取 ticket
          // $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$token";
          $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".$token;
          $res = json_decode($this->httpGet($url));
          $ticket = $res->ticket;
          return $ticket;
      }

 

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

 

 

 

 

最后我来附上一份完整的写好的代码模板

<?php

//curl请求,同时支持get和post
public function actionCurlRequest($url,$data=null){
    $curl = curl_init();
    curl_setopt($curl,CURLOPT_URL,$url);
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,FALSE);
    if(!empty($data)){
        curl_setopt($curl,CURLOPT_POST,1);
        curl_setopt($curl,CURLOPT_POSTFIELDS,$data);
    }

    curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}

//获取token
public function actionGetToken(){
    //设置url
    $url = \'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=填写你的APPID就可以&secret=填写你的secret就可以\';
    //发起请求
    $res = json_decode(self::actionCurlRequest($url));
    //加入缓存
    Yii::$app->session[\'wx_token\'] = $res->access_token;
    //返回数据
    return $res->access_token;
}

//获取ticket
function actionGetTicket() {
    if(!empty(Yii::$app->session[\'wx_token\'])){
            $token = Yii::$app->session[\'wx_token\'];
        }else{
            unset(Yii::$app->session[\'wx_token\']);
            $token = self::actionGetToken();
        }
      $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".$token;
      $res = self::actionCurlRequest($url);
      $res = json_decode($res, true);
      //这里应该把access_token缓存起来,至于要怎么缓存就看各位了,有效期是7200s
      return $res->ticket;
}

//生成随机字符串
private function actionCreateNonceStr($length = 16) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
      $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
}

//这个接口是最后返回给前端的数据
public function actionStationShare(){
    if(!empty(Yii::$app->session[\'wx_token\'])){
        $token = Yii::$app->session[\'wx_token\'];
    }else{
        unset(Yii::$app->session[\'wx_token\']);
        $token = self::actionGetToken();
    }
    $appId = "";
    $Secret = "";
    $url = Yii::$app->request->get(\'url\');//获取当前的url
    $ticket = self::actionGetTicket();//获取票据
    $timestamp = time();//时间
    $nonceStr = self::actionCreateNonceStr();//随机字符串
    $string = "jsapi_ticket=".$ticket."&noncestr=".$nonceStr."&timestamp=".$timestamp."&url=".$url;
    $signature = sha1($string);
    $signPackage = array(
      "appId"     => $appId,
      "noncestr"  => $nonceStr,
      "timestamp" => $timestamp,
      "url"       => $url,
      "signature" => $signature,
      "rawString" => $string
    );
    return Helper::format_data ( SUCC, $signPackage );
}

 

是不是一下子思路清晰了呢?嘿嘿~

分类:

技术点:

相关文章:

  • 2022-02-08
  • 2022-02-08
  • 2022-02-08
  • 2021-08-13
  • 2021-08-13
  • 2021-12-12
  • 2021-12-12
猜你喜欢
  • 2022-02-08
  • 2021-11-12
  • 2022-02-08
  • 2022-02-08
  • 2021-11-01
相关资源
相似解决方案