前言
最近公众号 Type时光机
挂了。而我又是那种偶尔会发散思考一下的人,总会把看到技术文章或者自身感悟发送到一个地方保存起来,所以 那个公众号挂了后,对我的生活产生了较大的影响(其实屁事没有,就是想搞一个工具),花了差不多30分钟的时间,搞了一个简易版的接收器用来接收微信发送的消息并且按照以前的格式发送到我的博客地址,自动更新内容到我的博客。
技术栈
LNMP php7.4 + laravel 8 + easywechat 5.8 + 微信测试号
虽说只是简单的实现了接收和转发功能,但总代码行数不足 30 行,laravel 是真的强大,真的优雅。
技术实现前的准备工作
- 请确认自己有一个 https 的域名
- 请确保自己有一个可以搭建网站的服务器或者 vps 或者虚拟主机
- nginx 或者 apache 上配置的 root 访问路径请指向:
/您的网站目录/public
- 微信测试号上申请好 app_id 和 secret
技术实现逻辑
温馨提示:下列所有的操作属于是搭建了一个新的网站,所以不要在 typecho 代码目录下进行
注意:操作代码前,请先配置好网站相关的目录,然后在网站目录里面进行下列操作
安装 最新的 laravel 框架,我这里是 8.6
# laravel 的方式安装 laravel new 你的网站目录 #composer 的方式安装 composer create-project laravel/laravel 你的网站目录
安装 laravel 的 easywechat
# overtrue/wechat 5.x composer require "overtrue/laravel-wechat:^6.0"
安装 http 客户端, laravel 默认自带
composer require guzzlehttp/guzzle
在
config/app.php
注册 ServiceProvider 和 Facade (Laravel 5.5 + 无需手动注册)'providers' => [ // ... Overtrue\LaravelWeChat\ServiceProvider::class, ], 'aliases' => [ // ... 'EasyWeChat' => Overtrue\LaravelWeChat\Facade::class, ],
创建配置文件(你的网站目录进行下列操作):
php artisan vendor:publish --provider="Overtrue\LaravelWeChat\ServiceProvider"
修改应用根目录下的
config/wechat.php
中对应的参数即可(从微信测试号中获取如下参数即可)。- 执行命令
php artisan make:controller WxController
该命令会自动生成\app\Http\Controllers\WxController.php - 在 WxController.php 中写入如下代码。 请修改代码中的
这里填写您的博客地址
修改为您的博客接口地址即可,具体地址填写方式可以参考https://maomao.ink/index.php/web/438.html
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use EasyWeChat\Factory; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Http; class WxController extends Controller { public function index(Request $Request) { $config = config('wechat'); $app = Factory::officialAccount($config); $app->server->push(function ($message) { Log::info($message); switch ($message['MsgType']) { case 'event': return '收到事件消息'; break; case 'text': return $this->pushText($message); // return '收到文字消息'; break; case 'image': return '收到图片消息'; break; case 'voice': return '收到语音消息'; break; case 'video': return '收到视频消息'; break; case 'location': return '收到坐标消息'; break; case 'link': return '收到链接消息'; break; case 'file': return '收到文件消息'; // ... 其它消息 default: return '收到其它消息'; break; } }); $response = $app->server->serve(); return $response; } //推送文字消息 private function pushText($message) { //向我的博客发送消息 $response = Http::asForm()->post('这里填写您的博客地址', [ 'time'=>time(), 'content'=>$message['Content'], ]); // $response->successful(); return '已经发送到您的博客'; } }
- 执行命令
在中间件
App\Http\Middleware\VerifyCsrfToken
排除微信相关的路由,如:protected $except = [ // ... 'wechat', ];
下面以接收普通消息为例写一个例子:
假设您的域名为
overtrue.me
那么请登录微信公众平台 “开发者中心” 修改 “URL(服务器配置)” 为:http://overtrue.me/wechat
。
修改 app\wx\routes\web.php
文件 -- 修改后的文件如下所示,如果不懂,可以直接复制并覆盖
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
//接收微信发来的消息
Route::any('/wechat', [\App\Http\Controllers\WxController::class, 'index'])->name('wechat');
注意:一定是Route::any
, 因为微信服务端认证的时候是GET
, 接收用户消息时是POST
!
在微信测试号后台绑定您的域名,绑定成功后,就可以开始愉快的玩耍了。
效果图
end
至此,您就可以进行下一步的开发与调整了
鸣谢
您可以前往以下地址获取更多的帮助!
easywechat:https://github.com/overtrue/laravel-wechat
时光机详细使用方法:https://maomao.ink/index.php/web/438.html
后台编辑不了本文,一直卡死,所以没法编辑了