Singi

singi-blog


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

ci-upload_img

发表于 2017-03-29 | 分类于 php , ci

前台上传图片自动预览

前台上传图片自动预览

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?php echo form_open_multipart('user/edit',array('class'=>'form-horizontal'));?>
<?php echo form_hidden('id',set_value('id'));?>
<div class="form-group">
<label for="name" class="col-sm-2 control-label">用户名</label>
<div class="col-sm-10">
<input type="text" required class="form-control" name="name" value="<?php echo set_value('name');?>" id="name" placeholder="用户名">
<span class="text-danger"> <?php echo form_error('name');?> </span>
</div>
</div>
<div class="form-group">
<label for="avatar" class="col-sm-2 control-label">头像</label>
<div class="col-sm-10">
<button class="btn btn-default">
<input type="file" required style="position:absolute;left:0;top:0;opacity:0;font-size:40px;" width="100%" height="100%" name="avatar" id="avatar">
上传头像
</button>
<span class="text-danger">
<?php echo $this->upload->display_errors();?>
</span>
</div>
</div>
<div class="form-group" hidden id="show_img">
<label class="col-sm-2 control-label">图片预览</label>
<div class="col-sm-10">
<img src="" id="avatar_img" alt="" width="200px">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<button type="submit" class="btn btn-success col-sm-offset-4 col-sm-4">确定</button>
</div>
</div>
</form>
<script>
/*
* 本地上传文件并预览
* */
$("#avatar").change(function(e) {
console.log(11);
for (var i = 0; i < e.target.files.length; i++) {
var file = e.target.files.item(i);
var freader = new FileReader();
freader.readAsDataURL(file);
freader.onloadend = function(e1) {
var src = e1.target.result;
$('#show_img').show();
$("#avatar_img").attr("src",src);
};
}
});
</script>

后台处理方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function edit(){
$data['title'] = '首页';
$data['sub_title'] = '用户信息编辑';
$this->form_validation->set_rules('name','name','required',array('required'=>'用户名不能为空'));
if($this->form_validation->run() == FALSE){
$this->load->view('tpl/header',$data);
$this->load->view('user/edit',$data);
$this->load->view('tpl/footer');
}else{
if ( ! $this->upload->do_upload('avatar'))
{
$this->load->view('tpl/header',$data);
$this->load->view('user/edit',$data);
$this->load->view('tpl/footer');
}
else
{
//删除旧头像
$old_avatar = $this->user_model->getField('avatar');
$old_avatar['avatar'] = '.'.$old_avatar['avatar'];
if($old_avatar['avatar']) unlink($old_avatar['avatar']);
//保存新头像
$avatar_path = strstr($this->upload->data('full_path'),'/public');
$this->user_model->save($avatar_path);
$this->load->view('tpl/jump',array('url'=>site_url('user/editShow').'/'.$this->input->post('id')));
}
}
}

删除图片时,如果是相对路径,路径前面需要加上.;例如/public/avatar/me.jpg => ./public/avatar/me.jpg

test/test

发表于 2017-03-24

timestamp_compare

发表于 2017-03-20 | 分类于 mysql

根据当前时间算出可用的时间戳间隔

  1. 当月第一天

    1
    2
    3
    strtotime(date('Y-m-01', time())); //2017-3-01 00:00:00
    or
    mktime(0,0,0,date('m'),1,date('Y'));
  2. 当月最后一天

    1
    2
    3
    strtotime(date('Y-m-t', time())); //2017-3-31 00:00:00
    or
    mktime(23,59,59,date('m'),date('t'),date('Y'));
  3. 前月第一天

    1
    strtotime(date('Y-m-01').' -1 month'); //2017-2-01 00:00:00
  4. 前月最后一天

    1
    strtotime(date('Y-m-t').' -1 month'); //2017-2-28 00:00:00
  5. 后一月第一天

    1
    strtotime(date('Y-m-01').' +1 month'); //2017-4-01 00:00:00
  6. 后一月最后一天

    1
    strtotime(date('Y-m-t').' +1 month'); //2017-4-30 00:00:00

根据给定的时间戳算出可用的时间戳间隔

$input_timestamp = 1490320660; // 2017-03-24 01:57:40

  1. 给定的月份第一天

    1
    strtotime(date('Y-m-01', $input_timestamp); //2017-3-01 00:00:00
  2. 给定的月份最后一天

    1
    strtotime(date('Y-m-t', $input_timestamp); //2017-3-31 00:00:00
  3. 给定的前月第一天

    1
    strtotime(date('Y-m-01',$input_timestamp).' -1 month'); //2017-2-01 00:00:00
  4. 给定的前月最后一天

    1
    strtotime(date('Y-m-t',$input_timestamp).' -1 month'); //2017-2-28 00:00:00
  5. 给定的后月第一天

    1
    strtotime(date('Y-m-01',$input_timestamp).' +1 month'); //2017-4-01 00:00:00
  6. 给定的后月最后一天

    1
    strtotime(date('Y-m-t',$input_timestamp).' +1 month'); //2017-4-30 00:00:00

execl

发表于 2016-10-16 | 分类于 php , thinkphp , excel

excel

导入phpexcel

后台代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
$objPHPExcel = new\ PHPExcel();
$orderModel = new OrderModel();
$list = $orderModel - > order('id') - > selectByState(array('orderState' => 1)); //要插入到表格中的数据
//表格设置
$objActSheet = $objPHPExcel->getActiveSheet(); $objActSheet->getColumnDimension('B')->setAutoSize(true); //内容自适应
$objActSheet->getColumnDimension('C')->setAutoSize(true); //内容自适应
$objActSheet->getColumnDimension('D')->setAutoSize(true); //内容自适应
$objActSheet->getColumnDimension('E')->setAutoSize(true); //内容自适应
$objActSheet->getColumnDimension('F')->setAutoSize(true); //内容自适应
$objActSheet->getColumnDimension('G')->setAutoSize(true); //内容自适应
//设置行头
$objPHPExcel->getActiveSheet()->setCellValue('A' . 1, '序列');//这里是设置A1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('B' . 1, '订单号');//这里是设置B1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('C' . 1, '粉丝电话号码');//这里是设置C1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('D' . 1, '粉丝姓名');//这里是设置D1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('E' . 1, '下单时间');//这里是设置E1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('F' . 1, '商品名称');//这里是设置F1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('G' . 1, '商品分类名');//这里是设置G1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('H' . $i, convertUTF8('商品图片'));//这里是设置F1单元格的内容
$objDrawing = new \PHPExcel_Worksheet_Drawing();
//给单元格添加图片
foreach ($list as $key => $value) { $i = $key + 2;//表格是从第2行开始的
$objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $value['id']);//里是设置A1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('B' . $i, $value['orderId']);//这里是设置B1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('C' . $i, $value['phoNumber']);//这里是设置C1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('D' . $i, $value['fanName']);//这里是设置D1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('E' . $i, $value['orderTime']);//这里是设置E1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('F' . $i, $value['goodsName']);//这里是设置F1单元格的内容
$objPHPExcel->getActiveSheet()->setCellValue('G' . $i, $value['category']);//这里是设置G1单元格的内容
//添加图片// $objDrawing->setName($value['goodsName']);
// $objDrawing->setDescription($value['goodsName']);
// $objDrawing->setPath('/Public/upload/20161014/2.jpg');
//图片引入位置
// $objDrawing->setCoordinates('H'.$i); //图片添加位置
// $objDrawing->setOffsetX(210);
// $objDrawing->setRotation(25);
// $objDrawing->setHeight(36);
// $objDrawing->getShadow()->setVisible(true);
// $objDrawing->getShadow()->setDirection(45); };
$objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel);//保存excel—2007格式
$name = '未发货订单表-' . date('Ymd');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="' . $name . '.xls"');
header('Cache-Control: max-age=0');
$objWriter->save('php://output');

tp-nagination

发表于 2016-09-29 | 分类于 php , thinkphp , nagination

thinkphp3.2.3分页

分页类修改为bootstrap样式

将官方Tnink下面的Page类用下面的代码全部覆盖。即可使用。
使用前请引入bootstarp样式。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2014 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: 麦当苗儿 <zuojiazi@vip.qq.com> <http://www.zjzit.cn>
// +----------------------------------------------------------------------
namespace Think;
class Page{
public $firstRow; // 起始行数
public $listRows; // 列表每页显示行数
public $parameter; // 分页跳转时要带的参数
public $totalRows; // 总行数
public $totalPages; // 分页总页面数
public $rollPage = 11;// 分页栏每页显示的页数
public $lastSuffix = true; // 最后一页是否显示总页数
private $p = 'p'; //分页参数名
private $url = ''; //当前链接URL
private $nowPage = 1;
// 分页显示定制
private $config = array(
'header' => '<li><a href="#"><span class="rows ">共 %TOTAL_ROW% 条记录</span></a></li>',
'prev' => '<',
'next' => '>',
'first' => '1...',
'last' => '...%TOTAL_PAGE%',
'theme' => '%HEADER% %FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%',
);
/**
* 架构函数
* @param array $totalRows 总的记录数
* @param array $listRows 每页显示记录数
* @param array $parameter 分页跳转的参数
*/
public function __construct($totalRows, $listRows=20, $parameter = array()) {
C('VAR_PAGE') && $this->p = C('VAR_PAGE'); //设置分页参数名称
/* 基础设置 */
$this->totalRows = $totalRows; //设置总记录数
$this->listRows = $listRows; //设置每页显示行数
$this->parameter = empty($parameter) ? $_GET : $parameter;
$this->nowPage = empty($_GET[$this->p]) ? 1 : intval($_GET[$this->p]);
$this->nowPage = $this->nowPage>0 ? $this->nowPage : 1;
$this->firstRow = $this->listRows * ($this->nowPage - 1);
}
/**
* 定制分页链接设置
* @param string $name 设置名称
* @param string $value 设置值
*/
public function setConfig($name,$value) {
if(isset($this->config[$name])) {
$this->config[$name] = $value;
}
}
/**
* 生成链接URL
* @param integer $page 页码
* @return string
*/
private function url($page){
return str_replace(urlencode('[PAGE]'), $page, $this->url);
}
/**
* 组装分页链接
* @return string
*/
public function show() {
if(0 == $this->totalRows) return '';
/* 生成URL */
$this->parameter[$this->p] = '[PAGE]';
$this->url = U(ACTION_NAME, $this->parameter);
/* 计算分页信息 */
$this->totalPages = ceil($this->totalRows / $this->listRows); //总页数
if(!empty($this->totalPages) && $this->nowPage > $this->totalPages) {
$this->nowPage = $this->totalPages;
}
/* 计算分页临时变量 */
$now_cool_page = $this->rollPage/2;
$now_cool_page_ceil = ceil($now_cool_page);
$this->lastSuffix = $this->totalPages;
$this->config['last'] = $this->totalPages;
//上一页
$up_row = $this->nowPage - 1;
$up_page = $up_row > 0 ? '<li><a class="prev" href="' . $this->url($up_row) . '">' . $this->config['prev'] . '</a></li>' : '';
//下一页
$down_row = $this->nowPage + 1;
$down_page = ($down_row <= $this->totalPages) ? '<li><a class="next" href="' . $this->url($down_row) . '">' . $this->config['next'] . '</a></li>' : '';
//第一页
$the_first = '';
if($this->totalPages > $this->rollPage && ($this->nowPage - $now_cool_page) >= 1){
$the_first = '<li><a class="first" href="' . $this->url(1) . '">' . $this->config['first'] . '</a></li>';
}
//最后一页
$the_end = '';
if($this->totalPages > $this->rollPage && ($this->nowPage + $now_cool_page) < $this->totalPages){
$the_end = '<li><a class="end" href="' . $this->url($this->totalPages) . '">' . $this->config['last'] . '</a></li>';
}
//数字连接
$link_page = "";
for($i = 1; $i <= $this->rollPage; $i++){
if(($this->nowPage - $now_cool_page) <= 0 ){
$page = $i;
}elseif(($this->nowPage + $now_cool_page - 1) >= $this->totalPages){
$page = $this->totalPages - $this->rollPage + $i;
}else{
$page = $this->nowPage - $now_cool_page_ceil + $i;
}
if($page > 0 && $page != $this->nowPage){
if($page <= $this->totalPages){
$link_page .= '<li><a class="num" href="' . $this->url($page) . '">' . $page . '</a></li>';
}else{
break;
}
}else{
if($page > 0 && $this->totalPages != 1){
$link_page .= '<li class="active"><a href="#">' . $page . '<span class="sr-only">(current)</span></a></li>';
}
}
}
//替换分页内容
$page_str = str_replace(
array('%HEADER%', '%NOW_PAGE%', '%UP_PAGE%', '%DOWN_PAGE%', '%FIRST%', '%LINK_PAGE%', '%END%', '%TOTAL_ROW%'),
array($this->config['header'], $this->nowPage, $up_page, $down_page, $the_first, $link_page, $the_end, $this->totalRows, $this->totalPages),
$this->config['theme']);
return "<div><nav> <ul class='pagination'>{$page_str}</ul></nav></div>";
}
}

后台读取数据

使用方法更官方版本一样。

1
2
3
4
5
6
7
$count = M('video')->count();
$page = new \Think\Page($count,5);
$list = M('video')->limit($page->firstRow.','.$page->listRows)->select();
$show = $page->show();// 分页显示输出
$this->assign('data',$list);// 赋值数据集
$this->assign('page',$show);// 赋值分页输出
$this->display(); // 输出模板

前台输入代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<div class="mianList">
<volist name="data" id="vo"> //数据输出
<div class="mianList1">
<h4><a href="{:U('Video/detail')}?id={$vo.id}">{$vo.name}</a></h4>
<notempty name="vo.qUrl">
<div class="clearfix of">
<video width="400" id="player2" controls="controls">
<source src="{$vo.qUrl}" type="video/mp4" title="mp4">
</video>
</div>
</notempty>
<p>{$vo.viewCount}阅读.{$vo.commentCount}评论.{$vo.createdAt}</p>
</div>
</volist>
</div>
<div class="text-center">
{$page} //分页条显示
</div>

summernote

发表于 2016-09-23 | 分类于 bootstrap

summernote上传图片到七牛云

内容中的图片上传

默认是base64格式,现在需要上传七牛云,并改成七牛云链接格式

前端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$('#summernote').summernote({
height: 300, // set editor height
minHeight: null, // set minimum height of editor
maxHeight: null, // set maximum height of editor
focus: true,
lang:'zh-CN',
callbacks: {
onImageUpload: function(files) {
var data = new FormData(); //使用FormData对象上传
data.append('file', files[0]);
$.ajax({
url: '/Home/file/uploadQiNiu',
method: 'POST',
data: data,
processData: false,
contentType: false,
success: function(url) {
$('#summernote').summernote('insertImage', url);
}
});
}
}
});

php后端

1
2
3
4
5
6
7
8
9
10
11
/**
* 上传七牛云
*/
function uploadQiNiu(){
if($_FILES['file']['tmp_name']){
//上传七牛云
$urlKey = time().$_FILES['fileup']['name'];
$url = uploadQiniu($urlKey,$_FILES['fileup']['tmp_name']);
$this->ajaxReturn(array('urlKey'=>$urlKey,'url'=>$url),'json');
}
}

thinkphp3.2.3_vendor

发表于 2016-09-22 | 分类于 php , thinkphp

thinkphp3.2.3框架引入第三方包

注意是引入以.php结尾的

下载需要引入的第三方包,然后拷贝到Think/Library/Vendor/目录下

在需要引入的控制器、模型、函数等地方,使用vendor()方法引入第三包即可

示例:引入七牛云SDK

下载七牛云SDK,拷贝到Think/Library/Vendor/目录下,此时的路径是Think/Library/Vendor/qiniuyun。

在控制器中引入七牛云,就可以使用了。

1
vendor('qiniuyun.autoload'); //引入七牛云SDK

UEditor上传文件到七牛云

发表于 2016-09-21 | 分类于 php , thinkphp

百度编辑器 UEditor

应用场景:
使用UEditor上传图片,文件等到七牛云服务器,
结果:编辑器图片链接为七牛云链接

sdk资源准备

  1. 七牛云 phpSDK 重命名为qiniuyun
  2. UEditor [1.4.3.3 php] utf-8版 重命名为ueditor

集成到thinkphp3.2.3

因为UEditor已经帮我们写好了php代码,但后缀是.php的,这意味着在thinkphp中,这些文件属于外来的。那么这里就按照外来的文件对待。
直接将UEditorsdk和七牛云sdk一起复制到thinkphp3.2.3中的Public目录下面。

想放在别的目录也可以,但是这里不适合再用thinkphp的方法,请将思维转回到传统php来。所以,我才选择放在Pulick目录下面

目录结构如下图:

  • Public
    • qiniuyun
    • ueditor

改造UEditor

这时的UEditor处理图片的方法是将图片上传到网址根目录下面。具体配置在ueditor/php/config.json文件中。

下面将以上传图片为例:

  1. 修改ueditor/php/config.json配置如下:
    1
    2
    "imageUrlPrefix": "http://o7atl50ri.bkt.clouddn.com/", /* 图片访问路径前缀,七牛云域名 */
    "imagePathFormat": "{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式,七牛云图片名称 */

这里的配置会返回七牛云链接http://o7atl50ri.bkt.clouddn.com/文件名,并插入到UEditor内容中去。

  1. 修改ueditor/php/Uploader.class.php如下:

    在Uploader类开始处引入七牛云SDK

    1
    require_once 'qiniuyun/autoload.php';

    增加七牛云上传方法uploadQiniu:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    /**
    * 上传七牛云
    * @param $key 七牛云文件名
    * @param $filePath $_FILE[]['tmp_name']
    * @return mixed
    * @throws Exception
    */
    private function uploadQiniu($key, $filePath){
    $auth = new \Qiniu\Auth('RYyqdPimpYxIUJl4KVcJ6APplN90d5CEpU1kZ-a6','mOQ5hXi3OVLMA4uy346lYq3cDvSCdKNeGLDwv8UE');
    // 要上传的空间
    $bucket = 'gymfile';
    // 生成上传 Token
    $token = $auth->uploadToken($bucket);
    // 初始化 UploadManager 对象并进行文件的上传
    $uploadMgr = new \Qiniu\Storage\UploadManager();
    // 调用 UploadManager 的 putFile 方法进行文件的上传
    list($ret, $err) = $uploadMgr->putFile($token, $key, $filePath);
    if ($err !== null) {
    return false;
    } else {
    return true;
    }
    }

    修改Uploader类中文件上传方法,最后几行如下:

    原来方法是上传到网址根目录,这里修改成直接上传到七牛云。

    1
    2
    3
    4
    5
    6
    7
    //移动文件,上传到七牛云
    $res = $this->uploadQiniu($this->fullName, $file["tmp_name"]); //此处修改
    if (!($res)) { //移动失败 此处修改
    $this->stateInfo = $this->getStateInfo("ERROR_FILE_MOVE");
    } else { //移动成功
    $this->stateInfo = $this->stateMap[0];
    }

到这里改造结束。如果在form表单提交到后台时,还想提取编辑器传过来内容中的图片链接,请往下看

提取编辑器中所有图片链接

1
2
3
$content = I('post.editorValue');
preg_match_all('<img.*?src="(.*?)">',ltgt($content),$match); //ltgt()方法是将`<`,`>`等再转换回来
$files = $match[1];

$match[1]中即为编辑器中所有图片链接

提取$match[1]中,所有七牛云文件名:

1
2
3
4
$urlKey = array();
foreach($files as $k=>$v){
$urlKey[$k] = substr(strrchr($v, '/'),1);
}

$urlKey和$match[1]中的数据一一对应,文件名:文件地址

UEditor常用配置

1
2
3
4
,charset:"utf-8" //针对getAllHtml方法,会在对应的head标签中增加该编码设置。
,initialFrameHeight:500 //初始化编辑器高度,默认320
,textarea:'editorValue' // 提交表单时,服务器获取编辑器提交内容的所用的参数,多实例时可以给容器name属性,会将name给定的值最为每个实例的键值,不用每次实例化的时候都设置这个值
,initialContent:'欢迎使用ueditor!' //初始化编辑器的内容,也可以通过textarea/script给值,看官网例子

ltgt()方法

1
2
3
4
5
6
7
//&lt;转成<,&rt;转成>,&quot;转成"
function ltgt($str){
$lt = str_replace('&lt;','<',$str);
$gt = str_replace('&gt;','>',$lt);
$quot = str_replace('&quot;','"',$gt);
return $quot;
}

mypage

发表于 2016-09-20 | 分类于 bootstrap

将个人主页(静态页面)放置于hexo中

准备好你的个人主页资源

我这里使用的模板是Worthy,是一款自适应的bootstrap框架编写的模板。将自己的信息根据实际情况填写到模板上,然后整理好css,js,imgs等资源的路径。在本地测试ok即可。

我的静态资源最终目录结构如下:

  • singi
    • public
      • img //index.html中用的图片
      • worthy //worthy模板整个粘贴过来
    • index.html

将静态资源放置于hexo上

将整个singi文件夹放置于hexo根目录下面的public文件夹即可。

上传至服务器(这里是github pages)

使用hexo命令

1
hexo g //生成文件

1
hexo d //部署文件到github pages 上。

hexo会将public文件夹中的文件原样上传到giuhub pages上,这就是我想要的效果。然后,访问https://singi2016cn.github.io/singi/就可以看到我的主页了。

微信`sdk`

发表于 2016-09-19 | 分类于 php , thinkphp , wechat

微信

wechat-php-sdk

下载zip包,只需要wechat.class.php和demo.php

将wechat.class.php复制到ThinkPHP/Library/Org/Util/下,然后在控制器中如下引入

1
2
3
import('Org.Util.wechat');//进入
$weObj = new \Wechat($option);//实例化,$option是微信的配置,在demo.php中有demo

官方demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
include "wechat.class.php";
$options = array(
'token'=>'tokenaccesskey', //填写你设定的key
'encodingaeskey'=>'encodingaeskey' //填写加密用的EncodingAESKey,如接口为明文模式可忽略
);
$weObj = new Wechat($options);
$weObj->valid();//明文或兼容模式可以在接口验证通过后注释此句,但加密模式一定不能注释,否则会验证失败
$type = $weObj->getRev()->getRevType();
switch($type) {
case Wechat::MSGTYPE_TEXT:
$weObj->text("hello, I'm wechat")->reply();
exit;
break;
case Wechat::MSGTYPE_EVENT:
break;
case Wechat::MSGTYPE_IMAGE:
break;
default:
$weObj->text("help info")->reply();

自己改进后demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
namespace Home\Controller;
use Think\Controller;
import('Org.Util.Wechat');
class EventController extends Controller{
function index(){
$options = array(
'appid' => 'wx51c8eacd17a190c0',//微信appid
'appsecret' => 'f30185d7c8ff809ab44597d7c8ad8457',//微信appsecret
'token' => '81965224d145c658896fef654072a8a1', //填写你设定的key
'encodingaeskey' => 'cdd96aa3071266d088ad44411066df87cd8bf993ada' //填写加密用的EncodingAESKey,如接口为明文模式可忽略
);
$weObj = new \Wechat($options);
$weObj->valid();//明文或兼容模式可以在接口验证通过后注释此句,但加密模式一定不能注释,否则会验证失败
$type = $weObj->getRev()->getRevType();
$openId = $weObj->getRevFrom();//获取消息发送者
$content = $weObj->getRevContent();//获取发送内容
$event = $weObj->getRevEvent();//事件类型:$event['event'],类型关键字:$event['key']
//图文数据组织
$newsCourse = array(
'0' => array(
'Title' => '最好的健身课',
'Description' => '忍不住地想要上课啦!',
'Url' => 'http://sass-wx.happyfit.studio/course/index?openId=' . $openId, 'PicUrl' => 'http://o7atl50ri.bkt.clouddn.com/1467773885.jpg?&e=1467777485&token=RYyqdPimpYxIUJl4KVcJ6APplN90d5CEpU1kZ-a6:KZTy43_pWbY0wC3WUopht0SzZms='
));
$newsNotice = array(
'0' => array(
'Title' => '最新的公告',
'Description' => '又有新公告了,进来看看吧,惊喜等着你!',
'Url' => 'http://sass-wx.happyfit.studio/course/index?openId=' . $openId, 'PicUrl' => 'http://o7atl50ri.bkt.clouddn.com/1467773885.jpg?&e=1467777485&token=RYyqdPimpYxIUJl4KVcJ6APplN90d5CEpU1kZ-a6:KZTy43_pWbY0wC3WUopht0SzZms='
));
$newsAbout = array(
'0' => array(
'Title' => '最棒的场馆',
'Description' => '这个场馆绝对适合你!',
'Url' => 'http://sass-wx.happyfit.studio/course/index?openId=' . $openId, 'PicUrl' => 'http://o7atl50ri.bkt.clouddn.com/1467773885.jpg?&e=1467777485&token=RYyqdPimpYxIUJl4KVcJ6APplN90d5CEpU1kZ-a6:KZTy43_pWbY0wC3WUopht0SzZms='
));
switch ($type) {
case \Wechat::EVENT_SUBSCRIBE:
//用户关注微信号时 TODO 没有记录,添加用户user_social_info
break;
case \Wechat::MSGTYPE_TEXT:
//处理用户输入
if ($content == '我的课程') $weObj->news($newsCourse)->reply();
$weObj->text("欢迎使用精微内容服务!")->reply();
break;
case \Wechat::MSGTYPE_EVENT:
//处理用户事件
if ($event['event'] == 'CLICK') {
if ($event['key'] == 'course') {
$weObj->news($newsCourse)->reply();
}
if ($event['key'] == 'notice') {
$weObj->news($newsNotice)->reply();
}
if ($event['key'] == 'about') {
$weObj->news($newsAbout)->reply();
}
}
break;
};
}
}
12
Singi

Singi

singi hexo blog

14 日志
12 分类
19 标签
GitHub
友情链接
  • github
  • hexo
© 2016 - 2017 Singi
由 Hexo 强力驱动
主题 - NexT.Muse