• Stars
    star
    237
  • Rank 169,885 (Top 4 %)
  • Language
    PHP
  • License
    MIT License
  • Created almost 5 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

laravel admin 的微信扩展包,支持多公众号、多小程序、多微信支付,包含基础接口与后台

Laravel-admin-wechat

Laravel admin 的微信扩展、支持多公众号、多小程序、多微信支付的后台管理,并提供小程序、微信支付的基础接口,在此基础上通过事件、继承等形式完成自定义。

本扩展使用了 EasyWeChat,微信实例使用可移步到 EasyWeChat 文档

3@6ZH77BL2I_PKOASD~6T2T.png

H__`P5CEM2W5KK_HJ_R2_3D.png

~IOO_9`PNP__04333MJ1_97.png

关联项目

TO DO LIST

  • 公众号与小程序配置
  • 公众号用户
    • 列表用户
    • 同步用户
    • 备注用户
    • 用户标签
  • 公众号菜单
  • 小程序用户
  • 微信支付配置
  • 公众号卡券
    • 卡券列表
    • 同步卡券
    • 创建卡券
    • 投放卡券
  • 微信支付
    • 微信支付配置
    • js sdk 生成
    • 微信支付订单
    • 微信支付退款
    • 微信支付红包
  • 公众号授权
    • 公众号登录
    • 自动保存用户
    • 中间件
  • 公众号门店
  • 公众号模板消息
  • 公众号素材
  • 公众号客服
  • 开放平台
  • 小程序其他解密接口

安装

安装依赖

composer require hanson/laravel-admin-wechat -vvv

安装

php artisan wechat:install -m

此命令将:

  • 发布 WeChat 所需资源
  • 生成微信相关后台菜单
  • 创建各个微信相关数据表
  • 创建路由文件 routes/wechat_adminroutes/wechat_api
  • 创建 database/migrations 的相关微信数据库(可自行根据需求做对应修改,可以加字段,不建议删减字段)
  • 执行 migrate 操作(去掉 -m 可不执行)

生成 jwt secret

php artisan jwt:secret

配置

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

异常捕捉

不但在此项目,在其他项目也建议你对 app/Exceptions/Handler 进行修改,因为对于接口的请求,laravel 默认在错误的情况会返回页面,这不是任何一个开发者所期望的情况

// app/Exceptions/Handler.php
<?php

public function render($request, Exception $exception)
{
    if ($request->acceptsJson()) {
        if ($exception instanceof AuthenticationException) {
            return Response::json(['err_code' => 401, 'err_msg' => 'Unauthenticated'], 401);
        }
        return fail($exception->getMessage());
    }
    return parent::render($request, $exception);
}

本扩展封装了函数 failok 两个接口返回的基础结构,可以使用这两个函数去定义你所有的接口返回

特别鸣谢

EasyWeChat 微信开发包

yisonli/wxmenu 微信菜单的代码来源

定制

如需找我定制,可加我微信 524291355

More Repositories

1

vbot

微信,企微,机器人,企业微信,企微机器人,微信机器人,小红书,聚合聊天,RPA,协议,hook,逆向,worktool,ntwork,群发,自动回复,chatgpt,API对接,稳定防封全语言通用,企业定制/SCRM/SAAS专用
PHP
3,946
star
2

weibot

微博爬虫,模拟登录,数据抓取
PHP
232
star
3

foundation-sdk

To create a sdk easiler!
PHP
218
star
4

face

😀微软小冰检测图片颜值评分接口
PHP
153
star
5

speedy

🚄A Laravel Admin Package to create a website quickly
PHP
145
star
6

youzan-sdk

👍有赞 SDK
PHP
103
star
7

typecho_material_theme

🎁material style theme for the typecho
PHP
102
star
8

my-vbot

Vbot 运行例子
PHP
96
star
9

img

🖼Image hosting powered by laravel
PHP
90
star
10

ProgressDialog

💿progress dialog for android
Java
66
star
11

rainbow

skin for laravel-admin. Laravel admin 皮肤,让后台更好看
PHP
47
star
12

wepy-template

一个基于 wepy 的小程序开发模板
JavaScript
36
star
13

ngrok-script

A script to run local ngrok client for linux and windows
Shell
33
star
14

wechat-notice

微信消息模板发送
PHP
22
star
15

meituan-sdk

美团 SDK
PHP
22
star
16

laravel-admin-register

laravel-admin 短信注册扩展(支持多个短信服务商)
PHP
21
star
17

laravel-admin-qiniu

Laravel admin 框架的七牛 qiniu 多图上传扩展
PHP
21
star
18

open-taobao-sdk

淘宝开放平台SDK
PHP
19
star
19

aes

a golang library to use aes encrypt easier.
Go
18
star
20

newline-echarts

echarts 换行利器
JavaScript
17
star
21

Data-Structure

Data-Structure for JAVA
Java
17
star
22

laravel-work-exception

使用企业微信通知你的系统异常
PHP
13
star
23

pospal

银豹收银系统 SDK
PHP
13
star
24

wechat-lumen

A wechat Application build on lumen
PHP
12
star
25

wechat-handler

A package to create some base handler for wechat events faster!
PHP
11
star
26

Links_for_Material_Theme

基于hanny的友情链接插件做修改,使其在Material Theme中保持原有风格
PHP
11
star
27

WeworkMsg

全语言通用的企业微信会话存档SDK
Go
11
star
28

gaode-sdk

高德地图 SDK
PHP
8
star
29

Exmail

腾讯企业邮箱API
PHP
8
star
30

wechat-oa

登录微信公众号并可主动发送消息
PHP
7
star
31

weidian-sdk

微店(weidian)的SDK接口包
PHP
6
star
32

crawler

A easy package to crawl a site list and detail
PHP
5
star
33

timeutil

a tool processing time for golang
Go
4
star
34

hertz-starter-kit

基于 hertz 做的脚手架
Go
4
star
35

base-laravel-project

PHP
4
star
36

collection

Go
3
star
37

TextFinder

Go
3
star
38

tuling-sdk

AI response from tuling123.com.
PHP
3
star
39

laravel-learning-note

个人对于laravel的代码、设计解读
PHP
3
star
40

phpstorm-setting

personal phpstorm setting
2
star
41

xcx-template

小程序开发模板
JavaScript
2
star
42

coordinate

PHP
1
star
43

HomePage

A simple navigation website
PHP
1
star
44

mobile-form

Laravel admin 的手机验证码 field 字段
HTML
1
star
45

laravel-admin-alioss

laravel admin ali oss support
PHP
1
star
46

golang-learning

golang 源码学习与解析
1
star