專案地址: https://github.com/Hanson/laravel-admin-we... (走過路過給個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
安裝
php artisan wechat:install -m
此命令將:
- 釋出 WeChat 所需資源
- 生成微信相關後臺選單
- 建立各個微信相關資料表
- 建立路由檔案
routes/wechat_admin
與routes/wechat_api
- 建立
database/migrations
的相關微信資料庫(可自行根據需求做對應修改,可以加欄位,不建議刪減欄位) - 執行
migrate
操作(去掉-m
可不執行)
配置
修改 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;
}
}
微信支付
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;
}
}
特別鳴謝
本作品採用《CC 協議》,轉載必須註明作者和本文連結