更新wiki

overtrue 2015-02-11 00:31:29 +08:00
parent f30bf16513
commit df45502742
14 changed files with 336 additions and 0 deletions

@ -0,0 +1,23 @@
多客服的消息转发绝对是超级的简单:
```php
use Overtrue\Wechat\Services\Message;
// 转发收到的消息给客服
$wechat->on('message', function($message) {
return Message::make('transfer');
});
$result = $wechat->serve();
echo $result;
```
当然,你也可以指定转发给某一个客服:
```php
return Message::make('transfer')->account($account);
// 或者
return Message::make('transfer')->to($account);
```

22
安装.md Normal file

@ -0,0 +1,22 @@
环境要求: PHP >= 5.3.0
1. 使用composer:
```shell
composer require overtrue/wechat
```
2. 手动安装
下载[最新版zip包](https://github.com/overtrue/wechat/archive/master.zip) 或者下载指定版本:https://github.com/overtrue/wechat/releases
然后引入根目录的autoload.php即可
```php
<?php
require "wechat/autoload.php"; // 路径请修改为你具体的实际路径
use Overtrue\Wechat\Wechat;
...
```

@ -0,0 +1,23 @@
微信的客服才能发送消息或者群发消息,而且还有时效限制,真恶心的说。。。
```php
$staff = $wechat->staff;
```
+ `$staff->all();` 获取所有客服账号
+ `$staff->allOnline();` 获取所有在线的客服账号
+ `$staff->create($mail, $nickname, $password);` 添加客服帐号
+ `$staff->update($mail, $nickname, $password);` 修改客服帐号
+ `$staff->delete($mail, $nickname, $password);` 删除客服帐号
+ `$staff->avatar($mail, $avatarPath);` 设置客服帐号的头像
+ `$staff->send($message)->to($openId);` 主动发送消息给用户
+ 群发消息
```php
// 所有人
$staff->send($message)->toAll();
// 指定组
$staff->send($message)->toGroup($groupId);
// 多个人
$staff->send($message)->toThem(array($openId, $openId, ...));
```

35
接收消息与回复.md Normal file

@ -0,0 +1,35 @@
消息的监听再简单不过了你不需要像其它SDK一样麻烦这将会是前所未有的简单你可以选择监听所有类型或者指定某种类型以及作出相应的响应比如回复一条应答消息。
```php
$wechat->on('message', callable $callback); // 全部类型
// or
$wechat->on('message', string $messageType, callable $callback); // 只监听指定类型
```
参数说明
- `$messageType` string, 指定要处理的消息类型ex`image`
- `$callback` callable, 回调函数closure匿名函数或者一切可调用的方法或者函数
example:
```php
use Overtrue\Wechat\Services\Message;
// 监听所有类型
$wechat->on('message', function($message) {
return Message::make('text')->content('您好!');
});
// 监听指定类型
$wechat->on('message', 'image', function($message) {
return Message::make('text')->content('我们已经收到您发送的图片!');
});
$result = $wechat->serve();
echo $result;
```
关于更多消息内容请参考:

53
消息的使用.md Normal file

@ -0,0 +1,53 @@
我把微信的API里的所有“消息”都按类型抽象出来了也就是说你不用区分它是回复消息还是主动推送消息免去了你去手动拼装微信那帮SB那么恶心的XML以及乱七八糟命名不统一的JSON了我帮忙你承受这份苦。
### 消息的类型及属性
| 消息类型 | 类型名称 | 属性 | 除属性自身外提供的方法 |
|----------|----------|----------------------------------------------------------------------------------|-------------------------------------------|
| 文本 | `text` | `content` 内容 | |
| 图片 | `image` | `media_id` 媒体资源id | `media($path)` |
| 声音 | `voice` | `media_id` 媒体资源id | `media($path)` |
| 音乐 | `music` | `title` 标题 <br>`description` 描述 <br>`url` 音乐URL <br>`hq_url` 高清URL <br>`thumb_media_id` 封面资源id | `thumb($path)` |
| 视频 | `video` | `title` 标题 <br>`description` 描述 <br>`media_id` 媒体资源id <br>`thumb_media_id` 封面资源id | `media($path)` <br>`thumb($path)` |
| 位置 | `location` | `lat` 地理位置纬度 <br>`lon` 地理位置经度 <br>`scale` 地图缩放大小 <br>`label` 地理位置信息 | |
| 链接 | `link` | `title` 标题 <br>`description` 描述<br>url 链接URL | |
### 创建消息
**请注意:消息类的命名空间为 `Overtrue\Wechat\Services\Message`**
```php
<?php
use Overtrue\Wechat\Wechat;
use Overtrue\Wechat\Services\Message;
$options = array(...);
$wechat = Wechat::make($options);
$wechat->on('event', 'subscribe', function($event){
return Message::make('text')->content('您好欢迎关注overtrue');
});
```
这里有一点需要注意,当属性带下划线的时候,方法名是支持两种的:`media_id()` 或者 `mediaId()` 都一样。
### 上传媒体文件
```php
$message = Message::make('image')->media('D:/test/demo.jpg');
```
媒体文件你不用上传也就是说media_id是我来维护你直接传本地文件就好了。
方法`media($file)`会上传文件然后赋值到`media_id`属性。如果想要获取上传后的media_id:
```php
$mediaId = $message->media_id;
```
#### 这里有两个方法用于设置媒体文件:
- `media($file)` 对应设置 `media_id`
- `thumb($file)` 对应设置 `thumb_media_id`

@ -0,0 +1,28 @@
## 用户
```php
$userService = $wechat->user;
```
+ `$userService->get($openId);` 获取用户信息
+ `$userService->all($nextOpenId = null);` 获取用户列表, $nextOpenId 可选
+ `$userService->remark($openId, $remark);` 修改用户备注, 返回boolean
example:
```php
$user = $userService->get($openId);
echo $user->nickname;
```
## 用户组
```php
$group = $wechat->group;
```
+ `$group->all();` 获取所有分组
+ `$group->update($groupId, $name);` 修改分组信息
+ `$group->moveUser($openId, $groupId);` 移动单个用户到指定分组
+ `$group->moveUsers(array $openIds, $groupId);` 批量移动用户到指定分组

37
监听微信事件.md Normal file

@ -0,0 +1,37 @@
所有的事件都可以很方便的监听与处理,与监听消息一样,同样支持监听全部类型或者指定类型。
关于事件类型请参考微信官方文档http://mp.weixin.qq.com/wiki/2/5baf56ce4947d35003b86a9805634b1e.html
```php
$wechat->on('event', callable $callback);
// or
$wechat->on('event', string $eventType, callable $callback);
```
参数说明
- `$eventType` string, 指定要处理的消息类型ex`image`
- `$callback` callable, 回调函数closure匿名函数或者一切可调用的方法或者函数
example:
```php
use Overtrue\Wechat\Services\Message;
// 监听所有事件
$wechat->on('event', function($event) {
error_log('收到取消关注事件取消关注者openid: ' . $event['FromUserName']);
});
// 只监听指定类型事件
$wechat->on('event', 'subscribe', function($event) {
error_log('收到关注事件关注者openid: ' . $event['FromUserName']);
return Message::make('text')->content('感谢您关注');
});
$result = $wechat->serve();
echo $result;
```

18
签名计算.md Normal file

@ -0,0 +1,18 @@
Wechat基类提供了计算签名的方法
```php
$wechat->signature($params);
```
example:
```php
$params = array(
'token' => 'mock_token',
'time' => time(),
'nonce' => 'hello',
);
$signature = $wechat->signature($params);
// 313f67a0d1af958128c6761230fa1f1282ed027e
```

24
网页授权.md Normal file

@ -0,0 +1,24 @@
```php
$wechat->auth;
```
+ 生成授权链接
```php
// 生成并返回
$wechat->auth->url($to, $state, $scope);
// 直接跳转
$wechat->auth->redirect($to, $state, $scope); 直接跳转
```
+ 判断是否已经授权
```php
$wechat->auth->authorized();
```
+ 获取授权用户
```php
$wechat->auth->user();
```

17
自定义缓存.md Normal file

@ -0,0 +1,17 @@
微信的access_token是不能太频繁的调用的所以需要缓存本SDK默认使用文件缓存文件会创建在代码运行环境的临时目录里使用[sys_get_temp_dir()](http://php.net/manual/zh/function.sys-get-temp-dir.php) 函数获取的临时目录下。
如果你需要自定义缓存方式那么Wechat提供了以下两个方法
```php
// 写入
$wechat->cache->setter(function($key, $value, $lifetime){
return your_custom_set_cache($key, $value, $lifetime);
});
// 读取
$wechat->cache->getter(function($key){
return your_custom_get_cache($key);
});
```
当你的`getter` 没有返回缓存的值时会重新请求access_token。

9
自定义菜单.md Normal file

@ -0,0 +1,9 @@
```php
$wechat->menu;
```
+ `$menu->get();` 读取菜单
+ `$menu->set($menus);` 设置菜单
+ `$menu->delete();` 删除菜单
> 待补充...

6
获取JSSDK的Ticket.md Normal file

@ -0,0 +1,6 @@
```php
$wechat->ticket->js();
$wechat->ticket->card();
```
> 待补充

26
配置与初始化.md Normal file

@ -0,0 +1,26 @@
本项目的用法目前网上其它SDK用法不同这里只需要像下面这样配置一次完成
```php
<?php
use Overtrue\Wechat\Wechat;
$options = [
'appId' => 'Your app id',
'secret' => 'Your secret'
'token' => 'Your token',
'encodingAESKey' => 'Your encoding AES Key' // optional
];
$wechat = Wechat::make($options);
$server = $wechat->on('message', function($message){
error_log("收到来自'{$message['FromUserName']}'的消息:" . $message['Content']);
});
$result = $wechat->serve();
// 您可以直接echo 或者返回给框架
echo $result;
```
`$wechat->serve()` 方法返回的值为字符串或者空用于应答微信服务器的推送消息或者事件等。比如你如果使用的是Laravel,你这里就应该 `return $wechat->serve();`

15
错误处理.md Normal file

@ -0,0 +1,15 @@
所有的错误均使用异常抛出
```php
$wechat->error(function($error){
error_log("code:" . $error->getCode . ' error: ' . $error->getMessage());
});
```
这里的回调函数的第一个参数为继承自Exception的异常类所以你可以使用Exception的所有方法。
- `$error->getCode()` 错误码ex: `40001`
- `$error->getMessage()` 错误消息
- `$error->getLine()` 错误行(当然这个没啥意义)
当请求微信服务器失败或者返回错误时同样会触发此逻辑错误代码请参考http://mp.weixin.qq.com/wiki/17/fa4e1434e57290788bde25603fa2fcbd.html