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中的时间处理
Oct 09 PHP
基于mysql的论坛(3)
Oct 09 PHP
由php的call_user_func传reference引发的思考
Jul 23 PHP
php学习笔记 PHP面向对象的程序设计
Jun 13 PHP
Mysql中分页查询的两个解决方法比较
May 02 PHP
使用PHPMailer实现邮件发送代码分享
Oct 23 PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 PHP
PHP实现的进度条效果详解
May 03 PHP
php与c 实现按行读取文件实例代码
Jan 03 PHP
PHP基于SimpleXML生成和解析xml的方法示例
Jul 17 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
laravel 判断查询数据库返回值的例子
Oct 11 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结合表单实现一些简单功能的例子
2011/06/04 PHP
php利用单例模式实现日志处理类库
2014/02/10 PHP
PHP两种去掉数组重复值的方法比较
2014/06/19 PHP
浅析Laravel5中队列的配置及使用
2016/08/04 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
jQuery Tools tab使用介绍
2012/07/14 Javascript
jQuery实现单行文字间歇向上滚动源代码
2013/06/02 Javascript
浅谈重写window对象的方法
2014/12/29 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
JQuery调用绑定click事件的3种写法
2015/03/28 Javascript
js比较日期大小的方法
2015/05/12 Javascript
基于jQuery实现点击列表加载更多效果
2016/05/31 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
js+canvas实现动态吃豆人效果
2017/03/22 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
AngularJS中table表格基本操作示例
2017/10/10 Javascript
JQuery通过后台获取数据遍历到前台的方法
2018/08/13 jQuery
微信小程序实现一个简单swiper代码实例
2019/12/30 Javascript
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
python从入门到精通(DAY 2)
2015/12/20 Python
python虚拟环境virualenv的安装与使用
2016/12/18 Python
Django stark组件使用及原理详解
2019/08/22 Python
Python openpyxl读取单元格字体颜色过程解析
2019/09/03 Python
解决windows下python3使用multiprocessing.Pool出现的问题
2020/04/08 Python
详解CSS3弹性伸缩盒
2020/09/21 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
英国最大的化装舞会服装网站:Fancydress.com
2017/08/15 全球购物
大学生个人求职信例文
2014/07/07 职场文书
2015世界地球日活动总结
2015/02/09 职场文书
2015年五一劳动节慰问信
2015/03/23 职场文书
卫生保健工作总结2015
2015/05/18 职场文书
创业计划书之珠宝饰品
2019/08/26 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书
Nginx反爬虫策略,防止UA抓取网站
2021/03/31 Servers
详解Redis主从复制实践
2021/05/19 Redis