# 资金类型说明
`充值1 扣费2 转账3 冻结4 解冻5 提现6 兑换7`
| ID | 名称 | 说明 |
| --- | --- | --- |
| 1 | 充值 | 往流动资金账户进行充值资金 |
| 2 | 扣费 | 流动资金或冻结资金进行扣费|
| 3 | 转账 | 站内账户之间进行资金转账 |
| 4 | 冻结 | 流动资金账户进行冻结资金 |
| 5 | 解冻 | 冻结资金账户进行解冻资金 |
| 6 | 提现 | 流动资金账户进行资金提现 |
| 7 | 兑换 | 流动资金兑换虚拟货币或虚拟货币兑换流动资金 |
#### **渠道说明**(可自定义拓展)
参数说明
ALL 支持全部货币
CNY 仅支持人民币
CNY,USD 仅支持人民币与美元
如果需要多种指定货币以英文逗号隔开。
| 标识 | 名称 | 说明 |
| --- | --- |--- |
| KeyCard | 点卡充值 | 虚拟点卡在线充值 |
| Admin | 后台操作 | 后台资金操作 |
| System | 系统操作 | 系统进行资金操作 |
| Alipay | 支付宝 | 支付宝资金操作 |
| WeChat | 微信 | 微信资金操作 |
| QQwallet | QQ钱包 | QQ钱包资金操作 |
| PayPal | 贝宝PayPal | PayPal资金操作 |
| …… | . | . |
#### **资金名词**说明
| 名词 | 说明 |
| --- | --- |
| 流动资金 | 可以自由使用的资金,提现、消费、转账均不受影响 |
| 冻结资金 | 暂时冻结到系统,无法正常使用,只能在指定的场景使用 |
| 锁定资金 | 可以理解为赠送的资金刺激消费,只能消费使用,不可提现转账。<br>锁定资金只是流动资金中的一部分。<br>例如:锁定资金100 流动资金1000,如果要提现的话,只能提现900;而消费则可以使用到1000 |
| 资金账户 | 好比是银行卡,币种不同记录不同币种的资金账户。 |
| 货币 | 对应不同国家地区的流通资金的种类;例如 人民币、港元、美元… |
| 货币简写 | 是指不同资金的货币英文代码;例如 人民币CNY、美元USD |
# 基础功能
#### 精确计算资金计算
| 符号 | 说明 | 示例 |
| --- | --- | ---|
| + | 加法 | 例:`money::pricecalc('1','+','1')` 结果:`2.00`|
| - | 减法 | 例:`money::pricecalc('6','-','3')` 结果:`3.00`|
| * | 乘法 | 例:`money::pricecalc('1','*','3')` 结果:`3.00`|
| / | 除法 | 例:`money::pricecalc('10','/','2')` 结果:`5.00`|
| % | 百分比 | 例:`money::pricecalc('100','%','10')` 结果:`10.00`|
| z | 折扣 | 例:`money::pricecalc('100','%','9.5')` 结果:`95.00`|
精度 默认为小数点后两位(其它位数参考`pricecalc('1','+','1',3);`)
~~~
$p = new money();
$jisuan = $p->pricecalc('1','+','1');
echo $jisuan; //输出 2.00
~~~
#### 计算手续费
假设 计算`123`元的`1.36%`的手续费
注:可附加精度计算 例:`fee('123','1.36',4)`保留小数点后4位 、`fee('123','1.36',2)`保留小数点后2位
~~~
$p = new money();
$jisuan = $p->fee('123','1.36');
echo $jisuan; //输出 1.67
~~~
#### 价格由元转分
~~~
$p = new money();
$m = $p->priceyuantofen(1);
echo $m; //输出 100
~~~
#### 价格由分转元
~~~
$p = new money();
$m = $p->pricefentoyuan(100);
echo $m; //输出 1
~~~
#### 价格格式化
精度 默认为小数点后两位(其它位数参考`priceformat(1,4);`)
~~~
$p = new money();
$m = $p->priceformat(1);
echo $m; //输出 1.00
~~~
# 功能使用
资金账户说明:
资金账户好比是银行卡,币种不同记录不同币种的资金账户。
**发送数组数据说明**
| 参数 | 示例值 | 说明 |
| --- | --- |--- |
| ctype | CNY | 货币类别 参见【货币种类】中的货币简写 |
| money | 100 | 需要充值的资金 |
| mtype | System | 操作渠道 参见【资金配置】中的渠道 |
| uid | 10012 | 操作对象账号ID |
| type | 1 | 一、扣费中使用<br>1:扣除流动资金 <br>2:扣除冻结资金 <br>说明:优先锁定资金,没有则或不足追加扣正常资金<br>二、兑换中使用<br>1:兑出 货币=>兑换积分 (减少货币)<br>2:兑入 积分兑换=>货币 (增加货币)<br>3:互换 货币<=>货币|
| carda | 100002 | 流出资金账户|
| to | 10012 | 转账时转入对方的账号ID |
| cardb | 100001 | 流入资金账户 没有为空(自动创建所对应的货币类型资金账户,成功后输出货币账户ID)|
| info | 系统后台充值100元到流动资金账户ID:100001 | 当前操作说明 用于资金流水中显示说明 |
| sno | 42020011516540610012 | 交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】 |
| pno | 42020011516540610012 | 交易号同流水说明,一般充值接口用到【可选一般用于充值验证】拓展所用<br>注意:如果包含`lock` 则表示该资金仅为消费,不可提现。 |
| status | 状态码 | 接口充值中使用|
| logid | 充值记录ID | 接口充值中使用|
示例代码
## :-: 资金充值
**示例1:直接充值**(例如系统后台充值、兑换),不进行验证的充值
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'System', //操作渠道
'uid' => 10012, //账号ID
'cardb' => '', //流入账户 没有为空(自动创建)
'info' => '系统后台充值100元到流动资金账户', //操作说明
'sno' => '1' . date('YmdHis', time()) . 10012, //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '1' . date('YmdHis', time()) . '10012', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(1, $data, 'AdminRecharge');
```
**示例2:点卡充值**
充值之前需对点卡进行效验等操作
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'System', //操作渠道
'uid' => 10012, //账号ID
'cardb' => '', //流入账户 没有为空(自动创建)
'info' => '系统后台充值100元到流动资金账户', //操作说明
'sno' => '1' . date('YmdHis', time()) . 10012, //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '1' . date('YmdHis', time()) . '10012', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(1, $data, 'AdminRecharge');
```
**示例3:接口充值**
准备工作,假如已经对接好了支付接口。
1.假如创建[支付宝]充值订单,充值1元
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'Alipay', //操作渠道
'uid' => 10012, //账号ID
'cardb' => '100001', //流入账户 没有为空(自动创建)
'info' => '支付宝在线充值100元到流动资金账户[100001]', //操作说明
'sno' => '1' . date('YmdHis', time()) . 10012, //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '1' . date('YmdHis', time()) . '10012', //交易号,一般充值接口用到【可选一般用于充值验证】
'status' => 2 //创建充值
);
//执行
$result = money::init(1, $data, 'OnlineRecharge');
```
2.假如已经验证了充值成功,更新充值状态
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'Alipay', //操作渠道
'uid' => 10012, //账号ID
'cardb' => '100001', //流入账户 没有为空(自动创建)
'pno' => '1' . date('YmdHis', time()) . '10012', //交易号,一般充值接口用到【可选一般用于充值验证】
'status' => 1,//充值状态
'logid' => 186//交易流水ID,通过第一步 $result 获得
);
//执行
$result = money::init(1, $data, 'OnlineRecharge');
```
## :-: 资金扣费
说明:在指定扣除锁定资金时,锁定资金不足连同流动资金补全。
示例:
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'Admin', //操作渠道
'uid' => 10012, //账号ID
'carda' => '100001', //流出账户 除充值外必填
'type' => 1, //1:扣除流动资金2:扣除冻结资金
'info' => '系统扣除资金账户[100001]服务费1 CNY', //操作说明
'sno' => '2' . date('YmdHis', time()) . 10012, //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '2' . date('YmdHis', time()) . '10012', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(2, $data, 'AdminDeduction');
```
## :-: 资金转账
转账前系统会进行效验,转账资金是否充足;成功返回数字2,失败false
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '2', //金额
'mtype' => 'Admin', //操作渠道
'uid' => 10010, //账号ID
'carda' => '100001', //流出账户
'to' => 10012, //转给谁的ID
'cardb' => '100002', //流入账户 不填则为默认对应货币账户
'sno' => '3' . date('YmdHis', time()) . '10012', //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '3' . date('YmdHis', time()) . '10012', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(3, $data, 'Transfer');
```
## :-: 冻结资金
流动资金=>冻结资金,在没有扣费前进行占用冻结。
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'System', //操作渠道
'uid' => 10012, //账号ID
'carda' => 100001, //流出账户
'info' => '资金账户[100001],提现到收款账户[100045]进行冻结1CNY', //操作说明
'sno' => '4' . date('YmdHis', time()) . 10012, //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '4' . date('YmdHis', time()) . 10012, //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(4, $data, 'UserWithdraw');
```
## :-: 资金解冻
冻结资金=>流动资金。
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'System', //操作渠道
'uid' => 10012, //账号ID
'carda' => 100001, //流出账户
'info' => '资金账户[100001],系统管理员[10000]人工操作解冻。', //操作说明
'sno' => '5' . date('YmdHis', time()) . 10012, //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '5' . date('YmdHis', time()) . 10012, //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(5, $data, 'AdminThaw');
```
## :-: 资金提现
提现有两种方式
1.直接提现:主要用于支付接口实时到账
免冻结需提现资金,直接转账到对应的首款账户。(这一步需另外操作;详情见:支付接口)
**示例代码**
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'Alipay', //操作渠道
'uid' => 10012, //账号ID
'carda' => '100001', //流出账户 除充值外必填
'cardb' => '17', //流入账户
'type' => 1, //1:扣除流动资金2:扣除冻结资金
'info' => '从资金账户[100001]提现到收款账户[17]1CNY', //操作说明
'sno' => '6' . date('YmdHis', time()) . 10012, //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '6' . date('YmdHis', time()) . '10012', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(6, $data, 'AdminWithdraw');
```
2.审核提现:主要用于人工处理提现
首先提交提现申请(资金冻结)
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'System', //操作渠道
'uid' => 10012, //账号ID
'carda' => 100001, //流出账户
'info' => '资金账户[100001],提现到收款账户[100045]进行冻结1CNY', //操作说明
'sno' => '4' . date('YmdHis', time()) . 10012, //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '4' . date('YmdHis', time()) . 10012, //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(4, $data, 'UserWithdraw');
```
然后后台审核提现
通过提现
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'Admin', //操作渠道
'uid' => 10012, //账号ID
'carda' => '100001', //流出账户 除充值外必填
'cardb' => '17', //流入账户
'type' => 2, //1:扣除流动资金2:扣除冻结资金
'info' => '从资金账户[100001]提现到收款账户[17]1CNY', //操作说明
'sno' => '6' . date('YmdHis', time()) . 10012, //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '6' . date('YmdHis', time()) . '10012', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(6, $data, 'AdminWithdraw');
```
收款账户有问题,原路返回为流动资金
拒绝提现(资金解冻)
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'System', //操作渠道
'uid' => 10012, //账号ID
'carda' => 100001, //流出账户
'info' => '由于收款账户不正确,资金账户[100001],系统管理员[10000]退回提现。', //操作说明
'sno' => '5' . date('YmdHis', time()) . 10012, //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '5' . date('YmdHis', time()) . 10012, //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(5, $data, 'AdminThaw');
```
## :-: 资金兑换
积分兑换需配合积分功能
**示例1:** 积分兑换货币
首先扣除积分
```
参考积分功能
```
然后增加货币
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'System', //操作渠道
'uid' => 10012, //账号ID
'cardb' => '100001', //流入资金账户
'type' => 2, // 2:积分兑换=>货币
'info' => '积分兑换=>货币', //操作说明
'sno' => '7' . date('YmdHis', time()) . 10012, //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '7' . date('YmdHis', time()) . '10012', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(7, $data, 'MoneyToIntegral');
```
**示例2:** 货币兑换积分
首先扣除货币
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'System', //操作渠道
'uid' => 10012, //账号ID
'carda' => '100001', //流入资金账户
'type' => 1, // 1:兑出 货币=>兑换积分 (减少货币)
'info' => '货币=>兑换积分', //操作说明
'sno' => '7' . date('YmdHis', time()) . 10012, //交易流水编码 格式:第1位(资金类型)第2-14位(年月日时分秒)第15位以后(对象ID)【可选一般用于充值验证】
'pno' => '7' . date('YmdHis', time()) . '10012', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(7, $data, 'IntegralToMoney');
```
然后充值积分
```
参考积分功能
```
**示例3:** 不同货币互换
货币与货币兑换,需参考 设置中的 货币兑换汇率
如果是相同货币直接进行转账形式操作
```
$data = array(
'money' => '1', //所兑换出金额
'mtype' => 'System', //操作渠道
'uid' => 10012, //账号ID
'carda' => '100001', //流出资金账户 兑换出
'cardb' => '100002', //流入资金账户 兑换入
'type' => 3, // 3:货币互换
);
//执行
$result = money::init(7, $data, 'MoneyToMoney');
```
- 关于CMSPRO
- 安装使用
- 首次使用
- 功能使用
- 系统后台
- 系统
- 系统配置
- 开发使用
- 基础学习
- php如何修改文件创建时间
- 类方法
- 系统框架
- 系统入口框架
- URL处理
- 自动附加封装类、函数入口
- 内置应用
- GET与POST
- 字符控制
- 多语言使用
- 数据库使用
- 页面跳转
- 数组控制
- 时间相关
- 文件操作
- 获取系统设置的应用目录
- IP获取与解析
- 数据分页
- 内置插件
- 短信发送
- 信息模板
- 消息操作
- 消息操作(旧)
- 资金操作
- 优惠券
- 积分操作
- 服务器接口
- 宝塔接口
- 域名接口
- 西部数据
- whois查询
- 事件管理器
- 规则管理器
- 电子邮件
- 常用代码
- 数据获取与分页
- 模型自动构建表单
- 排版布局
- 常用样式
- 编辑表单
- tab选项卡
- JS相关
- 插件
- 钩子
- 高级进阶
- 消息和模板组合使用
- API接口
- 充值支付
- 积分充值兑换
- 短信验证码
- 邮箱验证码
- 微信消息模板
- 获取货币信息
- 获取积分信息
- 商品操作
- 信息反馈
- LayIM相关
- 自定义一级URL
- 自定义功能
- 用户中心
- 网站管理
- 模板引擎v2
- 基础学习
- 变量输出
- 使用函数
- 运算符
- 原样输出
- 模板注释
- 模板继承
- 包含文件
- 内置标签
- 循环标签
- 比较标签
- 条件判断
- 资源文件加载
- 标签嵌套
- 原生PHP
- 定义标签
- 功能应用
- 站点统计
- 数据列表
- 单条数据
- 功能动作
- 账户资金
- 账户积分
- 网站导航
- 从零使用
- 结构了解
- 基础工作
- 模板引擎v1
- 模板标签
- 导航菜单
- 获取数据列表
- 获取单条数据
- 广告以及连接
- if判断
- 判断是否登录
- 判断系统变量
- 自定义判断
- 常规判断
- 模板表单
- 高级使用
- 前后分离v1
- 通用
- 支付
- 积分
- 论坛
- 下载
- 微信
- 云服务SDK开发
- 通用请求