Laravel5.6 結合 EasyWechat4.0實現與微信對接
一、微信授權登入
1、 當微信選單管理功能完成後,把專案部署上線。此處省略。。。
2、 在.env檔案中配置token。
WECHAT_OFFICIAL_ACCOUNT_TOKEN=mi//自定義
3、 在api.php中配置微信介面路由,程式碼如下:
Route::namespace('Wechat')->group(function(){
$this->any('/wechat', '[email protected]');
});
4、 參考EasyWechat官網,https://github.com/overtrue/laravel-wechat
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(any路由地址)
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 = ['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 '有趣的問題~';
}