<?php namespace App\Http\Controllers\Api; use App\Command\Log; use Illuminate\Http\Request; use App\Models\Adapay; use App\Models\HfCompanyMember; use App\Models\HfSettleAccount; use App\Jobs\AutoOrderDivide; use Exception; use Illuminate\Support\Facades\DB; class HfSettleAccountController extends BaseController { //创建普通用户结算账户 public function createMemberAccount(Request $request) { $card_id = $request->card_id ?? ''; $card_name = $request->card_name ?? ''; $tel_no = $request->tel_no ?? ''; $cert_id = $request->cert_id ?? ''; if (!$card_id || !$card_name || !$tel_no || !$cert_id) { return $this->JsonResponse('', '必填项不为空', 500); } $userObj = $request->user(); $user_id = $userObj->id; $member_id = $userObj->member_id; if (!$member_id) { return $this->JsonResponse('', '账户异常,请联系管理员', 500); } $account_params = array( "app_id" => env('HUIFU_APPID'), "member_id" => $member_id, "channel" => "bank_account", "account_info" => [ "card_id" => $card_id, "card_name" => $card_name, "cert_id" => $cert_id, "cert_type" => "00", "tel_no" => $tel_no, "bank_acct_type" => "2", ] ); $local_params = [ 'member_type' => 0, 'mid' => $user_id, 'card_id' => $card_id, 'card_name' => $card_name, 'cert_id' => $cert_id, 'cert_type' => '00', 'tel_no' => $tel_no, 'bank_acct_type' => 2 ]; DB::beginTransaction(); try { # 创建 $result = (new Adapay())->createMemberSettleAccount($account_params); if (isset($result['status']) && $result['status'] == 'succeeded') { $local_params['account_id'] = $result['id']; $local_params['created_at'] = date("Y-m-d H:i:s", $result['create_time']); DB::table('hf_settle_account')->insert($local_params); //发起分账 $this->dispatch(new AutoOrderDivide($user_id, 10)); } else { throw new Exception($result['error_msg']); } DB::commit(); return $this->JsonResponse(''); } catch (\Exception $exception) { Log::add('添加用户结算账户失败', $exception->getMessage()); DB::rollBack(); return $this->JsonResponse('', $exception->getMessage(), 500); } } //创建企业用户结算账户 public function createCompanyAccount(Request $request) { $card_id = $request->card_id ?? ''; $card_name = $request->card_name ?? ''; $tel_no = $request->tel_no ?? ''; $bank_code = $request->bank_code ?? ''; $bank_name = $request->bank_name ?? ''; $prov_code = $request->prov_code ?? ''; $area_code = $request->area_code ?? ''; if (!$card_id || !$card_name || !$tel_no || !$bank_code || !$prov_code || !$area_code) { return $this->JsonResponse('', '必填项不为空', 500); } $userObj = $request->user(); $merchant_id = 3; //$userObj->merchant_id; $exist = HfCompanyMember::where(['merchant_id' => $merchant_id, 'member_id' => 'cm_id' . $merchant_id])->count(); if (!$exist) { return $this->JsonResponse('', '账户异常,请联系管理员', 500); } $member_id = 'cm_id' . $merchant_id; $account_params = array( "app_id" => env('HUIFU_APPID'), "member_id" => $member_id, "channel" => "bank_account", "account_info" => [ "card_id" => $card_id, "card_name" => $card_name, "tel_no" => $tel_no, "bank_code" => $bank_code, "bank_name" => $bank_name, "bank_acct_type" => "1", "prov_code" => $prov_code, "area_code" => $area_code, ] ); $local_params = [ 'member_type' => 1, 'mid' => $merchant_id, 'card_id' => $card_id, 'card_name' => $card_name, "bank_code" => $bank_code, "bank_name" => $bank_name, 'tel_no' => $tel_no, 'bank_acct_type' => 1, "prov_code" => $prov_code, "area_code" => $area_code, ]; DB::beginTransaction(); try { # 创建 $result = (new Adapay())->createMemberSettleAccount($account_params); if (isset($result['status']) && $result['status'] == 'succeeded') { $local_params['account_id'] = $result['id']; $local_params['created_at'] = date("Y-m-d H:i:s", $result['create_time']); DB::table('hf_settle_account')->insert($local_params); } else { throw new Exception($result['error_msg']); } DB::commit(); return $this->JsonResponse(''); } catch (\Exception $exception) { Log::add('添加用户结算账户失败' . $member_id, $exception->getMessage()); DB::rollBack(); return $this->JsonResponse('', $exception->getMessage(), 500); } } //查询已绑定结算账户 public function myCard(Request $request) { $userObj = $request->user(); $member_type = $request->member_type ?? 0; $role_id = $useObj->role_id ?? ''; if ($role_id == 1) { //商家 $mid = $userObj->merchant_id; $member_id = HfCompanyMember::where(['merchant_id' => $mid, 'status' => 'succeeded'])->value('member_id'); } else { $mid = $userObj->id; $member_id = $userObj->member_id; } if (!$member_id) { return $this->JsonResponse('', '参数错误', 201); } $account_params = []; $accountObj = HfSettleAccount::where(['member_type' => $member_type, 'mid' => $mid])->first(); if ($accountObj) { $account_params = array( 'card_id' => $accountObj->card_id ?? '', 'card_name' => $accountObj->card_name ?? '', 'tel_no' => $accountObj->tel_no ?? '', 'bank_code' => $accountObj->bank_code ?? '', 'bank_name' => $accountObj->bank_name ?? '', ); } return $this->JsonResponse($account_params); } //查询账户余额 public function queryBalance(Request $request) { $userObj = $request->user(); //$member_type = $request->member_type ?? 0; $role_id = $useObj->role_id ?? ''; if ($role_id == 1) { //商家 $mid = $userObj->merchant_id; $member_id = HfCompanyMember::where(['merchant_id' => $mid, 'status' => 'succeeded'])->value('member_id'); } else { $mid = $userObj->id; $member_id = $userObj->member_id; } if (!$member_id) { return $this->JsonResponse('', '账户异常,请联系管理员', 500); } $account_params = [ 'app_id' => env('HUIFU_APPID'), 'member_id' => $member_id, ]; $result = (new Adapay())->queryBalance($account_params); if (isset($result['status']) && $result['status'] == 'succeeded') { return $this->JsonResponse($result); } else { return $this->JsonResponse('', '查询失败', 201); } } //银行代码 public function getBankCode() { $data = [ ['code' => '01020000', 'title' => '工商银行'], ['code' => '01030000', 'title' => '农业银行'], ['code' => '01040000', 'title' => '中国银行'], ['code' => '01050000', 'title' => '建设银行'], ['code' => '03010000', 'title' => '交通银行'], ['code' => '03134402', 'title' => '平安银行'], ['code' => '03020000', 'title' => '中信银行'], ['code' => '03030000', 'title' => '光大银行'], ['code' => '03040000', 'title' => '华夏银行'], ['code' => '03050000', 'title' => '民生银行'], ['code' => '03060000', 'title' => '广发银行'], ['code' => '03080000', 'title' => '招商银行'], ['code' => '03090000', 'title' => '兴业银行'], ['code' => '03100000', 'title' => '浦发银行'], ['code' => '03130011', 'title' => '北京银行'], ['code' => '03130012', 'title' => '天津银行'], ['code' => '03130031', 'title' => '上海银行'], ['code' => '03130032', 'title' => '江苏银行'], ['code' => '03130050', 'title' => '重庆银行'], ['code' => '03132102', 'title' => '大连银行'], ['code' => '03132301', 'title' => '哈尔滨银行'], ['code' => '03133201', 'title' => '南京银行'], ['code' => '03133301', 'title' => '杭州银行'], ['code' => '03133302', 'title' => '宁波银行'], ['code' => '03133308', 'title' => '温州银行'], ['code' => '03150000', 'title' => '恒丰银行'], ['code' => '03160000', 'title' => '浙商银行'], ]; return $this->JsonResponse($data); } //删除结算账户 public function deleteAccount(Request $request) { $userObj = $request->user(); $member_type = $request->member_type ?? 0; $role_id = $useObj->role_id ?? ''; if ($role_id == 1) { //商家 $mid = $userObj->merchant_id; $member_id = HfCompanyMember::where(['merchant_id' => $mid, 'status' => 'succeeded'])->value('member_id'); } else { $mid = $userObj->id; $member_id = $userObj->member_id; } if (!$member_id) { return $this->JsonResponse('', '参数错误', 201); } $accountObj = HfSettleAccount::where(['member_type' => $member_type, 'mid' => $mid])->first(); $account_params = array( 'app_id' => env('HUIFU_APPID'), 'member_id' => $member_id, 'settle_account_id' => $accountObj->account_id ); # 删除 $result = (new Adapay())->deleteSettleAccount($account_params); if (isset($result['status']) && $result['status'] == 'succeeded') { //删除本地 $accountObj->delete(); return $this->JsonResponse(''); } else { return $this->JsonResponse('', '删除失败', 201); } } }