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 相关文章推荐
JAVA/JSP学习系列之六
Oct 09 PHP
一些常用的php简单命令代码集锦
Sep 24 PHP
PHP 编写的 25个游戏脚本
May 11 PHP
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
Discuz!下Memcache缓存实现方法
May 28 PHP
PHP操作mysql函数详解,mysql和php交互函数
May 19 PHP
有关PHP性能优化的介绍
Jun 20 PHP
ThinkPHP模板比较标签用法详解
Jun 30 PHP
thinkPHP模型初始化实例分析
Dec 03 PHP
PHP中new static()与new self()的比较
Aug 19 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
基于laravel缓冲cache的用法详解
Oct 23 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
桌面中心(二)数据库写入
2006/10/09 PHP
php生成zip文件类实例
2015/04/07 PHP
PHP使用mysqldump命令导出数据库
2015/04/14 PHP
php中namespace及use用法分析
2016/12/06 PHP
bindParam和bindValue的区别以及在Yii2中的使用详解
2018/03/12 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
PHP下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
jquery里的each使用方法详解
2010/12/22 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
jQuery中bind()方法用法实例
2015/01/19 Javascript
JavaScript中连接操作Oracle数据库实例
2015/04/02 Javascript
javascript实现俄罗斯方块游戏的思路和方法
2015/04/27 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
微信小程序之购物车功能
2020/09/23 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
node+koa实现数据mock接口的方法
2017/09/20 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
2017/09/30 Javascript
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
详解JavaScript匿名函数和闭包
2020/07/10 Javascript
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
python读csv文件时指定行为表头或无表头的方法
2019/06/26 Python
如何完美的建立一个python项目
2020/10/09 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
使用python实现学生信息管理系统
2021/02/25 Python
阿玛尼美国官方网站:Armani.com
2016/11/25 全球购物
Kivari官网:在线购买波西米亚服装
2018/10/29 全球购物
如何写你的创业计划书
2014/01/07 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
合同范本之电脑出租
2019/08/13 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python
Python&Matlab实现灰狼优化算法的示例代码
2022/03/21 Python