PHP微信开发之二维码生成类

[php] view plaincopy

  1. <?php  

  2. /** 

  3.  * Created by PhpStorm. 

  4.  * User: bin 

  5.  * Date: 15-1-16 

  6.  * Time: 上午9:48 

  7.  */  

  8. namespace Home\Common;  

  9.   

  10. // 微信处理类  

  11. set_time_limit(30);  

  12. class Weixin{  

  13.   //构造方法  

  14.   static $qrcode_url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?";  

  15.   static $token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&";  

  16.   static $qrcode_get_url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?";  

  17.   

  18.   //生成二维码  

  19.   public function getEwm($wechatid,$fqid,$type = 1){  

  20.     $wechat = M('Member_public')->where(array('id'=> $wechatid))->find();  

  21.     $appid = $wechat['appid'];  

  22.     $secret = $wechat['secret'];  

  23.     $ACCESS_TOKEN = $this->getToken($appid,$secret);  

  24.     $url = $this->getQrcodeurl($ACCESS_TOKEN,$fqid,1);  

  25.     return DownLoadQr($url,time());  

  26.   }  

  27.   protected function getQrcodeurl($ACCESS_TOKEN,$fqid,$type = 1){  

  28.     $url = self::$qrcode_url.'access_token='.$ACCESS_TOKEN;  

  29.     if($type == 1){  

  30.       //生成永久二维码  

  31.       $qrcode'{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": '.$fqid.'}}}';  

  32.     }else{  

  33.       //生成临时二维码  

  34.       $qrcode = '{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": '.$fqid.'}}}';  

  35.     }  

  36.     $result = $this->http_post_data($url,$qrcode);  

  37.     $oo = json_decode($result[1]);  

  38.     if(!$oo->ticket){  

  39.       $this->ErrorLogger('getQrcodeurl falied. Error Info: getQrcodeurl get failed');  

  40.       exit();  

  41.     }  

  42.     $url = self::$qrcode_get_url.'ticket='.$oo->ticket.'';  

  43.     return $url;  

  44.   

  45.   }  

  46.   

  47.   protected function getToken($appid,$secret){  

  48.     $ACCESS_TOKEN = file_get_contents(self::$token_url."appid=$appid&secret=$secret");  

  49.     $ACCESS_TOKEN = json_decode($ACCESS_TOKEN);  

  50.     $ACCESS_TOKEN = $ACCESS_TOKEN->access_token;  

  51.     return $ACCESS_TOKEN;  

  52.   }  

  53.   protected function http_post_data($url$data_string) {  

  54.   

  55.     $ch = curl_init();  

  56.     curl_setopt($ch, CURLOPT_POST, 1);  

  57.     curl_setopt($ch, CURLOPT_URL, $url);  

  58.     curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);  

  59.     curl_setopt($ch, CURLOPT_HTTPHEADER, array(  

  60.         'Content-Type: application/json; charset=utf-8',  

  61.         'Content-Length: ' . strlen($data_string))  

  62.     );  

  63.     ob_start();  

  64.     curl_exec($ch);  

  65.     if (curl_errno($ch)) {  

  66.       $this->ErrorLogger('curl falied. Error Info: '.curl_error($ch));  

  67.     }  

  68.     $return_content = ob_get_contents();  

  69.     ob_end_clean();  

  70.     $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);  

  71.     return array($return_code$return_content);  

  72.   }  

  73.   //下载二维码到服务器  

  74.   protected function DownLoadQr($url,$filestring){  

  75.     if($url == ""){  

  76.       return false;  

  77.     }  

  78.     $filename = $filestring.'.jpg';  

  79.     ob_start();  

  80.     readfile($url);  

  81.     $img=ob_get_contents();  

  82.     ob_end_clean();  

  83.     $size=strlen($img);  

  84.     $fp2=fopen('./Uploads/qrcode/'.$filename,"a");  

  85.     if(fwrite($fp2,$img) === false){  

  86.       $this->ErrorLogger('dolwload image falied. Error Info: 无法写入图片');  

  87.       exit();  

  88.     }  

  89.     fclose($fp2);  

  90.     return './Uploads/qrcode/'.$filename;  

  91.   }  

  92.   

  93.   private function ErrorLogger($errMsg){  

  94.     $logger = fopen('./ErrorLog.txt''a+');  

  95.     fwrite($loggerdate('Y-m-d H:i:s')." Error Info : ".$errMsg."\r\n");  

  96.   }  

  97.   

  98. }  


你可能感兴趣的:(PHP微信开发之二维码生成类)