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 相关文章推荐
一个用于网络的工具函数库
Oct 09 PHP
phpMyAdmin下载、安装和使用入门教程
May 31 PHP
php smarty模版引擎中的缓存应用
Dec 02 PHP
作为PHP程序员应该了解MongoDB的五件事
Jun 03 PHP
php建立Ftp连接的方法
Mar 07 PHP
PHP实现事件机制实例分析
Jun 26 PHP
微信公众平台DEMO(PHP)
May 04 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
Nov 16 PHP
PHP中时间加减函数strtotime用法分析
Apr 26 PHP
基于CI(CodeIgniter)框架实现购物车功能的方法
Apr 09 PHP
PHP删除数组中特定元素的两种方法
Feb 28 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
May 13 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
10条PHP编程习惯助你找工作
2008/09/29 PHP
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
php使用str_replace实现输入框回车替换br的方法
2014/11/24 PHP
如何使用GDB调试PHP程序
2015/12/08 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
非常漂亮的JS代码经典广告
2007/10/21 Javascript
我的javascript 函数链之演变
2011/04/07 Javascript
JS控件ASP.NET的treeview控件全选或者取消(示例代码)
2013/12/16 Javascript
Js与下拉列表处理问题解决
2014/02/13 Javascript
Javascript常用小技巧汇总
2015/06/24 Javascript
深入理解setTimeout函数和setInterval函数
2016/05/20 Javascript
浅谈js控制li标签排序问题 js调用php函数的方法
2016/10/16 Javascript
getElementById().innerHTML与getElementById().value的区别
2016/10/27 Javascript
javascript中的后退和刷新实现方法
2016/11/10 Javascript
jstree单选功能的实现方法
2017/06/07 Javascript
AngularJS双向数据绑定原理之$watch、$apply和$digest的应用
2018/01/30 Javascript
vue使用代理解决请求跨域问题详解
2019/07/24 Javascript
vue开发简单上传图片功能
2020/06/30 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
Python实现统计给定字符串中重复模式最高子串功能示例
2018/05/16 Python
pandas ix &amp;iloc &amp;loc的区别
2019/01/10 Python
基于python历史天气采集的分析
2019/02/14 Python
Django框架 Pagination分页实现代码实例
2019/09/04 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
仓库保管员岗位职责
2013/12/20 职场文书
美发店5.1活动方案
2014/01/24 职场文书
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
优秀教师个人材料
2014/12/15 职场文书
用Python提取PDF表格的方法
2021/04/11 Python
python自动化八大定位元素讲解
2021/07/09 Python