love_php/app/Http/Controllers/Server/Admin/ApplymentController.php
2026-04-02 09:20:51 +08:00

209 lines
12 KiB
PHP

<?php
namespace App\Http\Controllers\Server\Admin;
use App\Facades\CommonUtilsService;
use App\Facades\UploadService;
use App\Facades\WechatService;
use App\Http\Controllers\UploadController;
use App\Http\Resources\ApplymentResource;
use App\Http\Response\ResponseJson;
use App\Models\Server\MerchantApplyment;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
class ApplymentController extends Controller
{
use ResponseJson;
/**
* 特约商户提交申请单
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View
*/
public function updateApplyment(Request $request)
{
//超级管理员信息
$contact_info = $request->input('contact_info');
$contact_info = json_decode($contact_info,1);
$err_msg = $this->checkContactInfo($contact_info);
if ($err_msg) return $this->failure($err_msg);
//主体资料
$subject_info = $request->input('subject_info');
$subject_info = json_decode($subject_info,1);
$err_msg = $this->checkSubjectInfo($subject_info);
if ($err_msg) return $this->failure($err_msg);
$business_info = $request->input('business_info');
$business_info = json_decode($business_info,1);
$err_msg = $this->checkBusinessInfo($business_info);
if ($err_msg) return $this->failure($err_msg);
$settlement_info = $request->input('settlement_info');
$settlement_info = json_decode($settlement_info,1);
$err_msg = $this->checkSettlementInfo($settlement_info);
if ($err_msg) return $this->failure($err_msg);
$bank_account_info = $request->input('bank_account_info');
$bank_account_info = json_decode($bank_account_info,1);
$err_msg = $this->checkbankAccountInfo($bank_account_info);
if ($err_msg) return $this->failure($err_msg);
$addition_info = $request->input('addition_info');
//超级管理员信息
$merchant_id = $request->account_id;
//服务商商户号
$business_code = '1581887811_'.CommonUtilsService::getTradeNo();
DB::beginTransaction();
//管理员姓名加密
$contact_info['contact_name'] = WechatService::getEncrypt($contact_info['contact_name']);
//管理员身份证号加密
if (isset($contact_info['contact_id_number']) && $contact_info['contact_id_number']) {
$contact_info['contact_id_number'] = WechatService::getEncrypt($contact_info['contact_id_number']);
}
//联系电话加密
$contact_info['mobile_phone'] = WechatService::getEncrypt($contact_info['mobile_phone']);
//联系邮箱加密
$contact_info['contact_email'] = WechatService::getEncrypt($contact_info['contact_email']);
//开户名称加密
$bank_account_info['account_name'] = WechatService::getEncrypt($bank_account_info['account_name']);
//银行账号加密
$bank_account_info['account_number'] = WechatService::getEncrypt($bank_account_info['account_number']);
//保存信息到数据库
$applyment = MerchantApplyment::updateOrCreate(['m_id' => $merchant_id], [
'business_code' => $business_code,
'contact_info' => json_encode($contact_info),
'subject_info' => json_encode($subject_info),
'business_info' => json_encode($business_info),
'settlement_info' => json_encode($settlement_info),
'bank_account_info' => json_encode($bank_account_info),
'addition_info' => json_encode($addition_info),
]);
//提交微信申请
$applyment_id = WechatService::applymentSub($business_code, $contact_info, $subject_info, $business_info, $settlement_info, $bank_account_info, $addition_info);
$applyment->update(['applyment_id' => $applyment_id]);
DB::commit();
return $this->success('ok');
}
/**
* 特约商户清单
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View
*/
public function applyment(Request $request)
{
$merchant_id = $request->account_id;
$applyment = MerchantApplyment::firstOrCreate(['m_id' => $merchant_id]);
$applyment = ApplymentResource::make($applyment);
return $this->success('ok', $applyment);
}
public function applymentStatus(Request $request)
{
$merchant_id = $request->account_id;
$applyment = MerchantApplyment::where('m_id', $merchant_id)->first();
if (empty($applyment->business_code)) return $this->failure("还未发起申请");
$res = WechatService::applymentWithCode($applyment->business_code);
return $this->success('ok');
}
public function checkContactInfo($contact_info)
{
if (!is_array($contact_info) || count($contact_info) == 0) return '缺少超级管理员信息';
if (!isset($contact_info['contact_type']) || !in_array($contact_info['contact_type'], ["LEGAL", "SUPER"])) return '缺少超级管理员类型信息';
if (!isset($contact_info['contact_name'])) return '缺少超级管理员姓名信息';
if ($contact_info['contact_type'] == 'SUPER') {
if (!isset($contact_info['contact_id_doc_type'])) return '缺少超级会员证件类型';
if (!in_array($contact_info['contact_id_doc_type'], ['IDENTIFICATION_TYPE_IDCARD', 'IDENTIFICATION_TYPE_OVERSEA_PASSPORT', 'IDENTIFICATION_TYPE_HONGKONG_PASSPORT', 'IDENTIFICATION_TYPE_MACAO_PASSPORT', 'IDENTIFICATION_TYPE_TAIWAN_PASSPORT', 'IDENTIFICATION_TYPE_FOREIGN_RESIDENT', 'IDENTIFICATION_TYPE_HONGKONG_MACAO_RESIDENT','IDENTIFICATION_TYPE_TAIWAN_RESIDENT'])) return '超级管理员证件类型错误';
if (!isset($contact_info['contact_id_number'])) return [false, '缺少超级管理员身份证号码'];
if (!isset($contact_info['contact_id_doc_copy'])) return '缺少超级管理员证件正面照片';
if (!isset($contact_info['contact_id_doc_copy_back'])) return '缺少超级管理员证件反面照片';
if (!isset($contact_info['contact_period_begin'])) return '缺少超级管理员证件有效期开始时间';
if (!isset($contact_info['contact_period_end'])) return '缺少超级管理员证件有效期结束时间';
if (!isset($contact_info['business_authorization_letter'])) return '缺少业务办理授权函';
if (!isset($contact_info['mobile_phone'])) return '缺少联系手机';
if (!isset($contact_info['contact_email'])) return '缺少联系邮箱';
}
return '';
}
public function checkSubjectInfo($subject_info)
{
if (!is_array($subject_info) || count($subject_info) == 0) return '缺少主体资料';
if (!isset($subject_info['subject_type'])) return '缺少主体类型';
if (!in_array($subject_info['subject_type'], ['SUBJECT_TYPE_INDIVIDUAL', 'SUBJECT_TYPE_ENTERPRISE', 'SUBJECT_TYPE_GOVERNMENT', 'SUBJECT_TYPE_INSTITUTIONS', 'SUBJECT_TYPE_OTHERS'])) return '主体类型错误';
if ($subject_info['subject_type'] == "SUBJECT_TYPE_INDIVIDUAL" || $subject_info['subject_type'] == "SUBJECT_TYPE_ENTERPRISE") {
if(!isset($subject_info['business_license_info']) || empty($subject_info['business_license_info'])) return "缺少营业执照";
}else {
if(!isset($subject_info['certificate_info']) || empty($subject_info['certificate_info'])) return "缺少登记证书";
}
if (isset($subject_info["finance_institution"]) && $subject_info["finance_institution"]) {
if (!isset($subject_info["finance_institution_info"]) || empty($subject_info["finance_institution_info"])) return "缺少金融机构许可证信息";
}
if (!isset($subject_info["identity_info"]) || empty($subject_info["identity_info"])) return "缺少经营者/法人身份证件";
return '';
}
public function checkBusinessInfo($business_info)
{
if (!is_array($business_info) || count($business_info) == 0) return '缺少经营资料';
if (!isset($business_info['merchant_shortname']) || empty($business_info['merchant_shortname'])) return '缺少商户简称';
if (!isset($business_info['service_phone']) || empty($business_info['service_phone'])) return '缺少商户简称';
if (!isset($business_info['sales_info']) || empty($business_info['sales_info'])) return '缺少经营场景';
if (!isset($business_info['sales_info']['sales_scenes_type']) || empty($business_info['sales_info']['sales_scenes_type'])) return '缺少经营场景类型';
if ($business_info['sales_info']['sales_scenes_type'] == "SALES_SCENES_STORE") {
if (!isset($business_info['sales_info']['biz_store_info']['biz_store_name']) || empty($business_info['sales_info']['biz_store_info']['biz_store_name'])) return '缺少线下场所名称';
if (!isset($business_info['sales_info']['biz_store_info']['biz_address_code']) || empty($business_info['sales_info']['biz_store_info']['biz_address_code'])) return '缺少线下场所省市编码';
if (!isset($business_info['sales_info']['biz_store_info']['biz_store_address']) || empty($business_info['sales_info']['biz_store_info']['biz_store_address'])) return '缺少线下场所地址';
if (!isset($business_info['sales_info']['biz_store_info']['store_entrance_pic']) || empty($business_info['sales_info']['biz_store_info']['store_entrance_pic'])) return '缺少线下场所门头照片';
if (!isset($business_info['sales_info']['biz_store_info']['indoor_pic']) || empty($business_info['sales_info']['biz_store_info']['indoor_pic'])) return '缺少线下场所内部照片';
}elseif ($business_info['sales_info']['sales_scenes_type'] == "SALES_SCENES_MP") {
if (!isset($business_info['sales_info']['mp_info']['mp_appid']) && !isset($business_info['sales_info']['mp_info']['mp_sub_appid'])) return '缺少APPID';
if (!isset($business_info['sales_info']['mp_info']['mp_pics']) || empty($business_info['sales_info']['mp_info']['mp_pics'])) return '缺少公众号页面截图';
}
return '';
}
public function checkSettlementInfo($settlement_info)
{
if (!is_array($settlement_info) || count($settlement_info) == 0) return '缺少结算规则';
if (!isset($settlement_info['settlement_id']) || empty($settlement_info['settlement_id'])) return "缺少入驻结算规则";
if (!isset($settlement_info['qualification_type']) || empty($settlement_info['qualification_type'])) return "缺少所属行业";
}
public function checkbankAccountInfo($bank_account_info)
{
if (!is_array($bank_account_info) || count($bank_account_info) == 0) return '缺少结算银行账户';
if (!isset($bank_account_info['bank_account_type']) || empty($bank_account_info['bank_account_type'])) return "缺少账户类型";
if (!isset($bank_account_info['account_name']) || empty($bank_account_info['account_name'])) return "缺少开户名称";
if (!isset($bank_account_info['account_bank']) || empty($bank_account_info['account_bank'])) return "缺少开户银行";
if (!isset($bank_account_info['bank_address_code']) || empty($bank_account_info['bank_address_code'])) return "缺少银行省市编码";
if ((!isset($bank_account_info['bank_branch_id']) || empty($bank_account_info['bank_branch_id'])) && (!isset($bank_account_info['bank_name']) || empty($bank_account_info['bank_name']))) return "缺少开户银行联行号或开户银行全称(含支行)";
if (!isset($bank_account_info['account_number']) || empty($bank_account_info['account_number'])) return "缺少银行账号";
return "";
}
/**
* 图片资源上传
* @param Request $request
* @return \Illuminate\Contracts\View\Factory|\Illuminate\Foundation\Application|\Illuminate\Http\JsonResponse|\Illuminate\View\View
*/
public function mediaUpload(Request $request)
{
//获取文件信息
$file = $request->file();
//上传到本地
$path = UploadService::storageFile($file['image']);
//文件上传到微信
$res = WechatService::mediaUpload($path);
//删除本地文件
unlink($path);
return $this->success('ok', $res);
}
}