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


Posted in PHP onJune 26, 2015
<?php
/**
 * Created by PhpStorm.
 * User: bin
 * Date: 15-1-16
 * Time: 上午9:48
 */
namespace Home\Common;

// 微信处理类
set_time_limit(30);
class Weixin{
  //构造方法
  static $qrcode_url = "https://api.weixin.qq.com/cgi-bin/qrcode/create?";
  static $token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&";
  static $qrcode_get_url = "https://mp.weixin.qq.com/cgi-bin/showqrcode?";

  //生成二维码
  public function getEwm($wechatid,$fqid,$type = 1){
    $wechat = M('Member_public')->where(array('id'=> $wechatid))->find();
    $appid = $wechat['appid'];
    $secret = $wechat['secret'];
    $ACCESS_TOKEN = $this->getToken($appid,$secret);
    $url = $this->getQrcodeurl($ACCESS_TOKEN,$fqid,1);
    return DownLoadQr($url,time());
  }
  protected function getQrcodeurl($ACCESS_TOKEN,$fqid,$type = 1){
    $url = self::$qrcode_url.'access_token='.$ACCESS_TOKEN;
    if($type == 1){
      //生成永久二维码
      $qrcode= '{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": '.$fqid.'}}}';
    }else{
      //生成临时二维码
      $qrcode = '{"expire_seconds": 1800, "action_name": "QR_SCENE", "action_info": {"scene": {"scene_id": '.$fqid.'}}}';
    }
    $result = $this->http_post_data($url,$qrcode);
    $oo = json_decode($result[1]);
    if(!$oo->ticket){
      $this->ErrorLogger('getQrcodeurl falied. Error Info: getQrcodeurl get failed');
      exit();
    }
    $url = self::$qrcode_get_url.'ticket='.$oo->ticket.'';
    return $url;

  }

  protected function getToken($appid,$secret){
    $ACCESS_TOKEN = file_get_contents(self::$token_url."appid=$appid&secret=$secret");
    $ACCESS_TOKEN = json_decode($ACCESS_TOKEN);
    $ACCESS_TOKEN = $ACCESS_TOKEN->access_token;
    return $ACCESS_TOKEN;
  }
  protected function http_post_data($url, $data_string) {

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json; charset=utf-8',
        'Content-Length: ' . strlen($data_string))
    );
    ob_start();
    curl_exec($ch);
    if (curl_errno($ch)) {
      $this->ErrorLogger('curl falied. Error Info: '.curl_error($ch));
    }
    $return_content = ob_get_contents();
    ob_end_clean();
    $return_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    return array($return_code, $return_content);
  }
  //下载二维码到服务器
  protected function DownLoadQr($url,$filestring){
    if($url == ""){
      return false;
    }
    $filename = $filestring.'.jpg';
    ob_start();
    readfile($url);
    $img=ob_get_contents();
    ob_end_clean();
    $size=strlen($img);
    $fp2=fopen('./Uploads/qrcode/'.$filename,"a");
    if(fwrite($fp2,$img) === false){
      $this->ErrorLogger('dolwload image falied. Error Info: 无法写入图片');
      exit();
    }
    fclose($fp2);
    return './Uploads/qrcode/'.$filename;
  }

  private function ErrorLogger($errMsg){
    $logger = fopen('./ErrorLog.txt', 'a+');
    fwrite($logger, date('Y-m-d H:i:s')." Error Info : ".$errMsg."\r\n");
  }

}
PHP 相关文章推荐
PHP连接access数据库
Mar 27 PHP
PHPWind 发帖回帖Api PHP版打包下载
Feb 08 PHP
php+iframe实现隐藏无刷新上传文件
Feb 10 PHP
PHP 万年历实现代码
Oct 18 PHP
PHP中exec与system用法区别分析
Sep 22 PHP
php生成年月日下载列表的方法
Apr 24 PHP
浅谈php错误提示及查错方法
Jul 14 PHP
PHP使用redis实现统计缓存mysql压力的方法
Nov 14 PHP
Thinkphp开发--集成极光推送
Sep 15 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 PHP
PHP中关于php.ini参数优化详解
Feb 28 PHP
浅谈如何提高PHP代码的质量
May 28 PHP
Thinkphp关闭缓存的方法
Jun 26 #PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 #PHP
php header函数的常用http头设置
Jun 25 #PHP
PHP里的单例类写法实例
Jun 25 #PHP
PHP合并数组+号和array_merge的区别
Jun 25 #PHP
PHP数组与对象之间使用递归实现转换的方法
Jun 24 #PHP
php计算多维数组中所有值总和的方法
Jun 24 #PHP
You might like
PHP调用三种数据库的方法(1)
2006/10/09 PHP
php共享内存段示例分享
2014/01/20 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
Laravel 数据库加密及数据库表前缀配置方法
2019/10/10 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
原生javascript实现无间缝滚动示例
2014/01/28 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
js动态修改整个页面样式达到换肤效果
2014/05/23 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
2018/01/31 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
Python网页解析利器BeautifulSoup安装使用介绍
2015/03/17 Python
python自动登录12306并自动点击验证码完成登录的实现源代码
2018/04/25 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
python三大神器之fabric使用教程
2019/06/10 Python
Pycharm+Python+PyQt5使用详解
2019/09/25 Python
Python requests设置代理的方法步骤
2020/02/23 Python
Python如何实现自带HTTP文件传输服务
2020/07/08 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
2020/07/14 Python
python中Mako库实例用法
2020/12/31 Python
Woolworth官网:澳洲第一大超市
2017/06/25 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
eBay英国购物网站:eBay.co.uk
2019/06/19 全球购物
标准自荐信范文
2014/01/29 职场文书
中秋寄语大全
2014/04/11 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
班级课外活动总结
2014/07/09 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
2014年环境卫生工作总结
2014/11/24 职场文书
优秀小学生事迹材料
2014/12/26 职场文书