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 相关文章推荐
PHP4中实现动态代理
Oct 09 PHP
在windows iis5下安装php4.0+mysql之我见
Oct 09 PHP
用PHP实现的随机广告显示代码
Jun 14 PHP
PHP中利用substr_replace将指定两位置之间的字符替换为*号
Jan 27 PHP
PHP逐行输出(ob_flush与flush的组合)
Feb 04 PHP
php笔记之:初探PHPcms模块开发介绍
Apr 26 PHP
解析Win7 XAMPP apache无法启动的问题
Jun 26 PHP
PHP扩展开发入门教程
Feb 26 PHP
10条php编程小技巧
Jul 07 PHP
php实现上传图片文件代码
Jul 19 PHP
PHP实现更改hosts文件的方法示例
Aug 08 PHP
php解析非标准json、非规范json的方式实例
May 10 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脚本的10个技巧(5)
2006/10/09 PHP
基于PHP magic_quotes_gpc的使用方法详解
2013/06/24 PHP
PHP7内核之Reference详解
2019/03/14 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
jQuery ctrl+Enter shift+Enter实现代码
2010/02/07 Javascript
jquery中输入验证中一个不错的效果
2010/08/21 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
一个js导致的jquery失效问题的解决方法
2013/11/27 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
JavaScript实现MIPS乘法模拟的方法
2015/04/17 Javascript
JS实现点击上移下移LI行数据的方法
2015/08/05 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
基于jQuery的checkbox全选问题分析
2016/11/18 Javascript
vue组件watch属性实例讲解
2017/11/07 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
iview在vue-cli3如何按需加载的方法
2018/10/31 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
python入门教程之识别验证码
2017/03/04 Python
numpy concatenate数组拼接方法示例介绍
2019/05/27 Python
Pyqt QImage 与 np array 转换方法
2019/06/27 Python
Python创建临时文件和文件夹
2020/08/05 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
太阳镜仓库,售价20美元或更少:Sunglass Warehouse
2016/09/28 全球购物
一套Java笔试题
2016/08/20 面试题
技校生自我鉴定范文
2013/09/26 职场文书
党员组织关系介绍信
2014/02/13 职场文书
共产党员公开承诺书范文
2014/03/28 职场文书
副处级干部考察材料
2014/05/17 职场文书
信息简报范文
2015/07/21 职场文书
创业计划书之婴幼儿游泳馆
2019/09/11 职场文书
python基础入门之普通操作与函数(三)
2021/06/13 Python
springBoot基于webSocket实现扫码登录
2021/06/22 Java/Android