WeChat SDK EasyWeChat untuk Laravel, berdasarkan w7corp/easywechat
Lumen tidak lagi didukung secara default mulai dari 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
komposer memerlukan overtrue/laravel-wechat:^7.2
Buat file konfigurasi:
vendor tukang php:publish --provider="OvertrueLaravelWeChatServiceProvider"
Opsional, tambahkan alias
'alias' => [// ...'EasyWeChat' => OvertrueLaravelWeChatEasyWeChat::class, ],
Setiap modul pada dasarnya mendukung banyak akun, dan standarnya adalah default
.
Kecualikan rute terkait WeChat di middleware AppHttpMiddlewareVerifyCsrfToken
, seperti:
dilindungi $kecuali = [// ...'wechat', ];
Untuk Laravel 11.x, Anda dapat menggunakan metode $middleware->validateCsrfTokens
di bootstrap/app.php
:
->withMiddleware(fungsi (Middleware $middleware) {$middleware->validateCsrfTokens(kecuali: [// ...'wechat', ]); })
Mari kita tulis sebuah contoh dengan menggunakan menerima pesan biasa sebagai contoh.
rute:
Rute::apa saja('/wechat', 'WeChatController@serve');
Catatan: Harus
Route::any
, karena server WeChat menggunakanGET
saat mengautentikasi, danPOST
saat menerima pesan pengguna!
Kemudian buat pengontrol WeChatController
:
<?phpnamespace AppHttpControllers;gunakan Log;kelas WeChatController memperluas Pengontrol {fungsi publik melayani() { Log::info('permintaan tiba.'); $server = app('easywechat.official_account')->getServer();$server->with(function($message){return "Selamat datang untuk mengikuti overtrue!"; });kembalikan $server->serve(); } }
Jika menggunakan middleware, cukup isi oauth.callback
di app/config/easywechat.php
dengan santai (karena sudah tidak diperlukan lagi).
Tambahkan middleware perutean di app/Http/Kernel.php
:
dilindungi $routeMiddleware = [// ...'easywechat.oauth' => OvertrueLaravelWeChatMiddlewareOAuthAuthenticate::class, ];
Tambahkan middleware ke rute:
//...Rute::group(['middleware' => ['web', 'easywechat.oauth']], function () { Route::get('/user', function () {$user = session('easywechat.oauth_user.default'); // Dapatkan informasi pengguna resmi dd($user); }); });
Middleware mendukung penentuan nama konfigurasi: 'easywechat.oauth:default'
. Tentu saja, Anda juga dapat menentukan scopes
saat ini di parameter middleware:
Route::group(['middleware' => ['easywechat.oauth:snsapi_userinfo']], function () { // ...});// Atau tentukan akun dan cakupan:Route::group([ ' middleware' => ['easywechat.oauth:default,snsapi_userinfo']], function() { // ...});
Rute di atas mendefinisikan bahwa /user
memerlukan otorisasi WeChat, jadi dalam panggilan balik rute ini atau metode pengontrol yang sesuai , Anda bisa mendapatkan informasi pengguna yang berwenang dari session('easywechat.oauth_user.default')
.
Terkadang kami ingin melalui proses otorisasi WeChat secara online setelah pengembangan lokal selesai. Ini akan mengurangi biaya pengembangan kami. Maka Anda perlu melakukan dua langkah berikut:
Siapkan informasi otorisasi simulasi:
gunakan IlluminateSupportArr;gunakan OvertrueSocialiteUser sebagai SocialiteUser;$user = new SocialiteUser(['id' => 'mock-openid','name' => 'overtrue','nickname' => 'overtrue','avatar' => ' http://example.com/avatars/overtrue.png','email' => null,'original' => [],'provider' => 'WeChat', ]);
Bidang di atas harus dikonfigurasi semaksimal mungkin ketika cakupannya adalah
snsapi_userinfo
. Tentu saja, jika mode Anda hanyasnsapi_base
, Anda hanya memerlukanopenid
.
Tulis data ke sesi:
Catatan: Pastikan untuk menulis sebelum memanggil middleware OAuth. Misalnya, Anda dapat membuat middleware global untuk mencapai hal ini dan mengaktifkannya hanya di lingkungan pengembangan.
session(['easywechat.oauth_user.default' => $user]); // Demikian pula, `default` dapat diganti dengan nama konfigurasi lain yang sesuai dengan milik Anda
Anda dapat mendengarkan kejadian terkait dan melakukan operasi terkait setelah kejadian terjadi.
Otorisasi web OAuth: OvertrueLaravelWeChatEventsWeChatUserAuthorized
// Event ini memiliki atribut berikut $event->user; // Sama seperti session('easywechat.oauth_user.default') $event->isNewSession; // Apakah ini sesi baru (berlaku ketika sesi dibuat untuk pertama kali) $event->account; //Akun yang saat ini digunakan oleh middleware, sesuai dengan nama item konfigurasi di file konfigurasi
Anda dapat menggunakan OvertrueLaravelWeChatTraitsHandleOpenPlatformServerEvents
bawaan untuk menyelesaikan verifikasi sisi server platform terbuka dengan cepat:
rute/web.php:
Rute::apa saja('/platform terbuka/server', OpenPlatformController::kelas);
app/Http/Controllers/OpenPlatformController.php:
<?phpnamespace AppHttpControllers; gunakan OvertrueLaravelWeChatTraitsHandleOpenPlatformServerEvents; kelas OpenPlatformController memperluas Pengontrol {gunakan HandleOpenPlatformServerEvents; fungsi publik __invoke(Aplikasi $application): PsrHttpMessageResponseInterface{$app = app('easywechat.open_platform'); } }
Tips: Secara default, peristiwa berikut akan dipicu berdasarkan konten push platform terbuka WeChat. Anda dapat mendengarkan peristiwa terkait dan memprosesnya:
Pengotorisasi berhasil mengotorisasi: OvertrueLaravelWeChatEventsOpenPlatformAuthorized
Otorisasi pembaruan pengotorisasi: OvertrueLaravelWeChatEventsOpenPlatformAuthorizeUpdated
Pihak yang memberi otorisasi membatalkan otorisasi: OvertrueLaravelWeChatEventsOpenPlatformUnauthorized
Platform terbuka mendorong VerifyTicket: OvertrueLaravelWeChatEventsOpenPlatformVerifyTicketRefreshed
// Acara memiliki atribut berikut $message = $event->payload; // Buka konten pemberitahuan acara platform
Setelah konfigurasi, http://example.com/open-platform/server
adalah peristiwa otorisasi yang menerima URL yang ditetapkan oleh aplikasi pihak ketiga platform terbuka.
Untuk penggunaan SDK yang lebih spesifik, silakan merujuk ke: https://www.easywechat.com
Jika Anda menyukai proyek saya dan ingin mendukungnya, klik di sini
Terima kasih banyak kepada Jetbrains karena telah berbaik hati memberikan lisensi kepada saya untuk mengerjakan proyek ini dan proyek sumber terbuka lainnya.
Ingin tahu bagaimana cara membuat paket ekstensi PHP dari awal?
Harap perhatikan kursus praktis saya, di mana saya akan berbagi beberapa pengalaman pengembangan ekstensi - "Tutorial Praktis Paket Ekstensi PHP - Dari Memulai hingga Rilis"
MIT