Laravel Admin 微信扩展,支持多公众号、多小程序、多微信支付,包含后台与接口

Laravel-admin-wechat

项目地址: 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
本帖由系统于 4年前 自动加精
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 25

多谢楼主分享,层次挺清晰,挺好用

4年前 评论
qbhy

牛逼,汉三哥加油

4年前 评论

@qbhy 一起加油

4年前 评论
qbhy

@Hanson 我不加油,我想做闲鱼

4年前 评论

公众号菜单有报错,索引不存在

file

4年前 评论

@Leesinyii 感谢,已修复,composer 更新一下

4年前 评论

file
为什么一到线上,就找不到文件,我在本地运行的怪好

这是本地的

Laravel

4年前 评论

@搬砖小伙子 404 就是没有路由啊,composer show hanson/laravel-admin-wechat ,我感觉你是没安装

4年前 评论
搬砖小伙子 4年前
Hanson (作者) (楼主) 4年前
Hanson (作者) (楼主) 4年前
搬砖小伙子 4年前
搬砖小伙子 4年前
Hanson (作者) (楼主) 4年前
搬砖小伙子 4年前
搬砖小伙子 4年前

file 安装依赖失败是怎么回事

4年前 评论

@kingThegirl 难道没有装 laravel-admin ?

4年前 评论
kingThegirl 4年前
Hanson (作者) (楼主) 4年前

接入授权认证是哪个路由呢

3年前 评论

@lazycms 网页的吗?这个还没有

3年前 评论

@wade 我这个是基于 laravel-admin 的,你是还没安装吧

3年前 评论

你好作者,扩展很好用,但是遇到一个疑问:微信菜单设置成二级菜单之后就显示不出来了。一级的菜单还是正常的显示,这是我哪里没有配置好吗

3年前 评论

@jianjianc 可能是 bug ,我有空看看

3年前 评论
jianjianYF 3年前

宝塔使用laravel6 执行到php artisan wechat:install -m 出现 There are no commands defined in the "wechat" namespace.

3年前 评论
Hanson (楼主) 3年前
jsonMark (作者) 3年前

现在支持发模板信息吗

3年前 评论

file
“laravel/framework”: “^6.2”,

“encore/laravel-admin”: “^1.8”,

“hanson/laravel-admin-wechat”: “^1.0”,

安装依赖命令运行成功 安装也成功了,其他功能没有问题,就设置菜单的时候,报错

Laravel
所有的同步到微信公众号都不成功

3年前 评论

会兼容Dcat Admin吗 :kissing_heart:

3年前 评论

这个确实不错,就是停止开发了把

2年前 评论

@dongzhiyu 精力跟不上,加上现在转 go 了

2年前 评论

不兼容 Dcat Admin
同时,汉三哥已停更,这个轮子只有一部分功能是开发完成了的。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!