WeChat SDK EasyWeChat para Laravel, baseado em w7corp/easywechat
O Lumen não é mais compatível por padrão a partir da versão 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
compositor requer overtrue/laravel-wechat:^7.2
Crie o arquivo de configuração:
fornecedor de artesão php:publish --provider="OvertrueLaravelWeChatServiceProvider"
Opcional, adicione um alias
'aliases' => [// ...'EasyWeChat' => OvertrueLaravelWeChatEasyWeChat::class, ],
Cada módulo basicamente oferece suporte a várias contas, e o padrão é default
.
Exclua rotas relacionadas ao WeChat no middleware AppHttpMiddlewareVerifyCsrfToken
, como:
protegido $exceto = [// ...'wechat', ];
Para Laravel 11.x, você pode usar o método $middleware->validateCsrfTokens
em bootstrap/app.php
:
->withMiddleware(function (Middleware $middleware) {$middleware->validateCsrfTokens(exceto: [// ...'wechat', ]); })
Vamos escrever um exemplo usando o recebimento de mensagens comuns como exemplo.
roteamento:
Rota::any('/wechat', 'WeChatController@serve');
Nota: Deve ser
Route::any
, porque o servidor WeChat usaGET
ao autenticar ePOST
ao receber mensagens do usuário!
Em seguida, crie o controlador WeChatController
:
<?phpnamespace AppHttpControllers;use Log;class WeChatController estende o controlador {serviço de função pública() { Log::info('solicitação chegou.'); $server = app('easywechat.official_account')->getServer();$server->with(function($message){return "Bem-vindo ao seguir overtrue!"; });return $servidor->servir(); } }
Ao usar middleware, basta preencher oauth.callback
em app/config/easywechat.php
casualmente (porque não é mais necessário).
Adicione middleware de roteamento em app/Http/Kernel.php
:
protegido $routeMiddleware = [// ...'easywechat.oauth' => OvertrueLaravelWeChatMiddlewareOAuthAuthenticate::class, ];
Adicione middleware à rota:
//...Route::group(['middleware' => ['web', 'easywechat.oauth']], function () { Route::get('/user', function () {$user = session('easywechat.oauth_user.default'); // Obtém informações do usuário autorizado dd($user); }); });
O middleware suporta a especificação do nome da configuração: 'easywechat.oauth:default'
. Claro, você também pode especificar os scopes
atuais nos parâmetros do middleware:
Route::group(['middleware' => ['easywechat.oauth:snsapi_userinfo']], function () { // ...});// Ou especifique a conta e os escopos:Route::group([ ' middleware' => ['easywechat.oauth:default,snsapi_userinfo']], function () { // ...});
A rota acima define que /user
requer autorização do WeChat, portanto, no retorno de chamada desta rota ou no método correspondente do controlador , você pode obter as informações do usuário autorizado em session('easywechat.oauth_user.default')
.
Às vezes, queremos realmente passar pelo processo de autorização do WeChat on-line após a conclusão do desenvolvimento local. Isso reduzirá nossos custos de desenvolvimento.
Prepare informações de autorização de simulação:
use IlluminateSupportArr;use OvertrueSocialiteUser como SocialiteUser;$user = new SocialiteUser(['id' => 'mock-openid','name' => 'overtrue','nickname' => 'overtrue','avatar' => ' http://example.com/avatars/overtrue.png','email' => null,'original' => [],'provider' => 'WeChat', ]);
Os campos acima devem ser configurados da forma mais completa possível quando o escopo for
snsapi_userinfo
. Claro, se o seu modo for apenassnsapi_base
, você só precisaráopenid
.
Grave dados na sessão:
Nota: Certifique-se de escrever antes de chamar o middleware OAuth. Por exemplo, você pode criar um middleware global para fazer isso e ativá-lo apenas no ambiente de desenvolvimento.
session(['easywechat.oauth_user.default' => $user]); // Da mesma forma, `default` pode ser substituído por outros nomes de configuração correspondentes ao seu
Você pode ouvir os eventos correspondentes e executar as operações correspondentes após a ocorrência dos eventos.
Autorização da web OAuth: OvertrueLaravelWeChatEventsWeChatUserAuthorized
// Este evento possui os seguintes atributos $event->user; // O mesmo que session('easywechat.oauth_user.default') $event->isNewSession; // É uma nova sessão (verdadeiro quando a sessão é criada para o primeira vez) $event->account; //A conta atualmente usada pelo middleware, correspondente ao nome do item de configuração no arquivo de configuração
Você pode usar o OvertrueLaravelWeChatTraitsHandleOpenPlatformServerEvents
integrado para concluir rapidamente a verificação do lado do servidor da plataforma aberta:
rotas/web.php:
Route::any('/plataforma aberta/servidor', OpenPlatformController::class);
app/Http/Controllers/OpenPlatformController.php:
<?phpnamespace AppHttpControllers;use OvertrueLaravelWeChatTraitsHandleOpenPlatformServerEvents;class OpenPlatformController estende o controlador {use HandleOpenPlatformServerEvents; função pública __invoke(Aplicativo $aplicativo): PsrHttpMessageResponseInterface{$app = app('easywechat.open_platform'); } }
Dicas: Por padrão, os seguintes eventos serão acionados com base no conteúdo push da plataforma aberta WeChat. Você pode ouvir os eventos correspondentes e processá-los:
O autorizador autorizou com sucesso: OvertrueLaravelWeChatEventsOpenPlatformAuthorized
Autorização de atualização do autorizador: OvertrueLaravelWeChatEventsOpenPlatformAuthorizeUpdated
A parte autorizadora cancela a autorização: OvertrueLaravelWeChatEventsOpenPlatformUnauthorized
Plataforma aberta empurra VerifyTicket: OvertrueLaravelWeChatEventsOpenPlatformVerifyTicketRefreshed
// O evento possui os seguintes atributos $message = $event->payload; // Conteúdo de notificação de evento da plataforma aberta;
Após a configuração, http://example.com/open-platform/server
é o URL de recebimento do evento de autorização definido pelo aplicativo de terceiros de plataforma aberta.
Para uso mais detalhado do SDK, consulte: https://www.easywechat.com
Se você gosta do meu projeto e quer apoiá-lo, clique aqui
Muito obrigado à Jetbrains por gentilmente fornecer uma licença para eu trabalhar neste e em outros projetos de código aberto.
Quer saber como construir um pacote de extensão PHP do zero?
Por favor, preste atenção ao meu curso prático, onde compartilharei algumas experiências de desenvolvimento de extensões - "Tutorial prático do pacote de extensões PHP - do início ao lançamento"
MIT