前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ThinkPHP6.0 + EasyWechat 4.x 公众号自动回复

ThinkPHP6.0 + EasyWechat 4.x 公众号自动回复

作者头像
很酷的站长
发布2023-01-04 08:07:43
1.1K0
发布2023-01-04 08:07:43
举报
文章被收录于专栏:站长的编程笔记
ThinkPHP6.0 + EasyWechat 4.x 公众号自动回复
ThinkPHP6.0 + EasyWechat 4.x 公众号自动回复
1. 公众号自动回复

安装 easywechat 4.x扩展包

代码语言:javascript
复制
composer require overtrue/wechat:~4.0

获取公众号操作对象

https://easywechat.com/docs/4.x/official-account/index

2. 控制器调用逻辑层方法

代码语言:javascript
复制
<?php
declare(strict_types=1);
namespace app\controller;
use app\logic\OfficialAccount;
class Message
{
    public function index()
    {
        $token = 'NBoqMdCbgoGNcXQSZBRSiIhyB';
        OfficialAccount::message($token);
    }
}
3. 逻辑层

代码语言:javascript
复制
<?php
namespace app\logic;
class OfficialAccount
{
    /**
     * 自动回复
     *
     * @param string $token 令牌token
     */
    public static function message(string $token)
    {
        // 获取公众号操作实例
        $account = app(\app\lib\OfficialAccount::class);
        // 服务器配置接入验证
        $account->checkSignature($token);
        // 用户发送的数据包数组
        $account->app->server->push(function ($message) {
            switch ($message['MsgType']) {
                case 'text':
                    return '收到文字消息';
                    break;
                default:
                    return '';
                    break;
            }
        });
        $response = $account->app->server->serve();
        $response->send();
    }
    /**
     * 接收用户发送的数据包
     *
     * @return array 数据包数组
     */
    // private static function getMessage(): array
    // {
    //     // 用户发送的xml数据包
    //     $xml = file_get_contents('php://input');
    //     // 将xml数据转为对象
    //     $obj     = simplexml_load_string($xml, "SimpleXMLElement", LIBXML_NOCDATA);
    //     // 将对象转为json字符串,再转回数组
    //     return json_decode(json_encode($obj), true);
    // }
}
4. EasyWechat 基础类库

代码语言:javascript
复制
<?php
namespace app\lib;
use EasyWeChat\Factory;
class OfficialAccount
{
    /**
     * 初始化配置
     */
    public function __construct()
    {
        $config = [
            'app_id' => 'wx44afd321dc997xxx',
            'secret' => '98b74d03ef0699753fe542274f508xxx',
            // 指定 API 调用返回结果的类型:array(default)/collection/object/raw/自定义类名
            'response_type' => 'array',
        ];
        $this->app = Factory::officialAccount($config);
    }
    // +-----------------------------------------------------------
    // | 公众号自动回复
    // +-----------------------------------------------------------
    /**
     * 服务器配置接入验证
     *
     * @param string $token 令牌(Token)
     */
    public 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']) : '';
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 公众号自动回复
  • 2. 控制器调用逻辑层方法
  • 3. 逻辑层
  • 4. EasyWechat 基础类库
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档