```
feat(shopro_huifu): 添加汇付地区编码转换和银行支行查询功能 - 新增 HuifuOnboardAreaHelper::toHuifuCityCode 方法,将区县级编码转换为地级市编码 - 新增 HuifuOnboardBankBranch::findByBranchCode 方法,支持按联行号精确查找银行信息 - 在业务开通流程中使用地区编码转换方法确保汇付银行卡信息正确 - 在验证器中添加根据联行号自动填充省市信息的功能 - 修复区域ID为空时省份ID的自动推导逻辑 ```
这个提交包含在:
@@ -31,4 +31,20 @@ class HuifuOnboardAreaHelper
|
||||
}
|
||||
return str_pad($id, 6, '0', STR_PAD_RIGHT);
|
||||
}
|
||||
|
||||
/**
|
||||
* 汇付银行卡 card_info.area_id 要求地级市编码(如安顺 520400),
|
||||
* 小程序省市区选到区县时可能是 520402,需上提为 XXYY00。
|
||||
*/
|
||||
public static function toHuifuCityCode($code)
|
||||
{
|
||||
$code = self::toCode($code);
|
||||
if ($code === '' || strlen($code) !== 6) {
|
||||
return $code;
|
||||
}
|
||||
if (substr($code, 4, 2) !== '00') {
|
||||
return substr($code, 0, 4) . '00';
|
||||
}
|
||||
return $code;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -264,6 +264,40 @@ class HuifuOnboardBankBranch
|
||||
return substr($cityCode, 0, 2) . '0000';
|
||||
}
|
||||
|
||||
/**
|
||||
* 按联行号精确查找(用于手动填联行号时回填省市)
|
||||
*/
|
||||
public static function findByBranchCode($branchCode)
|
||||
{
|
||||
$branchCode = trim((string) $branchCode);
|
||||
if ($branchCode === '') {
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
$row = Db::name('shopro_huifu_bank_branch')
|
||||
->where('status', 1)
|
||||
->where('branch_code', $branchCode)
|
||||
->find();
|
||||
if ($row) {
|
||||
return [
|
||||
'branch_code' => (string) $row['branch_code'],
|
||||
'branch_name' => (string) $row['branch_name'],
|
||||
'bank_name' => (string) ($row['bank_name'] ?? ''),
|
||||
'prov_id' => (string) ($row['prov_id'] ?? ''),
|
||||
'area_id' => (string) ($row['area_id'] ?? ''),
|
||||
];
|
||||
}
|
||||
} catch (\Throwable $e) {
|
||||
// ignore
|
||||
}
|
||||
foreach (self::loadJson() as $item) {
|
||||
if ((string) ($item['branch_code'] ?? '') === $branchCode) {
|
||||
return $item;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
protected static function loadJson()
|
||||
{
|
||||
if (self::$jsonCache !== null) {
|
||||
|
||||
@@ -111,7 +111,7 @@ class HuifuOnboardBusiOpen
|
||||
|
||||
'prov_id' => $form['prov_id'],
|
||||
|
||||
'area_id' => $form['area_id'],
|
||||
'area_id' => HuifuOnboardAreaHelper::toHuifuCityCode($form['area_id'] ?? ''),
|
||||
|
||||
'mp' => $form['mp'],
|
||||
|
||||
|
||||
@@ -141,8 +141,30 @@ class HuifuOnboardValidator
|
||||
}
|
||||
}
|
||||
|
||||
protected static function resolveBranchByCode(array &$data)
|
||||
{
|
||||
$code = trim((string) ($data['branch_code'] ?? ''));
|
||||
if ($code === '') {
|
||||
return;
|
||||
}
|
||||
$found = HuifuOnboardBankBranch::findByBranchCode($code);
|
||||
if (!$found) {
|
||||
return;
|
||||
}
|
||||
if (!empty($found['branch_name']) && empty(trim((string) ($data['branch_name'] ?? '')))) {
|
||||
$data['branch_name'] = $found['branch_name'];
|
||||
}
|
||||
if (!empty($found['prov_id'])) {
|
||||
$data['prov_id'] = $found['prov_id'];
|
||||
}
|
||||
if (!empty($found['area_id'])) {
|
||||
$data['area_id'] = $found['area_id'];
|
||||
}
|
||||
}
|
||||
|
||||
protected static function resolveBranch(array &$data)
|
||||
{
|
||||
self::resolveBranchByCode($data);
|
||||
if (!empty($data['branch_code'])) {
|
||||
return;
|
||||
}
|
||||
@@ -192,8 +214,11 @@ class HuifuOnboardValidator
|
||||
$data['branch_code'] = trim($data['branch_code'] ?? '');
|
||||
$data['branch_name'] = trim($data['branch_name'] ?? '');
|
||||
$data['prov_id'] = HuifuOnboardAreaHelper::toCode($data['prov_id'] ?? '');
|
||||
$data['area_id'] = HuifuOnboardAreaHelper::toCode($data['area_id'] ?? '');
|
||||
$data['area_id'] = HuifuOnboardAreaHelper::toHuifuCityCode($data['area_id'] ?? '');
|
||||
$data['district_id'] = HuifuOnboardAreaHelper::toCode($data['district_id'] ?? '');
|
||||
if ($data['prov_id'] === '' && $data['area_id'] !== '') {
|
||||
$data['prov_id'] = substr($data['area_id'], 0, 2) . '0000';
|
||||
}
|
||||
|
||||
foreach (['cert', 'license', 'legal_cert'] as $prefix) {
|
||||
$beginKey = $prefix . '_begin_date';
|
||||
|
||||
在新工单中引用
屏蔽一个用户