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
PHP脚本的10个技巧(5)
Oct 09 PHP
FCKeditor添加自定义按钮
Mar 27 PHP
PHP 各种排序算法实现代码
Aug 20 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
Jun 11 PHP
PHP中全面阻止SQL注入式攻击分析小结
Jan 30 PHP
浅谈ThinkPHP的URL重写
Nov 25 PHP
Laravel 5 框架入门(一)
Apr 09 PHP
php使用ZipArchive函数实现文件的压缩与解压缩
Oct 27 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 PHP
thinkPHP5.0框架整体架构总览【应用,模块,MVC,驱动,行为,命名空间等】
Mar 25 PHP
PHP常见过waf webshell以及最简单的检测方法
May 21 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 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
2016/12/28 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
使用PHPExcel导出Excel表
2018/09/08 PHP
PHPStorm 2020.1 调试 Nodejs的多种方法详解
2020/09/17 NodeJs
jquery 简单的进度条实现代码
2010/03/11 Javascript
javascript中的prototype属性使用说明(函数功能扩展)
2010/08/16 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
2011/09/05 Javascript
jQuery实现切换页面布局使用介绍
2011/10/09 Javascript
js用Date对象处理时间实现思路及代码
2013/01/31 Javascript
JS获取月的最后一天与JS得到一个月份最大天数的实例代码
2013/12/16 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
js实现兼容IE、Firefox的图片缩放代码
2015/12/08 Javascript
JavaScript 节流函数 Throttle 详解
2016/07/04 Javascript
jQuery实现简单倒计时功能的方法
2016/07/04 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
JavaScript中var的重要性实例分析
2019/07/09 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
JavaScript Image对象实现原理实例解析
2020/08/26 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
numpy排序与集合运算用法示例
2017/12/15 Python
python用post访问restful服务接口的方法
2018/12/07 Python
python os.fork() 循环输出方法
2019/08/08 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
如何在Canvas上的图形/图像绑定事件监听的实现
2020/09/16 HTML / CSS
自考毕业自我鉴定范文
2013/10/27 职场文书
自我鉴定模板
2013/10/29 职场文书
上班上网检讨书
2014/01/29 职场文书
朋友圈早安励志语录!
2019/07/08 职场文书
创业计划书之奶茶店开店方案范本!
2019/08/06 职场文书
JavaScript使用canvas绘制坐标和线
2021/04/28 Javascript
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技