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 chr() ord()中文截取乱码问题解决方法
Sep 08 PHP
一个php Mysql类 可以参考学习熟悉下
Jun 21 PHP
有关JSON以及JSON在PHP中的应用
Apr 09 PHP
php中实现简单的ACL 完结篇
Sep 07 PHP
php加密解密实用类分享
Jan 07 PHP
PHP实现克鲁斯卡尔算法实例解析
Aug 22 PHP
php数组合并与拆分实例分析
Jun 12 PHP
PHP批量生成图片缩略图的方法
Jun 18 PHP
php实现点击可刷新验证码
Nov 07 PHP
php结合ajax实现手机发红包的案例
Oct 13 PHP
php实现微信模板消息推送
Mar 30 PHP
asp函数split()对应php函数explode()
Feb 27 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
Mysql的GROUP_CONCAT()函数使用方法
2008/03/28 PHP
php数字运算验证码的实现代码
2015/07/30 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
js 内存释放问题
2010/04/25 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
JQ获取动态加载的图片大小的正确方法分享
2013/11/08 Javascript
用javascript将数据导入Excel示例代码
2014/09/10 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
H5用户注册表单页 注册模态框!
2016/09/17 Javascript
[原创]javascript typeof id==='string'?document.getElementById(id):id解释
2016/11/02 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
详解Vue2+Echarts实现多种图表数据可视化Dashboard(附源码)
2017/03/21 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
Mongoose实现虚拟字段查询的方法详解
2017/08/15 Javascript
vue绑定事件后获取绑定事件中的this方法
2018/09/15 Javascript
electron实现静默打印的示例代码
2019/08/12 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
微信小程序连接服务器展示MQTT数据信息的实现
2020/07/14 Javascript
Vue数组响应式操作及高阶函数使用代码详解
2020/08/01 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
python实现简单的socket server实例
2015/04/29 Python
Django框架中render_to_response()函数的使用方法
2015/07/16 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
python爬虫中的url下载器用法详解
2020/11/30 Python
css3实现平移效果(transfrom:translate)的示例
2020/11/13 HTML / CSS
最畅销的视频游戏享受高达90%的折扣:CDKeys
2020/02/10 全球购物
体育教师个人的自我评价
2014/02/16 职场文书
通信工程求职信
2014/07/16 职场文书
主要领导对照检查材料
2014/08/26 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
创先争优个人总结
2015/03/04 职场文书
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL