第一步 申请微信公众平台
点击 或复制 https://mp.weixin.qq.com/可直接跳转。
申请过程略。
第二步 申请测试账号
找到开发者工具中的公众平台测试号,这个测试号可以调用所有接口。
接着扫码登录,会进入测试号管理界面,如图:
在此处我们进行我们的服务器配置,可以先不填,我们先进行开发,然后填上去后进行验证(我验证的时候,一直说配置失败,但是刷新该页面后发现已经配置服务器成功)。
第三步 安装EasyWechat
在开始之前,请确保你足够了解Composer和闭包,接下来我们可能会用到很多它的知识。
按照作者提供的信息,我们使用Composer进行安装,在撰写本文时,EasyWechat的版本已经为4.2,但是在EasyWechat文档中给出的安装仍为4.0,因此我建议执行命令行:
composer require "overtrue/wechat:^4.2" -vvv
当然,你最好能先配置一下中国的镜像,否则安装的速度会很慢,另外提一下,我这里并没有使用任何的框架。
我给出的方案是修改当前项目的composer.json,你可以执行命令行:
composer config repo.packagist composer https://packagist.phpcomposer.com
当然也可以主动在composer.json的末尾添加镜像信息:
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
}
}
当你完成后,它应该是这样的:
第四步 编写一个简单可以通过微信接口配置的服务器
<?php
use EasyWeChat\Factory;
$options = [
'app_id' => 'your_appId',
'secret' => 'your_secret',
'token' => 'your_token',
'log' => [
'level' => 'debug',
'file' => '/tmp/easywechat.log',
],
// ...
];
$app = Factory::officialAccount($options);
$server = $app->server;
$user = $app->user;
$server->push(function($message) use ($user) {
$fromUser = $user->get($message['FromUserName']);
return "{$fromUser->nickname} 您好!欢迎关注 overtrue!";
});
$server->serve()->send();
对于作者给出的代码,我将一一讲诉。
在开始我们的服务端之前,我们先引入了EasyWechat的Factory帮助我们构造一个Server,即
use EasyWeChat\Factory;
如果你对此有疑问,那么请回去好好补补命名空间的课吧。
然后我们编写一个服务器的配置信息,即变量options:
$options = [
'app_id' => 'your_appId',
'secret' => 'your_secret',
'token' => 'your_token',
'log' => [
'level' => 'debug',
'file' => '/tmp/easywechat.log',
],
// ...
];
你理应将app_id、secret按照测试号信息填写无误,然后再测试号管理页面键入你自己设定的Token,并将该Token填入options当中。至于log部分,我将不对其关注。
紧接着,我们使用Factory开始构造我们的公众号应用:
$app = Factory::officialAccount($options);
接着我们获取了app当中的server和user,其中server提供了服务的接口,user提供了对用户操作的接口,即:
$server = $app->server;
$user = $app->user;
然后,我们使用:
$server->push(callable $callback)
来设置消息处理器。
实例代码是:
$server->push(function($message) use ($user) {
$fromUser = $user->get($message['FromUserName']);
return "{$fromUser->nickname} 您好!欢迎关注 overtrue!";
});
给大家提个醒,我在我的options中设置了response_type为array,因此这里不可以使用箭头访问,如果没有设置response_type,则可以使用箭头访问。在这里被坑惨了。
接着,我们执行server的serve函数,执行服务端业务,这个函数返回值是一个Symfony\Component\HttpFoundation\Response实例,在一些框架中,你可以直接返回该实例,如果你和我一样没有使用任何框架,那么我们可以直接调用send函数输出。即:
$server->serve()->send();
到这里,我们一个简单的服务端就写好了,配置完成后,去关注你的公众号,你会得到类似这样的信息:
噢,这里的昵称不要在意,有了女票昵称还能自己定吗?
那么如果我们要复杂一点呢?
比如我们想只在关注的时候发送欢迎关注,在用户发送文字消息的时候发送一些另外的东西呢?
第五步 注册不同的消息处理器
我们可以不断地调用server的push函数添加消息处理器,请注意这个消息处理器同样是Closure,假如我们需要注册一个消息处理器,它在用户订阅的时候被调用,那么我们的注册就是:
use EasyWeChat\Kernel\Messages\Message;
$app->server->push(function($mes) use ($user){
switch ($mes['Event']){
case 'subscribe':
$fromUser = $user->get($mes['FromUserName']);
$nickname = $fromUser['nickname'];
return "$nickname 您好!欢迎关注 overtrue!";
break;
}
}, Message::EVENT);
此处我们指定该消息处理器仅处理Message::EVENT(要使用它,我们必须先use EasyWeChat\Kernel\Messages\Message;
),然后在处理器内部我们再仅对事件subscribe进行了处理,这样,我们就注册了一个用户订阅的消息处理器。
这里我必须告诉你,消息(即传入处理权的变量mes)都拥有以下基本属性:
- ToUserName 接收方账号(即公众号ID)
- FromUserName 发送方账号(OpenID,代表用户的唯一标识)
- CreateTime 消息创建时间(时间戳)
- MsgId 消息ID(64位整型)
对于Message::TEXT,它还有:
- MsgType text
- Content 文本消息内容
对于Message::IMAGE,它还有:
- MsgType image
- MediaId 图片消息媒体id,可以调用多媒体文件下载接口拉取数据。
- PicUrl 图片链接
对于Message::VOICE,它还有:
- MsgType voice
- MediaId 语音消息媒体id,可以调用多媒体文件下载接口拉取数据。
- Format 语音格式,如amr,speex等
- Recognition * 开通语音识别后才有
对于Message::VIDEO,它还有:
- MsyType video
- MediaId 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
- ThumbMediaId 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
对于Message::SHORT_VIDEO,它还有:
- MsgType shortvideo
- MediaId 视频消息媒体id,可以调用多媒体文件下载接口拉取数据。
- ThumbMediaId 视频消息缩略图的媒体id,可以调用多媒体文件下载接口拉取数据。
对于Message::EVENT,它还有:
- MsgType event
- Event 事件类型 (如:subscribe(订阅)、unsubscribe(取消订阅)…, CLICK等)
如果你想同时为多种类型进行注册消息处理器,那么只需要使用按位或连接即可,例如:
$app->server->push(MediaMessageHandler::class, Message::VOICE|Message::VIDEO|Message::SHORT_VIDEO);
来源:CSDN
作者:竹寒 天竺
链接:https://blog.csdn.net/m0_37217636/article/details/104145195