From fd14b701c39138596cb707c01a2281053eb153e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=AF=E4=B9=90=E5=8A=A0=E5=86=B0?= <11869599+addie66@user.noreply.gitee.com> Date: Thu, 8 Oct 2026 13:40:06 +0800 Subject: [PATCH] =?UTF-8?q?```=20feat(shopro=5Fhuifu):=20=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=B1=87=E4=BB=98=E5=9C=B0=E5=8C=BA=E7=BC=96=E7=A0=81?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E5=92=8C=E9=93=B6=E8=A1=8C=E6=94=AF=E8=A1=8C?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 HuifuOnboardAreaHelper::toHuifuCityCode 方法,将区县级编码转换为地级市编码 - 新增 HuifuOnboardBankBranch::findByBranchCode 方法,支持按联行号精确查找银行信息 - 在业务开通流程中使用地区编码转换方法确保汇付银行卡信息正确 - 在验证器中添加根据联行号自动填充省市信息的功能 - 修复区域ID为空时省份ID的自动推导逻辑 ``` --- .../onboard/HuifuOnboardAreaHelper.php | 16 +++++++++ .../onboard/HuifuOnboardBankBranch.php | 34 +++++++++++++++++++ .../library/onboard/HuifuOnboardBusiOpen.php | 2 +- .../library/onboard/HuifuOnboardValidator.php | 27 ++++++++++++++- 4 files changed, 77 insertions(+), 2 deletions(-) diff --git a/addons/shopro_huifu/library/onboard/HuifuOnboardAreaHelper.php b/addons/shopro_huifu/library/onboard/HuifuOnboardAreaHelper.php index 53a704f..a5339b5 100644 --- a/addons/shopro_huifu/library/onboard/HuifuOnboardAreaHelper.php +++ b/addons/shopro_huifu/library/onboard/HuifuOnboardAreaHelper.php @@ -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; + } } diff --git a/addons/shopro_huifu/library/onboard/HuifuOnboardBankBranch.php b/addons/shopro_huifu/library/onboard/HuifuOnboardBankBranch.php index e76c8da..c1d8866 100644 --- a/addons/shopro_huifu/library/onboard/HuifuOnboardBankBranch.php +++ b/addons/shopro_huifu/library/onboard/HuifuOnboardBankBranch.php @@ -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) { diff --git a/addons/shopro_huifu/library/onboard/HuifuOnboardBusiOpen.php b/addons/shopro_huifu/library/onboard/HuifuOnboardBusiOpen.php index 3da9f34..86089ab 100644 --- a/addons/shopro_huifu/library/onboard/HuifuOnboardBusiOpen.php +++ b/addons/shopro_huifu/library/onboard/HuifuOnboardBusiOpen.php @@ -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'], diff --git a/addons/shopro_huifu/library/onboard/HuifuOnboardValidator.php b/addons/shopro_huifu/library/onboard/HuifuOnboardValidator.php index 0f463f4..30fea04 100644 --- a/addons/shopro_huifu/library/onboard/HuifuOnboardValidator.php +++ b/addons/shopro_huifu/library/onboard/HuifuOnboardValidator.php @@ -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';