ssh / smct-sdk-php
智慧食堂第三方API & 人脸采集API PHP SDK
v1.0.0
2026-07-27 01:41 UTC
Requires
- php: >=7.4
- ext-curl: *
- ext-gmp: *
- ext-json: *
- ext-mbstring: *
- lpilp/guomi: ^2.0
README
智慧食堂第三方 API & 人脸采集 API PHP SDK 组件包。
功能概览
| 模块 | 客户端类 | 说明 |
|---|---|---|
| 智慧食堂 API | SmctClient |
支付、订单、菜品、客餐券、统计等 26 个接口 |
| 人脸采集 API | FaceClient |
H5 人脸绑定 + 后台同步管理 5 个接口 |
环境要求
- PHP >= 7.4
- ext-json, ext-curl, ext-mbstring, ext-gmp
安装
composer require smct/sdk-php
或不使用 Composer,手动引入:
require 'path/to/smct-sdk-php/autoload.php';
快速开始
智慧食堂 API
use Smct\Config; use Smct\SmctClient; $config = new Config([ 'appId' => 'SYSTEM002', 'channelCode' => 'F1001', 'appChannelCode' => 'JKWB', 'baseUrl' => 'https://smct-test.fintechabchina.com', // 测试环境 'deviceNum' => 'YOUR_DEVICE_NUM', 'sm2PublicKey' => 'YOUR_SM2_PUBLIC_KEY_HEX', ]); $smct = new SmctClient($config); // 获取食堂基础信息 $result = $smct->getCanteenId(); // 刷脸支付 $result = $smct->flexiblePay( amtTrans: '10.50', idCanteen: 'CANTEEN_ID', transId: 'UNIQUE_TRANS_ID', payType: 'FPAY', personId: 'USER_ID' ); // 获取饭卡余额 $result = $smct->getCardBalance('FTYPE', 'CANTEEN_ID', personId: 'USER_ID'); // 交易退款 $result = $smct->refund('ORDER_NO', 'CANTEEN_ID');
人脸采集 API
use Smct\Config; use Smct\FaceClient; $config = new Config([ 'faceBaseUrl' => 'https://face-api.example.com', 'faceAppId' => 'SYSTEM002', 'faceAesKey' => 'YOUR_AES_KEY', ]); $face = new FaceClient($config); // 查询绑定状态 $result = $face->queryBindStatus('userId', 'companyId', '张三'); // 提交人脸绑定 $result = $face->submitFaceBind('userId', 'companyId', '张三', $base64Image); // 后台查询采集情况(AES 加密) $result = $face->queryFaceBindInfo('2025-01-01 00:00:00', '2025-12-31 23:59:59', 'companyId');
更多用法见 examples/ 目录。
配置说明
Config 参数
| 参数 | 说明 | 默认值 |
|---|---|---|
appId |
应用标识 | SYSTEM002 |
channelCode |
渠道代码 | F1001 |
appChannelCode |
应用部署渠道代码 | JKWB |
baseUrl |
基础 URL | 测试环境地址 |
deviceNum |
设备号 | - |
timeout |
请求超时(秒) | 30 |
sm2PrivateKey |
SM2 私钥(Hex/Base64,可选) | - |
sm2PublicKey |
SM2 公钥(Hex) | - |
faceBaseUrl |
人脸采集 API 地址 | - |
faceAppId |
人脸采集 appId | SYSTEM002 |
faceAesKey |
人脸采集 AES 密钥 | - |
环境地址
| 环境 | baseUrl |
|---|---|
| 测试 | https://smct-test.fintechabchina.com |
| 生产 | https://smct.fintechabchina.com |
API 接口清单
SmctClient - 智慧食堂 API
基础功能
| 方法 | 接口 |
|---|---|
getCanteenId() |
获取食堂基础信息 |
getUserCard($groupId) |
获取公司下所有实体卡号 |
getCardBalance($type, $canteenId, ...) |
获取饭卡余额 |
支付
| 方法 | 接口 |
|---|---|
flexiblePay(...) |
设备端灵活支付 |
syncOfflineOrders($orders, ...) |
离线模式订单同步 |
getMealTime($canteenId) |
获取固定餐餐段信息 |
fixedMealPay($deals) |
固定餐消费支付 |
refund($orderNo, $canteenId, ...) |
交易退款(冲正) |
线上订单
| 方法 | 接口 |
|---|---|
getOrderInfo($qrCode, $canteenId) |
取餐码获取订单详情 |
scanCodeVerify($qrCode, $canteenId, $transId) |
取餐码核销 |
pullOrders($canteenId, ...) |
拉取订单数据 |
getEquipOrders(...) |
设备订单分页查询 |
getScanOrders($canteenId, $type, ...) |
获取待核销餐 |
handleOrder($canteenId, $operType, $orderIds) |
订单处理 |
getDishInfos($canteenId, ...) |
餐段菜品信息查询 |
orderPay($params) |
设备选菜下单支付 |
getUserOrders($params) |
用户订单查询 |
getEquipDishInfo(...) |
设备可取菜品查询 |
客餐券
| 方法 | 接口 |
|---|---|
checkCoupon($qrCode, $canteenId) |
获取客餐券信息 |
useCoupon($qrCode, $canteenId, $transId) |
核销客餐券 |
统计
| 方法 | 接口 |
|---|---|
getCanteenPaymentStatistics($canteenId) |
食堂每日收款汇总 |
getDishOrderStatistics(...) |
菜品订单统计 |
getIntervalOrderStatistics(...) |
餐段订单统计 |
getGradeDishOrderStatistics(...) |
年级班级菜品统计 |
getFoodWasteStatistics(...) |
厨余垃圾统计 |
getCanteenDevPaymentStatistics($canteenId) |
设备今日消费汇总 |
FaceClient - 人脸采集 API
H5 页面接口
| 方法 | 接口 |
|---|---|
queryBindStatus($userId, $companyId, $username) |
查询绑定状态 |
submitFaceBind($userId, $companyId, $username, $base64) |
提交人脸绑定 |
deleteFaceBind($userId, $companyId) |
删除人脸绑定 |
后台同步接口(AES 加密)
| 方法 | 接口 |
|---|---|
queryFaceBindInfo($start, $end, ...) |
查询人脸采集情况 |
batchDeleteFaceBindInfo($companyId, $userIds) |
批量删除人脸绑定 |
加密算法
智慧食堂 API(SM2 + SM3 + SM4)
请求加密流程:
- 生成随机 16 字节 → SM4-CBC(OpenSSL) 加密业务数据
- SM2 公钥加密随机密钥和盐值 →
extension(C1C3C2, 加“04”前缀) - 在原始业务数据上计算 SM3 签名 → SM4 加密签名 →
nonceString - 传输时
data字段为密文
响应处理:SM4 解密(使用客户端请求时的随机密钥)→ SM3 验签
人脸采集 API(AES)
- 算法:AES-128-ECB + PKCS5Padding
- 密钥派生:
SHA1(password)取前 16 字节 - 编码:双重 Base64
项目结构
smct-sdk-php/
├── README.md # 项目文档
├── composer.json # Composer 配置
├── .env.example # 环境变量模板
├── .gitignore
├── autoload.php # 非 Composer 自动加载
├── bin/
│ └── test # 测试执行脚本
├── src/
│ ├── Config.php # 配置类
│ ├── SmctClient.php # 智慧食堂 API 客户端
│ ├── FaceClient.php # 人脸采集 API 客户端
│ ├── Encrypt/
│ │ └── Encryptor.php # SM2/SM3/SM4 加签加解密
│ ├── Http/
│ │ └── HttpClient.php # HTTP 请求封装
│ └── Exceptions/
│ └── SmctException.php # 异常类
├── tests/
│ ├── EnvLoader.php # .env 加载器
│ ├── EncryptorTest.php # 加密算法单元测试
│ ├── SmctClientTest.php # 智慧食堂 API 测试
│ └── FaceClientTest.php # 人脸采集 API 测试
└── examples/
├── smct_example.php # 智慧食堂 API 示例
└── face_example.php # 人脸采集 API 示例
测试
1. 配置环境变量
# 复制环境变量模板 cp .env.example .env # 编辑 .env 填入实际密钥 vim .env
2. 执行测试
# 运行全部测试 ./bin/test # 仅运行加密算法单元测试(无需 .env) ./bin/test unit # 加密算法按分类过滤 ./bin/test unit sm2 # SM2 非对称加密 ./bin/test unit sm3 # SM3 哈希 ./bin/test unit sm4 # SM4 对称加密 ./bin/test unit aes # AES 加解密 ./bin/test unit e2e # 端到端流程 ./bin/test unit tool # 工具方法 # 仅运行智慧食堂 API 测试(需要 .env) ./bin/test smct # 全部 ./bin/test smct getCanteenId # 指定接口 # 仅运行人脸采集 API 测试(需要 .env) ./bin/test face # 全部 ./bin/test face queryBindStatus # 指定接口 # 使用 Composer 命令 composer test # 加密算法测试 composer test:smct # 智慧食堂 API 测试 composer test:face # 人脸采集 API 测试 composer test:all # 全部测试
许可证
MIT