1. 小程序消息推送簡介
啟用小程序的消息推送后小程序收到的消息將推送至開發者的設置的服務器地址
例如:用戶關注公眾號、用戶給小程序的客服會話發送消息
EasyWechat 3.x : https://easywechat.com/docs/3.x/overview
更多內容參考微信官方文檔:https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push.html
2. 開啟小程序消息推送
登錄小程序管理平臺,找到 開發管理-開發設置
中的消息推送
消息加密方式設置為明文模式
, 數據格式設置為 JSON
3. 小程序消息推送接入驗證
在小程序管理平臺設置消息推送配置時,點擊 提交
可能會出現: Token校驗失敗,請檢查確認
原因分析:點擊提交
,微信服務器會請求填寫的 URL(服務器地址)
,并攜帶一些參數進行接入驗證
我們需要接收傳遞的參數進行加密,然后做簽名校驗,最后輸出 echostr
參數的值,這樣才能驗證成功
function checkSignature(string $token)
{
$nonce = $_GET["nonce"] ?? '';
$signature = $_GET["signature"] ?? '';
$timestamp = $_GET["timestamp"] ?? '';
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode('', $tmpArr);
$tmpStr = trim(sha1($tmpStr));
if (empty($token)) die('未設置消息推送token令牌');
if (empty($signature) || empty($tmpStr) || empty($nonce)) die('非法請求?。?!');
if ($tmpStr != $signature) die('簽名驗證錯誤');
isset($_GET['echostr']) ? die($_GET['echostr']) : '';
}
4. 客服會話自動回復
文本消息
$message = new \EasyWeChat\Message\Text(['content' => '未設置客服二維碼']);
圖片消息
$image = '';//本地圖片絕對路徑
$result = $app->material_temporary->uploadImage($image);// 上傳臨時素材
$message = new \EasyWeChat\Message\Image(['media_id' => $result['media_id']]);
$token = '';
checkSignature($token);
$message = json_decode(file_get_contents('php://input'), true);
$app = \app\lib\EasyWechat::getInstance()->app;
switch ($message['MsgType']) {
case 'miniprogrampage': // 小程序卡片
$openid = $message['FromUserName'];
// 自動回復圖片
$image = getValue('kefu_qrcode');
if ($image) {
// 上傳臨時素材
$result = $app->material_temporary->uploadImage($image);
$content = new Image(['media_id' => $result['media_id']]);
} else {
$content = new Text(['content' => '未設置客服二維碼']);
}
// 發送消息
$app->staff->message($content)->to($openid)->send();
break;
}
$response = $app->server->serve();
$response->send();