php源码分享之生成临时微信二维码并保存成图片
时间:2018-11-07
本文章向大家介绍php源码分享之生成临时微信二维码并保存成图片,需要的朋友可以参考一下
public function getPoster(){ global $_W; global $_GPC; $mm = pdo_fetch('select nickname,codetime from ' . tablename('ewei_shop_member') . ' where openid =:openid limit 1', array(':openid' => $_W['openid'])); $path = IA_ROOT . '/addons/ewei_shopv2/data/couponposter/' . $_W['uniacid'] . '/'; if (!(is_dir($path))) { load()->func('file'); mkdirs($path); } $openid = $_W['openid']; if($mm['codetime'])$mm['codetime'] = date('Ymd'); $md5 = md5(json_encode(array('openid' => $openid,'version' => 3,'timezone' => $mm['codetime']))); $file = $md5 . '.jpg'; if(time() > strtotime($mm['codetime']) + 60*60*24*29){ $aa = unlink($path . $file); } // var_dump($path . $file);exit; if (!(is_file($path . $file))) { set_time_limit(0); @ini_set('memory_limit', '256M'); $font = IA_ROOT . '/addons/ewei_shopv2/static/fonts/msyh.ttf'; $target = imagecreatetruecolor(750, 1334); $bc = imagecolorallocate($target, 0, 3, 51); $cc = imagecolorallocate($target, 240, 102, 0); $wc = imagecolorallocate($target, 255, 255, 255); $yc = imagecolorallocate($target, 255, 255, 0); $bg = imagecreatefromjpeg(IA_ROOT . '/addons/ewei_shopv2/data/couponposter/poster.jpg'); imagecopy($target, $bg, 0, 0, 0, 0, 750, 1334); imagedestroy($bg); // $qrcode_file = tomedia($this->createMyShopQrcode($userinfo['id'])); $qrcode_url = $this->getCode(); $qrcode = $this->createImage($qrcode_url); // var_dump($qrcode); $w = imagesx($qrcode); $h = imagesy($qrcode); imagecopyresized($target, $qrcode, 215, 600, 0, 0, 320, 320, $w, $h); imagedestroy($qrcode); $str1 = $this->getWords($mm['nickname'],3); imagettftext($target, 22, 0, 180, 302, $bc, $font, $str1); $str2 = date("Y-m-d",strtotime("+30 day")); imagettftext($target, 18, 0, 420, 398, $bc, $font, $str2); imagejpeg($target, $path . $file); imagedestroy($target); } $srcc = $_W['siteroot'] . 'addons/ewei_shopv2/data/couponposter/' . $_W['uniacid'] . '/' . $file; $arr = array('code' => 1, 'src' => $srcc); show_json(1, $arr); }
public function getCode(){ global $_W; global $_GPC; $sec = m('common')->getSec(); $sec = iunserializer($sec['sec']); $appid = $_W['account']['key']; $secret = $_W['account']['secret']; $data['openid'] = $_W['openid']; require_once('weixin.class.php'); $wx = new weixin($appid,$secret,''); $mm = pdo_fetch('select id from ' . tablename('ewei_shop_member') . ' where openid=:openid and uniacid=:uniacid limit 1', array(':openid' => $_W['openid'], ':uniacid' => $_W['uniacid'])); $sceneid=intval($mm['id']); if ($sceneid<=0) { echo "error!!"; } else { $result = $wx->_getQRCode($sceneid); $time = date('Ymd'); pdo_update("ewei_shop_member", array("codetime"=>$time), array( "openid" => $_W['openid'] )); return $result; } }
<?php // if (!defined('IN_IA')) { // exit('Access Denied'); // } /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ class weixin{ private $appid; private $key; private $access_token; private $jsapi_ticket; private $get_access_token_url='https://api.weixin.qq.com/cgi-bin/token?'; private $menu_url='https://api.weixin.qq.com/cgi-bin/menu/create?access_token='; private $menu_delete_url='https://api.weixin.qq.com/cgi-bin/menu/delete?access_token='; private $getcode_url='https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='; private $oauth2='https://api.weixin.qq.com/sns/oauth2/access_token?'; private $jsapi_ticket_time; private $access_token_time; public $menu; public function __construct($appid,$key,$access_token) { //$this->extract= sp_get_option('extract'); $this->appid=$appid; $this->key=$key; $this->access_token=$this->get_access_token();//access_token_time } public function get_jsapi_ticket(){ if($this->$jsapi_ticket_time<time()-7200){ $url='https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$this->access_token.'&type=jsapi'; $result=$this->https($url); $result=json_decode($result,true); if($result['ticket']){ $this->jsapi_ticket=$result['ticket']; $this->$jsapi_ticket_time=time(); //$res = sp_set_option('extract', $this->extract); } else{ print_r($result); exit(); } } return $this->jsapi_ticket; } public function get_access_token(){ if($this->access_token_time<time()-7200){ $url=$this->get_access_token_url."grant_type=client_credential&appid=".$this->appid."&secret=".$this->key; $result=$this->https($url); $result=json_decode($result,true); if($result['access_token']){ $this->access_token=$result['access_token']; $this->access_token_time=time(); //$res = sp_set_option('extract', $this->extract); } else{ print_r($result); exit(); } } return $this->access_token; } public function get_oauth2($code){ $url=$this->oauth2."appid=".$this->appid."&secret=".$this->key."&code=".$code."&grant_type=authorization_code"; $result=$this->https($url); $result=json_decode($result,true); return $result; exit; } public function get_userinfo($openid){ //需要关注的url $url="https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$this->access_token."&openid=".$openid."&lang=zh_CN"; //无需关注 //$url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$this->access_token."&openid=".$openid."&lang=zh_CN"; $result=$this->https($url); $result=json_decode($result,true); return $result; exit; } public function get_qrcode($id){ $url=$this->getcode_url.$this->access_token; $data='{"action_name": "QR_LIMIT_SCENE", "action_info": {"scene": {"scene_id": '.$id.'}}}'; $result=$this->https($url,$data,'json'); $result=json_decode($result,true); return $result; exit; } public function updata_menu(){ $url=$this->menu_url.$this->access_token; $this->menu=htmlspecialchars_decode($this->menu); $data=$this->menu; $result=$this->https($url,$data,'json'); $result=json_decode($result,true); return $result; exit; } public function https($url,$data='',$method='get'){ $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在 curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转 curl_setopt($ch, CURLOPT_AUTOREFERER, 1); // 自动设置Referer if($method=='POST'){ curl_setopt($ch, CURLOPT_POST, 1); // 发送一个常规的Post请求 curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); if ($data != ''){ curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // Post提交的数据包 } } curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环 if($method=='json'){ curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // Post提交的数据包 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json; charset=utf-8', 'Content-Length: ' . strlen($data)) ); } else{ curl_setopt($ch, CURLOPT_HEADER, 0); // 显示返回的Header区域内容 } curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回 $file_contents = curl_exec($ch); curl_close($ch); return $file_contents; } /** * 首先创建二维码ticket * @param string $sceneid 场景值ID * @param string $type 值为'temp'的时候生成临时二维码 * @param string $expire_seconds 二维码过期时间 * @return string 二维码ticket */ public function _getTicket($sceneid,$type='temp',$expire_seconds=604800){ if($type=='temp'){ $data['expire_seconds']=604800; $data['action_name']='QR_SCENE'; $data['action_info']['scene']['scene_id']=$sceneid; }else{ $data['action_name']='QR_LIMIT_SCENE'; $data['action_info']['scene']['scene_id']=$sceneid; } $args =json_encode($data); $curl = 'https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token='.$this->access_token; $content = $this->https($curl,$args,'POST'); $cont = json_decode($content); return $cont->ticket; } //然后凭借ticket到指定URL换取二维码 public function _getQRCode($sceneid,$type='temp1',$expire_seconds=2592000){ $ticket = $this->_getTicket($sceneid,$type,$expire_seconds); $curl = 'https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket='.urlencode($ticket); $content = $this->https($curl); return $curl; } }
- Python学习 - 可视化变量赋值、循环、程序运行过程
- jdk源码分析红黑树——插入篇1.插入root2.父黑3.父红4.父红,叔红5.1父红,叔黑,外侧子孙5.2父红,叔黑,内侧子孙
- WIFI环境下Android手机和电脑通信
- 破解之美:利用ECB加密缺陷突破cookie加密
- 让Python猜猜你是否能约会成功
- python学习笔记之初识Python
- 从APK解密到批量获取他人信息
- React native和原生之间的通信
- 移动云存储服务平台Parse下的iOS安全分析
- 经典算法学习之回溯法
- 渗透测试系统BackBox Linux 4.1发布
- CMS漏洞检测工具 - CMSmap
- 基因组分析中多物种同源基因的鉴定和筛选
- SpringMVC类型转换器、属性编辑器PropertiesEditor源码分析CustomDateEditor源码分析TypeConverterDelegate源码分析
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 算法工程师-SQL进阶:温柔的陷阱-NULL
- SpringBoot 异步任务处理
- SpringBoot整合 ActiveMQ快速入门 实现点对点推送
- Tomcat部署SpringBoot war包
- Vue之插槽Slot理解
- Docker六脉神剑 (三) 编写Dockerfile构建nginx镜像并推送到远程仓库给其他人使用
- 快速学习UML类图查看
- 设计模式 | 抽象工厂模式
- 设计模式 | 单例模式
- macOS 安装软件已损坏无法打开解决办法 (真好用!)
- nginx 配置反向代理
- ES6新特性速查表
- React-Native Android打包
- React-Native iOS打包
- Webpack+Babel手把手带你搭建开发环境(内附配置文件)