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操作sqlserver关于时间日期读取的小小见解
Nov 29 PHP
使用PHP实现Mysql读写分离
Jun 28 PHP
Laravel 4.2 中队列服务(queue)使用感受
Oct 30 PHP
PHP防止注入攻击实例分析
Nov 03 PHP
php获取当月最后一天函数分享
Feb 02 PHP
用php守护另一个php进程的例子
Feb 13 PHP
php约瑟夫问题解决关于处死犯人的算法
Mar 23 PHP
ThinkPHP安装和设置
Jul 27 PHP
详解php魔术方法(Magic methods)的使用方法
Feb 14 PHP
PHP发送AT指令实例代码
May 26 PHP
PHP生成随机字符串实例代码(字母+数字)
Sep 11 PHP
php swoft框架实例用法
Dec 22 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使用preg_split和explode分割textarea存放内容的方法分析
2017/07/03 PHP
javascript新手语法小结
2008/06/15 Javascript
IE FF OPERA都可用的弹出层实现代码
2009/09/29 Javascript
window.location.hash 使用说明
2010/11/08 Javascript
改进版通过Json对象实现深复制的方法
2012/10/24 Javascript
jQuery的选择器中的通配符使用介绍
2014/03/20 Javascript
JQuery each()嵌套使用小结
2014/04/18 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
使用jQuery和Bootstrap实现多层、自适应模态窗口
2014/12/22 Javascript
javascript实现加载xml文件的方法
2015/11/24 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
Node.JS中事件轮询(Event Loop)的解析
2017/02/25 Javascript
vue实现留言板todolist功能
2017/08/16 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
解决layui数据表格table的横向滚动条显示问题
2019/09/04 Javascript
es6函数之尾调用优化实例分析
2020/04/25 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
Python中解析JSON并同时进行自定义编码处理实例
2015/02/08 Python
Python兔子毒药问题实例分析
2015/03/05 Python
python实现超市扫码仪计费
2018/05/30 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
Django数据库迁移常见使用方法
2020/11/12 Python
python中yield的用法详解
2021/01/13 Python
HTML5 canvas 基本语法
2009/08/26 HTML / CSS
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
巴西网上药店:Drogaria Araujo
2021/01/06 全球购物
幼儿运动会邀请函
2014/01/17 职场文书
卫生院健康教育实施方案
2014/06/07 职场文书
个人查摆剖析材料
2014/10/04 职场文书
关于倡议书的范文
2015/04/29 职场文书
导游词之湖北梁子湖
2019/11/07 职场文书
浅谈PostgreSQL表分区的三种方式
2021/06/29 PostgreSQL
关于mysql中string和number的转换问题
2022/06/14 MySQL