廢話不多說了,直接給大家貼代碼了,具體代碼如下所示:
- <?php
- namespaceHome/Model;
- useThink/Model;
- classWechatModelextendsModel {
- private$_token=''//令牌
- private$appid;
- private$appsecret;
- publicfunction__construct()
- {
- $this->appid = C('APPID');//公眾號(hào)的appid
- $this->appsecret = C('APPSECRET');//公眾號(hào)的秘鑰
- }
- //調(diào)用js-sdk的簽名包
- publicfunctiongetSignPackage() {
- $jsapiTicket=$this->getJsApiTicket();
- // 注意 URL 一定要?jiǎng)討B(tài)獲取,不能 hardcode.(獲取當(dāng)前網(wǎng)頁(yè)的url)
- $protocol= (!emptyempty($_SERVER['HTTPS']) &&$_SERVER['HTTPS'] !=='off'||$_SERVER['SERVER_PORT'] == 443) ?"https://":"http://";
- $url="$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
- //時(shí)間戳
- $timestamp= time();
- //隨機(jī)字符串獲取
- $nonceStr=$this->createNonceStr();
- // 這里參數(shù)的順序要按照 key 值 ASCII 碼升序排序
- $string="jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
- //生成字符串是用來(lái)簽名用的
- $signature= sha1($string);
- $signPackage=array(
- "appId" =>$this->appid,
- "nonceStr"=>$nonceStr,
- "timestamp"=>$timestamp,
- "url" =>$url,
- "signature"=>$signature,
- "rawString"=>$string
- );
- return$signPackage;
- }
- //使用會(huì)員卡領(lǐng)取的簽名包
- publicfunctiongetHuiYuanSignPackage() {
- $apiTicket=$this->getApiTicket();
- // 注意 URL 一定要?jiǎng)討B(tài)獲取,不能 hardcode.(獲取當(dāng)前網(wǎng)頁(yè)的url)
- $protocol= (!emptyempty($_SERVER['HTTPS']) &&$_SERVER['HTTPS'] !=='off'||$_SERVER['SERVER_PORT'] == 443) ?"https://":"http://";
- $url="$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
- //時(shí)間戳
- $timestamp= time();
- //隨機(jī)字符串獲取
- // $nonceStr = $this->createNonceStr();
- // 這里參數(shù)的順序要按照 key 值 ASCII 碼升序排序
- $string=$timestamp.$apiTicket."car_id";//card_id為自己創(chuàng)建的會(huì)員卡的id
- //生成字符串是用來(lái)簽名用的
- $signature= sha1($string);
- $signPackage=array(
- "timestamp"=>$timestamp,
- "signature"=>$signature,
- );
- return$signPackage;
- }
- //獲取會(huì)員卡的api_ticket
- publicfunctiongetApiTicket(){
- $data= json_decode(file_get_contents("api_ticket.json"));
- if($data->expire_time < time()) {
- $accessToken=$this->getAccessToken();
- $url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card&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("api_ticket.json","w");
- fwrite($fp, json_encode($data));
- fclose($fp);
- }
- }else{
- $ticket=$data->jsapi_ticket;
- }
- return$ticket;
- }
- //獲取隨機(jī)字符串
- privatefunctioncreateNonceStr($length= 16) {
- $chars="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- $str="";
- for($i= 0;$i<$length;$i++) {
- $str.=substr($chars, mt_rand(0,strlen($chars) - 1), 1);
- }
- return$str;
- }
- //獲取Access Token
- publicfunctiongetAccessToken(){
- //將json字符串轉(zhuǎn)換為json對(duì)象(json_encode是將數(shù)組轉(zhuǎn)換為json字符串,json_decode("",true) 如果加true是將json字符串轉(zhuǎn)化為php數(shù)組,不加true轉(zhuǎn)換為PHP對(duì)象)
- $data= json_decode(file_get_contents("access_token.json"));
- if($data->expire_time < time()) {
- // 如果是企業(yè)號(hào)用以下URL獲取access_token
- $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;
- }
- //獲取jsapi_ticket(jsapi_ticket是公眾號(hào)用于調(diào)用微信JS接口的臨時(shí)票據(jù))
- privatefunctiongetJsApiTicket() {
- // jsapi_ticket 應(yīng)該全局存儲(chǔ)與更新,以下代碼以寫入到文件中做示例
- $data= json_decode(file_get_contents("jsapi_ticket.json"));
- if($data->expire_time < time()) {
- $accessToken=$this->getAccessToken();
- // 如果是企業(yè)號(hào)用以下 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;
- }
- //獲取用戶的openid
- publicfunctionopenId(){
- $url=$_SERVER['HTTP_HOST'] .$_SERVER['REQUEST_URI'];
- if(!isset($_GET['code'])) {
- //獲取組裝的url
- $openidUrl=$this->snsapi_base($url);
- redirect($openidUrl);
- }else{
- $openidAccess_token=$this->openidAccess_token($_GET['code']);
- return$openidAccess_token;
- }
- }
- //獲取微信用戶的opnid
- publicfunctiongetOpenId($openid,$access_token)
- {
- $userInfo=$this->getUserInfo($openid,$access_token);
- return$userInfo;
- }
- publicfunctionsnsapi_base($redirect_uri,$scope="snsapi_userinfo",$state= 0)
- {
- $appId=$this->appid;
- $url="https://open.weixin.qq.com/connect/oauth2/authorize";
- $url.="?appid=$appId";
- $url.="&redirect_uri=http://$redirect_uri";
- $url.="&response_type=code";
- $url.="&scope=$scope";
- $url.="&state=$state#wechat_redirect";
- return$url;
- }
- publicfunctionopenidAccess_token($code){
- $appId=$this->appid;
- $appSecret=$this->appsecret;
- $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appId&secret=$appSecret&code=$code&grant_type=authorization_code";
- returnjson_decode($this->httpGet($url),true);
- }
- //獲取用戶信息
- publicfunctiongetUserInfo($openid,$access_token){
- $url="https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN ";
- returnjson_decode($this->httpGet($url),true);
- //請(qǐng)求
- }
- privatefunctionhttpGet($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;
- }
- }
新聞熱點(diǎn)
疑難解答