首页 > 开发 > PHP > 正文

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

2024-05-04 23:36:53
字体:大 中 小
来源:转载
供稿:网友

这篇文章主要介绍了PHP微信开发之二维码生成类,本文使用微信接口实现二维码的生成,并直接给出示例代码,需要的朋友可以参考下

 

 
  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($logger, date('Y-m-d H:i:s')." Error Info : ".$errMsg."/r/n"); 
  96. } 
  97.  
  98. } 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表