• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
车车大人
博客园    首页    新随笔    联系   管理     

微信签名的设置

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

 

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

通往牛逼的路上,在意的只有远方!
posted @ 2017-09-12 16:51  车车大人  阅读(339)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3