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获得用户使用的代理服务器ip即真实ip
Dec 31 PHP
PHP程序员最常犯的11个MySQL错误小结
Nov 20 PHP
写php分页时出现的Fatal error的解决方法
Apr 18 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
May 07 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
Jun 12 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
php生成条形码的图片的实例详解
Sep 13 PHP
PHP调用接口API封装的例子
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 管理系统程序中的后门
2009/08/05 PHP
PHP 网络开发详解之远程文件包含漏洞
2010/04/25 PHP
php skymvc 一款轻量、简单的php
2011/06/28 PHP
jquery 模式对话框终极版实现代码
2009/09/28 Javascript
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
jQuery Easyui使用(一)之可折叠面板的布局手风琴菜单
2016/08/17 Javascript
微信小程序 loading 详解及实例代码
2016/11/09 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
[07:20]2018DOTA2国际邀请赛寻真——逐梦Mineski
2018/08/10 DOTA
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
Python爬虫DOTA排行榜爬取实例(分享)
2017/06/13 Python
Python 从相对路径下import的方法
2018/12/04 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
Python中低维数组填充高维数组的实现
2019/12/02 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
canvas仿写贝塞尔曲线的示例代码
2017/12/29 HTML / CSS
Spartoo英国:欧洲最大的网上鞋店
2016/09/13 全球购物
Linux的文件类型
2016/07/05 面试题
Java面试题:Java类的Main方法如果是Private将会怎么样
2016/08/18 面试题
医务工作者先进事迹材料
2014/01/26 职场文书
社区母亲节活动记录
2014/03/06 职场文书
激励口号大全
2014/06/17 职场文书
中学生的1000字检讨书
2014/10/11 职场文书
面试复试通知单
2015/04/24 职场文书
年会主持人开场白台词
2015/05/29 职场文书
惊天动地观后感
2015/06/10 职场文书
详解MongoDB的条件查询和排序
2021/06/23 MongoDB
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers
oracle删除超过N天数据脚本的方法
2022/02/28 Oracle