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 相关文章推荐
一个可以删除字符串中HTML标记的PHP函数
Oct 09 PHP
PHP 翻页 实例代码
Aug 07 PHP
php session和cookie使用说明
Apr 07 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
Oct 29 PHP
ThinkPHP写数组插入与获取最新插入数据ID实例
Nov 03 PHP
PHP中基本HTTP认证技巧分析
Mar 16 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
Mar 19 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
PHP实现导出带样式的Excel
Aug 28 PHP
php实现评论回复删除功能
May 23 PHP
PHP addcslashes()函数讲解
Feb 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
11个PHPer必须要了解的编程规范
2014/09/22 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
php通过curl添加cookie伪造登陆抓取数据的方法
2016/04/02 PHP
PHP封装的验证码工具类定义与用法示例
2018/08/22 PHP
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
JavaScript 继承详解 第一篇
2009/08/30 Javascript
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
基于JavaScript实现屏幕滚动效果
2017/01/18 Javascript
jQuery实现的简单在线计算器功能
2017/05/11 jQuery
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
vue中如何使用ztree
2018/02/06 Javascript
使用mint-ui实现省市区三级联动效果的示例代码
2018/02/09 Javascript
解决VUE框架 导致绑定事件的阻止冒泡失效问题
2018/02/24 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
解决vue使用vant轮播组件swipe + flex时文字抖动问题
2021/01/07 Vue.js
使用grappelli为django admin后台添加模板
2014/11/18 Python
连接Python程序与MySQL的教程
2015/04/29 Python
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
使用Scrapy爬取动态数据
2018/10/21 Python
python并发和异步编程实例
2018/11/15 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
is_file和file_exists效率比较
2021/03/14 PHP
美国领先的礼品卡网站:GiftCards.com
2016/11/02 全球购物
美国时尚大码女装购物网站:Avenue
2019/05/24 全球购物
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
春游踏青活动方案
2014/08/14 职场文书
三严三实对照检查材料
2014/08/25 职场文书
教师工作态度自我评价
2015/03/05 职场文书
汶川大地震感悟
2015/08/10 职场文书
初中班主任工作随笔
2015/08/15 职场文书
创业计划书介绍
2019/04/24 职场文书
mysql联合索引的使用规则
2021/06/23 MySQL
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python