微信签名的设置
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."×tamp=".$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."×tamp=".$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 ); }
是不是一下子思路清晰了呢?嘿嘿~
通往牛逼的路上,在意的只有远方!