| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549 | <?php/** * Created by PhpStorm. * User: tandunzhao * Date: 2017/11/22 * Time: 下午3:23 */namespace App\Http\Controllers\Manage\Finance;use App\Http\Controllers\Manage\Finance\Transformers\PaymentDetailTransformer;use App\Http\Controllers\Manage\Finance\Transformers\PaymentTransformer;use App\Libs\PayHelper;use App\Modules\Channel\Services\ChannelService;use App\Modules\Finance\Models\FinanceMerchantStat;use App\Modules\Finance\Models\LiquidatedStat;use App\Modules\Finance\Services\CashAccountService;use App\Modules\Finance\Services\FinanceMerchantStatService;use App\Modules\Finance\Services\FinancialConfigService;use App\Modules\Finance\Services\LiquidatedStatService;use App\Modules\Finance\Services\PaymentService;use App\Modules\Finance\Services\WithdrawCashService;use Illuminate\Http\Request;use DB;class PaymentController extends BaseController{    /**     * @apiDefine Finance 结算提现模块     */    /**     * @apiVersion 1.0.0     * @apiDescription 创建打款信息     * @api {POST} addPayment 创建打款信息     * @apiGroup Finance     * @apiName addPayment     * @apiParam   {Number}  withdraw_cash_id 提现id.     * @apiParam   {Number}  amount 打款金额.     * @apiParam   {String}  [remark] 备注说明.     * @apiParam   {String}  [source] 打款通道[tl, ll].     * @apiSuccessExample {json} Success-Response:     *     *     {     *         "code": 0,     *         "msg": "",     *         "data":{     *              }     *     }     */    function add_payment(Request $request) {        $withdraw_cash_id = $request->has('withdraw_cash_id') ? $request->input('withdraw_cash_id') : '';        if(!is_numeric($withdraw_cash_id)) {            return response()->error("PARAM_ERROR");        }        $amount = $request->has('amount') ? $request->input('amount') : '';        if(!is_numeric($amount) || (float)$amount <= 0) {            return response()->error("PARAM_ERROR");        }//        $userId = $request->has('user_id') ? $request->input('user_id') : '';//        if(!is_numeric($userId)) {//            return response()->error("PARAM_ERROR");//        }        $userId = $this->getLoginUserId();        $remark = $request->has('remark') ? $request->input('remark') : '';        $withdrawCash = WithdrawCashService::getWithdrawCash($withdraw_cash_id);        if(empty($withdrawCash)) {            return response()->error("PARAM_ERROR");        }        //对公 走手动打款        if($withdrawCash['is_company'] == 1) {            return response()->error("PAYMENT_AUTO_NOT_OPEN");        }        //已打款,判断        if(WithdrawCashService::isEditWithdrawCashStatus($withdraw_cash_id)) {            return response()->error("PAYMENT_WITHDRAW_MONEY_TOO");        }        //判断打款钱核对   提现金额 - 手续费 = 实际打款金额        $money = (float)$withdrawCash['amount'] - (float)$withdrawCash['tallage'];        if($amount != $money) {            return response()->error("PAYMENT_WITHDRAW_MONEY");        }        $channelId = $withdrawCash['distribution_channel_id'];        //判断渠道是否冻结        if(FinancialConfigService::isFrozenDistributionChannel($channelId)) {            return response()->error("WITHDRAW_CASH_AMOUNT_FROZEN");        }        //判断账户是否已经设置        if(!CashAccountService::isCashAccountExits($channelId)) {            return response()->error("WITHDRAW_CASH_AMOUNT_ACCOUNT");        }        //TODO 先关闭自动打款        if(!env('PAYMENT_AUTO_PAY_ON')) {            return response()->error("PAYMENT_AUTO_NOT_OPEN");        }        $isTD = 0;        $source = $request->has('source') ? $request->input('source') : '';        if ("tl" == $source || "ll" == $source) {            if("tl" == $source) {                //通联支付通道账户                $tonglianpayLiquidatedStatData = LiquidatedStatService::getLiquidatedStatSingleBySource(config('common.tonglianpay'));                if(!empty($tonglianpayLiquidatedStatData) && $tonglianpayLiquidatedStatData['account_balance_amount_day'] > ($money - 1)) {                    //判断通联支付通道钱余额大于 提现金额    需要算上每次 手续费 【1块钱】                    $isTD = 2;                }            }            if("ll" == $source) {                //连连支付通道账户                $lianlianpayLiquidatedStatData = LiquidatedStatService::getLiquidatedStatSingleBySource(config('common.lianlianpay'));                if(!empty($lianlianpayLiquidatedStatData) && $lianlianpayLiquidatedStatData['account_balance_amount_day'] > ($money - 1)) {                    //判断连连支付通道钱余额大于 提现金额    需要算上每次 手续费 【1块钱】                    $isTD = 1;                }            }        } else {            //通联支付通道账户            $tonglianpayLiquidatedStatData = LiquidatedStatService::getLiquidatedStatSingleBySource(config('common.tonglianpay'));            if($isTD == 0) {                //连连通道钱余额不走,判断通联                if(!empty($tonglianpayLiquidatedStatData) && $tonglianpayLiquidatedStatData['account_balance_amount_day'] > ($money - 1)) {                    //判断通联支付通道钱余额大于 提现金额    需要算上每次 手续费 【1块钱】                    $isTD = 2;                }            }            //连连支付通道账户            $lianlianpayLiquidatedStatData = LiquidatedStatService::getLiquidatedStatSingleBySource(config('common.lianlianpay'));            if($isTD == 0) {                //默认看连连通道余额                if(!empty($lianlianpayLiquidatedStatData) && $lianlianpayLiquidatedStatData['account_balance_amount_day'] > ($money - 1)) {                    //判断连连支付通道钱余额大于 提现金额    需要算上每次 手续费 【1块钱】                    $isTD = 1;                }            }        }        if($isTD == 0) {            //连连支付通道,余额不足            //通联支付通道,余额不足            // 返回,支付通道余额不足,请走人工打款            return response()->error("PAYMENT_CHANNEL_AMOUNT_WITHOUT");        }        //正式环境,线上为 2        if(env('PAYMENT_AUTO_PAY_TEST') == 2) {            if($isTD == 1) {                //连连支付通道打款                PaymentService::makeThreeSourcePayment($userId, $withdraw_cash_id, (float)$amount, $remark, $lianlianpayLiquidatedStatData);                return response()->success();            }            if($isTD == 2) {                //通连支付通道打款                PaymentService::makeThreeSourcePayment($userId, $withdraw_cash_id, (float)$amount, $remark, $tonglianpayLiquidatedStatData);                return response()->success();            }        } else {            //测试环境直接修改状态为 成功            $tradeNo = "测试_".$channelId;            $pay_merchant_source = "测试";            if($isTD == 1) {                $pay_merchant_source = $lianlianpayLiquidatedStatData['pay_merchant_source'];            }            if($isTD == 2) {                $pay_merchant_source = $tonglianpayLiquidatedStatData['pay_merchant_source'];            }            //测试环境,直接走逻辑打款成功            $payment = PaymentService::addPayment($withdraw_cash_id, $amount, $remark, $pay_merchant_source, $tradeNo, WithdrawCashService::getWithdrawCashStatusStr(32), "测试", $withdrawCash['is_company'], 0);            //更新单个第三方通道可打款金额            FinanceMerchantStatService::createOrUpdate($channelId, $pay_merchant_source, -$amount);            //更新当前渠道当天当前支付通道可打款余额            LiquidatedStatService::updateAccountBalanceAmountDay($pay_merchant_source, -$amount);            //修改状态            WithdrawCashService::updateWithdrawCashStatus($withdraw_cash_id, $userId, 32, $remark, $tradeNo);            return response()->success();        }        //其他,走人工打款        return response()->error("PAYMENT_CHANNEL_AMOUNT_WITHOUT");    }    /**     * @apiVersion 1.0.0     * @apiDescription 创建人工打款信息     * @api {POST} addPaymentPersonMade 创建人工打款信息     * @apiGroup Finance     * @apiName addPaymentPersonMade     * @apiParam   {Number}  withdraw_cash_id 提现id.     * @apiParam   {Number}  amount_person 人工打款金额     * @apiParam   {String}  trade_no 银行交易流水号.     * @apiParam   {String}  [remark] 备注说明.     * @apiSuccessExample {json} Success-Response:     *     *     {     *         "code": 0,     *         "msg": "",     *         "data":{     *              }     *     }     */    function add_paymentPersonMade(Request $request) {        $withdraw_cash_id = $request->has('withdraw_cash_id') ? $request->input('withdraw_cash_id') : '';        if(!is_numeric($withdraw_cash_id)) {            return response()->error("PARAM_ERROR");        }//        $userId = $request->has('user_id') ? $request->input('user_id') : '';//        if(!is_numeric($userId)) {//            return response()->error("PARAM_ERROR");//        }        $userId = $this->getLoginUserId();        $amount_person = $request->has('amount_person') ? $request->input('amount_person') : '';        if(!is_numeric($amount_person)) {            return response()->error("PARAM_ERROR");        }        $trade_no = $request->has('trade_no') ? $request->input('trade_no') : '';        if(empty($trade_no)) {            return response()->error("PARAM_ERROR");        }        $remark = $request->has('remark') ? $request->input('remark') : '';        $remark = "[人工打款]{".$remark."}";        $withdrawCash = WithdrawCashService::getWithdrawCash($withdraw_cash_id);        if(empty($withdrawCash)) {            return response()->error("PARAM_ERROR");        }        //已打款,判断        if(WithdrawCashService::isWithdrawCashStatusSuccess($withdraw_cash_id)) {            return response()->error("PAYMENT_WITHDRAW_MONEY_TOO");        }        $channelId = $withdrawCash['distribution_channel_id'];        //判断渠道是否冻结        if(FinancialConfigService::isFrozenDistributionChannel($channelId)) {            return response()->error("ACCOUNT_FRONZEN");        }        //判断打款钱核对   提现金额 - 手续费 = 实际打款金额        $amount = (float)$withdrawCash['amount'] - (float)$withdrawCash['tallage'];        //人工打款成功        //Payment 插入人工        // WithdrawCashStatus        // Liquidation 人工 判断渠道支付通道余额,分别生成        // LiquidatedStat        PaymentService::makePersonMadePayment($userId, $withdraw_cash_id, $amount, $remark, $trade_no, $amount_person);        return response()->success();    }    /**     * @apiVersion 1.0.0     * @apiDescription 打款列表     * @api {GET} payments 打款列表     * @apiGroup Finance     * @apiName payments     * @apiParam   {Number}  [withdraw_cash_id] 提现id.     * @apiParam   {String}  [start_time] 开始时间(可不传)     * @apiParam   {String}  [end_time] 结束时间(可不传)     * @apiSuccess {Number}  id 打款 id.     * @apiSuccess {Number}  withdraw_cash_id 提现 id.     * @apiSuccess {Number}  amount 打款金额.     * @apiSuccess {String}  remark 备注     * @apiSuccess {String}  pay_time 打款时间     * @apiSuccessExample {json} Success-Response:     *     *     {     *         "code": 0,     *         "msg": "",     *         "data":{     *              "list": [     *                      {     *                          "id": 1,     *                          "withdraw_cash_id": 1,     *                          "amount": "1000.0000",     *                          "remark": "dfsdfssd",     *                          "pay_time": "2017-11-20 14:28:28"     *                      }     *                   ],     *                     "meta": {     *                           "total": 1,     *                           "per_page": 15,     *                           "current_page": 1,     *                          "last_page": 1,     *                          "next_page_url": "",     *                          "prev_page_url": ""     *                   }     *              }     *     }     */    function get_list(Request $request) {        $withdraw_cash_id = $request->has('withdraw_cash_id') ? $request->input('withdraw_cash_id') : '';        $start_time = $request->has('start_time') && !empty($request->input('start_time')) ? date('Ymd',strtotime($request->input('start_time'))) : '';        $end_time = $request->has('end_time') && !empty($request->input('end_time')) ? date('Ymd',strtotime($request->input('end_time'))) : '';        $end_time = self::getMaxDay($end_time);        $payments = PaymentService::getPaymentList($withdraw_cash_id, $start_time, $end_time);        return response()->pagination(new PaymentTransformer(), $payments);    }    /**     * @apiVersion 1.0.0     * @apiDescription 打款列表详情     * @api {GET} listPayments 打款列表详情     * @apiGroup Finance     * @apiName listPayments     * @apiParam   {Number}  [withdraw_cash_id] 提现id.     * @apiParam   {String}  [start_time] 开始时间(可不传)     * @apiParam   {String}  [end_time] 结束时间(可不传)     * @apiParam   {Number}  [distribution_channel_id] 渠道id.(可不传,获取所有渠道)     * @apiParam   {String}  [distribution_channel_name] 渠道名称.(可不传,获取所有渠道)     * @apiParam   {String}  [account_name] 账户名称     * @apiParam   {String}  [search_name] 搜索名称     * @apiParam   {Number}  [status] 状态 查看接口 api/getWithdrawCashStatus (可不传,获取所有状态)     * @apiParam   {Number}  [is_company] 0:对私, 1:对公司.(可不传,获取所有渠道)     * @apiSuccess {Number}  id 打款 id.     * @apiSuccess {Number}  withdraw_cash_id 提现 id.     * @apiSuccess {Number}  amount 打款金额.     * @apiSuccess {String}  remark 备注     * @apiSuccess {String}  pay_time 打款时间     * @apiSuccess {Number}  channel_id 渠道ID     * @apiSuccess {String}  channel_name 渠道名称     * @apiSuccess {String}  status 打款状态     * @apiSuccess {Number}  check_user_id 审核人ID     * @apiSuccess {String}  check_user_name 审核人名称     * @apiSuccess {String}  account_name 银行卡户主名称     * @apiSuccess {String}  identity_card 银行卡户主身份证     * @apiSuccess {String}  card_number 银行卡账号     * @apiSuccess {String}  account_bank 银行支行     * @apiSuccess {String}  bank 银行名称     * @apiSuccess {String}  province 银行地址     * @apiSuccessExample {json} Success-Response:     *     *     {     *         "code": 0,     *         "msg": "",     *         "data":{     *              "list": [     *                      {     *                           "id": 1,     *                           "withdraw_cash_id": 1,     *                           "amount": "1000.0000",     *                           "pay_time": "2017-11-20 14:28:28",     *                           "channel_id": 1,     *                           "channel_name": "渠道一",     *                           "status": "已打款",     *                           "remark": "哈哈哈,有钱",     *                           "check_user_id": 1,     *                           "check_user_name": "张大妈",     *                           "account_name": "宋晓",     *                           "identity_card": "33038119930901821X",     *                           "card_number": "6222520177654916",     *                           "account_bank": "钱江支行",     *                           "bank": "杭州银行",     *                           "province": "北京市"     *                      }     *                   ],     *                     "meta": {     *                           "total": 1,     *                           "per_page": 15,     *                           "current_page": 1,     *                          "last_page": 1,     *                          "next_page_url": "",     *                          "prev_page_url": ""     *                   }     *              }     *     }     */    function get_listDetail(Request $request) {        $distribution_channel_id = $request->has('distribution_channel_id') ? $request->input('distribution_channel_id') : '';        $distribution_channel_name = $request->has('distribution_channel_name') ? $request->input('distribution_channel_name') : '';        $withdraw_cash_id = $request->has('withdraw_cash_id') ? $request->input('withdraw_cash_id') : '';        $start_time = $request->has('start_time') && !empty($request->input('start_time')) ? date('Ymd',strtotime($request->input('start_time'))) : '';        $end_time = $request->has('end_time') && !empty($request->input('end_time')) ? date('Ymd',strtotime($request->input('end_time'))) : '';        $end_time = self::getMaxDay($end_time);        $account_name = $request->has('account_name') ? $request->input('account_name') : '';        $search_name = $request->has('search_name') ? $request->input('search_name') : '';        $status = $request->has('status') ? $request->input('status') : '';        $is_company = $request->has('is_company') ? $request->input('is_company') : '';        $params = [            'withdraw_cash_id'=>$withdraw_cash_id,            'channel_id'=>$distribution_channel_id,            'channel_name'=>$distribution_channel_name,            'start_date'=>$start_time,            'end_date'=>$end_time,            'account_name'=>$account_name,            'search_name'=>$search_name,            'is_company'=>$is_company,        ];        $payments = PaymentService::getPaymentDetailList($params, $status);        return response()->pagination(new PaymentDetailTransformer(), $payments);    }    /**     * 更新打款状态     * id 条目id     * status 状态(10:待打款)     * @param Request $request     * @return mixed     */    function updatePaymentStatus(Request $request)    {        $id = $request->has('id') ? $request->input('id') : '';        // $status = $request->has('status') ? $request->input('status') : '';        if (!$id) {            return response()->error("PARAM_EMPTY");        }        $status = WithdrawCashService::getWithdrawCashStatusStr(10);        $result = PaymentService::updateSimplePaymentStatus($id, $status);        if ($result) {            return response()->success();        } else {            return response()->error("HANDLE_FAILED");        }    }    function test_add_payment(Request $request)    {        $payType = "ALLINPAY";//        $transactionSerialNumber = date('YmdHis').mt_rand(10,99)."_1";//        $bankCode = "102";//        $bankName = '';//        $bankAccountNO = "6222031202001646388";//        $bankAccountName = "宋栋波";//        $amount = 0.01;//        $summary = "summary";//        $remark = "remark";//        $channelId = 1;//        $isCompany = 0;//        $resultPayData = PayHelper::pay($payType, $transactionSerialNumber, $bankCode, $bankName, $bankAccountNO, $bankAccountName, $amount, $summary, $remark, $channelId, $isCompany);//        $resultDataMsg = $remark;//        if(!empty($resultPayData) && !empty($resultPayData['msg'])) {//            $resultDataMsg = $resultDataMsg."_【".$resultPayData['msg']."】";//        }//        dd($transactionSerialNumber);////        dd($resultPayData);//        if(!empty($resultPayData) && $resultPayData['code'] == 1) {//            $reqSn = date('YmdHis').mt_rand(100000,999999);//            $resultQueryData = PayHelper::payQuery($payType, $transactionSerialNumber, $reqSn);//            if(!empty($resultQueryData) && !empty($resultQueryData['msg'])) {//                $resultDataMsg = $resultDataMsg."_【".$resultQueryData['msg']."】";//            }//            if(!empty($resultQueryData) && $resultQueryData['code'] == 1) {//            }//        }//        dd($resultDataMsg);//        $transactionSerialNumber = '2017122511504564_1';//        $resultDataMsg = '';//        $reqSn = date('YmdHis').mt_rand(100000,999999);//        $resultQueryData = PayHelper::payQuery($payType, $transactionSerialNumber, $reqSn);//        if(!empty($resultQueryData) && !empty($resultQueryData['msg'])) {//            $resultDataMsg = $resultDataMsg."_【".$resultQueryData['msg']."】";//        }//        if(!empty($resultQueryData) && $resultQueryData['code'] == 1) {//        }//        return response()->success($resultQueryData);//        $reqSn = date('YmdHis').mt_rand(100000,999999);//        $resultQueryData = PayHelper::payAccountInfo($payType, $reqSn);//        return response()->success($resultQueryData);//        $reqSn = date('YmdHis').mt_rand(100000,999999);//        $startDay = date('Ymd', strtotime(date("Y-m-d")." -2 day"));//        $endDay = date('Ymd');//        $resultQueryData = PayHelper::payAccountHistoryBalanceAmount($payType, $reqSn, $startDay, $endDay);//        return response()->success($resultQueryData);//        dd(json_encode($resultQueryData));//        dd($resultDataMsg);//        $financeMerchantStat = new FinanceMerchantStat();//        $financeMerchantStat['pay_merchant_source'] = "ALLINPAY";//        $financeMerchantStat['distribution_channel_id'] = 1;//        $withdraw_cash_id = 68;////        PaymentService::makeThreeSourcePayment(1, $withdraw_cash_id, 0.01, "测试", $financeMerchantStat);        $payType = "LIANLIANPAY";//        $transactionSerialNumber = date('YmdHis').mt_rand(10,99)."_1";//        $bankCode = "102";//        $bankName = '';//        $bankAccountNO = "6222031202001646388";//        $bankAccountName = "宋栋波";//        $amount = 0.01;//        $summary = "summary";//        $remark = "remark";//        $channelId = 1;//        $isCompany = 0;//        $resultPayData = PayHelper::pay($payType, $transactionSerialNumber, $bankCode, $bankName, $bankAccountNO, $bankAccountName, $amount, $summary, $remark, $channelId, $isCompany);//        $resultDataMsg = $remark;//        if(!empty($resultPayData) && !empty($resultPayData['msg'])) {//            $resultDataMsg = $resultDataMsg."_【".$resultPayData['msg']."】";//        }////        dd($transactionSerialNumber);//        return response()->success($resultPayData);//        $liquidatedStat = new LiquidatedStat();//        $liquidatedStat['pay_merchant_source'] = $payType;//        $withdraw_cash_id = 392;//        PaymentService::makeThreeSourcePayment(1, $withdraw_cash_id, 1.09, "测试", $liquidatedStat);//        $transactionSerialNumber = '2017122916450888_1';//        $resultDataMsg = '';//        $reqSn = date('YmdHis').mt_rand(100000,999999);//        $resultQueryData = PayHelper::payQuery($payType, $transactionSerialNumber, $reqSn);//        if(!empty($resultQueryData) && !empty($resultQueryData['msg'])) {//            $resultDataMsg = $resultDataMsg."_【".$resultQueryData['msg']."】";//        }//        if(!empty($resultQueryData) && $resultQueryData['code'] == 1) {//        }//        return response()->success($resultQueryData);//        $reqSn = date('YmdHis').mt_rand(100000,999999);//        $resultQueryData = PayHelper::payAccountInfo($payType, $reqSn);//        return response()->success($resultQueryData);        return response()->success();    }}
 |