Laravel Admin 微信擴展,支持多公眾號、多小程序、多微信支付,包含后台與接口


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

特別鳴謝

EasyWeChat 微信開發包

yisonli/wxmenu 微信菜單的代碼來源

 轉載:https://learnku.com/articles/40373


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM