🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 资金类型说明 `充值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'); ```