WeChat SDK EasyWeChat para Laravel, basado en w7corp/easywechat
Lumen ya no es compatible de forma predeterminada a partir de 7.x.
overtrue/laravel-wechat:^7.0 -> Laravel >= 8.0
overtrue/laravel-wechat:^6.0 -> Laravel/Lumen >= 7.0
overtrue/laravel-wechat:^5.1 -> Laravel/Lumen >= 5.1
el compositor requiere overtrue/laravel-wechat:^7.2
Crear archivo de configuración:
Proveedor artesanal de php: publicar --provider="OvertrueLaravelWeChatServiceProvider"
Opcional, agregue un alias
'aliases' => [// ...'EasyWeChat' => OvertrueLaravelWeChatEasyWeChat::clase, ],
Básicamente, cada módulo admite varias cuentas y el valor predeterminado es default
.
Excluir rutas relacionadas con WeChat en el middleware AppHttpMiddlewareVerifyCsrfToken
, como:
protegido $excepto = [// ...'wechat', ];
Para Laravel 11.x, puede usar el método $middleware->validateCsrfTokens
en bootstrap/app.php
:
->withMiddleware(función (Middleware $middleware) {$middleware->validateCsrfTokens(excepto: [// ...'wechat', ]); })
Escribamos un ejemplo utilizando la recepción de mensajes normales como ejemplo.
enrutamiento:
Ruta::cualquier('/wechat', 'WeChatController@serve');
Nota: Debe ser
Route::any
, porque el servidor WeChat usaGET
al autenticarse yPOST
al recibir mensajes de usuario.
Luego crea el controlador WeChatController
:
<?phpnamespace AppHttpControllers;use Log;clase WeChatController extiende el controlador {función pública servir() { Log::info('solicitud llegada.'); $server = app('easywechat.official_account')->getServer();$server->with(function($message){return "¡Bienvenido a seguir overtrue!"; });return $servidor->servir(); } }
Cuando utilice middleware, simplemente complete oauth.callback
en app/config/easywechat.php
de manera informal (porque ya no es necesario).
Agregue middleware de enrutamiento en app/Http/Kernel.php
:
protegido $routeMiddleware = [// ...'easywechat.oauth' => OvertrueLaravelWeChatMiddlewareOAuthAuthenticate::clase, ];
Agregue middleware a la ruta:
//...Ruta::group(['middleware' => ['web', 'easywechat.oauth']], función () { Route::get('/user', function () {$user = session('easywechat.oauth_user.default'); // Obtener información del usuario autorizado dd($user); }); });
El middleware admite la especificación del nombre de configuración: 'easywechat.oauth:default'
. Por supuesto, también puede especificar los scopes
actuales en los parámetros del middleware:
Route::group(['middleware' => ['easywechat.oauth:snsapi_userinfo']], function () { // ...});// O especifique la cuenta y los ámbitos:Route::group([ ' middleware' => ['easywechat.oauth:default,snsapi_userinfo']], función () { // ...});
La ruta anterior define que /user
requiere autorización de WeChat, por lo que en la devolución de llamada de esta ruta o en el método correspondiente del controlador , puede obtener la información del usuario autorizado de session('easywechat.oauth_user.default')
.
A veces queremos pasar por el proceso de autorización de WeChat en línea después de que se completa el desarrollo local. Esto reducirá nuestros costos de desarrollo. Luego, debemos seguir los dos pasos siguientes:
Prepare la información de autorización de simulación:
use IlluminateSupportArr;use OvertrueSocialiteUser como SocialiteUser;$usuario = new SocialiteUser(['id' => 'mock-openid','name' => 'overtrue','nickname' => 'overtrue','avatar' => ' http://example.com/avatars/overtrue.png','email' => null,'original' => [],'proveedor' => 'WeChat', ]);
Los campos anteriores deben configurarse lo más completamente posible cuando el alcance es
snsapi_userinfo
. Por supuesto, si su modo es solosnsapi_base
, solo necesitaopenid
.
Escribir datos en la sesión:
Nota: asegúrese de escribir antes de llamar al middleware OAuth. Por ejemplo, puede crear un middleware global para lograr esto y habilitarlo solo en el entorno de desarrollo.
session(['easywechat.oauth_user.default' => $user]); // De manera similar, `default` se puede reemplazar con otros nombres de configuración correspondientes al suyo.
Puede escuchar los eventos correspondientes y realizar las operaciones correspondientes después de que ocurran los eventos.
Autorización web OAuth: OvertrueLaravelWeChatEventsWeChatUserAuthorized
// Este evento tiene los siguientes atributos $event->user; // Igual que session('easywechat.oauth_user.default') $event->isNewSession; // ¿Es una nueva sesión (verdadero cuando se crea la sesión para el primera vez) $event->account; //La cuenta utilizada actualmente por el middleware, correspondiente al nombre del elemento de configuración en el archivo de configuración.
Puede utilizar OvertrueLaravelWeChatTraitsHandleOpenPlatformServerEvents
integrado para completar rápidamente la verificación del lado del servidor de la plataforma abierta:
rutas/web.php:
Ruta::cualquiera('/open-platform/server', OpenPlatformController::class);
aplicación/Http/Controllers/OpenPlatformController.php:
<?phpnamespace AppHttpControllers;use OvertrueLaravelWeChatTraitsHandleOpenPlatformServerEvents;la clase OpenPlatformController extiende el controlador {use HandleOpenPlatformServerEvents; función pública __invoke(Aplicación $aplicación): PsrHttpMessageResponseInterface{$app = app('easywechat.open_platform'); } }
Consejos: de forma predeterminada, los siguientes eventos se activarán según el contenido push de la plataforma abierta WeChat. Puede escuchar los eventos correspondientes y procesarlos:
El autorizador autorizó exitosamente: OvertrueLaravelWeChatEventsOpenPlatformAuthorized
Autorización de actualización del autorizador: OvertrueLaravelWeChatEventsOpenPlatformAuthorizeUpdated
La parte autorizante cancela la autorización: OvertrueLaravelWeChatEventsOpenPlatformUnauthorized
La plataforma abierta impulsa VerifyTicket: OvertrueLaravelWeChatEventsOpenPlatformVerifyTicketRefreshed
// El evento tiene los siguientes atributos $message = $event->payload // Abrir contenido de notificación de evento de plataforma;
Después de la configuración, http://example.com/open-platform/server
es la URL de recepción del evento de autorización establecida por la aplicación de terceros de la plataforma abierta.
Para un uso más detallado del SDK, consulte: https://www.easywechat.com
Si te gusta mi proyecto y quieres apoyarlo, haz clic aquí
Muchas gracias a Jetbrains por proporcionarme amablemente una licencia para trabajar en este y otros proyectos de código abierto.
¿Se pregunta cómo crear un paquete de extensión PHP desde cero?
Preste atención a mi curso práctico, donde compartiré alguna experiencia en el desarrollo de extensiones: "Tutorial práctico del paquete de extensiones PHP: desde el inicio hasta el lanzamiento".
MIT