## :-: **【注】:此文档不兼容成品搭建系统v1.x 版本**
### 资金类型
`充值1 扣费2 转账3 冻结4 解冻5 提现6`
# 精确计算资金计算
精度 默认为小数点后两位(其它位数参考 `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
```
# 充值
```
/**
* 充值操作
* 货币类别 人民币CNY 美元USD 欧元EUR 日元JPY 英镑GBP (这些类别都可以再系统后台添加)
* 操作渠道 后台Admin 系统System 支付宝Alipay 微信WeChat QQ钱包QQwallet 贝宝PayPal (这些渠道都可以再系统后台添加)
* 操作对象 用户user 商家seller
*/
```
### 通用充值
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '100.5', //金额
'mtype' => 'Admin', //操作渠道
'target' => 'user', //操作对象
'id' => '1', //操作对象ID
'info' => '通过后台进行充值', //操作说明
'sno' => '11'. date('YmdHis', time()).'1', //交易流水编码 格式:第1位(1用户2商家)第2位(资金类型)第3-17位(年月日时分秒)第18+位(对象ID) 【可选一般用于充值验证】
'pno' => '11'. date('YmdHis', time()).'1', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(1, $data,'');
```
### 渠道充值
`$result = money::init(1, $data,'AdminRecharge');`
`AdminRecharge` 为渠道标识
### 在线充值
```
/**
* 创建充值
* 必须传入状态 'status'=>2
*/
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '100.5', //金额
'mtype' => 'Alipay', //操作渠道
'target' => 'user', //操作对象
'id' => '1', //操作对象ID
'info' => '通过后台进行充值', //操作说明
'sno' => '11'. date('YmdHis', time()).'1', //交易流水编码 格式:第1位(1用户2商家)第2位(资金类型)第3-17位(年月日时分秒)第18+位(对象ID) 【可选一般用于充值验证】
'pno' => '11'. date('YmdHis', time()).'1', //交易号,一般充值接口用到【可选一般用于充值验证】
'status'=>2
);
//执行
$result = money::init(1, $data,'OnlineRecharge');
/**
* 充值成功
* 必须传入 logid 资金记录ID
*/
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '100.5', //金额
'mtype' => 'Alipay', //操作渠道
'target' => 'user', //操作对象
'id' => '1', //操作对象ID
'info' => '通过后台进行充值', //操作说明
'sno' => '11'. date('YmdHis', time()).'1', //交易流水编码 格式:第1位(1用户2商家)第2位(资金类型)第3-17位(年月日时分秒)第18+位(对象ID) 【可选一般用于充值验证】
'pno' => '11'. date('YmdHis', time()).'1', //交易号,一般充值接口用到【可选一般用于充值验证】
'status'=>1,
'logid'=>45
);
//执行
$result = money::init(1, $data,'OnlineRecharge');
```
# 扣费
```
/**
* 扣费操作
* 货币类别 人民币CNY 美元USD 欧元EUR 日元JPY 英镑GBP (这些类别都可以再系统后台添加)
* 操作渠道 后台Admin 系统System 支付宝Alipay 微信WeChat QQ钱包QQwallet 贝宝PayPal (这些渠道都可以再系统后台添加)
* 操作对象 用户user 商家seller
*/
```
### 通用扣费
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '100.5', //金额
'mtype' => 'Admin', //操作渠道
'target' => 'user', //操作对象
'id' => '1', //操作对象ID
'type' => '', //扣费类型 为空扣除流动资金其它扣除冻结资金
'info' => '通过后台进行扣费', //操作说明
'sno' => '11'. date('YmdHis', time()).'1', //交易流水编码 格式:第1位(1用户2商家)第2位(资金类型)第3-17位(年月日时分秒)第18+位(对象ID)【可选一般用于充值验证】
'pno' => '11'. date('YmdHis', time()).'1', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(2, $data,'');
```
### 渠道扣费
`$result = money::init(2, $data,'AdminDeduction');`
`AdminDeduction` 为渠道标识
# 冻结
```
/**
* 冻结操作
* 货币类别 人民币CNY 美元USD 欧元EUR 日元JPY 英镑GBP (这些类别都可以再系统后台添加)
* 操作渠道 后台Admin 系统System 支付宝Alipay 微信WeChat QQ钱包QQwallet 贝宝PayPal (这些渠道都可以再系统后台添加)
* 操作对象 用户user 商家seller
*/
```
### 通用冻结
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'Admin', //操作渠道
'target' => 'user', //操作对象
'id' => '1', //操作对象ID
'info' => '通过后台进行冻结', //操作说明
'sno' => '14'. date('YmdHis', time()).'1', //交易流水编码 格式:第1位(1用户2商家)第2位(资金类型)第3-17位(年月日时分秒)第18+位(对象ID)【可选一般用于充值验证】
'pno' => '14'. date('YmdHis', time()).'1', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(4, $data,'');
```
### 渠道冻结
`$result = money::init(2, $data,'AdminFreeze');`
`AdminFreeze` 为渠道标识
# 解冻
```
/**
* 解冻操作
* 货币类别 人民币CNY 美元USD 欧元EUR 日元JPY 英镑GBP (这些类别都可以再系统后台添加)
* 操作渠道 后台Admin 系统System 支付宝Alipay 微信WeChat QQ钱包QQwallet 贝宝PayPal (这些渠道都可以再系统后台添加)
* 操作对象 用户user 商家seller
*/
```
### 通用解冻
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'Admin', //操作渠道
'target' => 'user', //操作对象
'id' => '1', //操作对象ID
'info' => '通过后台进行冻结', //操作说明
'sno' => '15'. date('YmdHis', time()).'1', //交易流水编码 格式:第1位(1用户2商家)第2位(资金类型)第3-17位(年月日时分秒)第18+位(对象ID)【可选一般用于充值验证】
'pno' => '15'. date('YmdHis', time()).'1', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(5, $data,'');
```
### 渠道解冻
`$result = money::init(5, $data,'AdminFreeze');`
`AdminFreeze` 为渠道标识
# 提现
```
/**
* 提现操作
* 货币类别 人民币CNY 美元USD 欧元EUR 日元JPY 英镑GBP (这些类别都可以再系统后台添加)
* 操作渠道 后台Admin 系统System 支付宝Alipay 微信WeChat QQ钱包QQwallet 贝宝PayPal (这些渠道都可以再系统后台添加)
* 操作对象 用户user 商家seller
*/
```
### 通用提现
```
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'Admin', //操作渠道
'target' => 'user', //操作对象
'id' => '1', //操作对象ID
'info' => '通过后台提现扣费', //操作说明
'sno' => '16'. date('YmdHis', time()).'1', //交易流水编码 格式:第1位(1用户2商家)第2位(资金类型)第3-17位(年月日时分秒)第18+位(对象ID)【可选一般用于充值验证】
'pno' => '16'. date('YmdHis', time()).'1', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(6, $data,'AdminWithdraw');
```
### 渠道提现
`$result = money::init(6, $data,'AdminWithdraw');`
`AdminWithdraw` 为渠道标识
# 转账
```
/**
* 转账操作
* 货币类别 人民币CNY 美元USD 欧元EUR 日元JPY 英镑GBP (这些类别都可以再系统后台添加)
* 操作渠道 后台Admin 系统System 支付宝Alipay 微信WeChat QQ钱包QQwallet 贝宝PayPal (这些渠道都可以再系统后台添加)
* 操作对象 用户user 商家seller
*/
$data = array(
'ctype' => 'CNY', //货币类别
'money' => '1', //金额
'mtype' => 'System', //操作渠道
'target' => 'user', //操作对象
'id' => '1', //操作对象ID
'to' => '1', //转给谁的ID
'totarget' => 'user', //转给类型 user或seller
'info' => '在线转账', //操作说明
'sno' => '13' . date('YmdHis', time()) . '1', //交易流水编码 格式:第1位(1用户2商家)第2位(资金类型)第3-17位(年月日时分秒)第18+位(对象ID)【可选一般用于充值验证】
'pno' => '13' . date('YmdHis', time()) . '1', //交易号,一般充值接口用到【可选一般用于充值验证】
);
//执行
$result = money::init(3, $data, 'Transfer');
```
*****
### 延申功能【点卡相关操作】
因点卡分可提现与仅消费类,在操作仅消费类点卡其中 【充值】 【扣费】 【冻结】【 解冻】 【转账】 等操作中需要在 `pno`交易号 中含有 **card** 就会处理不可提现资金
参考 Demo
**充值**
```
//检查点卡是否可提现
if ($row['types'] == 1) {
$pno = 'card';
} else {
$pno = '11';
}
$data = array(
'ctype' => $row['mtype'], //货币类别
'money' => $row['money'], //金额
'mtype' => 'KeyCard', //操作渠道
'target' => 'user', //操作对象
'id' => $_SESSION['user']['id'], //操作对象ID
'tid' => $row['id'], //所操作的项目编号
'info' => '通过系统卡密充值', //操作说明
'sno' => '11' . date('YmdHis', time()) . '1', //交易流水编码 格式:第1位(1用户2商家)第2位(资金类型)第3-17位(年月日时分秒)第18+位(对象ID)
'pno' => $pno . date('YmdHis', time()) . '1', //交易号,一般充值接口用到
);
$result = money::init(1, $data, 'CardRecharge');
```
**提现**
```
//查询当前账户资金是否充足
$money = money::priceinfo($_SESSION['user']['id'], 'u', null, $_POST['currency']);
if ($money['money'] >= $_POST['money']) {
//查询点卡金额使用
$card = money::cpriceinfo($_SESSION['user']['id'], 'u', null, $_POST['currency']);
$smoney = money::pricecalc($money['money'], '-', $card['money']); //除去点卡剩余金额
if ($smoney >= $money['money']) {
} else {
if ($smoney == 0) {
$info = '此货币是不可提现点卡所得,只能消费不可以提现!';
} else {
$info = '此货币提现含有不可提现点卡充值!您只能提现' . $smoney . $_POST['currency'];
}
}
if ($smoney < $_POST['money']) {
app::go('', $info, 3, 2);
}
}else{
app::go('', '此货币当前余额不足!', 1, 2);
}
```
*****
高级开发指引 [获取用户&商家各种资金信息](获取用户商家信息.md)