fix: allow private account holder names in signing

This commit is contained in:
limeng 2026-08-31 13:07:00 +08:00
parent 5679a41105
commit af323f29b6
4 changed files with 27 additions and 6 deletions

View File

@ -6,6 +6,7 @@
- 每次发起先在 `business_courier_agreement_signatures` 落库,生成唯一 `business_no` 和 `idempotency_key`,再生成 PDF、上传文件并创建签署流程。
- 保存 `fileId`、`signFlowId`、模板版本、原文哈希、签署文件哈希和完成证书哈希。
- 回调复用现有 E签宝验签入口,校验原始 Body、时间戳、AppId 和 HmacSHA256;协议回调按流程 ID 幂等更新并排队归档。
- 收款账户证明及账户变更中的开户名称按实际银行卡私户持卡人姓名填写,不要求与营业执照或公司全称一致;签署主体和公司全称仍单独维护。
- 签署完成后只归档文件,不自动启用收款账户;账户、生效日期和收款人仍须财务复核。
## 配置步骤

View File

@ -1300,8 +1300,9 @@
<input class="agreement-control" id="agreement-proof-effective-date" name="account_proof_effective_date" type="date" value="{{ now()->toDateString() }}" required>
</div>
<div class="agreement-field">
<label for="agreement-proof-account-name">开户名称 <span class="agreement-required" aria-hidden="true">*</span></label>
<input class="agreement-control" id="agreement-proof-account-name" name="account_proof_account_name" type="text" placeholder="与营业执照一致" required>
<label for="agreement-proof-account-name">开户名称(私户持卡人姓名) <span class="agreement-required" aria-hidden="true">*</span></label>
<input class="agreement-control" id="agreement-proof-account-name" name="account_proof_account_name" type="text" placeholder="填写私户持卡人姓名" autocomplete="name" required>
<p class="agreement-help">填写实际收款银行卡对应的私户持卡人姓名,无需与营业执照或公司全称一致。</p>
</div>
<div class="agreement-field">
<label for="agreement-proof-bank-name">开户银行 <span class="agreement-required" aria-hidden="true">*</span></label>
@ -1319,8 +1320,9 @@
<input class="agreement-control" id="agreement-change-date" name="account_change_date" type="date" value="{{ now()->toDateString() }}" required>
</div>
<div class="agreement-field">
<label for="agreement-old-account-name">原收款账户 <span class="agreement-required" aria-hidden="true">*</span></label>
<input class="agreement-control" id="agreement-old-account-name" name="old_account_name" type="text" required>
<label for="agreement-old-account-name">原收款账户(私户持卡人姓名) <span class="agreement-required" aria-hidden="true">*</span></label>
<input class="agreement-control" id="agreement-old-account-name" name="old_account_name" type="text" placeholder="填写原私户持卡人姓名" autocomplete="name" required>
<p class="agreement-help">填写原收款银行卡对应的私户持卡人姓名,无需与营业执照或公司全称一致。</p>
</div>
<div class="agreement-field">
<label for="agreement-old-account-number">原账号 <span class="agreement-required" aria-hidden="true">*</span></label>
@ -1335,8 +1337,9 @@
<input class="agreement-control" id="agreement-new-effective-date" name="new_account_effective_date" type="date" value="{{ now()->toDateString() }}" required>
</div>
<div class="agreement-field">
<label for="agreement-new-account-name">新开户名称 <span class="agreement-required" aria-hidden="true">*</span></label>
<input class="agreement-control" id="agreement-new-account-name" name="new_account_name" type="text" required>
<label for="agreement-new-account-name">新开户名称(私户持卡人姓名) <span class="agreement-required" aria-hidden="true">*</span></label>
<input class="agreement-control" id="agreement-new-account-name" name="new_account_name" type="text" placeholder="填写新私户持卡人姓名" autocomplete="name" required>
<p class="agreement-help">填写新收款银行卡对应的私户持卡人姓名,无需与营业执照或公司全称一致。</p>
</div>
<div class="agreement-field">
<label for="agreement-new-bank-name">新开户银行 <span class="agreement-required" aria-hidden="true">*</span></label>

View File

@ -87,6 +87,8 @@ class AgreementSigningPageTest extends FeatureTestCase
->assertSee('data-template-preview="account-proof"', false)
->assertSeeText('生效日期')
->assertSeeText('银行帐户')
->assertSeeText('开户名称(私户持卡人姓名)')
->assertSeeText('填写实际收款银行卡对应的私户持卡人姓名,无需与营业执照或公司全称一致。')
->assertSeeText('我司同意自')
->assertSee('data-template-fields="account-change"', false)
->assertSee('data-template-preview="account-change"', false)

View File

@ -53,6 +53,21 @@ class CourierAgreementSignatureWorkflowTest extends FeatureTestCase
$this->assertSame(1, CourierAgreementSignature::query()->count());
}
public function test_account_proof_accepts_private_account_holder_name_different_from_company_name(): void
{
$this->fakeEsign();
$payload = $this->accountProofPayload('request-private-holder');
$payload['account_proof_account_name'] = '李四';
$this->loginAs()
->post(route('business.courier-agreement-signatures.store'), $payload)
->assertRedirect();
$signature = CourierAgreementSignature::query()->firstOrFail();
$this->assertSame('李四', $signature->payload['account_proof_account_name']);
$this->assertNotSame($this->company->name, $signature->payload['account_proof_account_name']);
}
public function test_cooperation_contract_maps_party_variables_and_creates_two_signers(): void
{
$this->fakeEsign();