aravel-admin-wechat
項目地址:https://github.com/Hanson/laravel-admin-wechat (走過路過給個 star)
Laravel admin 的微信擴展、支持多公眾號、多小程序、多微信支付的后台管理,並提供小程序、微信支付的基礎接口,在此基礎上通過事件、繼承等形式完成自定義。
本擴展使用了 EasyWeChat,微信實例使用可移步到 EasyWeChat 文檔
TO DO LIST
- [x] 公眾號與小程序配置
- [ ] 公眾號用戶
- [x] 列表用戶
- [x] 同步用戶
- [ ] 備注用戶
- [ ] 用戶標簽
- [x] 公眾號菜單
- [x] 小程序用戶
- [x] 微信支付配置
- [ ] 公眾號卡券
- [x] 卡券列表
- [x] 同步卡券
- [ ] 創建卡券
- [ ] 投放卡券
- [ ] 微信支付
- [x] 微信支付配置
- [x] js sdk 生成
- [ ] 微信支付訂單
- [ ] 微信支付退款
- [ ] 微信支付紅包
- [ ] 公眾號門店
- [ ] 公眾號模板消息
- [ ] 公眾號素材
- [ ] 公眾號客服
- [ ] 開放平台
- [ ] 小程序其他解密接口
安裝
安裝依賴
composer require hanson/laravel-admin-wechat:dev-master -vvv
(這里會報錯:注意也要安裝這個包:(laraval框架api token 插件 "tymon/jwt-auth": "1.0.0-rc.5)
composer require tymon/jwt-auth 1.0.0-rc.5
)
安裝
php artisan wechat:install -m
此命令將:
發布 WeChat 所需資源
生成微信相關后台菜單
創建各個微信相關數據表
創建路由文件 routes/wechat_admin 與 routes/wechat_api
創建 database/migrations 的相關微信數據庫(可自行根據需求做對應修改,可以加字段,不建議刪減字段)
------------------------------(這里也會報錯:只需要改如下圖就可以了)-----------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
執行 migrate 操作(去掉 -m 可不執行)生成相關數據表
php artisan migrate
配置
修改 config/auth.php
(用於小程序登錄等接口,如果不需要可以不加)
<?php return [ 'guards' => [ // ... 'mini' => [ 'driver' => 'jwt', 'provider' => 'wechat_user', ] ], 'providers' => [ // ... 'wechat_user' => [ 'driver' => 'eloquent', 'model' => Hanson\LaravelAdminWechat\Models\WechatUser::class, // 你也可以自己繼承此 model 后修改為自己的 model ], ] ];
接口
對於本人來說, laravel-admin-wechat 另一個有價值的點在於自帶的接口,盡管內容不多,但因為做項目比較多經常要新建用戶表,寫登錄邏輯,但實際上代碼基本都一樣,這也是為什么會提供基礎的接口
post api/wechat/mini/check-token 檢查 token 是否過期
post api/wechat/mini/login 使用 code 登錄
| 參數 | 備注 |
|---|---| | app_id | 小程序的 app id |
| code | 登錄的 code |
post api/wechat/mini/decrypt-mobile 解密手機號碼
post api/wechat/mini/decrypt-user-info 解密用戶信息
| 參數 | 備注 |
|---|---| | app_id | 小程序的 app id |
| iv | 微信參數 |
| encrypted_data | 微信參數 |
高級
此擴展只提供了最基礎的業務,但很多情況下企業需要更多樣化的業務需求,laravel-admin-wechat 同樣提供了十分靈活的自定義方案。
自定義后台
后台路由在 routes/wechat_admin.php 中,你可以自由修改
當你需要對進行細微調整時,可以通過 php artisan admin:controller 自行創建控制器,並修改其繼承的類為原來的類,覆蓋方法做調整
通用方法
laravel-admin-wechat 的通用函數均在 Hanson\LaravelAdminWechat\Services 內,並提供 Facade 方式進行調用
<?php use \Hanson\LaravelAdminWechat\Facades\ConfigService; use \Hanson\LaravelAdminWechat\Facades\MerchantService; use \Hanson\LaravelAdminWechat\Facades\OrderService; // ConfigService 可獲取 公眾號/小程序 實例 ConfigService::getCurrent(); // 獲取后台操作中的 WechatConfig 對象 ConfigService::getAdminCurrentApp(); // 獲取后台操作中的微信實例 ConfigService::getInstanceByAppId('app id'); // 根據 appid 獲取微信實例 // MerchantService 可獲取 微信支付實例 MerchantService::getInstanceByMchId('mch id'); // 根據 mch id 獲取微信支付實例 // OrderService 訂單相關服務 OrderService::unify('mch id', 'JSAPI', array $data); // 統一下單並創建微信訂單 data 為統一下單參數,與微信支付文檔一致 OrderService::jsConfig('mch id', 'JSAPI', array $data); // 返回 js sdk 所需參數(其中包括統一下單,創建訂單)
事件
為了能夠實現基礎業務外,也能更好的適應各種自定義需求,本擴展使用了事件去實現自定義
在你的 app/Providers/ServiceProvider.php
中
<?php protected $listen = [ \Hanson\LaravelAdminWechat\Events\DecryptUserInfo::class => [ 'App\Listeners\AfterSaveUserInfo', ], \Hanson\LaravelAdminWechat\Events\DecryptMobile::class => [ 'App\Listeners\SaveMobile', ], \Hanson\LaravelAdminWechat\Events\OrderPaid::class => [ 'App\Listeners\ChangeOrderStatus', ] ];
<?php use \Hanson\LaravelAdminWechat\Events\DecryptMobile; class SaveMobile { public function handle(DecryptMobile $event) { $event->wechatUser->user()->update([ 'phone' => $event->decryptedData['purePhoneNumber'], 'country_code' => $event->decryptedData['countryCode'], ]); } }
<?php use \Hanson\LaravelAdminWechat\Events\DecryptUserInfo; class AfterSaveUserInfo { public function handle(DecryptUserInfo $event) { // 你的業務 $event->decryptedData['nickname']; $event->wechatUser; } }
<?php use \Hanson\LaravelAdminWechat\Events\OrderPaid; class AfterSaveUserInfo { public function handle(OrderPaid $event) { // 你的業務 $wechatOrder = $event->order; $order = $wechatOrder->order()->update(['status' => 'paid']); $openId = $wechatOrder->openid; } } ———————————————— 原文作者:Hanson 轉自鏈接:https://learnku.com/articles/40373 版權聲明:著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請保留以上作者信息和原文鏈接。
微信支付
laravel-admin-wechat 提供了微信訂單表、創建訂單以及生成 js 參數等方法,但並沒有相關業務參數 地址、商品 等,建議自身生成 orders 表並關聯 wechat_orders
// 支付接口示例 <?php class OrderController extends Controller { public function pay() { // some validate $data = [ 'body' => '商品標題', 'total_fee' => 100, 'openid' => auth('mini')->user()->openid, // 'out_trade_no' => 'xxx', 選填,如不填寫時會自動創建一個訂單號 ]; /** * $result['config'] jssdk 所需參數 * $result['order'] WechatOrder 的 model 對象 * $result['unify'] unify 接口返回的結果 */ $result = \Hanson\LaravelAdminWechat\Facades\OrderService::jsConfig('mch id', 'JSAPI', $data); App\Models\Order::create([ 'wechat_order_id' => $result['order']->id, 'status' => 'not paid', 'goods_id' => '...', 'address_id' => '...', ]); return $result; } }