kydev/work-wx-user 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

kydev/work-wx-user

Composer 安装命令:

composer require kydev/work-wx-user

包简介

企业微信用户系统

README 文档

README

PHPUnit

介绍

基于 Hyperf 框架,快速搭建企业微信用户服务

安装

composer require kydev/work-wx-user

使用

发布配置

php bin/hyperf.php vendor:publish kydev/work-wx-user

登录

创建控制器

<?php

declare(strict_types=1);

namespace App\Controller;

use Hyperf\Di\Annotation\Inject;
use KY\WorkWxUser\Request\AuthorizeRequest;
use KY\WorkWxUser\UserService;
use KY\WorkWxUser\WeChat\WeChat;

class OAuthController extends Controller
{
    #[Inject]
    protected WeChat $wx;

    #[Inject]
    protected UserService $service;

    public function authorize(AuthorizeRequest $request)
    {
        $url = (string) $request->input('redirect_uri');
        $state = (string) $request->input('state');

        $redirectUrl = $this->wx->authorize($url, $state);

        return $this->response->redirect($redirectUrl);
    }

    public function login()
    {
        $code = $this->request->input('code');

        $result = $this->service->login($code);

        return $this->response->success([
            'token' => $result->getToken(),
            'user' => $result->getUser()->toArray(),
        ]);
    }
}

增加路由

<?php

Router::get('/oauth/authorize', [App\Controller\OAuthController::class, 'authorize']);
Router::get('/oauth/login', [App\Controller\OAuthController::class, 'login']);
Router::post('/oauth/login', [App\Controller\OAuthController::class, 'login']);

浏览器访问以下地址,并扫码

http://127.0.0.1:9501/oauth/authorize?state=STATE&redirect_uri=http://127.0.0.1:9501/oauth/login

验证登录态

middlewares.php 配置中,增加对应的中间件。

<?php

declare(strict_types=1);

return [
    'http' => [
        KY\WorkWxUser\Middleware\UserAuthMiddleware::class,
    ],
];

使用时,调用 build() 方法,即可验证是否已登录,如果没有登录态,则抛出 KY\WorkWxUser\Exception\TokenInvalidException 异常。

<?php

$id = UserAuth::get()->build()->getId();

最后只需要在我们的异常捕获器中,增加对应的异常捕获,并与前端协商好对应的错误码,即可正常使用,例如以下异常捕获器

<?php

declare(strict_types=1);

namespace App\Exception\Handler;

use App\Constants\ErrorCode;
use App\Exception\BusinessException;
use App\Kernel\Http\Response;
use Hyperf\Contract\StdoutLoggerInterface;
use Hyperf\Di\Exception\CircularDependencyException;
use Hyperf\ExceptionHandler\ExceptionHandler;
use Hyperf\HttpMessage\Exception\HttpException;
use KY\WorkWxUser\Exception\TokenInvalidException;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Log\LoggerInterface;
use Throwable;

class BusinessExceptionHandler extends ExceptionHandler
{
    protected Response $response;

    protected LoggerInterface $logger;

    public function __construct(protected ContainerInterface $container)
    {
        $this->response = $container->get(Response::class);
        $this->logger = $container->get(StdoutLoggerInterface::class);
    }

    public function handle(Throwable $throwable, ResponseInterface $response)
    {
        switch (true) {
            case $throwable instanceof HttpException:
                return $this->response->handleException($throwable);
            case $throwable instanceof TokenInvalidException:
                return $this->response->fail(ErrorCode::TOKEN_INVALID, 'Token Invalid.');
            case $throwable instanceof BusinessException:
                $this->logger->warning(format_throwable($throwable));
                return $this->response->fail($throwable->getCode(), $throwable->getMessage());
            case $throwable instanceof CircularDependencyException:
                $this->logger->error($throwable->getMessage());
                return $this->response->fail(ErrorCode::SERVER_ERROR, $throwable->getMessage());
        }

        $this->logger->error(format_throwable($throwable));

        return $this->response->fail(ErrorCode::SERVER_ERROR, 'Server Error');
    }

    public function isValid(Throwable $throwable): bool
    {
        return true;
    }
}

kydev/work-wx-user 适用场景与选型建议

kydev/work-wx-user 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 494 次下载、GitHub Stars 达 0, 最近一次更新时间为 2022 年 07 月 04 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「php」 「wechat」 「�」 「�业微信」 「hyperf」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 kydev/work-wx-user 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 kydev/work-wx-user 我们能提供哪些服务?
定制开发 / 二次开发

基于 kydev/work-wx-user 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 494
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 0
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 2
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-07-04