# 猫猫充值系统
**Repository Path**: dumz/cat-recharge-system
## Basic Information
- **Project Name**: 猫猫充值系统
- **Description**: 话费充值,电费充值,油卡充值。充值平台V3.0。项目包含用户管理、权限管理、下单操作、回调显示、余额变动通知、日志记录、三级权限。
话费充值包括移动联通电信三方对接测试接口,电费包括国、南网电费。
本项目仅供同行交流学习,并无任何实际含义,仅供测试使用
- **Primary Language**: PHP
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 3
- **Created**: 2024-01-24
- **Last Updated**: 2024-01-24
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 话费充值平台v3.0
## 1 环境变量
### 接口
| 参数名 | 字段值 |
| ------ | ------ |
|baseurl|http://域名/maomao/|
## 2 话费流量供应系统
## 2.1 接口说明
api提交方式:HTTP POST(表单)
充值回调方式:HTTP POST(表单)
## 2.2 签名说明
签名步骤:
1、准备好所有待签名参数(所有”请求参数“或所有”回调参数“都要参数签名,除开sign字段,没个api传递的参数都不同,这句提示很重要)
2、生成签名字符串(参数名字典升序排序,apikey不参与排序,直接放最后,如后面示例进行组装)“a=1&b=2&c=3&apikey=你的商户key”。(实际字段名并非是a、b、c这里只是演示)
3、对签名字符串进行大写md5,签名=md5(签名字符串)
php语言
//以下为示例,非真实数据
$param = ["参数名称"=>"参数值",...];
//字典排序
ksort($param);
//拼接签名串
$sign_str = http_build_query($param) . '&apikey=maomaomaomaomao';
//签名
$sign = strtoupper(md5(urldecode($sign_str)));
$param['sign'] = $sign;
$httpdata = $param;
```
## 2.3 充值提交接口
> POST http://域名/maomao/index/recharge
### 接口说明
> 提交充值订单
### 请求体(Request Body)
| 参数名称 | 数据类型 | 默认值 | 不为空 | 描述 |
| ------ | ------ | ------ | ------ | ------ |
| out_trade_num|string||true|商户订单号,由商户自己生成唯一单号。
(同一商户,不能存在相同单号订单,相同订单号不能提单)|
| product_id|number||true|产品ID(代理后台查看)|
| mobile|string||true|充值号码(手机号、电费户号等)|
| notify_url|string||true|回调地址,用于接收充值状态回调|
| userid|string||true|商户ID,通过客服或代理后台获取|
| area|string||false|电费地区,如:四川省,仅电费带此参数|
| sign|string||true|签名;签名规则见“签名说明”|
### 响应体
● 响应数据格式:JSON,当“http状态非200”或者“响应体无数据时”可能是服务器或其他链路出现故障,无法准确判定是否成功下单,请通过订单查询或者人工方式再次确认状态。
| 参数名称 | 类型 | 默认值 | 不为空 | 描述 |
| ------ | ------ | ------ | ------ | ------ |
| errno|string||true|错误码,0代表成功,非0代表提交失败|
| errmsg|string||true|错误描述|
| data|object||true|errno=0时 返回数据|
|⇥ order_number|string||true|系统定单号|
|⇥ mobile|string||true|充值手机号|
|⇥ product_id|string||true|产品ID|
|⇥ total_price|string||true|消费金额|
|⇥ out_trade_num|string||true|商户订单号|
|⇥ title|string||true|充值产品说明|
## 2.4 查询用户信息
> POST http://域名/maomao/index/user
### 请求体(Request Body)
| 参数名称 | 数据类型 | 默认值 | 不为空 | 描述 |
| ------ | ------ | ------ | ------ | ------ |
| userid|string||true|账号ID|
| sign|string||true|签名;签名规则见“签名说明”|
### 响应体
● 响应数据格式:JSON
| 参数名称 | 类型 | 默认值 | 不为空 | 描述 |
| ------ | ------ | ------ | ------ | ------ |
| errno|string||true|错误码,0代表成功,非0代表失败|
| errmsg|string||true|错误描述|
| data|object||true|errno=0时 返回数据|
|⇥ id|string||true|userid|
|⇥ username|string||true|名称|
|⇥ balance|string||true|余额|
## 2.5 获取产品类型和产品分类
> POST http://域名/maomao/index/typecate
### 请求体(Request Body)
| 参数名称 | 数据类型 | 默认值 | 不为空 | 描述 |
| ------ | ------ | ------ | ------ | ------ |
| userid|string||true|商户ID|
| sign|string||true|签名|
### 响应体
● 响应数据格式:JSON
| 参数名称 | 类型 | 默认值 | 不为空 | 描述 |
| ------ | ------ | ------ | ------ | ------ |
| errno|string||true|返回0|
| errmsg|string||true|错误描述|
| data|object||true|errno=0时 返回数据|
|⇥ id|string||true|产品类型id|
|⇥ type_name|string||true|产品类型名称|
|⇥ cate|array||true|分类列表|
|⇥⇥ id|int||true|分类ID|
|⇥⇥ cate|string||true|分类名称|
|⇥⇥ type|string||true|产品类型ID|
## 2.5 获取产品
> POST http://域名/maomao/index/product
### 请求体(Request Body)
| 参数名称 | 数据类型 | 默认值 | 不为空 | 描述 |
| ------ | ------ | ------ | ------ | ------ |
| userid|string||true|商户ID|
| type|int||false|产品类型ID,非必须|
| cate_id|iNt||false|分类ID,非必须|
| sign|string||true|签名|
### 响应体
● 响应数据格式:JSON
| 参数名称 | 类型 | 默认值 | 不为空 | 描述 |
| ------ | ------ | ------ | ------ | ------ |
| errno|string||true|错误码,0代表成功,非0代表失败|
| errmsg|string||true|错误描述|
| data|object||true|errno=0时 返回数据|
|⇥ id|int||true|分类ID|
|⇥ cate|string||true|分类名称|
|⇥ sort|string||true|排序|
|⇥ type|string||true|产品类型ID|
|⇥ products|array||true|产品列表|
|⇥⇥ id|string||true|产品ID,下单报文中用此参数|
|⇥⇥ name|string||true|产品名称|
|⇥⇥ desc|string||true|产品说明|
|⇥⇥ api_open|string||true|自动充值|
|⇥⇥ isp|string||true|运营商集合(话费、流量有效),1移动,2电信,3联通,4虚拟|
|⇥⇥ ys_tag|string||true|标签|
|⇥⇥ price|string||true|价格,下单扣费金额|
|⇥⇥ y_price|string||true|原价|
|⇥⇥ max_price|string||true|封顶价格|
|⇥⇥ type|string||true|产品类型ID|
|⇥⇥ cate_name|string||true|产品分类名称|
|⇥⇥ type_name|string||true|产品类型名称|
## 2.6 自发查询订单状态
> POST http://域名/maomao/index/check
### 请求体(Request Body)
| 参数名称 | 数据类型 | 默认值 | 不为空 | 描述 |
| ------ | ------ | ------ | ------ | ------ |
| userid|string||true|账户ID|
| out_trade_nums|string||true|商户订单号;多个用英文,分割|
| sign|string||true|签名|
### 响应体
● 响应数据格式:JSON
| 参数名称 | 类型 | 默认值 | 不为空 | 描述 |
| ------ | ------ | ------ | ------ | ------ |
| errno|string||true|错误码,0代表成功,非0代表失败|
| errmsg|string||true|错误描述|
| data|object||true|errno=0时 返回数据|
|⇥ order_number|string||true|系统订单号|
|⇥ out_trade_num|string||true|商户订单号|
|⇥ create_time|string||true|下单时间|
|⇥ mobile|string||true|手机号|
|⇥ product_id|string||true|产品ID|
|⇥ state|string||true|充值状态:0充值中 ,1充值成功,2充值失败|
## 2.7 充值结果通知-异步通知
> POST-表单格式
> 回调地址:订单提交时参数中传的回调的地址
### 请求体(Request Body)
| 参数名称 | 数据类型 | 默认值 | 不为空 | 描述 |
| ------ | ------ | ------ | ------ | ------ |
| userid|int||true|商户ID|
| order_number|string||true|系统订单号|
| out_trade_num|string||true|商户订单号|
| otime|number||true|成功/失败时间,10位时间戳|
| state|number||true|充值状态;1充值成功 ,2充值失败|
| mobile|string||true|充值手机号|
| remark|string||true|备注信息|
| voucher|string||true|凭证|
| sign|string||true|签名字符串,用于验签,以保证回调可靠性。
签名规则见:签名说明
注:所有参数都要参与签名,请获取所有参数签名,而不是获取现有参数表中的字段签名,以免回调参数增加时导致签名不通过|
### 响应体
● 收到回调“success”,不响应每隔1分钟会发起回调,最多5次。