有人遇到过 Swoft 接入 EasyWechat 扩展,微信验证服务端 token 失败问题吗?

发布于 2022-09-11 22:38:11 字数 750 浏览 31 评论 0

我用的环境

  • PHP 版本:7.2
  • overtrue/wechat 版本:4.1
  • Swoole版本:4.4.3
  • Swoole框架名称: Swoft2.0.5

问题及现象

微信公众号监听用户关注事件,微信公众号后台需要验证服务器端token
swoft 框架不能使用 exit ,文档中说 $response->send() 直接输出(echo)了,请问用swoft 的方式怎么去做

WeChatController

$config=[
    ....
];
$app = Factory::officialAccount($config);
$response = $app->server->serve();
return \context()->getResponse()
->withContentType('text/xml')
->withContent($response->getContent());

有人使用过Swoft 接入EasyWechat扩展,服务端验证微信token失败问题吗

求助中

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

眼眸 2022-09-18 22:38:11

我也接了easywechat,是这样写的

<?php declare(strict_types=1);
/**
 * This file is part of Swoft.
 *
 * @link     https://swoft.org
 * @document https://swoft.org/docs
 * @contact  group@swoft.org
 * @license  https://github.com/swoft-cloud/swoft/blob/master/LICENSE
 */

namespace App\Http\Controller;

use App\Common\EasyWeChat\MessageFactory;
use Swoft;
use Swoft\Exception\SwoftException;
use Swoft\Http\Server\Annotation\Mapping\{Controller,RequestMapping};
use EasyWeChat\Factory;

/**
 * Class HomeController
 * @Controller(prefix="/wechat")
 */
class EasyWeChatController
{
    /**
     * 公众号应用实例
     * @var \EasyWeChat\OfficialAccount\Application
     */
    public $app;

    /**
     * 微信配置信息
     * @var mixed
     */
    public $config;

    /**
     * 响应对象
     * @var
     */
    public $response;

    public function __construct()
    {
        $this->config = config('wechat');

        $this->app = Factory::officialAccount($this->config);
    }

    /**
     * @RequestMapping(route="verify")
     */
    public function serviceRoute()
    {
        $this->activeInit();

        $this->app->server->push(function ($message) {
            return MessageFactory::handleMessage($message);
        });

        $this->response = $this->app->server->serve();

        return \context()->getResponse()
            ->withContentType('text/xml')
            ->withContent($this->response->getContent());
    }

    /**
     * 主动初始化接收方法
     * @throws SwoftException
     */
    private function activeInit()
    {
        $get = \context()->getRequest()->get() ?? [];
        $post= \context()->getRequest()->post() ?? [];
        $attr = [];
        $cookies = \context()->getRequest()->cookie() ?? [];
        $files = \context()->getRequest()->file() ?? [];
        $server = \context()->getRequest()->server() ?? [];
        $raw = \context()->getRequest()->raw() ?? [];
        $this->app->request->initialize($get, $post, $attr, $cookies, $files, $server, $raw);
    }

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文