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中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
Jun 28 PHP
PHP验证信用卡卡号是否正确函数
May 27 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
PHP制作用户注册系统
Oct 23 PHP
PHP错误Warning:mysql_query()解决方法
Oct 24 PHP
PHP编写RESTful接口的方法
Feb 21 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
Nov 28 PHP
php简单随机字符串生成方法示例
Apr 19 PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 PHP
PHP的微信支付接口使用方法讲解
Mar 08 PHP
PHP面向对象类型约束用法分析
Jun 12 PHP
Laravel6.18.19如何优雅的切换发件账户
Jun 14 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 Token(令牌)设计
2008/03/15 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
2015/03/12 PHP
如何获取JQUERY AJAX返回的JSON结果集实现代码
2012/12/10 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
js自定义方法通过隐藏iframe实现文件下载
2013/02/21 Javascript
js 控制下拉菜单刷新的方法
2013/03/03 Javascript
JavaScript的常见兼容问题及相关解决方法(chrome/IE/firefox)
2013/12/31 Javascript
深入理解jquery中的事件与动画
2016/05/24 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
Vue.JS入门教程之自定义指令
2016/12/08 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
angular中实现li或者某个元素点击变色的两种方法
2017/07/27 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
vuejs实现递归树型菜单组件
2018/01/13 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
解决vue中使用proxy配置不同端口和ip接口问题
2019/08/14 Javascript
nodejs实现UDP组播示例方法
2019/11/04 NodeJs
简单谈谈python中的Queue与多进程
2016/08/25 Python
Python虚拟环境virtualenv的安装与使用详解
2017/05/28 Python
详谈在flask中使用jsonify和json.dumps的区别
2018/03/26 Python
Python数据可视化:顶级绘图库plotly详解
2019/12/07 Python
python等差数列求和公式前 100 项的和实例
2020/02/25 Python
意大利会呼吸的鞋:Geox健乐士
2017/02/12 全球购物
美国快时尚彩妆品牌:Winky Lux(透明花瓣润唇膏)
2018/11/06 全球购物
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
C语言面试题
2015/10/30 面试题
公务员培训自我鉴定
2013/09/19 职场文书
会议开场欢迎词
2014/01/15 职场文书
最经典的大学生职业生涯规划范文
2014/03/05 职场文书
网吧最新创业计划书范文
2014/03/27 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
离婚协议书怎么写(范本参考)
2014/09/30 职场文书
2016年国培研修日志
2015/11/13 职场文书
学者《孟子》名人名言
2019/08/09 职场文书
macos系统如何实现微信双开? mac登录两个微信以上微信的技巧
2022/07/23 数码科技