class WechatShareController extends CommonController { public $appid = "***********************"; public $secret = "***************************"; protected $app; public function index(Request $request) { // 注意 URL 一定要動態獲取,不能 hardcode. // $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; // $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]"; $url = request('url');//url前臺傳過來的 // $url = 'https://mymtest.moobyyoho.com/wechat_share'; $weixindata['timestamp'] = time(); $weixindata['nonceStr'] = $this->createNonceStr(); //獲取簽名 $weixindata['signature'] = $this->signature($weixindata['nonceStr'],$weixindata['timestamp'],$url); Log::info($weixindata); Log::info('總傳前臺'); return $weixindata; } //獲取access_token public function accessToken() { $access_token =Redis::get("weixin_access_token");//存入redis,這裏要結合自己的項目,對redis或者memcahe進行設置 if(!$access_token){ $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$this->appid."&secret=".$this->secret; $data = json_decode($this->httpGet($url),true); if(isset($data['access_token']) && $data['access_token'] != ''){ Redis::setex("weixin_access_token",7200,$data['access_token']); $access_token=$data['access_token']; }else{ return false; } } return $access_token; } //用第一步拿到的access_token 採用http GET方式請求獲得jsapi_ticket public function jsapiTicket() { $jsapi_ticket =Redis::get("weixin_jsapi_ticket"); if(!$jsapi_ticket){ $access_token = $this->accessToken(); if($access_token){ $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=".$access_token."&type=jsapi"; $data = json_decode($this->httpGet($url),true); if(isset($data['errcode']) && $data['errcode']== 0){//請求成功 Redis::setex("weixin_jsapi_ticket",7200,$data['ticket']); // $this->redis->set("weixin_jsapi_ticket",$data['ticket'],7200); $jsapi_ticket=$data['ticket']; }else{ return false; } }else{ return false; } } Log::info($jsapi_ticket); Log::info('jsapi_ticket'); return $jsapi_ticket; } //獲取signature public function signature($nonceStr,$timestamp,$url) { $jsapi_ticket = $this->jsapiTicket(); $signature = ''; if($jsapi_ticket) { $string = "jsapi_ticket=$jsapi_ticket&noncestr=$nonceStr×tamp=$timestamp&url=$url"; $signature = sha1($string);//對string1進行sha1簽名,得到signature }else{ return false; } return $signature; } public function createNonceStr() { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < 16; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return $str; } public 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; } }
laravel框架中 公衆號js-sdk後臺生成簽名的方法(封裝好的方法)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.