pageList($condition, $field, $order, $page, $page_size); return $this->success($res); } public function getDividemoneyAccountInfo($condition, $field = '*') { $res = model('dividemoney_account')->getInfo($condition, $field); return $this->success($res); } /*** * 绑定支付宝账号 * @param $data * @return void */ public function BingAlipayAccount($site_id, $data, $type = 'userId') { $receiver_list['out_request_no'] = date('YmdHis') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT); $receiver_list['receiver_list'][] = [ 'type' => $type, 'account' => $data['account'], 'name' => $data['realname'], ]; $micode = new MinCode($site_id); $res = $micode->requestApi('alipay.trade.royalty.relation.bind', $receiver_list)['alipay_trade_royalty_relation_bind_response']; if ($res['code'] != '10000') { return $this->error('', $res['sub_msg']); } else { $_where = [ ['site_id', '=', $site_id], ['is_platform', '=', 0], ['account', '=', $data['account']] ]; $arr = $this->where($_where)->find(); if ($arr) { $data['site_id'] = $site_id; $data['account_type'] = 'userId'; $data['is_platform'] = 0; $data['states'] = 1; $arr = model('dividemoney_account')->update($data, $_where); } else { $data['site_id'] = $site_id; $data['account_type'] = 'userId'; $data['is_platform'] = 0; $data['states'] = 1; $data['is_system'] = 0; $arr = model('dividemoney_account')->add($data); } return $this->success($arr); } } /*** * 绑定微信账号 * @param $data * @return void */ public function BingWechatAccount($site_id, $data, $relation_type = 'PARTNER') { $PayModel = new PayModel(1, $site_id, 'v3'); $model = $PayModel->getApp(); $config = $PayModel->getPayConfig(); $BodyData = [ 'appid' => $config['app_id'], 'type' => $data['account_type'], 'account' => $data['account'], 'name' => $model->encryptor($data['realname']), 'relation_type' => $relation_type, ]; if ($config['is_isp']) { $BodyData['sub_appid'] = $config['sub_appid']; $BodyData['sub_mchid'] = $config['sub_mchid']; } try { $res = $model->requestApi('/v3/profitsharing/receivers/add', $BodyData); if ($res['code'] != 0) { return $this->error('', $res['message']); } else { $_where = [ ['site_id', '=', $site_id], ['is_platform', '=', 0], ['account', '=', $data['account']] ]; $arr = $this->where($_where)->find(); if ($arr) { $data['site_id'] = $site_id; $data['is_platform'] = 0; $data['states'] = 1; model('dividemoney_account')->update($data, $_where); } else { $data['site_id'] = $site_id; $data['is_platform'] = 0; $data['states'] = 1; $data['is_system'] = 0; model('dividemoney_account')->add($data); } return $this->success(); } } catch (\Exception $e) { return $this->error('', $e->getMessage()); } } /*** * 畅捷分账绑定 * @param $site_id * @param $data * @param $relation_type * @return array */ public function BingCyPayAccount($site_id, $data, $relation_type = 'PARTNER') { $PayModel = new cyPayModel($site_id); $out_request_no = date('YmdHis') . str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT); $receiver_list = [ [ 'receiver_name' => $data['realname'], 'receiver_account' => $data['account'], ] ]; try { $res = $PayModel->relationBindAccounts($out_request_no, $receiver_list); if ($res['code'] != 0) { return $this->error('', $res['message']); } else { $_where = [ ['site_id', '=', $site_id], ['account', '=', $data['account']] ]; $arr = $this->where($_where)->find(); if ($arr) { $data['site_id'] = $site_id; $data['states'] = 1; $data['refuse'] = $out_request_no; model('dividemoney_account')->update($data, $_where); } else { $data['refuse'] = $out_request_no; $data['site_id'] = $site_id; $data['states'] = 1; model('dividemoney_account')->add($data); } return $this->success(); } } catch (\Exception $e) { return $this->error('', $e->getMessage()); } } /*** * 绑定到会员 * @param $site_id * @param $data * @param $channel_type * @return array * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\DbException * @throws \think\db\exception\ModelNotFoundException */ public function BingMemberAccount($site_id, $data, $channel_type = 'member') { $_where = [ ['site_id', '=', $site_id], ['account', '=', $data['member_id']], ['account_type', '=', 'balance'] ]; $id = $data['id'] ?? 0; if (empty($data['reason'])) { $data['reason'] = '商家自定义分账'; } if ($id == 0) { $data['reason'] .= $data['account']; } else { $_where = [ ['id', '=', $id], ['site_id', '=', $site_id], ]; } $data['account_type'] = 'balance'; $data['account'] = $data['member_id']; $data['update_time'] = time(); $arr = $this->where($_where)->find(); if ($arr) { $data['site_id'] = $site_id; $data['states'] = 1; $res = model('dividemoney_account')->update($data, $_where); } else { $data['site_id'] = $site_id; $data['states'] = 1; $data['create_time'] = time(); $data['update_time'] = time(); $res = model('dividemoney_account')->add($data); } return $this->success($res, '绑定成功'); } /*** * 计算分账佣金 * @param $param * @return array|void */ public function getBingAccountList($param = []) { if (isset($param['site_id']) && isset($param['pay_type'])) { $site_id = $param['site_id']; $pay_type = $param['pay_type']; $where = [ ['site_id', '=', $site_id], ['is_platform', '=', 0], ['states', '=', 1], ['bonus_type', '<>', 'store'], ]; $Account = model('dividemoney_account')->getList(array_merge($where, [['channel_type', '=', 'member']]), '*', 'create_time desc'); if ($pay_type == 'wechatpay') { $where[] = ['channel_type', 'in', ['wechat', 'weapp', 'wechatpay']]; } else if ($pay_type == 'alipay') { $where[] = ['channel_type', 'in', ['alipay', 'aliapp']]; } else if (in_array($pay_type, ['cywechatpay', 'cyalipay'])) { $where[] = ['channel_type', '=', 'cypay']; } else if ($Account) { $where[] = ['id', 'notin', array_column($Account, 'id')]; } $AccountPay = model('dividemoney_account')->getList($where, '*', 'create_time desc'); $Account = array_merge($Account, $AccountPay); if ($Account) { $config_model = new Config(); $info = $config_model->getConfig($param['site_id']); $is_divide = $info['data']['value']['is_divide']; $accounts = []; foreach ($Account as $k => $v) { $pay_money = $param['pay_money']; if ($v['account_type'] == 'balance') { $pay_money += $param['balance_money']; } if ($v['commission_type'] == 'cost') { $cost_money = model('order_goods')->getColumn(['order_id' => $param['order_id'], 'site_id' => $param['site_id']], 'cost_price,price', 'order_goods_id'); $pay_money = 0; foreach ($cost_money as $k1 => $item) { if ($item['cost_price'] <= 0 || $item['price'] <= $item['cost_price']) { $pay_money += $item['price']; } else if ($item['cost_price'] / $item['price'] < 0.2) { $pay_money += $item['price'] * 0.2; } else { $pay_money += $item['cost_price']; } } } if ($v['is_system']) { $accounts[] = $this->getMoneyArr($param, $v, $pay_money, $v['divide_rate'], 3, '营运佣金'); } else if ($is_divide == 1) { $accounts[] = $this->getMoneyArr($param, $v, $pay_money, $v['divide_rate'], $v['is_platform'], $v['reason'] ?: '商家自定义分账'); } } return $accounts; } } } /*** * 整理数据 * @param $data * @param $ag_site_id代理商 * @param $price 产品价格 * @param $fee_commission 费率 * @param $reason 备注 * @return array */ private function getMoneyArr($data, $accInfo, $price, $fee_commission, $platform_type = 2, $reason = '服务商服务费') { if ($accInfo['commission_type'] == 'fixfee') { $money = $fee_commission; } else { $money = $price * $fee_commission / 100; if ($money < 0.01) { $money = 0.01; } } //判断是否按产品抽佣 $acc = [ 'site_id' => $accInfo['site_id'], 'ag_site_id' => $accInfo['ag_site_id'], 'is_platform' => $platform_type, 'order_id' => $data['order_id'], 'member_id' => $data['member_id'], 'out_trade_no' => $data['out_trade_no'], 'trade_no' => $data['trade_no'] ?? '', //订单号 'is_video_number' => $data['is_video_number'] ?: 0, 'fee_commission' => $fee_commission, 'pay_money' => $price,//支付金额, 'amount' => $money, 'realname' => $accInfo['realname'], 'account' => $accInfo['account'], 'account_type' => $accInfo['account_type'], 'channel_type' => $accInfo['channel_type'], 'promotion_type' => $data['promotion_type'], 'reason' => $reason ]; if ($money <= 0 || !$acc['account'] || !$acc['realname']) { //未设置账号不分佣 $acc = []; } return $acc; } /*** * 获取绑定对应商户 * @param $site_id * @param $pay_type * @return array */ public function getBingAccount($site_id, $pay_type = '') { $where = [ ['site_id', '=', $site_id], ['is_platform', '=', 0], ['states', '=', 1], ]; if ($pay_type == 'wechatpay') { $where[] = ['channel_type', 'in', ['wechat', 'weapp', 'wechatpay']]; } else if ($pay_type == 'alipay') { $where[] = ['channel_type', 'in', ['alipay', 'aliapp']]; } else { return []; } $res = model('dividemoney_account')->getList($where, '*', 'create_time desc'); if ($res) { $accounts = []; foreach ($res as $k => $v) { if ($pay_type == 'wechatpay') { $alipay_account_name = ''; $settlement_alipay_account = ''; $wecaht_account_name = $v['realname']; $settlement_wecaht_mch_id = $v['account']; } else if ($pay_type == 'alipay') { $alipay_account_name = $v['realname']; $settlement_alipay_account = $v['account']; $wecaht_account_name = ''; $settlement_wecaht_mch_id = ''; } $accounts[] = [ 'is_commission' => 1, 'realname' => $v['realname'], 'mobile' => '', 'alipay_account_name' => $alipay_account_name, 'settlement_alipay_account' => $settlement_alipay_account, 'wecaht_account_name' => $wecaht_account_name, 'settlement_wecaht_mch_id' => $settlement_wecaht_mch_id, 'fee_commission' => $v['divide_rate'], 'is_platform' => 0, 'reason' => $v['reason'] ]; } return $accounts; } else { return []; } } public function getDivideList($where, $field = '*', $order = 'id desc') { $list = model('dividemoney_account')->getList($where, $field, $order); return $list; } /*** * 删除 * @param $condition * @return int */ public function deleteDividemoneyAccount($condition) { $res = model('dividemoney_account')->delete($condition); return $this->success($res); } }