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开启安全模式后禁用的函数集合
Jun 26 PHP
php中url传递中文字符,特殊危险字符的解决方法
Aug 17 PHP
CI(CodeIgniter)框架介绍
Jun 09 PHP
php中call_user_func函数使用注意事项
Nov 21 PHP
php文件上传后端处理小技巧
May 22 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
Jul 02 PHP
详谈PHP中的密码安全性Password Hashing
Feb 04 PHP
PHP编程实现计算抽奖概率算法完整实例
Aug 09 PHP
PHP获取对象属性的三种方法实例分析
Jan 03 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
Laravel框架自定义分页样式操作示例
Jan 26 PHP
详解使用php-cs-fixer格式化代码
Sep 16 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/03/09 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
ThinkPHP模板中判断volist循环的最后一条记录的验证方法
2014/07/01 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
jQuery 使用手册(六)
2009/09/23 Javascript
ASP 过滤数组重复数据函数(加强版)
2010/05/31 Javascript
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
JavaScript输出当前时间Unix时间戳的方法
2015/04/06 Javascript
浅谈javascript实现八大排序
2015/04/27 Javascript
JS+CSS实现另类带提示效果的竖向导航菜单
2015/10/15 Javascript
Javascript实现苹果悬浮虚拟按钮
2016/04/10 Javascript
jQuery基础知识点总结(必看)
2016/05/31 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
vue组件Prop传递数据的实现示例
2017/08/17 Javascript
AngularJS模糊查询功能实现代码(过滤内容下拉菜单排序过滤敏感字符验证判断后添加表格信息)
2017/10/24 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
jquery向后台提交数组的代码分析
2020/02/20 jQuery
微信小程序自定义弹出模态框禁止底部滚动功能
2020/03/09 Javascript
javascript 设计模式之享元模式原理与应用详解
2020/04/08 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
Python实现随机生成有效手机号码及身份证功能示例
2017/06/05 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
Python实现制度转换(货币,温度,长度)
2019/07/14 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
css3 仿写阿里云水纹效果的示例代码
2018/02/10 HTML / CSS
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
2014年财务工作总结与计划
2014/12/08 职场文书
教师远程研修感悟
2015/11/18 职场文书
创业计划书之电动车企业
2019/10/11 职场文书
python实现图片九宫格分割的示例
2021/04/25 Python