Laravel Admin 微信擴充套件,支援多公眾號、多小程式、多微信支付,包含後臺與介面

Hanson發表於2020-02-08

專案地址: https://github.com/Hanson/laravel-admin-we... (走過路過給個star)

Laravel admin 的微信擴充套件、支援多公眾號、多小程式、多微信支付的後臺管理,並提供小程式、微信支付的基礎介面,在此基礎上透過事件、繼承等形式完成自定義。

本擴充套件使用了 EasyWeChat,微信例項使用可移步到 EasyWeChat 文件

3@6ZH77BL2I_PKOASD~6T2T.png

H__`P5CEM2W5KK_HJ_R2_3D.png

~IOO_9`PNP__04333MJ1_97.png

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_adminroutes/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;
    }
}

特別鳴謝

EasyWeChat 微信開發包

yisonli/wxmenu 微信選單的程式碼來源

本作品採用《CC 協議》,轉載必須註明作者和本文連結
❤️ 新增本人微信:hansonskr ❤️ 備註:vbot 可立即透過好友並拉入微信機器人交流群

相關文章