dao = $dao; } /** * 获取单条订单信息 */ public function getOne(string $agent_apply_no) { $where = ['agent_apply_no' => $agent_apply_no]; return ($this->dao->getWhere($where)); } /** * 创建申请订单lakala * @return array|\think\Model|null * @author ljj * @created 2021/2/20 10:45 * @return mixed */ public function createOrderlakala(array $params) { $intentionRepository = app()->make(MerchantIntentionApplyRepository::class); $intention = $intentionRepository->getOne(['mer_intention_id' => $params['mer_intention_id']]); if (!$intention) return ['code' => 500, 'msg' => '无申请信息']; $datas=[ "row"=> [ "merchant_name"=>$intention->mer_name,//子商户名称 "merchant_short_n1ame"=>$intention->mer_name,//子商户简称 "merc_start_time"=>$intention->merc_start_time, "merc_end_time"=>$intention->merc_end_time, "reg_address"=> $intention->addr,//注册/经营地址 "merchant_id_type"=> "00",//是否三证合一 "merchant_id_no"=>$intention->credit_code ,//信用代码\营业执照号 "province"=>$this->getProvinceCode($intention->province_id) ,//省份地址i "city"=>$this->getProvinceCode($intention->city_id) ,//省份地址i "region"=>$this->getAreaCode($intention->area_id),//省份地址i "mccCd"=>$intention->mcc_cd ,//行业大类 "mccSubCd"=>$intention->mcc_sub_cd ,//行业细类 "merc_attr"=>$intention->merc_attr ,//商户性质 "min_rtn_amt"=>$intention->min_rtn_amt ,//最低留存金额 以分为单位 "fee_charge_glg"=>$intention->fee_charge_glg,//分账手续费承担方式 /// mercIdEffDt ], "illey"=>[ "enterpriseOwner"=>$intention->name, "enterpriseOwnerIdType"=>"00", "enterpriseOwnerIdNo"=>$intention->idcard_no, "enterpriseOwnerIdEffDt"=>$intention->identification_valid_date_start, "enterpriseOwnerIdExpDt"=>$intention->identification_valid_date_end, "ownImg1"=>$intention->card_positive_person, "ownImg2"=>$intention->card_back_person, ], "son"=>[ "usrOprNm"=>$intention->name, "usrOprEmail"=>$intention->email, "usrOprMbl"=>$intention->name, ], "link"=>[ "contactType"=>"0", "contactName"=>$intention->name, "contactMobile"=>$intention->phone, ], "stu"=>[ "bank_name"=>$intention->bank_name, "stl_bank_name"=>$intention->bank_deposit, "bank_no"=>$this->getBankCode($intention->bank_branch), "account_no"=>$intention->bank_account, "bank_prov"=>"", "bank_city"=>"", "pas_stl_flg"=>$intention->pas_stl_flg, "stl_beg_amt"=>$intention->stl_beg_amt, ], ]; $res=$this->lakalaru($datas,$intention->mer_id); return $res; // $paramOrder = [ // 'apply_id' => $intention->mer_intention_id ? : 0, // 'mer_id' => $intention->mer_id ? : 0, // 'uid' => $intention->uid, // 'merch_no' => $merch_no, // 'agent_apply_no' => $orderId, // 'trade_type' => 'WX,ALI', // 'platform' => 1, // 'apply_type' => 1, // ]; // // Db::transaction(function () use ($paramOrder) { // $merchantOrder = $this->dao->create($paramOrder); // return $merchantOrder; // }); } /** * 拉卡拉入网 * @param array $datas 商户数据 * @param $mer_id 商户id * @data 2021-2-5 */ public function lakalaru($datas,$mer_id){ $ids=$mer_id; $data = $datas["row"]; $sonStore = $datas["illey"]; //子商户 $sonManage = $datas["son"]; //子商户 $sonLink = $datas["link"];//子商户联系方式 $stu = $datas["stu"];//子商户结算信息开 $password = substr(md5(time()),-16); $aes = AES::init(); $lakalaBoss = LakalaBoss::getInstance(); $params = [ 'reqTime' => date('YmdHis'), //请求时间 'merchantName' => $data['merchant_name'] ?? '', //子商户名称 'merchantShortName' => $data['merchant_short_n1ame'] ?? '', //子商户简称 'mercIdEffDt' => date("Ymd",strtotime($data['merc_start_time'])) ?? '', //营业执照生效日期 'mercIdExpDt' => date("Ymd",strtotime($data['merc_end_time'])) ?? '',//'20260726', 营业执照到期日期 'regAddress' => $data['reg_address'] ?? '', //注册/经营地址 'merchantIdType' => $data['merchant_id_type'], //是否三证合一 'merchantIdNo' => $aes->encrypt($data['merchant_id_no'],$password), //信用代码\营业执照号 'province' => $data['province'] ?? '',//归属省 'city' => $data['city'] ?? '', //归属市 'region' => $data['region'] ?? '', //归属地区 'mccCd' => $data['mcc_cd'] ?? '', //行业大类 'mccSubCd' => $data['mcc_sub_cd'] ?? '', //行业细类 'mercAttr' => (string)$data['merc_attr'] ?? '',//商户性质 'administrator' => stripslashes(json_encode([ //子商户管理员信息开始 [ 'usrOprNm' => $sonManage['usrOprNm'], //子商户管理员姓名 'usrOprMbl' => $aes->encrypt($sonManage['usrOprNm'],$password), //子商户管理员姓名 'usrOprEmail' => $sonManage['usrOprEmail'], //子商户管理员Email 'mercCertTyp' => '1-RSA', //子商户接口类型 ] ],JSON_UNESCAPED_UNICODE)), 'contact' => stripslashes(json_encode([ //子商户联系人信息开始 [ 'contactType' => $sonLink['contactType'], // 3 紧急联系人 'contactName' => $sonLink['contactName'], //子商户联系人姓名 'contactMobile' => $aes->encrypt($sonLink['contactMobile'],$password), //子商户联系人手机 ] ],JSON_UNESCAPED_UNICODE)), 'owner' => stripslashes(json_encode([ //子商户法人信息 [ 'enterpriseOwner' => $sonStore['enterpriseOwner'], //子商户法人姓名 'enterpriseOwnerIdType' => $sonStore['enterpriseOwnerIdType'], //子商户法人证件类型 00:身份证 'enterpriseOwnerIdNo' => $aes->encrypt($sonStore['enterpriseOwnerIdNo'],$password),//子商户法人证件号码 'enterpriseOwnerIdEffDt' => $sonStore['enterpriseOwnerIdEffDt'], //子商户法人证件生效日期 'enterpriseOwnerIdExpDt' => $sonStore['enterpriseOwnerIdExpDt'], //子商户法人证件失效日期 'ownImg1' =>$sonStore['ownImg1'],//$sonStore['ownImg1'] ? explode("/",$sonStore['ownImg1'])[3]:"",//子商户法人证件照片正面 'othImg2' =>$sonStore['ownImg2'],//$sonStore['othImg2'] ? explode("/",$sonStore['othImg2'])[3] : "",//子商户法人证件照片反面 ] ],JSON_UNESCAPED_UNICODE)), 'stlLst' => stripslashes(json_encode([ //结算信息 [ 'stlSign' => '0', //结算账号公私标志 0-对公 'selfStlFlg' => 'Y', //商户自结算标志 N-不允许 Y-允许 'bankName' => $stu['bank_name'] ?? '', //银行代码 'stlBankName' => $stu['stl_bank_name'] ?? '',//开户行名称 'lBnkNo' => $stu['bank_no'] ?? '',//联行行号 'stlOac' => $aes->encrypt($stu['account_no'],$password),//$stu['account_no'] //银行帐号 'bnkOpnName' => $stu['stl_bank_name'] ?? '', //银行开户名称 'opnBnkProv' => $stu['bank_prov'] ?? '', //支行归属省 'opnBnkCity' => $stu['bank_city'] ?? '', //支行归属市 'stlCls' => '1',//$stu['st_class'], //商户结算类型 1-结算到账户2-结算到银行账户 'stlPerd' => '0',//$stu['stl_perd'], //结算周期0-日 1-周2-旬3-月4-季5-半年6-年7-指定结算日 'pasStlFlg' => $stu['pas_stl_flg'], //暂停结算标志 0-正常结算 1-暂停结算 'minRtnAmt' => $data['min_rtn_amt'], //最低留存金额 以分为单位 'stlTrfDays' => '1',//$stu['stl_trf_days'], //结算划款天数 'stlDay' => "1", //结算日当结算周日为7时必填 'nextStlDt' => date('Ymd'), //下一结算日期 'stlBegAmt' => $stu['stl_beg_amt'], //结算起始金额 ] ],JSON_UNESCAPED_UNICODE)), 'feeChargeFlg' => $data['fee_charge_glg'], //分账手续费承担方式 'certPhotoImg' => "photoimg.jpg",// $data['cert_photo_image'] ? explode("/",$data['cert_photo_image'])[3] : "", //证照照片 'secretKey' =>$lakalaBoss->signencrypt($password), //临时密钥 ]; //查看是否存在商户id值 $isMerc = Db::name("merchant")->where(['mer_id'=>$ids])->find(); if($isMerc['mer_id']){ $params['outMerchantId'] = $isMerc['mer_id']; $result = $lakalaBoss->editStore($params); if($result['code'] != 0){ return app('json')->fail($result['message']); } if($result['data']['status'] == 'S'){ $updateArr = [ 'mer_id' => $ids, 'send_data' => json_encode($params), 'result_data' => json_encode($result), "update_time" => time(), ]; Db::name("merchant_extend")->where(['mer_id'=>$ids])->update($updateArr); // return app('json')->success($result['message']); return ['code' => 200, 'message' => $result['message']]; } }else{ $result = $lakalaBoss->registerStore($params); return $result; if($result['code'] != 0){ // $this->error($result['message']); // return app('json')->fail($result['message']); return ['code' => 400, 'message' => $result['message']]; } if($result['data']['status'] == 'S'){ //更新信息到数据库 $rs = Db::name("merchant_intention")->where(['mer_id'=>$ids])->update(['mer_id'=>$result['data']['outMerchantId'],'request_id'=>$result['data']['requestId']]); $insertArr = [ 'mer_id' => $ids, 'send_data' => json_encode($params), 'result_data' => json_encode($result), "update_time" => time(), "create_time" => time(), ]; Db::name("merchant_extend")->insert($insertArr); if($rs){ //对图片进行压缩文件 // system(); /** * 子商户号 * 最终图片路径 */ // self::upload_img($result['data']['outMerchantId'],''); return ['code' => 200, 'message' => "操作成功"]; } return ['code' => 400, 'message' => "网络繁忙,请稍后进行操作!"]; }else{ return ['code' => 400, 'message' => $result['message']]; } } } /** * 拉卡拉取消订单管理 */ public function autoCancelOrder($orderId){ $orderRepository = app()->make(StoreOrderRepository::class); $orderInfo = $orderRepository->getOne($orderId); if (!$orderInfo) return ['return_code' => 500, 'return_msg' => '订单信息不存在']; if (!$orderInfo->paid) return ['return_code' => 500, 'return_msg' => '订单未完成支付']; //根据订单判断状态 // $orderInfo = Db::name("order")->where(['id'=>$orderId,'order_status'=>1,'pay_status'=>1])->find(); if(!$orderInfo){ return ['code'=>0,'msg'=>'订单非法操作!']; } // //获得子订单信息,'status'=>1 // $sonOrderInfo = Db::name("order_info")->where(['order_no'=>$orderInfo['order_no'],'status'=>1])->find(); // if(!$sonOrderInfo){ // return ['code'=>0,'msg'=>'订单非法操作!']; // } //取消订单手动 $lakalaBoss = LakalaBoss::getInstance(); // foreach ($storeLog as $k=>$v){ // // } $sonArr[] = [ 'detailOrderId' =>$orderInfo['order_sn'], 'detailRefundAmount' => ''.$orderInfo['pay_price']*100, 'rcvMerchantId' =>$orderInfo['mer_id'] ]; $arr = [ 'refundOrderId'=>time().rand(10000,99999), 'orderId' => $orderInfo['order_no'], 'refundTolAmount' => ''.$orderInfo['pay_price']*100, 'refundDetail'=> json_encode($sonArr,JSON_UNESCAPED_UNICODE) ]; //查看今天交易额是否可以直接进行退款 如果可以就直接退款 如果不足以退款 需要从拉卡拉的现金账户金额调用金额到待结算账户 在进行退款 $lists = $lakalaBoss->rebackOrder($arr); if($lists['code'] == 0 && $lists['message'] == 'SUCCESS'){ if($lists['data']['returnCode'] == '000000' && $lists['data']['returnMessage'] == 'SUCCESS'){ return ['code'=>200,'msg'=>$lists['data']['tradeNo']]; }else{ return ['code'=>400,'msg'=>'非法操作!']; } }else{ return ['code'=>400,'msg'=>$lists['message']]; } } /** * 提现同意 */ public function pass($mer_id ,$order_sn,$real_money){ $lakalaBoss = LakalaBoss::getInstance(); $result = $lakalaBoss->widthdrawOrder($real_money*100,$mer_id,$order_sn); if($result['data']['returnCode'] != '000000'){ return ['code' => 400, 'message' => "提现账号存在异常"]; } return ['code' => 200, 'message' => "操作成功"]; } public function getNameById($id) { return Db::name('merchant_intention')->where('mer_intention_id', $id)->value('name'); } public function getBankCode($branch) { return Db::name('bank_code')->where('bank_branch', $branch)->value('bank_code'); } public function getProvinceCode($province_id) { return Db::name('user_province')->where('province_id', $province_id)->value('province_code'); } public function getCityCode($city_id) { return Db::name('user_city')->where('city_id', $city_id)->value('city_code'); } public function getAreaCode($area_id) { return Db::name('user_area')->where('area_id', $area_id)->value('area_code'); } /** * 获取唯一订单号 * @return string * @author php迷途小书童 * @created 2021/1/16 14:57 */ public function getNewOrderId($trade_type) { list($msec, $sec) = explode(' ', microtime()); $msectime = number_format((floatval($msec) + floatval($sec)) * 1000, 0, '', ''); $orderId = $trade_type . $msectime . mt_rand(10000, max(intval($msec * 10000) + 10000, 98369)); return $orderId; } /** * 回调处理 * @return bool * @author php迷途小书童 * @created 2021/1/16 15:12 */ public function doNotify($params) { $order = $this->dao->getWhere(['agent_apply_no' => $params['agent_apply_no']]); if (!$order) return false; //修改订单状态 Db::transaction(function () use ($order, $params) { $order->status = $params['status']; $order->apply_no = $params['apply_no']; $order->save(); }); return true; } /** * 图片压缩 * @return bool|mixed * @author php迷途小书童 * @created 2021/1/30 17:17 */ public function getThumb($img) { $img = app()->getRootPath().'/public'.$img; $image = \think\Image::open($img); // 返回图片的宽度 $width1 = $width = $image->width(); if ($width > 1000) { $width1 = 1000; } $multiple = bcdiv($width, $width1); // 返回图片的高度 $height = $image->height(); $height1 = bcdiv($height, $multiple); $image->thumb($width1, $height1)->save($img); return $this->getImageBase64($img); } /** * 获取base64 * @return mixed * @author php迷途小书童 * @created 2021/1/30 17:11 */ public function getImageBase64($img) { $file = $img; if($fp = fopen($file,"rb", 0)) { $gambar = fread($fp,filesize($file)); fclose($fp); return chunk_split(base64_encode($gambar)); } else { return false; } } }