feat(wallet): 用户提交时直连汇付API优化流程 - 移除数据库事务包装汇付API调用,避免长耗时锁表问题 - 用户提交申请时直接连接汇付服务,不再仅保存草稿等待后台处理 - 修改汇付重提交方法名为resubmit以明确区分不同操作 - 更新异常处理机制,增加Throwable捕获确保错误正确处理 - 调整提交成功后的消息提示内容,准确反映当前处理状态 fix(agent): 代理申请流程汇付集成优化 - 统一汇付进件提交失败的消息提示文本 - 优化代理申请状态判断逻辑,根据汇付载荷存在性决定提交方式 - 更新区域代理申请成功提示,区分已提交汇付和待提交场景 - 修复业务审核通过后的汇付提交触发机制 docs(huifu): 更新汇付进件相关文档说明 - 修改后台管理界面描述,体现用户直连汇付的新流程 - 更新业务审核状态下的操作指引说明 - 调整汇付网关类的方法注释,明确各方法职责变化 - 修正canSaveHuifuDraft方法注释,说明字段兼容性和新功能 ```
148 行
5.2 KiB
PHP
148 行
5.2 KiB
PHP
<?php
|
|
|
|
namespace addons\shopro_huifu\library\onboard;
|
|
|
|
use addons\shopro_huifu\library\Bridge;
|
|
use addons\shopro_huifu\library\HuifuConfig;
|
|
use addons\shopro_huifu\model\Onboard;
|
|
use think\Db;
|
|
|
|
class HuifuOnboardGate
|
|
{
|
|
/**
|
|
* 与 shopro split Config::isHuifuMode 同口径,但不依赖核心是否已升级该方法
|
|
*/
|
|
public static function isHuifuSplitActive()
|
|
{
|
|
try {
|
|
$split = Db::name('shopro_split_config')->column('value', 'name');
|
|
} catch (\Exception $e) {
|
|
return false;
|
|
}
|
|
if (($split['split_enable'] ?? '0') !== '1') {
|
|
return false;
|
|
}
|
|
$mode = $split['split_mode'] ?? 'wechat';
|
|
if ($mode === 'huifu' || $mode === 'both') {
|
|
return true;
|
|
}
|
|
$provider = $split['split_provider'] ?? 'auto';
|
|
if ($provider === 'huifu') {
|
|
return true;
|
|
}
|
|
if ($provider === 'auto') {
|
|
return Bridge::isHuifuMiniProgramChannel('wxMiniProgram');
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static function isOnboardRequired()
|
|
{
|
|
if (!Bridge::isEnabled()) {
|
|
return false;
|
|
}
|
|
if (HuifuConfig::getInstance()->get('onboard_required', '1') === '0') {
|
|
return false;
|
|
}
|
|
return self::isHuifuSplitActive();
|
|
}
|
|
|
|
/**
|
|
* 后台业务审核通过后的兜底:若仍有未提交的 draft,则补提交汇付
|
|
* (正常路径已由用户提交时直连汇付)
|
|
*/
|
|
public static function submitOnBusinessApproved($userId, $roleType, $roleRefId)
|
|
{
|
|
if (!self::isOnboardRequired()) {
|
|
return null;
|
|
}
|
|
try {
|
|
$service = new HuifuOnboardService();
|
|
return $service->submitFromDraft($userId, $roleType, $roleRefId);
|
|
} catch (\Throwable $e) {
|
|
\think\Log::error('[shopro_huifu] onboard after admin approve fail uid=' . $userId . ' ' . $e->getMessage());
|
|
return null;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 用户端是否可重新提交汇付(仅汇付驳回/失败后)
|
|
*/
|
|
public static function canSubmitOnboard($userId, $roleType, $roleRefId, $agentStatus = '')
|
|
{
|
|
if (!self::isOnboardRequired()) {
|
|
return false;
|
|
}
|
|
$row = Onboard::findByRole($userId, $roleType, $roleRefId);
|
|
if (!$row) {
|
|
return false;
|
|
}
|
|
return in_array($row['onboard_status'], [
|
|
Onboard::STATUS_REJECTED,
|
|
Onboard::STATUS_FAILED,
|
|
], true);
|
|
}
|
|
|
|
/**
|
|
* 用户端是否可首次提交进件资料到汇付(字段名 can_save_draft 兼容旧前端)
|
|
*/
|
|
public static function canSaveHuifuDraft($userId, $roleType, $roleRefId, $agentStatus = '')
|
|
{
|
|
if (!self::isOnboardRequired()) {
|
|
return false;
|
|
}
|
|
$row = Onboard::findByRole($userId, $roleType, $roleRefId);
|
|
if ($row && $row['onboard_status'] === Onboard::STATUS_APPROVED) {
|
|
return false;
|
|
}
|
|
if ($row && in_array($row['onboard_status'], [
|
|
Onboard::STATUS_SUBMITTING,
|
|
Onboard::STATUS_BASIC_OK,
|
|
Onboard::STATUS_BUSI_PENDING,
|
|
], true)) {
|
|
return false;
|
|
}
|
|
// 已有 draft 且业务侧仍待审/驳回时,不允许反复改资料占坑(历史规则保留)
|
|
if ($row && $row['onboard_status'] === Onboard::STATUS_DRAFT
|
|
&& in_array($agentStatus, ['pending', 'needinfo', 'reject'], true)) {
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public static function publicStatus($row, $userId = 0, $roleType = 'promoter', $roleRefId = 0, $agentStatus = '')
|
|
{
|
|
$required = self::isOnboardRequired();
|
|
$canSubmit = $required && $userId && self::canSubmitOnboard($userId, $roleType, $roleRefId, $agentStatus);
|
|
$canSaveDraft = $required && $userId && self::canSaveHuifuDraft($userId, $roleType, $roleRefId, $agentStatus);
|
|
// 仅历史 draft 残留时提示等待(正常已改为用户提交直连汇付)
|
|
$awaitAdmin = $required && $row && $row['onboard_status'] === Onboard::STATUS_DRAFT
|
|
&& in_array($agentStatus, ['pending', 'needinfo', 'reject'], true);
|
|
if (!$row) {
|
|
return [
|
|
'required' => $required,
|
|
'can_submit' => $canSubmit,
|
|
'can_save_draft' => $canSaveDraft,
|
|
'await_admin' => false,
|
|
'audit_first' => false,
|
|
'status' => null,
|
|
'huifu_id' => '',
|
|
'reject_reason' => '',
|
|
'draft' => null,
|
|
];
|
|
}
|
|
return [
|
|
'required' => $required,
|
|
'can_submit' => $canSubmit,
|
|
'can_save_draft' => $canSaveDraft,
|
|
'await_admin' => $awaitAdmin,
|
|
'audit_first' => false,
|
|
'status' => $row['onboard_status'],
|
|
'huifu_id' => $row['huifu_id'] ? substr($row['huifu_id'], 0, 4) . '****' . substr($row['huifu_id'], -4) : '',
|
|
'reject_reason' => $row['reject_reason'] ?? '',
|
|
'apply_no' => $row['apply_no'] ?? '',
|
|
'draft' => HuifuOnboardAdminView::clientFormFromRow($row),
|
|
];
|
|
}
|
|
}
|