上一次课,我们完成了微信后台菜单管理,接下来,我们来实现如何使项目与微信对接。
1、 当微信菜单管理功能完成后,把项目部署上线。此处省略。。。
2、 在.env
文件中配置token
。
3、 在api.php
中配置微信接口路由,代码如下:
Route::namespace('Wechat')->group(function(){
$this->any('wechat', 'WechatController@serve');
});
4、 参考EasyWechat官网,https://github.com/overtrue/laravel-wechat 在 app/Http/Kernel.php
中添加路由中间件:
protected $routeMiddleware = [
'wechat.oauth' => \Overtrue\LaravelWeChat\Middleware\OAuthAuthenticate::class,
];
5、 在前端路由中添加此中间件:
Route::namespace('Wechat')->middleware('wechat.oauth', 'wechat')->group(function () {
require 'wechat/shop.php';
});
6、 在Wechat
控制器的serve
方法中设置关注微信测试号,自动回复消息。代码如下:
$app = app('wechat.official_account');
$app->server->push(function($message){
if($message['MsgType'] == 'event'){
switch($message['Event']){
case 'subscribe':
return '欢迎关注';
break;
}
}
});
return $app->server->serve();
7、这里以微信测试号为例,打开微信公众号测试平台,填写接口配置信息,配置接口地址和token
,点击提交,配置成功即可。这时在浏览器中访问域名显示“请从微信端打开”,即为配置成功。
8、后台微信菜单管理设置菜单并填写菜单地址。
9、开启config/Wechat.php
里面的OAuth
配置。
10、在微信测试号页面找到 网页授权获取用户基本信息,修改里面的地址,如:wechat.holyzq.com
11、下载并安装微信开发者工具,后期所有调试在此工具中进行。
测试:打开微信,扫描二维码,看到“欢迎关注”即为成功。
1、在app\Http\Middleware\Wechat.php
中,获取用户信息并存入/更新数据库,代码如下:
$original = session('wechat.oauth_user.default.original');
if (!$original) {
return $next($request);
}
$openid = $original['openid'];
$customer = Customer::where('openid', $openid)->first();
if ($customer) {
$customer->update($original);
} else {
Customer::create($original);
}
session(['wechat.customer' => $customer]);
return $next($request);
2、 Customer
模型中设置黑名单排除数据库中没有的字段。
protected $guarded = ['language', 'country', 'privilege'];
3、 在首页控制器中打印用户SESSION信息:return session()->all();
,访问首页,看到用户信息即为成功。
首先阅读easywechat
文档消息一节:https://www.easywechat.com/docs/master/zh-CN/official-account/messages
,把回复消息的模板格式搞清楚。
然后,我们就可以开始着手写代码了,代码参考如下:
use EasyWeChat\Kernel\Messages\News;
use EasyWeChat\Kernel\Messages\NewsItem;
public function serve()
{
$app = app('wechat.official_account');
$app->server->push(function ($message) {
if ($message['MsgType'] == 'event') {
switch ($message['Event']) {
case 'subscribe': //设置关注事件类型
return '欢迎关注'; //回复关注提示语
break;
//点击事件
case 'CLICK':
switch ($message['EventKey']) {
case 'recommend':
return $this->is_recommend();
break;
}
break;
}
}
//文本消息
if ($message['MsgType'] == 'text') {
switch ($message['Content']) {
case '精选':
case '推荐':
case '精选推荐':
case 'recommend':
return $this->is_recommend();
break;
default:
return $this->default_msg();
}
}
//语音消息
if ($message['MsgType'] == 'voice') {
switch ($message['Recognition']) {
case '精选。':
case '推荐。':
case '精选推荐。':
return $this->is_recommend();
break;
default:
return '您说的是:' . $message->Recognition . '?';
}
}
});
return $app->server->serve();
}
/**
* 精选推荐
* @return array
*/
private function is_recommend()
{
$products = Product::where('is_recommend', 1)
->orderBy('created_at')
->take(6)
->get();
//拼接自动回复的消息模板
$news = [];
foreach ($products as $p) {
$items = [
new NewsItem([
'title' => $p->name,
'description' => $p->description,
'url' => 'http://wqqshop.holyzq.com' . '/product/' . $p->id,
'image' => $p->image ? $p->image : '',
]),
];
$news = new News($items);
}
return $news;
}
/**
* 默认消息
* @return string
*/
function default_msg()
{
return '有趣的问题~';
}
解析:以上仅示例了微信点击事件、文本消息、语音消息三种自动回复消息的基础用法,更多用法请参考easywechat
官方文档。