f
This commit is contained in:
@@ -88,19 +88,23 @@ func (s *CertificationApplicationServiceImpl) SelectSignPlatform(
|
||||
return nil, err
|
||||
}
|
||||
|
||||
transactorName, transactorMobile, transactorID := pickTransactorFromRecord(record)
|
||||
clientCorpID := strings.TrimSpace(record.UnifiedSocialCode)
|
||||
authReq := &ports.EnterpriseAuthRequest{
|
||||
ClientCorpID: record.UnifiedSocialCode,
|
||||
ClientUserID: record.LegalPersonID,
|
||||
ClientCorpID: clientCorpID,
|
||||
ClientUserID: transactorID,
|
||||
CompanyName: record.CompanyName,
|
||||
UnifiedSocialCode: record.UnifiedSocialCode,
|
||||
LegalPersonName: record.LegalPersonName,
|
||||
LegalPersonID: record.LegalPersonID,
|
||||
TransactorName: record.LegalPersonName,
|
||||
TransactorMobile: record.LegalPersonPhone,
|
||||
TransactorID: record.LegalPersonID,
|
||||
TransactorName: transactorName,
|
||||
TransactorMobile: transactorMobile,
|
||||
TransactorID: transactorID,
|
||||
}
|
||||
// 选平台时先落库种子数据(clientCorpId/USCC),供后续 /corp/get 与签署复用
|
||||
s.ensureFadadaCorpAuthSeed(ctx, cert, record, clientCorpID)
|
||||
|
||||
authRes, alreadyVerified, err := s.generateEnterpriseAuthOrDetectVerifiedWithProvider(ctx, provider, authReq)
|
||||
authRes, alreadyVerified, err := s.generateEnterpriseAuthOrDetectVerifiedWithProvider(ctx, provider, authReq, cert, record)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("生成企业认证链接失败: %w", err)
|
||||
}
|
||||
@@ -166,7 +170,20 @@ func (s *CertificationApplicationServiceImpl) HandleFadadaCallback(ctx context.C
|
||||
zap.String("event", ev.Event),
|
||||
zap.Bool("auth_passed", ev.AuthPassed),
|
||||
zap.Bool("sign_completed", ev.SignCompleted),
|
||||
zap.String("sign_flow_id", ev.SignFlowID))
|
||||
zap.String("sign_flow_id", ev.SignFlowID),
|
||||
zap.String("open_corp_id", ev.OpenCorpID),
|
||||
zap.String("client_corp_id", ev.ClientCorpID))
|
||||
|
||||
// 授权成功:落库 openCorpId / clientCorpId
|
||||
if ev.AuthPassed && (strings.TrimSpace(ev.OpenCorpID) != "" || strings.TrimSpace(ev.ClientCorpID) != "") {
|
||||
rec := entities.NewFadadaCorpAuthRecord("", "", s.fadadaAppID(), ev.OrgName, "", ev.ClientCorpID)
|
||||
rec.ApplyAuthStatus(ev.OpenCorpID, ev.ClientCorpID, "authorized", "", "", nil, "callback_auth_passed")
|
||||
if s.fadadaCorpAuthRecordRepo != nil {
|
||||
if err := s.fadadaCorpAuthRecordRepo.UpsertByBizKey(ctx, rec); err != nil {
|
||||
s.logger.Warn("回调落库法大大授权信息失败", zap.Error(err))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 认证完成主要依赖 ConfirmAuth / details 轮询;签署完成按任务 ID 兜底推进
|
||||
if ev.SignCompleted && ev.SignFlowID != "" {
|
||||
@@ -186,19 +203,59 @@ func (s *CertificationApplicationServiceImpl) generateEnterpriseAuthOrDetectVeri
|
||||
ctx context.Context,
|
||||
provider ports.SignPlatformProvider,
|
||||
authReq *ports.EnterpriseAuthRequest,
|
||||
cert *entities.Certification,
|
||||
record *entities.EnterpriseInfoSubmitRecord,
|
||||
) (*ports.AuthLinkResult, bool, error) {
|
||||
userID := ""
|
||||
if cert != nil {
|
||||
userID = cert.UserID
|
||||
}
|
||||
// 1) 正式查授权:POST /corp/get(三选一:库 openCorpId > USCC corpIdentNo > 库 clientCorpId)
|
||||
authQuery := s.resolveCorpAuthQueryForGet(ctx, userID, authReq.UnifiedSocialCode, authReq.ClientCorpID)
|
||||
s.logger.Info("查询企业授权状态入参",
|
||||
zap.String("company_name", authReq.CompanyName),
|
||||
zap.String("open_corp_id", authQuery.OpenCorpID),
|
||||
zap.String("corp_ident_no", authQuery.CorpIdentNo),
|
||||
zap.String("client_corp_id", authQuery.ClientCorpID),
|
||||
zap.String("platform", string(provider.Platform())))
|
||||
authStatus, qErr := provider.QueryCorpAuthStatus(ctx, authQuery)
|
||||
if qErr != nil {
|
||||
s.logger.Warn("查询企业授权状态失败,将继续尝试获取授权链接",
|
||||
zap.String("company_name", authReq.CompanyName),
|
||||
zap.String("uscc", authReq.UnifiedSocialCode),
|
||||
zap.String("platform", string(provider.Platform())),
|
||||
zap.Error(qErr))
|
||||
} else if authStatus != nil && authStatus.Supported {
|
||||
s.persistFadadaCorpAuthStatus(ctx, cert, record, authStatus, "corp_get_select_platform")
|
||||
if authStatus.Authorized {
|
||||
s.logger.Info("查询企业授权状态为已授权,跳过认证链接并视为认证完成",
|
||||
zap.String("company_name", authReq.CompanyName),
|
||||
zap.String("uscc", authReq.UnifiedSocialCode),
|
||||
zap.String("platform", string(provider.Platform())),
|
||||
zap.String("binding_status", authStatus.BindingStatus),
|
||||
zap.String("open_corp_id", authStatus.OpenCorpID),
|
||||
zap.String("ident_status", authStatus.IdentStatus))
|
||||
return nil, true, nil
|
||||
}
|
||||
}
|
||||
|
||||
// 2) 未授权或不支持查询:走获取授权链接
|
||||
authRes, err := provider.GenerateEnterpriseAuth(ctx, authReq)
|
||||
if err == nil {
|
||||
return authRes, false, nil
|
||||
}
|
||||
|
||||
// 法大大:企业已对本应用授权(210002)= 授权已完成,直接跳过授权页
|
||||
// 3) 兜底:get-auth-url 返回授权范围重复获取(210002/210013)
|
||||
if isEnterpriseAlreadyAuthorizedErr(err) {
|
||||
s.logger.Info("第三方返回企业已授权,跳过认证链接并视为认证完成",
|
||||
s.logger.Info("获取授权链接返回重复授权错误码,跳过认证链接并视为认证完成",
|
||||
zap.String("company_name", authReq.CompanyName),
|
||||
zap.String("uscc", authReq.UnifiedSocialCode),
|
||||
zap.String("platform", string(provider.Platform())),
|
||||
zap.Error(err))
|
||||
// 再查一次 /corp/get,尽量把 openCorpId 落库
|
||||
if authStatus2, qErr2 := provider.QueryCorpAuthStatus(ctx, authQuery); qErr2 == nil && authStatus2 != nil {
|
||||
s.persistFadadaCorpAuthStatus(ctx, cert, record, authStatus2, "corp_get_after_duplicate_auth")
|
||||
}
|
||||
return nil, true, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user