feat(shopro_huifu): 完善汇付 onboard 流程中的银行卡信息处理

- 根据账户类型和银行账户类型动态设置持卡人姓名(card_name)
- 个人账户时 card_name 与 name 保持一致
- 企业/个体户对私结算时 card_name 与 legal_name 保持一致
- 优化错误信息提示,针对持卡人姓名和银行卡类型错误提供明确指引
- 修复个人进件银行卡户名校验不一致的问题
```
这个提交包含在:
可乐加冰
2026-09-29 15:23:17 +08:00
父节点 e067999f4e
当前提交 f2bca20a22
共有 3 个文件被更改,包括 18 次插入 和 3 次删除

查看文件

@@ -90,12 +90,19 @@ class HuifuOnboardBusiOpen
// 汇付 card_type:0=对公,1=对私法人,2=对私非法人
$bankAccountType = (string) ($form['bank_account_type'] ?? '0');
$cardType = $bankAccountType === '1' ? '0' : '1';
$accountType = $form['account_type'] ?? 'indv';
$cardName = $form['card_name'] ?? '';
if ($accountType === 'indv') {
$cardName = $form['name'] ?? $cardName;
} elseif ($bankAccountType === '0') {
$cardName = $form['legal_name'] ?? $cardName;
}
$cardInfo = [
'card_type' => $cardType,
'card_name' => $form['card_name'],
'card_name' => $cardName,
'card_no' => $form['card_no'],

查看文件

@@ -32,6 +32,12 @@ class HuifuOnboardError
if (strpos($msg, '图片') !== false || strpos($lower, 'picture') !== false || strpos($lower, 'file_id') !== false) {
return '证件或银行卡图片上传失败,请重新上传 jpg/png 清晰照片';
}
if (strpos($msg, '持卡人姓名') !== false || strpos($msg, '法人姓名') !== false) {
return '银行卡户名须与身份证姓名完全一致(个人进件 name 与 card_name 相同)';
}
if (strpos($msg, 'cardType') !== false || strpos($msg, '对私结算') !== false) {
return '个人进件仅支持对私银行卡,请确认结算账户类型为对私';
}
if (preg_match('/基础参数校验失败[::](.+?)(?:,resp_code|$)/u', $msg, $m)) {
return '资料校验未通过:' . trim($m[1]);

查看文件

@@ -206,13 +206,15 @@ class HuifuOnboardValidator
}
if ($data['account_type'] === 'indv') {
$data['card_name'] = trim($data['card_name'] ?: $data['name']);
// 汇付对私法人:card_name 必须与个人开户姓名 name 完全一致
$data['card_name'] = $data['name'];
$data['mp'] = trim($data['mp'] ?? $data['mobile_no']);
} else {
if ($data['bank_account_type'] === '1') {
$data['card_name'] = trim($data['card_name'] ?: $data['reg_name']);
} else {
$data['card_name'] = trim($data['card_name'] ?: $data['legal_name']);
// 企业/个体户对私结算:card_name 必须与法人姓名一致
$data['card_name'] = $data['legal_name'];
$data['cert_no'] = $data['legal_cert_no'];
$data['cert_validity_type'] = $data['legal_cert_validity_type'];
$data['cert_begin_date'] = $data['legal_cert_begin_date'];