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 相关文章推荐
文件上传类
Oct 09 PHP
PHP配置文件中最常用四个ini函数
Mar 19 PHP
一些使用频率比较高的php函数
Oct 03 PHP
php对数组排序的简单实例
Dec 25 PHP
PHP获取指定函数定义在哪个文件中以及其所在的行号实例
May 08 PHP
php递归遍历多维数组的方法
Apr 18 PHP
PHP计算日期相差天数实例分析
Feb 23 PHP
PHP的消息通信机制测试实例
Nov 10 PHP
PHP错误处理函数register_shutdown_function使用示例
Jul 03 PHP
利用Laravel生成Gravatar头像地址的优雅方法
Dec 30 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
Oct 14 PHP
基于laravel-admin 后台 列表标签背景的使用方法
Oct 03 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常用函数 推荐收藏保存
2010/02/21 PHP
php中获取指定IP的物理地址的代码(正则表达式)
2011/06/23 PHP
php实现在线生成条形码示例分享(条形码生成器)
2013/12/30 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
图片自动缩小的js代码,用以防止图片撑破页面
2007/03/12 Javascript
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
10个新的最有前途的JavaScript框架
2009/03/12 Javascript
JS高级笔记
2011/07/13 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
JavaScript实现图片切换效果
2017/08/12 Javascript
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
[03:49]DOTA2英雄基础教程 光之守卫
2014/01/14 DOTA
pyqt4教程之widget使用示例分享
2014/03/07 Python
跟老齐学Python之集合(set)
2014/09/24 Python
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
对命令行模式与python交互模式介绍
2018/05/12 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
python如何删除文件中重复的字段
2019/07/16 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
Java如何读取CLOB字段
2013/10/10 面试题
关键字throw与throws的用法差异
2016/11/22 面试题
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
安全协议书范本
2014/04/21 职场文书
绿色出行口号
2014/06/18 职场文书
民主生活会汇报材料
2014/12/15 职场文书
工程部岗位职责
2015/02/10 职场文书
2015年毕业生个人自荐书
2015/03/24 职场文书
Python竟然能剪辑视频
2021/05/25 Python
Spring JPA 增加字段执行异常问题及解决
2022/06/10 Java/Android
python+opencv实现目标跟踪过程
2022/06/21 Python
Python如何加载模型并查看网络
2022/07/15 Python