diff --git a/多客服的消息转发.md b/多客服的消息转发.md new file mode 100644 index 0000000..3baba0a --- /dev/null +++ b/多客服的消息转发.md @@ -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); +``` \ No newline at end of file diff --git a/安装.md b/安装.md new file mode 100644 index 0000000..4bc6c38 --- /dev/null +++ b/安装.md @@ -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 + 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, ...)); + ``` diff --git a/接收消息与回复.md b/接收消息与回复.md new file mode 100644 index 0000000..79dba03 --- /dev/null +++ b/接收消息与回复.md @@ -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; +``` + +关于更多消息内容请参考: \ No newline at end of file diff --git a/消息的使用.md b/消息的使用.md new file mode 100644 index 0000000..ce4b6a2 --- /dev/null +++ b/消息的使用.md @@ -0,0 +1,53 @@ +我把微信的API里的所有“消息”都按类型抽象出来了,也就是说,你不用区分它是回复消息还是主动推送消息,免去了你去手动拼装微信那帮SB那么恶心的XML以及乱七八糟命名不统一的JSON了,我帮忙你承受这份苦。 + +### 消息的类型及属性 + +| 消息类型 | 类型名称 | 属性 | 除属性自身外提供的方法 | +|----------|----------|----------------------------------------------------------------------------------|-------------------------------------------| +| 文本 | `text` | `content` 内容 | | +| 图片 | `image` | `media_id` 媒体资源id | `media($path)` | +| 声音 | `voice` | `media_id` 媒体资源id | `media($path)` | +| 音乐 | `music` | `title` 标题
`description` 描述
`url` 音乐URL
`hq_url` 高清URL
`thumb_media_id` 封面资源id | `thumb($path)` | +| 视频 | `video` | `title` 标题
`description` 描述
`media_id` 媒体资源id
`thumb_media_id` 封面资源id | `media($path)`
`thumb($path)` | +| 位置 | `location` | `lat` 地理位置纬度
`lon` 地理位置经度
`scale` 地图缩放大小
`label` 地理位置信息 | | +| 链接 | `link` | `title` 标题
`description` 描述
url 链接URL | | + +### 创建消息 + +**请注意:消息类的命名空间为 `Overtrue\Wechat\Services\Message`** + +```php +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` \ No newline at end of file diff --git a/用户与用户组管理.md b/用户与用户组管理.md new file mode 100644 index 0000000..068fb5a --- /dev/null +++ b/用户与用户组管理.md @@ -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);` 批量移动用户到指定分组 \ No newline at end of file diff --git a/监听微信事件.md b/监听微信事件.md new file mode 100644 index 0000000..8ad9eb0 --- /dev/null +++ b/监听微信事件.md @@ -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; +``` diff --git a/签名计算.md b/签名计算.md new file mode 100644 index 0000000..8500e5a --- /dev/null +++ b/签名计算.md @@ -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 +``` diff --git a/网页授权.md b/网页授权.md new file mode 100644 index 0000000..53a4bc5 --- /dev/null +++ b/网页授权.md @@ -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(); + ``` \ No newline at end of file diff --git a/自定义缓存.md b/自定义缓存.md new file mode 100644 index 0000000..0179d2f --- /dev/null +++ b/自定义缓存.md @@ -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。 \ No newline at end of file diff --git a/自定义菜单.md b/自定义菜单.md new file mode 100644 index 0000000..8c02fb2 --- /dev/null +++ b/自定义菜单.md @@ -0,0 +1,9 @@ + ```php + $wechat->menu; + ``` + ++ `$menu->get();` 读取菜单 ++ `$menu->set($menus);` 设置菜单 ++ `$menu->delete();` 删除菜单 + +> 待补充... \ No newline at end of file diff --git a/获取JSSDK的Ticket.md b/获取JSSDK的Ticket.md new file mode 100644 index 0000000..955cabb --- /dev/null +++ b/获取JSSDK的Ticket.md @@ -0,0 +1,6 @@ +```php +$wechat->ticket->js(); +$wechat->ticket->card(); +``` + +> 待补充 \ No newline at end of file diff --git a/配置与初始化.md b/配置与初始化.md new file mode 100644 index 0000000..b6e63bc --- /dev/null +++ b/配置与初始化.md @@ -0,0 +1,26 @@ +本项目的用法目前网上其它SDK用法不同,这里只需要像下面这样配置一次完成: + +```php + '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();` \ No newline at end of file diff --git a/错误处理.md b/错误处理.md new file mode 100644 index 0000000..d7c84ef --- /dev/null +++ b/错误处理.md @@ -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 \ No newline at end of file