商户 API 接入指南
    • 商户API 接入指南
    • 商户API接口-结算
      • 查询结算单列表
        GET
      • 创建结算单
        POST
      • 发起支付
        POST
      • 查询结算单详情
        GET
      • 查询结算回单
        GET
    • 商户API接口-商户项目接口
      • 上传交付物
        POST
      • 批量招募创客
        POST
      • 查询创客招募和签约状态
        POST
      • 查询已上传交付物
        POST
      • 查询单个创客的额度
        POST
      • 批量查询创客额度
        POST
      • 创建项目
        POST
      • 查询项目列表
        GET
      • 查询项目详情
        GET
    • 商户API接口-自然人
      • 解绑自由职业者
        POST
      • 查询自由职业者信息
        POST
    • 商户API接口-发票管理
      • 开票申请
        POST
      • 可开票信息查询
        GET
      • 发票查询
        GET
    • 商户API接口-企业账户
      • 查询企业账户信息
        GET
    • 数据模型
      • LgFile
      • TaxCompanyUpdateRequest
      • ResultBoolean
      • TaxCategoryUpdateRequest
      • ResultTaxCategoryResponse
      • TaxCategoryResponse
      • Supplier
      • ResultVoid
      • ProjectMakerTaskDTO
      • ProjectAttachmentDTO
      • ProjectAttachmentDetail
      • ProjectAttachmentHistoryVO
      • AlipayAccountInfo
      • AlipayIsvAccountInfo
      • BankAccountInfo
      • GenericPaymentAccountInfo
      • PaymentAccountInfo
      • PaymentUpdateRequest
      • WechatAccountInfo
      • Merchant
      • Payment
      • PaymentResponse
      • ResultPaymentResponse
      • TaxCompany
      • PaymentEncryptInfoUpdateRequest
      • PaymentChannelUpdateRequest
      • PaymentChannelResponse
      • ResultPaymentChannelResponse
      • MerchantUserDTO
      • MerchantTaxCompanyDTO
      • MerchantDTO
      • MakerContractDTO
      • MakerDTO
      • DistributorDTO
      • ContractConfig
      • PaymentVo
      • ProjectDTO
      • MakerPaymentDTO
      • MerchantAccountUpdateRequest
      • MerchantAccountResponse
      • ResultMerchantAccountResponse
      • ToSignDto
      • MerchantApiContractSignV2Response
      • ResultMerchantApiContractSignV2Response
      • RegisterRequest
      • ResultLong
      • LoginRequest
      • LoginResponse
      • ResultLoginResponse
      • TaxCompanyCreateRequest
      • ResultTaxCompanyDTO
      • TaxCategoryDTO
      • TaxCompanyBank
      • TaxCompanyDTO
      • ResultMapLongListPaymentResponse
      • TaxCategoryCreateRequest
      • SystemConfig
      • UpdateConfigValueDTO
      • SystemConfigQueryDTO
      • IPageSystemConfig
      • ResultIPageSystemConfig
      • ResultListSystemConfigListDto
      • SystemConfigListDto
      • SystemConfigBatchUpdateDTO
      • MerchantSettlementDetailDTO
      • SelfEmployedDTO
      • Role
      • ResultString
      • RoleRequest
      • Pagination
      • OrderItem
      • PageRole
      • ResultPageRole
      • ResultListRoleResponse
      • RoleResponse
      • AuthRoleDto
      • RegistrationDTO
      • ResultRegistrationDTO
      • PlatformQuotaRuleConfigDTO
      • PlatformQuotaRuleDTO
      • PlatformQuotaRuleDetailDTO
      • PlatformQuotaRuleDetailVo
      • ResultPlatformQuotaRuleDetailVo
      • QuotaQueryDTO
      • PayMethodQuotaInfo
      • QuotaSummaryVO
      • ResultQuotaSummaryVO
      • ResultProjectMakerTaskDTO
      • ResultProjectAttachmentDTO
      • QuerySettleRateRequest
      • ResultBigDecimal
      • ProjectAuditRequest
      • ProjectAuditResponse
      • ResultProjectAuditResponse
      • PermissionRequest
      • PermissionResponse
      • ResultListPermissionResponse
      • Permission
      • IPagePermissionResponse
      • ResultIPagePermissionResponse
      • ResultString[]
      • PaymentCreateRequest
      • PaymentChannelCreateRequest
      • Partner
      • PartnerSearchDto
      • IPagePartnerVo
      • PartnerVo
      • ResultIPagePartnerVo
      • ResultPartner
      • PartnerCommissionSearchDto
      • JSONObject
      • ResultJSONObject
      • PartnerReceiptDto
      • ResultListLgFile
      • IPagePartnerCommissionVo
      • PartnerCommissionVo
      • ResultIPagePartnerCommissionVo
      • PartnerInvoiceDto
      • ResultT
      • T
      • NotifyInfoResendDto
      • ResultMerchantDTO
      • ResultMerchantUserDTO
      • ResultMerchantTaxCompanyDTO
      • MerchantPushConfig
      • MerchantBankDTO
      • MerchantApiClientDTO
      • MerchantAccountRechargeDTO
      • MerchantAccountRechargeAuditDTO
      • PlatformMerchantAccountRechargeRequest
      • IPageMerchantAccountRechargeVO
      • MerchantAccountRechargeVO
      • ResultIPageMerchantAccountRechargeVO
      • RechargeDTO
      • MerchantMyAcctDto
      • ProjectVo
      • ResultListMerchantMyAcctDto
      • ResultMakerDTO
      • MakerPrivateConfirmDTO
      • ResultObject
      • ProjectMakerDTO
      • PhoneDto
      • AlipayIsvDto
      • AlipayIsvQueryDto
      • IsvAlipayIsvAccountBookVo
      • IsvAlipayIsvVo
      • IsvPaymentVo
      • ResultListIsvPaymentVo
      • CreateAccountBookDto
      • InvoiceDto
      • RejectInvoiceDTO
      • PlatformMerchantRechargeDetailPageDto
      • PagePlatformMerchantRechargeDetailDto
      • PagePlatformMerchantRechargeDetailDtoPlatformMerchantRechargeDetailDto
      • PlatformMerchantRechargeDetailDto
      • ResultPagePlatformMerchantRechargeDetailDtoPlatformMerchantRechargeDetailDto
      • ResultMapStringObject
      • FeishuSendApplyDemoRequest
      • FormItem
      • FeishuSendApplyDemoResponse
      • ResultFeishuSendApplyDemoResponse
      • ResultDistributorDTO
      • DeadLetterHandlerDto
      • DashboardRankingDTO
      • DashboardProjectRanking
      • IPageDashboardProjectRanking
      • ResultIPageDashboardProjectRanking
      • DashboardMakerRanking
      • IPageDashboardMakerRanking
      • ResultIPageDashboardMakerRanking
      • ResultContractConfig
      • AcceptanceSearchDto
      • AcceptanceSearchVo
      • PageAcceptanceSearchVo
      • ResultPageAcceptanceSearchVo
      • AcceptanceAuditDto
      • PlatformUserUpdateRequest
      • MerchantAccountDTO
      • ResetPwdRequest
      • PlatformAccountDTO
      • JwtObject
      • ResultJwtObject
      • PlatformUserRequest
      • PagePlatformUserResponse
      • PlatformUserResponse
      • ResultPagePlatformUserResponse
      • ForgetPasswordDto
      • PlatformUserDTO
      • ResultPlatformUserDTO
      • PartnerCommissionDto
      • PartnerCommission
      • ResultListPartnerCommission
      • ResultLgFile
      • ResultURL
      • MerchantApiResponse
      • MakerInfo
      • MerchantApiPreContractSignRequest
      • SettlementSubmitDto
      • MerchantSettlementConfirmDTO
      • MerchantSettlementImportDTO
      • SettlementConfirmDTO
      • MerchantSettlementCheckResultDTO
      • ResultMerchantSettlementCheckResultDTO
      • ResultProjectDTO
      • MerchantVerifyStatusDTO
      • BatchAuditRejectDTO
      • AuditRejectDTO
      • AddWhiteDTO
      • MerchantUserUpdateRequest
      • MerchantResetPwdRequest
      • IPageMerchantUserResponse
      • MerchantUserResponse
      • ResultIPageMerchantUserResponse
      • MessageIdRequestDTO
      • ResultInteger
      • QuickAddMerchantMakerDTO
      • MakerImportDTO
      • MakerImportResultDTO
      • ResultMakerImportResultDTO
      • CheckMakerExistsDTO
      • MakerExistenceCheckDTO
      • ResultMakerExistenceCheckDTO
      • MerchantAddMakerDTO
      • ResultMakerContractDTO
      • ResultListString
      • Result
      • BatchSubmitRequestDTO
      • FileSubmissionDTO
      • MemberSubmissionRequestDTO
      • BatchSubmitResponseDTO
      • ResultBatchSubmitResponseDTO
      • SubmissionResultDTO
      • BenBenBaseDataVo
      • MerchantRechargeDetailPageDto
      • IPageMerchantRechargeDetailVO
      • MerchantRechargeDetailVO
      • ResultIPageMerchantRechargeDetailVO
      • MerchantApiContractSignResponse
      • ResultMerchantApiContractSignResponse
      • ResultSelfEmployedDTO
      • ProjectMakerTask
      • ResultProjectMakerTask
      • RealNameVerificationRequest
      • WxMpLoginRequest
      • UpdateMakerPhoneDto
      • MakerLivenessInitVO
      • ResultMakerLivenessInitVO
      • CaptchaDTO
      • MouthTaxVo
      • ResultTaxVo
      • TaxVo
      • MerchantAccountCreateRequest
      • MerchantAccountRechargeRequest
      • MerchantAccountRechargeResponse
      • ResultMerchantAccountRechargeResponse
      • MerchantAccountQueryRequest
      • PageMerchantAccountResponse
      • ResultPageMerchantAccountResponse
      • MerchantAccountBalanceRecordQueryRequest
      • MerchantAccountBalanceRecord
      • PageMerchantAccountBalanceRecord
      • ResultPageMerchantAccountBalanceRecord
      • TestCryptoRequest
      • MerchantApiResponseTestCryptoResponse
      • TestCryptoResponse
      • MerchantApiSettlementCreateRequest
      • PaymentAccount
      • SettlementDetailRequest
      • MerchantApiResponseMerchantApiSettlementCreateResponse
      • MerchantApiSettlementCreateResponse
      • SettlementDetail
      • MerchantApiSettlementPayRequest
      • MerchantApiResponseMerchantApiSettlementPayResponse
      • MerchantApiSettlementPayResponse
      • FileInfo
      • MerchantApiMakerUploadDeliverableRequest
      • FileResult
      • MerchantApiMakerUploadDeliverableResponse
      • MerchantApiResponseMerchantApiMakerUploadDeliverableResponse
      • MerchantApiRecruitRequest
      • RecruitMaker
      • MerchantApiRecruitResponse
      • MerchantApiResponseMerchantApiRecruitResponse
      • ResultItem
      • MerchantApiRecruitStatusQueryRequest
      • MerchantApiRecruitStatusQueryResponse
      • MerchantApiResponseMerchantApiRecruitStatusQueryResponse
      • MerchantApiDeliverableQueryRequest
      • DeliverableRecord
      • MerchantApiDeliverableQueryResponse
      • MerchantApiResponseMerchantApiDeliverableQueryResponse
      • MerchantApiMakerQuotaRequest
      • MerchantApiProjectMakerQuotaResponse
      • MerchantApiResponseMerchantApiProjectMakerQuotaResponse
      • MethodQuota
      • MakerIdentifier
      • MerchantApiMakerQuotaBatchRequest
      • MerchantApiProjectMakerQuotaBatchResponse
      • MerchantApiResponseMerchantApiProjectMakerQuotaBatchResponse
      • MerchantApiProjectSaveRequest
      • MerchantApiProjectSaveResponse
      • MerchantApiResponseMerchantApiProjectSaveResponse
      • MerchantApiMakerUnbindRequest
      • MerchantApiResponseVoid
      • MerchantApiNaturalPersonQueryRequest
      • MerchantApiNaturalPersonQueryResponse
      • MerchantApiResponseMerchantApiNaturalPersonQueryResponse
      • NaturalMakerTaxCompanyQualificationInfo
      • NaturalPersonInfo
      • MerchantApiInvoiceApplyV2Request
      • InvoiceFile
      • MerchantApiInvoiceResultResponse
      • MerchantApiResponseMerchantApiInvoiceResultResponse
      • MerchantApiContractSignQueryRequest
      • MerchantApiContractSignQueryRequestV2
      • MakerInfoVO
      • MakerTokenV2VO
      • ResultMakerTokenV2VO
      • TaxCompanyListResponse
      • JsonPageTaxCompanyListResponse
      • ResultJsonPageTaxCompanyListResponse
      • ResultListTaxCompanyBankWithAuditDTO
      • TaxCompanyBankWithAuditDTO
      • ResultTaxCompanyDetailResponse
      • TaxCategoryDisplayResponse
      • TaxCompanyBankResponse
      • TaxCompanyDetailResponse
      • GroupedPaymentResponse
      • ResultTaxCompanyAuditConfigVO
      • TaxCategoryVO
      • TaxCompanyAuditConfigVO
      • ResultListTaxCompanyListResponse
      • ResultListTaxCategoryResponse
      • IPageTaxCategoryResponse
      • ResultIPageTaxCategoryResponse
      • TaxCategoryQueryRequest
      • ResultSystemConfig
      • ResultMapStringString
      • ResultListSystemConfig
      • IPageSupplier
      • ResultIPageSupplier
      • ResultListSupplier
      • ResultSupplier
      • ResultSupplierMerchantConfigDto
      • SupplierConfigDto
      • SupplierMerchantConfigDto
      • ResultListSupplierConfigDto
      • JsonPageMerchantSettlementDetailDTO
      • ResultJsonPageMerchantSettlementDetailDTO
      • ResultSettlementDetailTotalDTO
      • SettlementDetailTotalDTO
      • ResultMerchantSettlementDetailDTO
      • SelfEmployedQueryDTO
      • JsonPagePlatformSelfEmployedVo
      • PlatformSelfEmployedVo
      • ResultJsonPagePlatformSelfEmployedVo
      • ResultRole
      • PlatformRegistrationQueryDTO
      • JsonPageRegistrationVo
      • RegistrationVo
      • ResultJsonPageRegistrationVo
      • DictVo
      • ResultListDictVo
      • ResultRegistrationVo
      • SettlementReceiptSearchDto
      • IPageSettlementReceiptVo
      • ResultIPageSettlementReceiptVo
      • SettlementReceiptVo
      • ProjectQueryDTO
      • JsonPagePlatformProjectListResponse
      • PlatformProjectListResponse
      • ResultJsonPagePlatformProjectListResponse
      • JsonPageProjectMakerTaskDTO
      • ResultJsonPageProjectMakerTaskDTO
      • JsonPageProjectMakerDTO
      • ResultJsonPageProjectMakerDTO
      • ProjectAttachmentQueryDTO
      • JsonPageProjectAttachmentListDTO
      • ProjectAttachmentListDTO
      • ResultJsonPageProjectAttachmentListDTO
      • PlatformProjectDetailResponse
      • ResultPlatformProjectDetailResponse
      • ResultPermission
      • PaymentDecryptResponse
      • ResultPaymentDecryptResponse
      • ResultListPaymentResponse
      • PaymentQueryRequest
      • IPagePaymentResponse
      • ResultIPagePaymentResponse
      • PaymentChannelQueryRequest
      • IPagePaymentChannelResponse
      • ResultIPagePaymentChannelResponse
      • ResultListPaymentChannelResponse
      • ResultListPartnerVo
      • OperateLogRequest
      • OperateLog
      • PageOperateLog
      • ResultPageOperateLog
      • NotifyInfoSearchDto
      • IPageNotifyInfo
      • NotifyInfo
      • ResultIPageNotifyInfo
      • JsonPageMerchantDTO
      • ResultJsonPageMerchantDTO
      • JsonPageMerchantUserDTO
      • ResultJsonPageMerchantUserDTO
      • JsonPageMerchantTaxCompanyDTO
      • ResultJsonPageMerchantTaxCompanyDTO
      • ResultMerchantPushConfig
      • ResultListMerchantPushConfig
      • MerchantBank
      • ResultMerchantBank
      • MerchantApiClientVO
      • ResultMerchantApiClientVO
      • ResultMerchantAccountRechargeDTO
      • ResultListMerchantDTO
      • JsonPageMakerDTO
      • ResultJsonPageMakerDTO
      • JsonPageMakerContractDTO
      • ResultJsonPageMakerContractDTO
      • MakerSignDTO
      • ResultMakerSignDTO
      • SignDTO
      • AlipayIsvVo
      • ResultAlipayIsvVo
      • IsvAccountNameVo
      • ResultListIsvAccountNameVo
      • InvoiceSearchDto
      • IPageInvoiceVo
      • InvoiceVo
      • MerchantSettlementDetailVo
      • ResultIPageInvoiceVo
      • ResultPlatformMerchantRechargeDetailDto
      • IPageDistributorDTO
      • ResultIPageDistributorDTO
      • Distributor
      • ResultDistributor
      • ResultListDistributorDTO
      • DistributorMerchant
      • DeadLetterSearchDto
      • DeadLetterRecord
      • IPageDeadLetterRecord
      • ResultIPageDeadLetterRecord
      • DashboardStaticVO
      • ResultDashboardStaticVO
      • ResultListSettlementDataVO
      • SettlementDataVO
      • DashboardAuditStaticVO
      • ResultDashboardAuditStaticVO
      • JsonPageContractConfig
      • ResultJsonPageContractConfig
      • ResultThirdUserVo
      • ThirdUserVo
      • AuditLogResponse
      • ResultAuditLogResponse
      • ResultUserOperationStatistics
      • UserOperationStatistics
      • ResultListAuditLogResponse
      • OperationTrendData
      • ResultListOperationTrendData
      • OperationTypeStatistics
      • ResultListOperationTypeStatistics
      • ResultListUserOperationStatistics
      • AuditStatisticsResponse
      • ResultAuditStatisticsResponse
      • RiskStatistics
      • AuditLogQueryRequest
      • IPageAuditLogResponse
      • ResultIPageAuditLogResponse
      • MerchantAccountBalanceRecordDto
      • IPagePlatformAccountBalanceRecordVo
      • PlatformAccountBalanceRecordVo
      • ResultIPagePlatformAccountBalanceRecordVo
      • PlatformAccountBalanceRecordResDto
      • ResultPlatformAccountBalanceRecordResDto
      • ResultPlatformUserResponse
      • ResultListJSONObject
      • MerchantSettlementDTO
      • JsonPageMerchantSettlementDTO
      • ResultJsonPageMerchantSettlementDTO
      • ResultMerchantSettlementDTO
      • FlowDTO
      • ResultListFlowDTO
      • ResultListProjectDTO
      • ResultListPaymentVo
      • MakerWithPaymentSearchDto
      • IPageMakerWithPaymentVo
      • MakerWithPaymentVo
      • ResultIPageMakerWithPaymentVo
      • JsonPageProjectDTO
      • ResultJsonPageProjectDTO
      • ResultSetString
      • ResultMerchantUserResponse
      • MerchantUserWechatVo
      • ResultListMerchantUserWechatVo
      • JsonPageMessagePushDTO
      • MessagePushDTO
      • ResultJsonPageMessagePushDTO
      • JsonPageMerchantMakerDTO
      • MerchantMakerDTO
      • ResultJsonPageMerchantMakerDTO
      • ResultMerchant
      • ProjectDetailForClientDTO
      • ResultProjectDetailForClientDTO
      • OssStsTokenDTO
      • ResultOssStsTokenDTO
      • JsonPageProjectMemberDTO
      • MemberSubmissionDTO
      • ProjectMemberDTO
      • ResultJsonPageProjectMemberDTO
      • OssConfigDTO
      • ResultOssConfigDTO
      • IPageMerchantAccountBalanceRecordVo
      • MerchantAccountBalanceRecordVo
      • ResultIPageMerchantAccountBalanceRecordVo
      • IPageMerchantAccountBalanceRecordListResDto
      • MerchantAccountBalanceRecordListResDto
      • ResultIPageMerchantAccountBalanceRecordListResDto
      • MerchantAccountBalanceRecordResDto
      • ResultMerchantAccountBalanceRecordResDto
      • MerchantMyAcctPageDto
      • IPageMerchantMyAcctDto
      • ResultIPageMerchantMyAcctDto
      • CreditInfoDto
      • ResultCreditInfoDto
      • MakerTokenVO
      • ResultMakerTokenVO
      • PageSelfEmployedVo
      • ResultPageSelfEmployedVo
      • SelfEmployedVo
      • ResultListRegistrationVo
      • MakerProjectDTO
      • PageMakerProjectDTO
      • ResultPageMakerProjectDTO
      • ResultMakerProjectDTO
      • MakerProjectCheckResponse
      • ProjectTaskStatus
      • ResultMakerProjectCheckResponse
      • TaxCompanyInfo
      • MakerPaymentVo
      • ResultListMakerPaymentVo
      • MakerPaymentDto
      • ResultMakerPaymentDto
      • ResultMakerPaymentVo
      • Maker
      • MakerUserVO
      • MakerWechat
      • ResultMakerUserVO
      • MakerLivenessResultVO
      • ResultMakerLivenessResultVO
      • ResultListMerchantAccountResponse
      • ResultMerchantAccountBalanceRecord
      • MerchantApiResponseMerchantApiSettlementListResponse
      • MerchantApiSettlementListResponse
      • MerchantApiSettlementSummary
      • MerchantApiResponseMerchantApiSettlementDetailResponse
      • MerchantApiSettlementDetail
      • MerchantApiSettlementDetailResponse
      • MerchantApiResponseMerchantApiSettlementReceiptResponse
      • MerchantApiSettlementReceiptResponse
      • MerchantApiProjectListV2Response
      • MerchantApiResponseMerchantApiProjectListV2Response
      • ProjectItem
      • ConfigItem
      • MerchantApiProjectDetailResponse
      • MerchantApiResponseMerchantApiProjectDetailResponse
      • ProjectPaymentAccountItem
      • InvoiceData
      • MerchantApiInvoiceQueryV2Response
      • MerchantApiResponseMerchantApiInvoiceQueryV2Response
      • TaxCompanyData
      • MerchantAccountItem
      • MerchantApiAccountQueryV2Response
      • MerchantApiResponseMerchantApiAccountQueryV2Response

    商户API 接入指南

    一、背景与目标#

    1.1 业务背景#

    商户 API 面向商户自有业务系统,提供一套围绕“项目合作、创客招募、额度校验、结算发放、交付验收、账户与开票”展开的标准接入能力。
    对商户而言,实际接入的目标通常不是“调用几个接口”,而是把平台能力稳定嵌入自己的业务流程中,例如:
    在商户后台展示可用项目和项目配置
    判断某个创客在当前项目下是否已经招募、是否仍需签约
    批量发起招募,并在商户系统中收取异步处理结果
    在发起结算前,先确认创客在当前项目下是否具备真实可结算额度
    创建结算单、触发支付、追踪结算明细结果并获取回单
    在需要上传成果物的项目中,按结算明细提交交付文件
    查询企业账户余额和充值信息
    查询可开票余额并提交开票申请
    因此,本文档的重点不是介绍平台内部实现细节,而是从商户接入视角明确:
    每个接口解决什么问题
    每个接口该在什么时机调用
    同步返回与最终业务结果之间是什么关系
    哪些字段和状态需要商户系统长期保存
    哪些业务规则会直接影响商户的接入设计

    1.2 设计原则#

    项目中心化:所有核心能力围绕项目展开
    项目是招募、签约、额度、结算、交付物和发票归集的统一业务载体。
    商户在系统设计时,应优先以 projectId 为主线组织数据和流程,而不是把项目当成一个可有可无的辅助字段。
    同步受理、异步收口:复杂链路不在同步接口中做最终承诺
    recruit 属于典型异步接口。同步响应只说明“平台是否接受本次任务”,不直接代表“已经签约成功”。
    实名、历史资格复用、OCR、活体、签约链接生成等复杂动作都在异步任务中完成,最终结果通过回调通知商户。
    结果可理解:优先返回商户真正关心的业务结论
    对于额度接口,很多“不具备资格”的情况不会直接抛业务异常,而是返回 eligible=false 和 0 额度,并明确原因字段。
    对于招募状态接口,使用相对稳定的三态结果,方便商户直接做前端展示和业务流转。
    边界清晰:区分受理结果、处理中结果与最终结果
    accepted=true、status=进行中、paymentTime!=null 这类字段都不等价于“业务最终成功”。
    商户接入时需要明确哪些接口用于“受理”,哪些接口用于“查状态”,哪些回调用于“最终确认”。
    安全优先:签名、加密、权限隔离统一执行
    所有接口调用都需要验签。
    POST 业务请求统一按 AES 加密方式接入。
    商户只能访问自己有权限的数据,不能依赖“知道某个 ID 就能查到数据”的假设。

    1.3 设计目标#

    统一接入方式:统一使用 /merchantapi/v2 路径前缀、统一请求头、统一签名与加密规则。
    降低实施成本:商户只需要关注项目、创客标识、结算金额、收款账户、交付文件等业务数据,不需要理解平台内部模型。
    降低误判风险:明确异步接口的受理口径、回调口径和历史数据复用口径,避免商户把“处理中”当成“已完成”。
    提高联调效率:通过快速开始、通用请求规则、字段说明和错误码说明,让商户可以按固定顺序完成联调。
    提升长期稳定性:帮助商户在自己的系统中形成稳定的数据模型、幂等策略和异常处理策略,降低后续维护成本。

    1.4 术语说明#

    术语说明
    商户接入商户 API 的业务主体
    创客平台侧可参与项目、签约、结算的自由职业者
    项目平台中的业务载体,招募、额度、结算、交付物均围绕项目发生
    招募批次号商户为一次招募请求定义的业务批次号,用于幂等和结果关联
    平台用户 ID商户自身业务系统中标识创客的稳定业务 ID
    招募任务平台为单个创客生成的异步处理任务,对应 taskId
    结算单一次结算申请,包含一个或多个结算明细
    结算明细结算单中的单笔记录,通常对应某个创客的一笔付款
    交付物围绕某个结算明细上传的成果文件
    可结算额度创客在当前项目、当前收款方式下还能继续结算的真实金额
    同税地资格创客在某个税地下的实名、活体、签约等资格组合状态
    说明 1:ID 字段统一建议按字符串处理
    为避免前端或弱类型语言处理 64 位整型时出现精度丢失,所有代表 ID 的字段在接入侧都建议按字符串处理。常见字段包括:
    projectId
    taskId
    makerId
    settlementId
    detailId
    deliverableId
    invoiceId
    accountId
    说明 2:projectId 以“显式传入优先,client 默认项目兜底”为基本口径
    部分接口支持两种项目来源:
    请求体显式传入 projectId
    平台为当前 client 预先绑定默认 projectId
    如果两者同时存在,以请求体中的 projectId 为准。
    如果商户存在多项目场景,建议始终显式传入 projectId,不要依赖默认项目兜底。
    说明 3:平台用户 ID 应视为商户侧稳定主键
    在招募、查询状态、查询额度、解绑等链路中,platformUserId 不是一个可随意替换的展示字段,而是商户侧用来识别创客的重要业务标识。
    商户侧应避免在正常招募链路中频繁更换同一创客的 platformUserId,否则容易触发历史绑定冲突或未决任务冲突。

    1.5 常见状态对照表#

    1.5.1 项目状态#

    状态码状态描述说明
    0未开始项目尚未进入可执行阶段
    1进行中当前可用于招募、额度、结算等业务
    2已结束项目已结束,不能继续招募和结算

    1.5.2 项目审核状态#

    状态码状态描述说明
    0未审核项目已创建但还未审核通过
    1已审核项目审核通过,可进入正式使用阶段
    2已驳回项目审核未通过

    1.5.3 招募状态#

    queryRecruitStatus 使用三态表示创客在当前项目下的状态:
    状态值状态描述说明
    UNRECRUITED未招募创客不存在,或存在但尚未加入当前项目
    RECRUITED_UNSIGNED已招募待签约已加入当前项目,但实名、活体、签约任一未完成,或历史签约已无法覆盖当前项目要求
    RECRUITED_SIGNED已招募已签约已加入当前项目,且同税地资格完整、签约仍在有效期内

    1.5.4 招募异步任务状态#

    recruit 的最终业务结果依赖异步回调,当前商户需要重点关注以下三类异步状态:
    状态值状态描述说明
    FAILED失败异步处理失败,商户应结合错误码和错误信息处理
    SIGN_URL_READY签约链接已生成已生成签约链接,等待创客完成签约
    SIGNED已签约已签约成功,或复用了仍然有效的历史签约结果

    1.5.5 结算单状态#

    状态码状态描述说明可执行操作
    0未发放结算单已创建,但尚未发起支付可发起支付
    1发放中结算支付处理中可查询状态
    2发放完成结算流程已完成可查询状态、查询回单
    3拒绝发放结算被拒绝或不可继续处理不可再次发起支付

    1.5.6 结算明细状态#

    状态码状态描述说明
    1待支付明细已创建,等待支付
    2支付成功 / 已完成当前实现中可获取回单的成功状态
    3支付失败明细支付失败
    4拒绝支付 / 其他失败态明细未成功完成
    说明:
    个别内部状态与对外接口状态描述之间存在历史兼容差异。
    商户接入时,应始终以接口返回结果和本文档说明为准,不建议直接推断平台内部枚举含义。

    1.5.7 交付物审核状态#

    状态码状态描述说明
    0待审核已上传,等待审核
    1已通过审核通过
    2已驳回审核驳回,通常会返回驳回原因

    1.5.8 发票状态#

    状态码状态描述说明
    0开票中发票申请已提交,处理中
    1已开票已完成开票
    2拒绝开票发票申请被拒绝

    二、核心设计理念#

    2.1 项目中心化模式#

    API 的核心不是“提供很多接口”,而是“围绕项目形成一条完整业务链路”。
    对商户而言,项目不是单纯用于展示的配置对象,而是业务处理的中心:
    项目
    ├── 招募与签约
    ├── 创客额度
    ├── 结算单与结算明细
    ├── 交付物
    └── 发票归集
    这意味着商户在自己系统中接入 API 时,建议先建立“项目主数据”视角,再围绕项目串联能力:
    1.
    先查询项目列表和项目详情
    2.
    再围绕项目查询招募状态、发起招募、查询额度
    3.
    之后围绕项目创建结算单并上传交付物
    如果商户内部系统存在“活动”“批次”“订单”“任务包”等概念,建议将这些概念映射到平台项目之上,而不是跳过项目直接建结算。

    2.2 招募、额度、结算、交付的一体化闭环#

    API 不再只关注“最后一笔钱怎么发出去”,而是把创客从进入项目到最终开票的关键动作串起来:
    项目 -> 招募 -> 签约 -> 额度 -> 结算 -> 交付物 -> 发票
    商户如果只接入结算接口,仍然可以完成基础支付动作;但如果希望减少线下人工处理和状态割裂,建议按下列顺序接入:
    在招募前查询创客状态
    招募后等待异步回调
    结算前查询额度
    结算后按明细上传交付物
    结算完成后根据需要发起开票

    2.3 异步招募与回调收口#

    recruit 是 API 中最容易接错的接口。
    它的同步返回,重点是告诉商户“本次任务有没有被平台接受”;它的异步回调,重点是告诉商户“这个创客最终走到了哪一步”。因此商户在系统设计上必须把两件事拆开:
    同步响应负责记录“是否已受理”“是否需要立即拦截”
    异步回调负责更新“签约链接是否生成”“是否已签约”“最终失败原因”
    建议商户系统至少保存以下字段,用于和回调对账:
    recruitBatchNo
    projectId
    platformUserId
    taskId
    同步受理结果
    异步最终状态
    商户需要形成两个固定认知:
    1.
    同步 accepted=true 不代表已经签约成功,只代表该创客的任务已进入处理链路
    2.
    商户前端若需要展示“可去签约”,应以 SIGN_URL_READY 回调或状态查询结果为准,而不是以同步受理结果为准

    2.4 资格复用与有效期覆盖#

    API 确实支持复用一部分历史资格,但复用不是“历史上签过就一定还能用”。
    平台当前判断能否复用历史签约,核心看三件事:
    1.
    创客是否已经加入当前项目
    2.
    创客在当前项目所属税地下是否具备完整资格
    3.
    历史合同的有效期是否仍能覆盖当前项目的要求
    当前项目的签约有效期口径为:
    max(默认合同截止时间, 项目 check_date_end + 1个月)
    这意味着:
    历史上确实签过约,不等于当前项目一定可以直接复用
    如果当前项目的 check_date_end 更晚,系统可能仍会要求重新签约
    商户不应自行在前端推断“以前签过,所以本次一定不用签”,应以接口状态和回调结果为准

    2.5 标识绑定与 URL 化简化#

    API 在两个方面做了明显收敛,目的是让商户系统更容易稳定接入。
    第一,平台用户 ID 收敛为商户范围内的稳定业务主键
    在招募、查状态、查额度等链路中,platformUserId 应被视为商户自己定义的稳定创客编号。
    如果同一个商户在未完成历史处理的情况下,给同一手机号或同一身份证切换不同的 platformUserId,系统会按冲突处理,而不是默默覆盖。
    若确有误绑场景,应通过解绑接口和人工排查处理,而不是在招募时直接改绑。
    第二,交付物上传参数收敛为 URL 模式
    交付物接口当前只保留两个文件字段:
    fileName
    fileUrl
    商户只需要保证:
    文件 URL 使用 HTTPS
    文件在平台下载处理阶段可访问
    文件内容与文件名基本一致,便于审核

    三、快速开始#

    3.1 准备工作#

    接入前,建议商户按下面四件事完成准备。
    第一步:获取接入凭证
    联系平台管理员获取以下信息:
    AppId
    AppSecret
    AESKey
    是否启用响应验签
    回调是否需要独立验签或加密
    当前 client 是否已绑定默认 projectId
    第二步:确认环境地址
    建议的接入地址如下:
    测试环境:https://s.qa.gaosiqihui.com/merchantapi/v2
    生产环境:https://s.gaosiqihui.com/merchantapi/v2
    建议商户将环境配置做成显式切换,不要把测试环境地址写死在代码中。
    第三步:完成安全侧准备
    商户至少需要完成以下能力:
    能按请求头规则生成 X-Sign
    能对 POST 请求体进行 AES 加密
    能校验响应签名
    能接收并校验平台异步回调
    能记录 requestId 方便问题排查
    第四步:明确项目接入方式
    很多 API 接口都依赖 projectId。如果当前 client 已绑定默认项目,部分接口可以不传 projectId;但如果商户有多项目、跨团队、跨业务线使用场景,建议统一显式传入 projectId,避免调用落到错误项目。

    3.2 五步快速接入#

    以下步骤按“最短联调路径”组织,建议严格按顺序执行。

    Step 1:打通签名、加密、解密与响应验签#

    先调用:
    POST /merchantapi/v2/test/crypto
    建议请求体(加密前):
    {
      "message": "Hello World! 测试V2加密功能"
    }
    本步骤的成功标准:
    平台成功识别 AppId
    平台成功验签
    平台成功解密请求体
    商户收到 code=0
    data.originalMessage 与原始明文一致
    商户能成功校验响应中的 signature
    如果这一步没有打通,不建议直接联调业务接口。

    Step 2:查询项目并确认项目是否可用#

    调用:
    GET /merchantapi/v2/projects?page=1&size=20&status=1&auditStatus=1
    本步骤主要获取:
    projectId
    projectName
    status
    auditStatus
    availableMethods
    monthlyAvailable
    商户至少应确认:
    项目归属当前商户
    项目状态为进行中
    项目审核状态为已审核
    项目确实支持后续计划使用的收款方式

    Step 3:查询项目详情并确认结算前提#

    调用:
    GET /merchantapi/v2/projects/{projectId}
    建议重点确认:
    项目所属税地
    当前项目的收款方式配置
    各收款方式的规则额度
    项目绑定的账户摘要
    是否要求交付物
    项目的 checkDateStart / checkDateEnd
    对需要招募和签约的业务,这一步还应重点关注 checkDateEnd,因为它会影响历史合同是否可复用。

    Step 4:验证创客侧链路#

    这一阶段根据商户业务类型分成两种接入方式。
    方式 A:需要招募新创客
    建议顺序:
    1.
    先调用 POST /merchantapi/v2/projects/queryRecruitStatus
    2.
    如返回未招募或待签约,再调用 POST /merchantapi/v2/projects/recruit
    3.
    保存同步返回中的 taskId
    4.
    等待异步回调收口最终状态
    方式 B:创客已经入项,只需要发起结算
    建议调用:
    POST /merchantapi/v2/projects/makers/quota
    重点确认:
    eligible=true
    receiveMethodQuotas[].availableQuota 足够覆盖本次结算金额

    Step 5:创建结算单、发起支付并核对结果#

    创建结算单:
    POST /merchantapi/v2/settlements
    如未选择立即支付,后续可调用:
    POST /merchantapi/v2/settlements/{settlementId}/pay
    然后建议按以下顺序核对:
    1.
    查询结算单详情,确认主单状态和每条明细状态
    2.
    对成功明细调用回单接口
    3.
    如项目要求交付物,再按明细上传交付文件
    4.
    后续按需查询企业账户和开票余额

    3.3 下一步#

    完成上述五步后,建议继续重点阅读:
    第四章:接口设计
    第五章:安全设计
    第七章:异常处理
    第九章:注意事项
    如果商户接入的是完整业务闭环,而不是单一结算场景,建议优先把“招募接口、招募回调、额度接口、结算接口、交付物接口”放在同一轮联调中完成,这样更容易尽早发现状态流转问题。

    3.4 异步通知总览#

    API 中需要重点接入的异步通知如下:
    场景所属接口/配置回调地址来源是否必须配置典型结果
    项目审核结果POST /merchantapi/v2/projects/create请求体 notifyUrl否项目审核通过 / 驳回
    招募结果POST /merchantapi/v2/projects/recruit请求体 notifyUrl是FAILED / SIGN_URL_READY / SIGNED
    结算结果POST /merchantapi/v2/settlements请求体 notifyUrl否结算主单和明细状态更新
    充值上账结果商户 API 客户端配置客户端配置 rechargeNotifyUrl否企业账户充值到账
    发票结果POST /merchantapi/v2/invoice/apply请求体 notifyUrl否开票中 / 已开票 / 拒绝开票
    对商户而言,接入时应把这些异步通知视为“最终状态收口”机制,而不是同步接口的附属补充。
    同步接口解决的是“是否受理”,异步通知解决的是“最终发生了什么”。

    3.5 异步通知通用规范#

    除个别历史兼容差异外,商户异步通知统一遵循以下规则。

    3.5.1 回调方式#

    平台通过 HTTP POST 向商户回调地址发送 JSON Body。
    商户应将任意一次回调都视为可重放消息,按业务主键做幂等处理。
    对于同一业务对象,平台可能因为网络异常、非 2xx 响应等原因发起重试。

    3.5.2 外层通知包#

    异步通知的 HTTP Body 不是直接返回业务字段,而是先包一层统一外壳:
    {
      "sign": "xxxxx",
      "signType": "AES_ONLY",
      "timestamp": "1742891000000",
      "nonce": "0d7d8f1a-xxxx",
      "appId": "pico_app_002",
      "data": "......"
    }
    字段说明
    sign通知签名
    signType当前客户端配置的签名/加密模式
    timestamp毫秒时间戳
    nonce随机串
    appId商户应用 ID
    data业务数据;若开启通知加密则为密文,否则为明文 JSON

    3.5.3 验签与解密规则#

    商户处理异步通知时,建议固定按以下顺序执行:
    1.
    校验外层 sign
    2.
    如果 data 为加密串,先解密 data
    3.
    再解析业务 JSON
    4.
    按业务主键完成幂等更新
    通知签名与普通 API 请求签名使用同一套商户密钥体系,但签名串不同。
    通知验签参与字段为:
    appId
    body(即外层 data)
    nonce
    signType
    timestamp

    3.5.4 成功判定与重试#

    商户返回任意 2xx 状态码,平台即视为本次通知成功。
    商户响应体内容当前不参与成功判定。
    若商户返回非 2xx,或平台发送过程中出现网络异常,平台会自动重试。
    当前默认重试节奏为:首次发送后,最多再重试 6 次,典型间隔为 1 / 2 / 4 / 5 / 10 / 20 分钟。

    3.5.5 幂等处理建议#

    以业务主键做幂等,不要仅依赖回调到达次数。
    建议保存外层原文、解密后业务数据、接收时间、处理结果、错误原因。
    若商户内部存在多个系统订阅同一结果,建议先由统一接入层完成验签、解密和幂等,再分发给下游系统。
    若商户需要排查链路问题,建议同时保存请求时的主键和回调时的主键映射,例如 taskId、settlementId、invoiceId、dealId 等。

    四、接口设计#

    4.1 核心接口列表#

    接口名称请求方式接口路径功能描述
    加密测试POST/merchantapi/v2/test/crypto测试验签、解密和上下文识别
    查询项目列表GET/merchantapi/v2/projects获取商户可用项目列表
    创建项目POST/merchantapi/v2/projects/create创建项目
    查询项目详情GET/merchantapi/v2/projects/{projectId}获取项目完整详情
    查询创客招募状态POST/merchantapi/v2/projects/queryRecruitStatus查询创客在当前项目下的招募与签约状态
    批量招募创客POST/merchantapi/v2/projects/recruit批量异步招募创客
    查询创客额度POST/merchantapi/v2/projects/makers/quota查询单个创客可结算额度
    批量查询创客额度POST/merchantapi/v2/projects/makers/quota/batch批量查询创客可结算额度
    上传交付物POST/merchantapi/v2/projects/upload-deliverable上传结算明细对应交付物
    查询已上传交付物POST/merchantapi/v2/projects/query-deliverables查询结算明细下历史交付物
    查询结算单列表GET/merchantapi/v2/settlements分页查询结算单列表
    查询结算单详情GET/merchantapi/v2/settlements/{settlementId}查询结算单详情
    创建结算单POST/merchantapi/v2/settlements创建结算单
    发起支付POST/merchantapi/v2/settlements/{settlementId}/pay对已创建结算单发起支付
    获取结算回单GET/merchantapi/v2/settlement-details/{detailId}/receipt获取结算回单
    查询自由职业者信息POST/merchantapi/v2/makers/query批量查询自由职业者信息
    解绑自由职业者POST/merchantapi/v2/makers/unbind按平台用户 ID 解绑自由职业者
    查询企业账户信息GET/merchantapi/v2/account/queryMerchantAccountInfo查询企业账户列表与余额信息
    查询可开票余额GET/merchantapi/v2/invoice/queryAvailableInvoiceBalance查询按税地和税目归集的可开票余额
    开票申请POST/merchantapi/v2/invoice/apply发起开票申请
    查询发票详情GET/merchantapi/v2/invoice/myInvoice/{invoiceId}查询发票申请结果和附件

    4.1.1 通用请求头#

    除个别内部调用场景外,商户调用接口时统一使用以下请求头:
    请求头必填说明
    X-App-Id是平台分配的应用 ID
    X-Timestamp是毫秒级时间戳
    X-Nonce是随机字符串,建议每次请求唯一
    X-Sign是请求签名
    X-Encrypt-TypePOST 请求是当前按 AES 接入

    4.1.2 通用响应格式#

    所有接口统一返回 MerchantApiResponse<T> 结构:
    {
      "code": 0,
      "message": "成功",
      "data": {},
      "timestamp": "1742891000000",
      "requestId": "req_xxx",
      "encrypted": false,
      "signature": "xxxx"
    }
    字段说明:
    字段说明
    code顶层结果码,0 表示接口调用成功
    message顶层结果描述
    data业务数据
    timestamp响应时间戳
    requestId平台侧请求标识,联调和问题排查时请保留
    encrypted当前对外响应中通常为 false
    signature响应签名,商户建议校验

    4.1.3 通用接入约定#

    GET 请求通常不加密,但仍需要签名。
    POST 请求体统一按 AES 加密后,以 {"encryptedData":"..."} 形式传输。
    商户应把所有 ID 字段按字符串处理。
    多数带 projectId 的 POST 接口遵循“请求体优先,client 默认项目兜底”的口径。
    对于异步接口,code=0 只代表请求受理成功,不代表业务最终成功。

    4.2 加密测试接口#

    4.2.1 接口说明#

    用于验证商户侧签名、AES 加密、服务端解密和响应签名链路是否正常。

    4.2.2 请求参数(需加密)#

    POST /merchantapi/v2/test/crypto
    
    {
      "message": "Hello World! 测试V2加密功能"
    }
    参数类型必填说明
    messageString是测试消息,最长 1000 字符

    4.2.3 响应参数(明文+签名)#

    {
      "code": 0,
      "message": "成功",
      "data": {
        "originalMessage": "Hello World! 测试V2加密功能",
        "encryptionInfo": "AES加密方案"
      }
    }
    字段类型说明
    originalMessageString原始消息
    encryptionInfoString当前识别到的加密方案说明

    4.2.4 关键说明#

    商户在正式联调前必须先打通该接口。
    当前业务接口默认按 AES 模式接入。

    4.3 查询项目列表接口#

    4.3.1 接口说明#

    分页查询当前商户名下的项目列表,可按项目状态、审核状态筛选。

    4.3.2 请求参数#

    GET /merchantapi/v2/projects?page=1&size=20&status=1&auditStatus=1
    参数类型必填说明
    pageInteger否页码,默认 1,必须大于 0
    sizeInteger否每页数量,默认 20,范围 1-100
    statusInteger否项目状态:0-未开始,1-进行中,2-已结束
    auditStatusInteger否审核状态:0-未审核,1-已审核,2-已驳回

    4.3.3 响应参数(明文+签名)#

    {
      "code": 0,
      "message": "成功",
      "data": {
        "total": 5,
        "page": 1,
        "size": 20,
        "projects": [
          {
            "projectId": "2016422018623922178",
            "projectName": "直播活动推广项目",
            "projectCode": "XM100086",
            "taxCompanyId": "17",
            "taxCompanyName": "上海税地",
            "status": 1,
            "statusDesc": "进行中",
            "auditStatus": 1,
            "auditStatusDesc": "已审核",
            "createTime": "2026-03-23T10:00:00",
            "availableMethods": ["bank", "alipay"],
            "currentMonth": "2026-03",
            "monthlyAvailable": 5000.00
          }
        ]
      }
    }

    4.3.4 关键说明#

    项目列表主要用于拿到 projectId 和判断项目是否可用。
    monthlyAvailable 是摘要值,详细额度需查看项目详情或创客额度接口。

    4.4 创建项目接口#

    4.4.1 接口说明#

    创建单个项目。项目创建成功后,通常仍需要审核通过后才能用于正式业务。

    4.4.2 请求参数(需加密)#

    POST /merchantapi/v2/projects/create
    
    {
      "notifyUrl": "https://merchant.example.com/callback/project-audit",
      "name": "直播活动推广项目",
      "content": "负责直播活动推广与线索收集",
      "calculationType": "DAY",
      "calculationDesc": "按天结算",
      "projectBudget": 12.34,
      "type": 0,
      "makerNumber": 20,
      "settlementRule": "验收通过后T+7结算",
      "verify": "提交成果并审核通过视为验收完成",
      "checkDateStart": "2026-03-25",
      "checkDateEnd": "2026-03-31",
      "remark": "优先安排有直播经验的创客"
    }
    参数类型必填说明
    notifyUrlString否项目审核状态回调地址,长度不超过 200
    nameString是项目名称,最长 100
    contentString是项目内容,最长 1000
    calculationTypeString是计价方式
    calculationDescString是计价方式描述,最长 500
    projectBudgetBigDecimal是项目预算,单位万
    typeInteger否当前仅支持 0
    makerNumberInteger是招募人数
    settlementRuleString是结算规则,最长 100
    verifyString是验收标准,最长 1000
    checkDateStartString是验收开始日期,格式 yyyy-MM-dd
    checkDateEndString是验收结束日期,格式 yyyy-MM-dd
    remarkString否备注,最长 200

    4.4.3 响应参数(明文+签名)#

    {
      "code": 0,
      "message": "成功",
      "data": {
        "projectId": "1967533227101458434",
        "code": "XM100086",
        "projectName": "直播活动推广项目",
        "auditStatus": 0,
        "auditStatusDesc": "未审核",
        "message": "创建成功,待审核"
      }
    }

    4.4.4 关键说明#

    创建成功不代表项目立即可用。
    项目必须审核通过后,才能用于招募、额度和结算。

    4.4.5 项目审核结果通知#

    如果创建项目时传入了 notifyUrl,项目审核状态发生变化后,平台会向该地址发送异步通知。
    触发时机:
    项目审核通过
    项目审核驳回
    外层通知包:
    项目审核通知使用第三章“异步通知通用规范”中的统一外层通知包。
    业务 payload:
    项目审核通知的业务字段与“查询项目详情接口”的响应字段保持一致,商户可直接复用项目详情的数据结构进行解析。
    其中最需要重点关注的字段包括:
    字段说明
    projectId项目 ID
    projectName项目名称
    auditStatus审核状态:0/1/2
    auditStatusDesc审核状态描述
    rejectReason驳回原因;审核通过时通常为空
    status项目状态
    statusDesc项目状态描述
    处理建议:
    项目审核通知建议以 projectId 做幂等更新。
    当 auditStatus=1 时,可将项目切换到“可进入招募/额度/结算联调”的状态。
    当 auditStatus=2 时,建议保存 rejectReason 并阻断后续业务发起。

    4.5 查询项目详情接口#

    4.5.1 接口说明#

    获取单个项目的完整详情,包含税地、费率、收款方式额度、绑定账户摘要等信息。

    4.5.2 请求参数#

    GET /merchantapi/v2/projects/{projectId}
    参数类型必填说明
    projectIdString是项目 ID

    4.5.3 响应参数(明文+签名)#

    {
      "code": 0,
      "message": "成功",
      "data": {
        "projectId": "2016422018623922178",
        "projectName": "直播活动推广项目",
        "projectCode": "XM100086",
        "taxCompanyId": "17",
        "taxCompanyName": "上海税地",
        "auditStatus": 1,
        "auditStatusDesc": "已审核",
        "status": 1,
        "statusDesc": "进行中",
        "projectBudget": 12.34,
        "settleRate": 6.00,
        "serviceRate": 1.50,
        "currentMonth": "2026-03",
        "monthlyQuota": 200000.00,
        "monthlyUsed": 65000.00,
        "monthlyAvailable": 135000.00,
        "receiveMethodConfigs": [
          {
            "receiveMethod": "bank",
            "status": 1,
            "singleLimit": 50000.00,
            "monthlyQuota": 100000.00,
            "monthlyUsed": 35000.00,
            "monthlyAvailable": 65000.00
          }
        ],
        "paymentAccounts": [
          {
            "merchantAccountId": "3001",
            "displayName": "平安银行尾号1234",
            "receiveMethod": "bank",
            "amount": 120000.00,
            "availableAmount": 118000.00
          }
        ],
        "deliverableRate": 75.50
      }
    }

    4.5.4 关键说明#

    receiveMethodConfigs 反映项目规则额度。
    paymentAccounts 表示本项目绑定的商户账户摘要,余额字段为参考值。
    deliverableRate 是项目交付进度指标,不参与费率和金额计算。

    4.6 查询创客招募状态接口#

    4.6.1 接口说明#

    查询某个创客在当前项目下的招募与签约状态。

    4.6.2 请求参数(需加密)#

    POST /merchantapi/v2/projects/queryRecruitStatus
    
    {
      "projectId": "2016422018623922178",
      "phone": "13800000000",
      "platformUserId": "DY20260115105692"
    }
    参数类型必填说明
    projectIdString否请求体优先,client 绑定项目兜底
    phoneString否与 platformUserId 至少传一个
    platformUserIdString否与 phone 至少传一个

    4.6.3 响应参数(明文+签名)#

    {
      "code": 0,
      "message": "成功",
      "data": {
        "projectId": "2016422018623922178",
        "maskedPhone": "138****0000",
        "platformUserId": "DY20260115105692",
        "status": "RECRUITED_UNSIGNED",
        "statusDesc": "已招募待签约"
      }
    }

    4.6.4 关键说明#

    该接口是“招募前置判断接口”,适合用于商户前端展示“去招募”“去签约”“已完成”之类的状态。
    平台先判断创客是否已经加入当前项目,再判断同税地资格是否完整。
    即使创客在别的项目下同税地已经签约,只要还没加入当前项目,这里仍返回 UNRECRUITED。
    当前项目视角下的“已签约可用”要求签约有效期覆盖:
    项目 check_date_end + 1个月
    商户不应自行根据“历史签约过”来跳过本接口,因为历史合同可能已经无法覆盖当前项目的结束时间要求。

    4.7 批量招募创客接口#

    4.7.1 接口说明#

    异步受理招募任务。同步响应只表达“是否受理”,最终结果通过回调通知商户。

    4.7.2 请求参数(需加密)#

    POST /merchantapi/v2/projects/recruit
    
    {
      "projectId": "2016422018623922178",
      "recruitBatchNo": "RB202603230001",
      "notifyUrl": "https://merchant.example.com/api/recruit/callback",
      "redirectUrl": "https://merchant.example.com/app/sign-result",
      "makers": [
        {
          "name": "张三",
          "phone": "13812345678",
          "idNumber": "310101199001011234",
          "platformUserId": "DY20260115105692",
          "address": "上海市浦东新区",
          "platformName": "某平台",
          "platformUserName": "张三",
          "obversePic": "https://secure-oss.example.com/front.jpg",
          "reversePic": "https://secure-oss.example.com/back.jpg",
          "livenessFaceImageUrl": "https://secure-oss.example.com/face.jpg",
          "livenessVideoUrl": "https://secure-oss.example.com/video.mp4"
        }
      ]
    }
    参数类型必填说明
    projectIdString否请求体优先,client 绑定项目兜底
    recruitBatchNoString是招募批次号,幂等键之一,最长 64
    notifyUrlString是结果回调地址,生产环境必须为 HTTPS
    redirectUrlString否签约完成后的跳转地址,最长 200
    makersArray是招募创客列表,单次最多 50 条
    单条 makers[] 字段:
    字段必填说明
    name是姓名
    phone是手机号
    idNumber是身份证号
    platformUserId是商户平台用户 ID
    address否地址
    platformName否平台名称
    platformUserName否平台用户名
    obversePic否身份证正面 URL
    reversePic否身份证反面 URL
    livenessFaceImageUrl否活体照片 URL
    livenessVideoUrl否活体视频 URL
    注意事项:
    同一请求内 phone 和 platformUserId 都不能重复。
    obversePic 和 reversePic 必须成对传入,不能只传一个。
    platformUserId 被视为商户侧稳定业务标识,不允许在活跃招募链路中随意改绑。

    4.7.3 响应参数(明文+签名)#

    {
      "code": 0,
      "message": "成功",
      "data": {
        "projectId": "2016422018623922178",
        "recruitBatchNo": "RB202603230001",
        "totalCount": 2,
        "acceptedCount": 1,
        "rejectedCount": 1,
        "results": [
          {
            "platformUserId": "DY20260115105692",
            "maskedPhone": "138****5678",
            "accepted": true,
            "message": "已受理,后续结果请关注回调",
            "errorCode": 0,
            "taskId": "2034454171060154370"
          },
          {
            "platformUserId": "DY20260115105693",
            "maskedPhone": "139****5678",
            "accepted": false,
            "message": "同一请求内platformUserId不能重复",
            "errorCode": 40259,
            "taskId": null
          }
        ]
      }
    }

    4.7.4 关键说明#

    accepted=true 只代表已受理,不代表已经签约成功。
    异步最终结果通过回调返回:
    FAILED
    SIGN_URL_READY
    SIGNED
    历史签约能否复用,取决于旧签约是否仍覆盖当前项目的 check_date_end + 1个月 要求。
    商户侧建议以 recruitBatchNo + platformUserId 作为本次招募任务的主关联键,以 taskId 作为平台侧任务主键保存。
    招募接口会同步拦截明显冲突,例如:
    同一请求内 phone 重复
    同一请求内 platformUserId 重复
    已存在未决招募任务且本次标识冲突
    platformUserId 在商户范围内已稳定绑定到其他创客
    若同一个商户、同一个项目、同一个 recruitBatchNo + platformUserId 发起的是“参数完全一致的重放请求”,系统不会重复新建任务,而是按历史任务当前状态返回结果:
    若历史任务已签约,可能直接返回“已签约”
    若历史任务签约链接仍有效,可能直接返回“签约链接已生成”
    若历史任务已失败,会直接返回失败信息
    若历史任务签约链接已失效,会要求重新发起招募
    若重放请求的姓名、手机号、身份证号、回调地址、跳转地址、身份证图片、活体材料等关键字段与历史已受理任务不一致,系统会按“请求冲突”直接拒绝,不会默默覆盖历史任务。
    身份证图片、活体图片、活体视频均要求传可访问 URL。平台在异步校验通过后会下载并转存平台 OSS,商户不需要长期为已通过的材料提供原始 URL。

    4.7.5 招募回调说明#

    招募接口的最终结果通过商户提供的 notifyUrl 回调。
    回调 HTTP Body 不是直接返回业务字段,而是先包一层通知外壳:
    外层字段说明
    sign回调签名
    signType签名/加密类型
    timestamp时间戳
    nonce随机串
    appId应用 ID
    data业务数据
    说明:
    商户应先校验外层签名,再解析 data。
    若客户端配置了回调加密,则 data 不是明文 JSON,而是加密后的字符串;商户需要先解密,再解析业务字段。
    解密后的业务数据核心字段如下:
    字段说明
    notifyType通知类型,固定为招募结果通知
    recruitBatchNo招募批次号
    projectId项目 ID
    taskId招募任务 ID
    platformUserId商户平台用户 ID
    maskedPhone脱敏手机号
    taskStatusSIGN_URL_READY / SIGNED / FAILED
    message结果描述
    signUrl当 taskStatus=SIGN_URL_READY 时返回签约链接
    contractId当 taskStatus=SIGNED 时通常返回合同 ID
    errorCode错误码
    errorMessage错误信息
    finishTime任务完成时间
    商户建议按以下方式处理回调:
    1.
    先校验外层回调签名
    2.
    如 data 为加密数据,先解密 data
    3.
    再以 taskId 或 recruitBatchNo + platformUserId 做幂等更新
    4.
    SIGN_URL_READY 时更新待签约状态并向前端暴露签约入口
    5.
    SIGNED 时更新为已签约可结算,并记录 contractId
    6.
    FAILED 时记录 errorCode / errorMessage 并允许人工或业务重试
    关于 SIGNED 状态,商户应重点理解两类典型场景:
    1.
    平台在处理招募任务时直接命中“已签约”结果,例如命中当前项目历史有效签约或同税地资格复用
    2.
    平台先返回 SIGN_URL_READY,创客通过签约链接完成签约后,平台再以 SIGNED 收口最终结果
    因此,商户侧不应把 SIGN_URL_READY 误判为最终成功,只有收到 SIGNED 回调或查询状态明确已完成时,才应将该创客置为“已签约可结算”。

    4.8 查询创客额度接口#

    4.8.1 接口说明#

    查询单个创客在当前项目下的真实可结算额度。

    4.8.2 请求参数(需加密)#

    POST /merchantapi/v2/projects/makers/quota
    
    {
      "projectId": "2016422018623922178",
      "phone": "13800000000",
      "platformUserId": "DY20260115105692"
    }
    参数类型必填说明
    projectIdString否请求体优先,client 绑定项目兜底
    phoneString否与 platformUserId 至少传一个
    platformUserIdString否与 phone 至少传一个

    4.8.3 响应参数(明文+签名)#

    {
      "code": 0,
      "message": "成功",
      "data": {
        "projectId": "2016422018623922178",
        "maskedPhone": "138****0000",
        "platformUserId": "DY20260115105692",
        "eligible": true,
        "reasonCode": "ELIGIBLE",
        "eligibleDesc": "可结算",
        "currentMonth": "2026-03",
        "totalAvailableQuota": 65000.00,
        "receiveMethodQuotas": [
          {
            "receiveMethod": "bank",
            "personalAvailableQuota": 80000.00,
            "sharedAvailableQuota": 65000.00,
            "availableQuota": 65000.00
          }
        ]
      }
    }

    4.8.4 关键说明#

    创客不存在、未入项、未完成资格时,不一定返回业务错误,而是直接返回:
    eligible=false
    reasonCode
    eligibleDesc
    0 额度
    这类返回并不表示接口失败,而是表示“当前创客在当前项目下暂不具备结算条件”。
    商户前端若需要展示失败原因,建议直接使用 eligibleDesc,不要自行硬编码推断。
    totalAvailableQuota 是摘要值,适合快速判断“当前是否还有额度”;真正落单时仍应结合具体 receiveMethodQuotas[].availableQuota 判断。
    单方式额度口径:
    availableQuota = min(personalAvailableQuota, sharedAvailableQuota)

    4.9 批量查询创客额度接口#

    4.9.1 接口说明#

    按手机号或平台用户 ID 批量查询多个创客在项目下的额度。

    4.9.2 请求参数(需加密)#

    POST /merchantapi/v2/projects/makers/quota/batch
    
    {
      "projectId": "2016422018623922178",
      "makers": [
        { "phone": "13800000000" },
        { "platformUserId": "DY20260115105692" }
      ]
    }
    参数类型必填说明
    projectIdString否请求体优先,client 绑定项目兜底
    makersArray是创客标识列表,单次最多 50 条
    makers[].phoneString否与 platformUserId 至少传一个
    makers[].platformUserIdString否与 phone 至少传一个

    4.9.3 响应参数(明文+签名)#

    顶层返回:
    projectId
    currentMonth
    totalCount
    eligibleCount
    ineligibleCount
    results
    results[] 中除单创客额度字段外,还额外返回:
    字段说明
    errorCode单条结果码
    errorMessage单条结果描述

    4.9.4 关键说明#

    顶层通常仍返回 code=0。
    单条结果中的参数错误、标识冲突、创客不存在、未入项、未具备资格,会通过单条 errorCode / errorMessage 表达。
    商户在做批量导入、批量结算前预检时,建议优先使用该接口,而不要循环调用单创客额度接口。
    对于批量接口,商户应按单条结果处理成功与失败,不能只看顶层 code。

    4.10 上传交付物接口#

    4.10.1 接口说明#

    按结算明细上传交付物。
    商户只需要传 detailId,平台会自动反查对应项目、结算单和创客任务。

    4.10.2 请求参数(需加密)#

    POST /merchantapi/v2/projects/upload-deliverable
    
    {
      "detailId": "2034461359380058114",
      "deliveryDate": "2025-01-20",
      "description": "本月工作成果交付",
      "files": [
        {
          "fileName": "deliverable_1.jpg",
          "fileUrl": "https://merchant-oss.example.com/deliverable_1.jpg"
        }
      ]
    }
    参数类型必填说明
    detailIdString是结算明细 ID
    deliveryDateString是交付日期,格式 yyyy-MM-dd
    descriptionString否交付说明
    filesArray是文件列表,至少 1 个,最多 20 个
    files[].fileNameString是文件名,最长 200
    files[].fileUrlString是HTTPS 文件地址

    4.10.3 响应参数(明文+签名)#

    {
      "code": 0,
      "message": "成功",
      "data": {
        "deliverableId": "2036730053746438146",
        "detailId": "2034461359380058114",
        "files": [
          {
            "fileId": "2036730053775798274",
            "fileName": "deliverable_1.jpg",
            "fileUrl": "https://oss.example.com/merchant-deliverable-xxx-file-1.jpg"
          }
        ],
        "fileCount": 1,
        "uploadTime": "2026-03-25 17:01:00"
      }
    }

    4.10.4 关键说明#

    交付物只接受 HTTPS URL,不接受 Base64 内容。
    服务端会在请求处理过程中同步下载源文件并转存到平台普通 OSS。
    上传成功只代表“记录已创建,待审核”,不代表交付物已审核通过。
    交付物与结算明细一一关联,商户应优先保存 detailId,而不是自行用结算单号模糊关联。
    平台当前不要求商户传文件大小、文件类型、文件 MD5,但商户仍应保证文件 URL 在接口调用时真实可访问。
    当前支持的常见文件类型包括:
    图片:jpg、jpeg、png、gif、bmp、webp
    视频:mp4、avi、mov、wmv、mkv
    文档:pdf、doc、docx、xls、xlsx
    如果文件扩展名不在当前支持范围内,接口会直接拒绝上传。

    4.11 查询已上传交付物接口#

    4.11.1 接口说明#

    按结算明细查询该明细下历史上传的交付物记录。

    4.11.2 请求参数(需加密)#

    POST /merchantapi/v2/projects/query-deliverables
    
    {
      "detailId": "2034461359380058114"
    }
    参数类型必填说明
    detailIdString是结算明细 ID

    4.11.3 响应参数(明文+签名)#

    返回字段包括:
    detailId
    totalCount
    deliverables[].deliverableId
    deliverables[].deliverableNo
    deliverables[].deliveryDate
    deliverables[].description
    deliverables[].verifyStatus
    deliverables[].verifyStatusDesc
    deliverables[].rejectReason
    deliverables[].uploadTime
    deliverables[].verifyTime
    deliverables[].fileCount
    deliverables[].files[]

    4.11.4 关键说明#

    结果按上传时间倒序返回。
    若当前明细没有任何交付物记录,接口仍然成功返回,totalCount=0。
    商户若只需要最新一次上传记录,建议取返回列表的第一条,而不要自行假定同一明细只会有一条交付物记录。

    4.12 查询结算单列表接口#

    4.12.1 接口说明#

    分页查询结算单列表。

    4.12.2 请求参数#

    GET /merchantapi/v2/settlements?page=1&size=20&status=1&projectId=2016422018623922178
    参数类型必填说明
    pageInteger否页码,默认 1
    sizeInteger否每页数量,默认 20
    statusInteger否结算单状态
    projectIdString否项目 ID
    settlementNoString否结算单号
    startTimeString否开始日期,格式 yyyy-MM-dd
    endTimeString否结束日期,格式 yyyy-MM-dd,且不能晚于当前日期

    4.12.3 响应参数(明文+签名)#

    返回字段:
    total
    page
    size
    pages
    list[]
    list[] 中常见字段:
    settlementId
    settlementNo
    projectId
    projectName
    taxCompanyName
    receiveMethod
    totalAmount
    totalCount
    status
    statusDesc
    createTime
    paymentTime
    completeTime
    successCount
    failCount

    4.12.4 关键说明#

    该接口适合用于商户后台分页检索结算单,不建议用于查询单笔实时支付结果。
    联调阶段如果查询不到结果,建议优先核对 projectId、状态过滤条件、时间范围和结算单号是否一致。
    当前实现中,若查询结果为空,接口会直接返回业务异常“查询结果不存在”,而不是返回空列表。
    当同时传 startTime 和 endTime 时,要求 startTime <= endTime。
    endTime 不能大于当前日期。

    4.13 查询结算单详情接口#

    4.13.1 接口说明#

    查询单个结算单的主信息和明细信息。

    4.13.2 请求参数#

    GET /merchantapi/v2/settlements/{settlementId}
    参数类型必填说明
    settlementIdString是结算单 ID

    4.13.3 响应参数(明文+签名)#

    响应常见字段:
    settlementId
    settlementNo
    projectId
    projectName
    taxCompanyName
    receiveMethod
    totalAmount
    totalCount
    status
    statusDesc
    createTime
    paymentTime
    completeTime
    remark
    successCount
    failCount
    details[]
    details[] 常见字段:
    detailId
    detailNo
    merchantDetailNo
    amount
    idCardHash
    status
    paymentTime
    failureReason
    remark

    4.13.4 关键说明#

    明细中返回的是身份证哈希值,而不是明文身份证号。
    若商户需要对账,应优先使用 merchantDetailNo 作为商户侧明细主键,不建议依赖身份证相关字段做关联。

    4.14 创建结算单接口#

    4.14.1 接口说明#

    创建结算单。

    4.14.2 请求参数(需加密)#

    POST /merchantapi/v2/settlements
    
    {
      "projectId": "2016422018623922178",
      "merchantSettlementNo": "MERCHANT_SETTLEMENT_001",
      "receiveMethod": "bank",
      "remark": "2026年3月技术服务费",
      "notifyUrl": "https://merchant.example.com/api/settlement/callback",
      "details": [
        {
          "merchantDetailNo": "MERCHANT_DETAIL_001",
          "amount": 5000.00,
          "phone": "13812345678",
          "platformUserId": "DY20260115105692",
          "paymentAccount": {
            "accountNo": "6222021234567890123",
            "accountName": "张三",
            "phone": "13812345678"
          },
          "remark": "3月技术服务费"
        }
      ]
    }
    顶层参数:
    参数类型必填说明
    projectIdString否请求体优先,client 绑定项目兜底
    merchantSettlementNoString是商户结算单号,长度 1-64
    receiveMethodString是bank / alipay / wechat
    remarkString否结算备注,最长 200
    notifyUrlString否异步通知地址,最长 200
    detailsArray是结算明细列表,至少 1 条,最多 200 条
    单条 details[] 参数:
    参数类型必填说明
    merchantDetailNoString是商户明细号
    amountBigDecimal是结算金额
    phoneString否手机号,与 platformUserId 至少传一个
    platformUserIdString否平台用户 ID,与 phone 至少传一个
    paymentAccountObject是收款账户信息
    remarkString否明细备注
    paymentAccount 参数:
    参数类型必填说明
    accountNoString是收款账号
    accountNameString否账户名
    phoneString否预留手机号

    4.14.3 响应参数(明文+签名)#

    响应常见字段:
    settlementId
    settlementNo
    merchantSettlementNo
    projectId
    projectName
    taxCompanyName
    receiveMethod
    totalAmount
    totalCount
    totalTax
    totalNetAmount
    status
    statusDesc
    createTime
    remark
    paymentInitiated
    paymentFailureReason
    details[]

    4.14.4 关键说明#

    创建结算单前,建议商户先完成两项预检:
    当前创客在项目下具备可结算资格
    当前收款方式下的 availableQuota 足够覆盖结算金额
    merchantSettlementNo 和 merchantDetailNo 都应由商户自行保证稳定唯一,避免幂等冲突。
    在未提供 makerId 的情况下,商户至少需要保证 phone 或 platformUserId 中有一个能稳定定位到目标创客。

    4.14.5 结算结果通知#

    如果创建结算单时传入了 notifyUrl,后续结算状态变化时,平台会向该地址发送异步通知。
    重要:
    结算结果通知地址是在“创建结算单”时确定的。
    POST /merchantapi/v2/settlements/{settlementId}/pay 本身不再单独接收新的 notifyUrl。
    适用场景:
    创建结算单后,商户又单独调用了支付接口
    商户希望通过通知而不是轮询来接收结算最终结果
    外层通知包:
    结算结果通知使用第三章“异步通知通用规范”中的统一外层通知包。
    业务 payload 核心字段:
    字段说明
    settlementId结算单 ID
    settlementNo平台结算单号
    merchantSettlementNo商户结算单号
    projectId项目 ID
    receiveMethod收款方式
    totalAmount结算总金额
    totalNetAmount税后总金额
    totalTax总税费
    status结算单状态:0/1/2/3
    statusDesc结算状态描述
    paymentTime支付时间
    completeTime完成时间
    successCount成功笔数
    failCount失败笔数
    detailList[]明细结果列表
    detailList[] 常见字段:
    字段说明
    detailId明细 ID
    detailNo平台明细号
    merchantDetailNo商户明细号
    amount金额
    netAmount税后实发金额
    status明细状态
    statusDesc明细状态描述
    failReason失败原因
    completeTime明细完成时间
    处理建议:
    商户建议先按 settlementId 或 merchantSettlementNo 更新主单,再按 merchantDetailNo 更新明细。
    不建议仅依据同步创建响应里的 paymentInitiated=true 判断支付成功。
    结算结果通知与结算详情查询应结合使用:通知负责“收口”,查询负责“补数”和“复核”。

    4.15 发起支付接口#

    4.15.1 接口说明#

    对已创建的结算单发起支付。

    4.15.2 请求参数(需加密)#

    POST /merchantapi/v2/settlements/{settlementId}/pay
    
    {
      "confirmPay": true
    }
    Path 参数:
    参数类型必填说明
    settlementIdString是结算单 ID,在 URL 路径中传入
    请求体参数(需加密):
    参数类型必填说明
    confirmPayBoolean是是否确认发起支付

    4.15.3 响应参数(明文+签名)#

    响应常见字段:
    settlementId
    settlementNo
    projectId
    projectName
    receiveMethod
    status
    paymentStatus
    paymentTime
    expectedTime
    totalAmount
    totalCount
    successCount
    failCount
    processingCount
    details[]
    paymentStatus 当前常见取值:
    取值含义
    PENDING待支付
    PROCESSING支付处理中
    COMPLETED支付完成
    REJECTED已拒绝或不可继续处理
    UNKNOWN未识别状态

    4.15.4 关键说明#

    已完成或已拒绝的结算单不能重复支付。
    支付中的结算单再次发起支付时,商户应谨慎处理重试逻辑。
    confirmPay 的作用是显式确认本次支付动作,建议商户仅在人工确认或流程节点明确时调用。
    商户若实现自动重试,应先查询结算单详情确认当前状态,避免并发重复发起。

    4.16 获取结算回单接口#

    4.16.1 接口说明#

    按结算明细获取回单文件。

    4.16.2 请求参数#

    GET /merchantapi/v2/settlement-details/{detailId}/receipt
    参数类型必填说明
    detailIdString是结算明细 ID

    4.16.3 响应参数(明文+签名)#

    {
      "code": 0,
      "message": "成功",
      "data": {
        "detailId": "3024091600001001",
        "detailNo": "DTL202409160001",
        "receiptNo": "REC202409160001",
        "receiptContent": "JVBERi0xLjQKJeLjz9...",
        "receiptType": "PDF",
        "fileName": "回单_DTL202409160001.pdf",
        "fileSize": 102400,
        "generateTime": "2025-09-16 10:30:00"
      }
    }

    4.16.4 关键说明#

    当前接口直接返回 Base64 编码的回单文件内容。
    只有成功完成支付的明细才允许获取回单。
    商户若需要长期留存回单,建议在收到成功结果后自行落盘或转存,不建议每次展示时重复拉取。

    4.17 查询自由职业者信息接口#

    4.17.1 接口说明#

    按手机号列表或平台用户 ID 列表批量查询自由职业者信息。

    4.17.2 请求参数(需加密)#

    POST /merchantapi/v2/makers/query
    
    {
      "phoneNumbers": ["13812345678", "13912345678"]
    }
    参数类型必填说明
    phoneNumbersArray否手机号列表,最多 50 个。与 platformUserIds 二选一
    platformUserIdsArray否平台用户 ID 列表,最多 50 个。与 phoneNumbers 二选一

    4.17.3 响应参数(明文+签名)#

    响应主字段:
    makers[]
    单条 makers[] 常见字段:
    makerId
    name
    idCard
    idType
    country
    address
    phone
    platformUserId
    platformName
    platformUserName
    status
    taxCompanyQualifications
    createTime
    updateTime
    errorCode
    errorMessage

    4.17.4 关键说明#

    该接口是查询接口,不负责保存或更新自由职业者信息。
    单条查询失败时,会在单条结果中返回 errorCode / errorMessage。
    phoneNumbers 和 platformUserIds 两者至少传一种,但不能同时传。
    商户应根据自己的查询入口二选一:按手机号查,或按 platformUserId 查。
    该接口采用“部分成功”模式,单条异常不会阻断其他条目的返回。

    4.18 解绑自由职业者接口#

    4.18.1 接口说明#

    按平台用户 ID 解绑自由职业者。

    4.18.2 请求参数(需加密)#

    POST /merchantapi/v2/makers/unbind
    
    {
      "platformUserId": "USERID_001"
    }
    参数类型必填说明
    platformUserIdString是平台用户 ID

    4.18.3 响应参数(明文+签名)#

    {
      "code": 0,
      "message": "成功",
      "data": null
    }

    4.18.4 关键说明#

    该接口主要用于处理商户侧 platformUserId 异常绑定场景。
    解绑属于纠错动作,不建议作为正常招募链路的一部分频繁调用。
    解绑前建议先核对历史招募任务、结算记录和业务订单,避免把仍在使用中的绑定关系解除。

    4.19 查询企业账户信息接口#

    4.19.1 接口说明#

    查询商户企业账户列表及其金额信息。

    4.19.2 请求参数#

    GET /merchantapi/v2/account/queryMerchantAccountInfo
    无业务请求体。

    4.19.3 响应参数(明文+签名)#

    响应主字段:
    accountList[]
    单条 accountList[] 字段:
    字段说明
    accountId账户 ID
    accountType账户类型(展示字段,如银行卡/支付宝/微信支付,不建议作为稳定枚举依赖)
    accountUserName账户持有人姓名
    accountUserIdCard账户持有人身份证号
    account账户号
    accountName账户名称
    bankName开户行名称
    rechargeAccount充值账号,部分渠道或配置下可能为空
    rechargeAccountName充值账号名称,部分渠道或配置下可能为空
    availableAmount可用金额
    settleAmount结算中税后金额
    otherAmount结算中其他金额
    freezeAmount冻结金额

    4.19.4 关键说明#

    企业账户接口是账户维度的主查询入口。
    项目详情里的账户信息只是项目维度摘要,不应替代本接口。
    商户若涉及充值、余额校验或财务对账,应以本接口为准。
    accountType 当前返回展示值,不保证可作为长期稳定枚举使用;如需程序分支,建议不要仅依赖该字段文案。

    4.19.5 充值上账通知#

    充值上账通知属于企业账户维度的异步通知,不通过业务请求体传入回调地址,而是由平台在商户 API 客户端配置中维护 rechargeNotifyUrl。
    触发时机:
    商户企业账户发生充值到账
    平台完成上账并记录为成功后,向商户推送到账结果
    回调地址来源:
    非某个 API 业务接口请求参数
    由平台为当前商户 API 客户端预先配置 rechargeNotifyUrl
    外层通知包:
    充值上账通知使用第三章“异步通知通用规范”中的统一外层通知包。
    业务 payload:
    {
      "merchantId": "1234567890",
      "amount": 100.00,
      "accountNo": "6222021234567890123",
      "accountName": "XX有限公司",
      "counterpartyAccountNo": "6217000012345678901",
      "counterpartyAccountName": "付款方有限公司",
      "dealTime": "2026-03-25 10:10:10",
      "dealId": "R202603250001",
      "zfCode": "bank",
      "remark": "充值成功"
    }
    字段说明
    merchantId商户 ID
    amount上账金额
    accountNo充值到账账户号
    accountName充值到账账户名称
    counterpartyAccountNo交易对方账户号
    counterpartyAccountName交易对方账户名称
    dealTime上账时间
    dealId交易流水号
    zfCode支付通道,如 bank / alipay / wechat
    remark备注
    处理建议:
    建议以 dealId 作为上账通知的主幂等键。
    商户若需要做账户余额展示,建议收到通知后仍再调用企业账户查询接口做一次余额校验。
    若商户系统区分“资金到账”和“可发起结算”,建议将上账通知作为资金事件,而不要混同为结算事件。

    4.20 查询可开票余额接口#

    4.20.1 接口说明#

    查询按税地和税目归集的可开票余额。

    4.20.2 请求参数#

    GET /merchantapi/v2/invoice/queryAvailableInvoiceBalance
    无业务请求体。

    4.20.3 响应参数(明文+签名)#

    响应主字段:
    taxCompanyData[]
    单条 taxCompanyData[]:
    字段说明
    taxCompanyId税地公司 ID
    taxCompanyName税地公司名称
    invoiceDataList该税地下可开票税目列表
    单条 invoiceDataList[]:
    字段说明
    taxCategoryName税目名称
    hasInvoiceFee已开票金额
    applyInvoiceFee申请中金额
    ableInvoiceFee可开票金额

    4.20.4 关键说明#

    该接口是开票申请前的查询入口。
    商户应优先根据该接口判断是否具备开票条件。
    可开票余额按税地和税目维度聚合,商户在开票前应先确认要申请的结算单是否落在同一归集口径下。

    4.21 开票申请接口#

    4.21.1 接口说明#

    发起开票申请。

    4.21.2 请求参数(需加密)#

    POST /merchantapi/v2/invoice/apply
    
    {
      "projectId": "2016422018623922178",
      "outSettlementNoList": ["JS10001884", "JS10001885"],
      "invoiceType": 1,
      "invoiceAddress": "上海市浦东新区XXX路88号",
      "invoicePhone": "021-12345678",
      "invoiceAcctNo": "3100000123456789",
      "invoiceBankName": "招商银行上海分行",
      "remark": "请尽快开票",
      "notifyUrl": "https://merchant.example.com/api/invoice/callback"
    }
    参数类型必填说明
    projectIdString条件必填请求体优先;未传时仅在 client 已绑定默认项目时可省略。多项目商户建议始终显式传入
    outSettlementNoListArray是结算单编号列表
    invoiceTypeInteger否当前默认 1,表示专票
    invoiceAddressString否发票抬头地址
    invoicePhoneString否发票抬头电话
    invoiceAcctNoString否发票抬头银行账户
    invoiceBankNameString否发票抬头开户行
    remarkString否备注
    notifyUrlString否通知地址,最长 200

    4.21.3 响应参数(明文+签名)#

    返回常见字段:
    invoiceId
    taxCompanyId
    taxCategoryName
    invoiceAmount
    invoiceType
    invoiceAddress
    invoicePhone
    invoiceAcctNo
    invoiceBankName
    remark
    invoiceStatus
    fileList

    4.21.4 关键说明#

    outSettlementNoList 中的结算单必须属于当前商户和当前项目。
    若结算单已经处于开票中或已开票,不允许重复申请。
    申请金额不能超过当前可开票余额。
    建议商户在调用前先使用可开票余额接口确认目标税地和税目下的余额是否足够,再组织申请单。
    开票申请返回成功只代表申请已创建,不代表发票文件已经生成。

    4.21.5 发票结果通知#

    如果开票申请时传入了 notifyUrl,后续发票状态变化后,平台会向该地址发送异步通知。
    触发时机:
    发票申请进入处理中
    发票开具完成并生成附件
    发票申请被拒绝
    外层通知包:
    发票结果通知使用第三章“异步通知通用规范”中的统一外层通知包。
    业务 payload:
    发票结果通知的业务字段与“查询发票详情接口”的响应字段保持一致,商户可直接复用发票详情的数据结构进行解析。
    核心字段通常包括:
    字段说明
    invoiceId发票 ID
    taxCompanyId税地 ID
    taxCategoryName税目名称
    invoiceAmount发票金额
    invoiceType发票类型
    remark审核意见或备注
    invoiceStatus发票状态:0开票中 / 1已开票 / 2拒绝开票
    fileList[]发票附件列表
    处理建议:
    建议以 invoiceId 做幂等更新。
    当 invoiceStatus=1 时,再处理 fileList 中的发票附件展示或归档。
    若商户系统对开票流程做了审批或财务节点控制,建议把“开票申请成功”和“发票已开具”明确拆成两个不同状态。

    4.22 查询发票详情接口#

    4.22.1 接口说明#

    按发票 ID 查询发票详情和附件。

    4.22.2 请求参数#

    GET /merchantapi/v2/invoice/myInvoice/{invoiceId}
    参数类型必填说明
    invoiceIdString是发票 ID

    4.22.3 响应参数(明文+签名)#

    返回字段与开票申请响应一致,通常包括:
    invoiceId
    taxCompanyId
    taxCategoryName
    invoiceAmount
    invoiceType
    invoiceAddress
    invoicePhone
    invoiceAcctNo
    invoiceBankName
    remark
    invoiceStatus
    fileList[]
    fileList[]:
    字段说明
    fileName文件名
    fileUrl文件地址

    4.22.4 关键说明#

    当发票已生成电子文件时,通常可通过 fileList 获取文件下载地址。
    商户若需要在自身系统展示开票附件,建议以 invoiceStatus=已开票 作为展示前提。

    五、安全设计#

    5.1 认证机制#

    所有接口调用都需要在请求头中携带认证参数:
    参数名类型必填说明
    X-App-IdString是应用 ID
    X-TimestampString是毫秒时间戳,建议 5 分钟内有效
    X-NonceString是随机字符串,用于防重放
    X-SignString是请求签名
    X-Encrypt-TypeStringPOST 请求是当前按 AES 对接

    5.1.1 请求签名算法#

    商户需要使用 HMAC-SHA256 对请求进行签名。
    签名参与参数:
    timestamp
    nonce
    body(POST 请求时为加密后的完整请求体字符串;GET 请求无 body 时不参与)
    POST 请求示例签名串:
    body={"encryptedData":"..."}&nonce=abc123&timestamp=1742891000000
    GET 请求示例签名串:
    nonce=abc123&timestamp=1742891000000
    签名公式:
    signature = HMAC_SHA256(appSecret, signString).toLowerCase()

    5.1.2 响应签名算法#

    响应数据为明文返回,但带签名。
    商户收到响应后,建议验证响应签名,以确保:
    数据未被篡改
    响应确实来自平台
    建议商户统一封装一层 SDK 或网关能力,至少包含:
    请求头生成
    时间戳和随机数生成
    签名串构造
    AES 加解密
    响应验签
    requestId 透传日志

    5.2 数据加密#

    5.2.1 加密方式#

    当前 API 商户接入文档默认按 AES 方式对接。
    说明:
    POST 请求业务数据需要加密
    GET 请求 URL 参数不加密
    响应数据不加密,但带签名

    5.2.2 请求数据格式#

    AES 模式下,请求体通常为:
    {
      "encryptedData": "Base64编码的密文"
    }

    5.2.3 响应数据格式#

    响应统一为明文 JSON + 签名:
    {
      "code": 0,
      "message": "成功",
      "data": {},
      "timestamp": "1742891000000",
      "requestId": "req_xxx",
      "signature": "xxxx"
    }

    5.2.4 安全建议#

    商户应在服务端生成签名,不建议在前端直接持有 AppSecret
    回调验签逻辑应和主动请求验签逻辑同等对待
    X-Timestamp 超时、nonce 重复、签名不匹配的请求都应视为非法请求
    商户不应把身份证、活体材料、结算收款信息等敏感数据以明文方式打印到业务日志中
    如需保存回调原文,建议进行字段脱敏

    5.3 权限控制#

    商户只能访问自己名下的数据
    项目、结算单、交付物、发票都存在归属校验
    商户在接入时不应假设“知道一个 ID 就能查询到数据”
    若商户内部存在多业务线或多系统共享同一套凭证,建议在接入层自行增加业务隔离和审计日志

    六、环境说明#

    6.1 环境配置#

    环境类型API地址用途注意事项
    测试环境https://s.qa.gaosiqihui.com/merchantapi/v2功能测试、联调测试数据仅用于测试
    生产环境https://s.gaosiqihui.com/merchantapi/v2正式业务请使用真实商户凭证
    建议商户在环境切换时同步检查以下配置:
    AppId / AppSecret / AESKey
    回调地址
    IP 白名单
    默认 projectId
    日志级别和脱敏策略

    七、异常处理#

    7.1 通用错误码#

    错误码说明处理建议
    0成功-
    40001缺少必要认证参数检查请求头
    40002请求已过期检查时间戳
    40003无效的 AppId检查 AppId
    40004客户端已被禁用联系平台
    40005签名验证失败检查签名算法和密钥
    40006IP 地址未授权检查客户端 IP 白名单
    40007数据解密失败检查 AES 密钥和加密方式
    40008参数验证失败检查请求体格式和字段类型
    40009请求频率超限降低请求频率后重试
    40010Nonce 重复使用新的随机串
    40011渠道商客户端需要指定商户 ID检查渠道商客户端配置
    40012渠道商客户端商户未绑定联系平台检查绑定关系
    40602商户不存在检查商户配置
    40603商户状态异常,无法访问 API联系平台处理商户状态
    50000系统内部错误稍后重试
    50001业务处理异常查看 message 后重试或联系平台
    处理建议:
    40001-40012 通常属于接入层问题,应先检查请求头、签名、加密、时间戳和客户端配置。
    40602-40603 属于商户或客户端配置问题,应联系平台确认商户配置状态。
    50000-50001 不建议立即高频重试,建议保留 requestId 后联系平台排查。

    7.2 业务异常码#

    7.2.1 项目与招募相关(401xx)#

    错误码说明
    40101项目不存在
    40102项目已结束
    40105项目未配置收款方式
    40107项目不属于当前商户
    40110项目 ID 不能为空且必须大于 0
    40113-40125创建项目字段校验失败
    40126项目尚未审核通过
    40127回调地址不能为空
    40128回调地址长度不能超过 200 字符
    40130税地配置有误,请联系客服
    40138页码必须大于 0
    40139每页数量必须在 1-100 之间
    40140项目状态参数错误
    40141手机号和平台用户 ID 至少传一个
    40142手机号和平台用户 ID 匹配到的创客不一致
    40143生产环境回调地址必须为 HTTPS
    40144跳转地址长度不能超过 200 字符
    40145项目审核状态参数错误
    40146验收结束时间必须晚于当前时间

    7.2.2 创客、招募材料与交付物基础校验(402xx)#

    错误码说明
    40203必填字段缺失
    40204批量数量超限
    40221手机号格式不正确
    40224平台用户 ID 长度不能超过 100 字符
    40229交付文件名称不能为空
    40230交付文件名称过长
    40238交付日期不能为空
    40239交付日期格式错误
    40240交付文件列表不能为空
    40241单次最多上传 20 个交付文件
    40242交付文件地址不能为空
    40243交付文件地址必须使用 HTTPS
    40253创客尚未参与项目,不能上传交付物
    40254招募批次号不能为空
    40255招募批次号长度不能超过 64 字符
    40256招募创客列表不能为空
    40257身份证正反面图片必须同时传入
    40259同一请求内 platformUserId 不能重复
    40262同一招募任务请求参数不一致
    40263同一请求内手机号不能重复
    40264当前项目下已有进行中的招募任务

    7.2.3 结算相关(403xx)#

    错误码说明
    40301商户结算单号重复
    40303结算单或关联记录不存在
    40312无权操作当前结算相关数据
    40313结算明细或交付物明细不存在
    40316-40334创建结算单字段校验失败
    40335当前结算单打款失败,请勿再次操作

    7.2.4 文件与交付物相关(404xx)#

    错误码说明
    40403文件数量超限
    40404不支持的文件格式

    7.2.5 资格与额度相关#

    部分额度场景不通过顶层错误码表达,而是通过业务字段表达:
    字段含义
    eligible=false当前不具备可结算资格
    reasonCode=MAKER_NOT_FOUND未找到创客
    reasonCode=NOT_IN_PROJECT未加入项目
    reasonCode=QUALIFICATION_NOT_READY未完成税地资格
    说明:
    这类情况不代表接口失败,而代表“业务上当前不可继续结算”。
    商户应把它们当作可展示、可流转的业务状态,而不是统一当作系统异常处理。

    7.2.6 发票相关(600xx)#

    错误码说明
    60001申请开票金额超过可开票金额
    60002发票不存在
    60003可开票金额为 0
    说明:
    当前部分发票业务校验仍通过 50001 + message 返回具体原因,例如“结算单不属于当前商户/项目”“结算单开票中或已开票”。
    接入方若需要稳定分支处理,应优先按独立错误码处理;若收到 50001,再结合 message 做排查和兜底提示。

    7.3 系统异常码(5xxxx)#

    错误码说明处理建议
    50000系统内部错误稍后重试
    50001业务处理异常结合 message 排查

    八、测试接口#

    8.1 加密测试接口#

    接口说明#

    用于验证商户侧签名、AES 加密、服务端解密和响应签名链路。

    请求地址#

    POST /merchantapi/v2/test/crypto

    请求参数(需加密)#

    原始业务数据:
    {
      "message": "Hello World! 测试V2加密功能"
    }
    加密请求体示例:
    {
      "encryptedData": "U2FsdGVkX1+..."
    }

    响应参数(明文+签名)#

    {
      "code": 0,
      "message": "成功",
      "data": {
        "originalMessage": "Hello World! 测试V2加密功能",
        "encryptionInfo": "AES加密方案"
      },
      "timestamp": "1742891000000",
      "requestId": "req_xxx",
      "signature": "xxxx"
    }

    使用说明#

    1.
    先确认请求签名正确。
    2.
    再确认服务端能成功解密请求体。
    3.
    最后确认商户侧能正常验证响应签名。
    4.
    该接口通过后,再进入业务接口联调。

    错误码说明#

    错误码说明
    40007解密失败
    40008参数验证失败
    50000系统处理异常

    九、注意事项#

    1.
    多项目场景请始终显式传入 projectId
    默认项目兜底适合单项目商户;一旦商户存在多项目并行,建议所有关键接口都显式传 projectId。
    2.
    招募同步返回不是最终结果
    accepted=true 只代表平台接受了任务。商户必须处理异步回调,才能知道是否生成签约链接、是否已签约、为什么失败。
    3.
    历史签约能否复用,取决于是否覆盖当前项目的结束时间要求
    当前口径不是“签过就算”,而是“历史合同是否仍覆盖 check_date_end + 1个月 的要求”。
    4.
    platformUserId 应作为商户范围内稳定唯一的业务标识
    不建议在正常招募过程中反复更换同一创客的 platformUserId。误绑场景应通过解绑接口处理。
    5.
    额度为 0 不一定是接口异常
    在额度接口中,创客不存在、未入项、未完成资格,都会以 code=0 返回,只是在 eligible / reasonCode / eligibleDesc 中体现业务结论。
    6.
    交付物接口只接受 HTTPS URL
    商户不需要再上传 Base64 文件内容,但必须保证 URL 在平台处理时可以访问,且文件内容与业务描述一致。
    7.
    账户摘要和账户主数据不是同一口径
    项目详情中的账户余额用于项目视角展示,企业账户接口才是账户维度的主要查询入口。
    8.
    联调和问题排查时请保留 requestId
    一旦出现加密、签名、业务状态不一致等问题,requestId 是平台排查的第一关键信息。

    附录:错误码说明#

    以下错误码按当前代码定义整理,若存在重复码、历史兼容码或命名与编码不一致的情况,以服务端实际返回为准。
    特殊说明:
    40214 在当前代码中同时对应 MAKER_ID_TYPE_INVALID 和 MAKER_ID_NUMBER_REQUIRED
    ERROR_423 当前源码中的实际错误码定义为 403

    1. 系统级别错误#

    错误码常量名说明
    429LIMIT_ERROR请求过于频繁,请稍后再试
    404ERROR_404未知的数据404
    500ERROR_500系统错误500

    2. 业务级别错误#

    错误码常量名说明
    1000BUSINESS_ERROR业务错误

    3. 认证级别错误#

    错误码常量名说明
    1002CREATE_DTO_ERROR创建DTO错误
    2001TOKEN_EXPIRE_ERRORToken过期或异常

    4. 业务认证补充错误#

    错误码常量名说明
    3001MAKER_UNCERTIFIED_ERROR创客未认证异常
    3002MAKER_HAS_UNSIGNED_CONTRACT_ERROR创客存在未签约合同
    3003MAKER_CONTRACT_NOT_SIGNED_ERROR创客未在该税源地完成签约
    3404PROJECT_NOT_FOUND项目不存在
    3405TAX_NOT_FOUND项目关联的税地不存在
    3100TOKEN_EXPIREDToken已过期

    5. 商户API通用错误码(400xx)#

    错误码常量名说明
    40000API_PARAM_ERROR参数错误
    40001API_AUTH_MISSING缺少必要的认证参数
    40002API_REQUEST_EXPIRED请求已过期
    40003API_INVALID_APP_ID无效的AppId
    40004API_CLIENT_DISABLED客户端已被禁用
    40005API_SIGNATURE_FAILED签名验证失败
    40006API_IP_NOT_AUTHORIZEDIP地址未授权
    40007API_DECRYPT_FAILED数据解密失败
    40008API_VALIDATION_FAILED参数验证失败
    40009API_RATE_LIMIT_EXCEEDED请求频率超限
    40010API_NONCE_DUPLICATENonce重复
    40011API_NEED_MERCHANT_ID渠道商客户端需要指定商户ID
    40012API_DISTRIBUTOR_MERCHANT_NOT_BIND渠道商-商户未绑定

    6. 项目相关(401xx)#

    错误码常量名说明
    40101PROJECT_NOT_EXISTS项目不存在
    40102PROJECT_DISABLED项目已结束
    40103PROJECT_QUOTA_NOT_ENOUGH项目额度不足
    40104PROJECT_TAX_NOT_CONFIGURED项目未配置税地
    40105PROJECT_PAYMENT_METHOD_NOT_CONFIGURED项目未配置收款方式
    40106PROJECT_NO_PERMISSION无权访问该项目
    40107PROJECT_NOT_BELONG_TO_MERCHANT项目不属于当前商户
    40108PROJECT_RATE_NOT_CONFIGURED项目费率配置不完整
    40109PROJECT_PAYMENT_ACCOUNT_NOT_CONFIGURED项目未配置支付账号
    40110PROJECT_ID_REQUIRED项目ID不能为空
    40111PROJECT_INFO_LIST_REQUIRED项目信息列表不能为空
    40112PROJECT_INFO_LIST_TOO_LONG单次最多支持50个项目信息
    40113PROJECT_NAME_REQUIRED项目名称不能为空
    40114PROJECT_NAME_TOO_LONG项目名称过长,最长100字符
    40115PROJECT_CONTENT_REQUIRED项目内容不能为空
    40116PROJECT_CONTENT_TOO_LONG项目内容需在1000字内
    40117PROJECT_CALCULATION_TYPE_REQUIRED计价方式不能为空
    40118PROJECT_CALCULATION_TYPE_INVALID计价方式错误
    40119PROJECT_BUDGET_REQUIRED项目预算不能为空
    40120PROJECT_MAKER_NUMBER_REQUIRED招募创客数不能为空
    40121PROJECT_SETTLEMENT_RULE_REQUIRED结算规则不能为空
    40122PROJECT_SETTLEMENT_RULE_TOO_LONG结算规则过长,最长100字符
    40123PROJECT_VERIFY_REQUIRED验收标准不能为空
    40124PROJECT_VERIFY_TOO_LONG验收标准需在1000字内
    40125PROJECT_REMARK_TOO_LONG备注过长,最长200字符
    40126PROJECT_NOT_AUDITED项目尚未审核通过
    40127NOTIFY_URL_REQUIRED异步通知地址不能为空
    40128NOTIFY_URL_TOO_LONG回调地址长度不能超过200字符
    40129PROJECT_PARAMS_REQUIRED创客身份证号和外部用户ID至少填写一个
    40130PROJECT_TAX_COMPANY_REQUIRED税地配置有误,请联系客服
    40131PROJECT_CALCULATION_DESC_REQUIRED计价方式描述不能为空
    40132PROJECT_CALCULATION_DESC_TOO_LONG计价方式描述需在500字内
    40133PROJECT_TYPE_INVALID项目类型参数错误,仅支持0-派单项目
    40134PROJECT_CHECK_DATE_START_REQUIRED验收开始时间不能为空
    40135PROJECT_CHECK_DATE_END_REQUIRED验收结束时间不能为空
    40136PROJECT_CHECK_DATE_RANGE_INVALID验收开始时间不能晚于验收结束时间
    40137PROJECT_CONTENT_CONTAINS_SENSITIVE_WORD项目内容包含违禁词
    40138PROJECT_PAGE_INVALID页码必须大于0
    40139PROJECT_PAGE_SIZE_INVALID每页数量必须在1-100之间
    40140PROJECT_STATUS_INVALID项目状态参数错误,仅支持0-未开始、1-进行中或2-已结束
    40141PROJECT_RECRUIT_QUERY_PARAM_INVALID手机号和外部用户ID至少传一个
    40142PROJECT_RECRUIT_QUERY_IDENTIFIER_CONFLICT手机号和外部用户ID匹配到的创客不一致
    40143CALLBACK_URL_NOT_HTTPS回调地址必须为HTTPS链接
    40144REDIRECT_URL_TOO_LONG跳转地址长度不能超过200字符
    40145PROJECT_AUDIT_STATUS_INVALID项目审核状态参数错误,仅支持0-未审核、1-已审核或2-已驳回
    40146PROJECT_CHECK_DATE_END_MUST_BE_FUTURE验收结束时间必须晚于当前时间
    40147PROJECT_QUOTA_MAKER_NOT_FOUND未找到创客
    40148PROJECT_QUOTA_MAKER_NOT_IN_PROJECT创客未加入项目
    40149PROJECT_QUOTA_QUALIFICATION_NOT_READY创客未完成签约资格

    7. 创客相关(402xx)#

    错误码常量名说明
    40201MAKER_ID_CARD_FORMAT_ERROR身份证号格式错误
    40202MAKER_PHONE_FORMAT_ERROR手机号格式错误
    40203MAKER_REQUIRED_FIELD_MISSING必填字段缺失
    40204MAKER_BATCH_LIMIT_EXCEEDED批量数量超限
    40205MAKER_INFO_DUPLICATE创客信息重复
    40206MAKER_NOT_EXISTS创客不存在
    40207MAKER_NOT_CERTIFIED创客未实名认证
    40208MAKER_DISABLED创客已被冻结
    40209MAKER_QUOTA_NOT_ENOUGH创客额度不足
    40210MAKER_NOT_BELONG_TO_MERCHANT创客未关联商户
    40211MAKER_NAME_REQUIRED创客姓名不能为空
    40212MAKER_NAME_TOO_LONG创客姓名长度不能超过50字符
    40213MAKER_ID_TYPE_REQUIRED证件类型不能为空
    40214MAKER_ID_TYPE_INVALID证件类型仅支持ID_CARD或PASSPORT
    40214MAKER_ID_NUMBER_REQUIRED证件号码不能为空
    40215MAKER_ID_NUMBER_LENGTH_INVALID证件号码长度需在6-32之间
    40216MAKER_COUNTRY_REQUIRED国家或地区不能为空
    40217MAKER_COUNTRY_LENGTH_INVALID国家或地区代码长度需在2-20之间
    40218MAKER_ADDRESS_REQUIRED地址不能为空
    40219MAKER_ADDRESS_TOO_LONG地址长度不能超过200字符
    40220MAKER_PHONE_REQUIRED联系电话不能为空
    40221MAKER_PHONE_FORMAT_INVALID联系电话格式不正确
    40222MAKER_PLATFORM_NAME_TOO_LONG平台名称长度不能超过100字符
    40223MAKER_PLATFORM_USER_NAME_TOO_LONG平台用户名长度不能超过100字符
    40224MAKER_PLATFORM_USER_ID_TOO_LONG外部用户ID长度不能超过100字符
    40225MAKER_INFO_LIST_REQUIRED列表不能为空
    40226MAKER_INFO_LIST_TOO_LONG单次最多支持50个创客信息
    40227MAKER_ID_TYPE_INVALID2证件类型暂时仅支持ID_CARD
    40228MAKER_ID_REQUIREDmakerId不能为空
    40229MAKER_CONTRACT_FILENAME_REQUIREDfileName不能为空
    40230MAKER_CONTRACT_FILENAME_TOO_LONG文件名长度不能超过200
    40231MAKER_CONTRACT_FILETYPE_REQUIREDfileType不能为空
    40232MAKER_CONTRACT_FILETYPE_INVALID文件类型仅支持pdf/jpg/jpeg/png
    40233MAKER_CONTRACT_FILESIZE_REQUIREDfileSize不能为空
    40234MAKER_CONTRACT_FILESIZE_TOO_LARGE文件大小不能超过2MB
    40235MAKER_CONTRACT_FILEMD5_REQUIREDfileMd5不能为空
    40236MAKER_CONTRACT_FILEMD5_INVALID文件MD5长度需在16-64之间
    40237MAKER_CONTRACT_FILECONTENT_REQUIREDfileContent不能为空
    40238MAKER_DELIVERY_DATE_REQUIREDdeliveryDate不能为空
    40239MAKER_DELIVERY_DATE_FORMAT_ERRORdeliveryDate格式不正确,应为yyyy-MM-dd
    40240MAKER_DELIVERY_FILES_REQUIREDfiles不能为空
    40241MAKER_DELIVERY_FILES_TOO_MANY单次最多上传20个文件
    40242MAKER_DELIVERY_FILEURL_REQUIREDfileUrl不能为空
    40243MAKER_DELIVERY_FILEURL_NOT_HTTPS文件URL必须为HTTPS链接
    40244MAKER_BANK_CARD_VERIFICATION_FAILED四要素认证失败
    40245MAKER_REAL_NAME_VERIFICATION_FAILED实名认证失败
    40246MAKER_NAME_NOT_EQ创客姓名与识别信息不一致
    40247MAKER_ID_NUMBER_NOT_EQ创客身份证号码与识别信息不一致
    40248MAKER_ID_CARD_INVALID身份证已失效
    40249MAKER_ID_CARD_MISSING证件照缺失
    40250MAKER_PLATFORM_MISSING平台相关信息缺失
    40251MAKER_PLATFORM_USER_ID_REQUIRED外部用户ID不能为空
    40252MAKER_LIVENESS_FAILED活体发起失败,请重试
    40253MAKER_DELIVERY_TASK_NOT_JOINED创客未参与该项目,不能上传交付物
    40254RECRUIT_BATCH_NO_REQUIRED招募批次号不能为空
    40255RECRUIT_BATCH_NO_TOO_LONG招募批次号长度不能超过64字符
    40256RECRUIT_MAKERS_REQUIRED招募创客列表不能为空
    40257RECRUIT_OBVERSE_REVERSE_REQUIRED_TOGETHER身份证正反面图片必须同时传入
    40258RECRUIT_LIVENESS_REQUIRED_TOGETHER活体照片和活体视频必须同时传入
    40259RECRUIT_DUPLICATE_PLATFORM_USER_ID同一请求内外部用户ID不能重复
    40260RECRUIT_TASK_NOT_EXISTS招募任务不存在
    40261RECRUIT_OCR_FAILEDOCR校验失败
    40262RECRUIT_TASK_REQUEST_CONFLICT同一招募任务的请求参数不一致
    40263RECRUIT_DUPLICATE_PHONE同一请求内手机号不能重复
    40264RECRUIT_ACTIVE_TASK_EXISTS该创客在当前项目下已有进行中的招募任务
    40265MAKER_INFO_LIST_REQUIRED_ONLY_ONE查询自由职业者信息手机号或外部用户ID列表只能传一个

    8. 结算相关(403xx)#

    错误码常量名说明
    40300SETTLEMENT_CUSTOM_ERROR结算自定义错误
    40301SETTLEMENT_MERCHANT_NO_DUPLICATE商户结算单号重复
    40302SETTLEMENT_DETAIL_NO_DUPLICATE商户明细号重复
    40303SETTLEMENT_NOT_EXISTS结算单不存在
    40304SETTLEMENT_STATUS_NOT_ALLOW当前结算单未完成,请勿提前操作
    40305SETTLEMENT_AMOUNT_INVALID结算金额无效
    40306SETTLEMENT_DETAIL_EMPTY结算明细为空
    40307SETTLEMENT_DETAIL_LIMIT_EXCEEDED结算明细超限
    40308SETTLEMENT_PAYMENT_METHOD_NOT_SUPPORTED收款方式不支持
    40309SETTLEMENT_PAYMENT_ACCOUNT_INVALID收款账号无效
    40310SETTLEMENT_ALREADY_PAID结算单已支付
    40311SETTLEMENT_ALREADY_CANCELLED结算单已取消
    40312SETTLEMENT_NO_PERMISSION无权操作该结算单
    40313SETTLEMENT_DETAIL_NOT_EXISTS结算单明细尚未生成
    40314SETTLEMENT_PAYMENT_ACCOUNT_NOT_BELONG_TO_MAKER支付账户不属于该创客
    40315SETTLEMENT_PAYMENT_ACCOUNT_TYPE_MISMATCH支付账户类型不匹配
    40316SETTLEMENT_NO_REQUIRED商户结算单号不能为空
    40317SETTLEMENT_NO_LENGTH_INVALID商户结算单号长度必须在1-64个字符之间
    40318SETTLEMENT_NO_INVALID商户结算单号仅支持字母、数字、下划线、横线
    40319RECEIVE_METHOD_REQUIRED收款方式不能为空
    40320RECEIVE_METHOD_INVALID收款方式必须为bank、alipay或wechat
    40321SETTLEMENT_DETAIL_TOO_MANY结算明细数量不能超过200条
    40322SETTLEMENT_REMARK_TOO_LONG结算备注长度不能超过200字符
    40323SETTLEMENT_DETAIL_NO_REQUIRED商户结算明细号不能为空
    40324SETTLEMENT_DETAIL_NO_INVALID商户结算明细号仅支持字母、数字、下划线、横线
    40325SETTLEMENT_DETAIL_NO_LENGTH_INVALID商户结算明细号长度需在1-64之间
    40326SETTLEMENT_DETAIL_AMOUNT_REQUIRED结算金额不能为空
    40327SETTLEMENT_DETAIL_AMOUNT_INVALID结算金额格式错误
    40328SETTLEMENT_DETAIL_AMOUNT_NEGATIVE结算金额必须大于0
    40329SETTLEMENT_PAYMENT_ACCOUNT_REQUIRED收款账户信息不能为空
    40330SETTLEMENT_ACCOUNT_NO_REQUIRED收款账号不能为空
    40331SETTLEMENT_ACCOUNT_NO_LENGTH_INVALID收款账号长度需在5-64之间
    40332SETTLEMENT_ACCOUNT_NAME_TOO_LONG账户名长度不能超过50字符
    40333SETTLEMENT_PHONE_INVALID预留手机号格式错误
    40334SETTLEMENT_DETAIL_ID_REQUIREDdetailId不能为空
    40335SETTLEMENT_STATUS_FAIL当前结算单打款失败,请勿再次操作
    40336SETTLEMENT_NOTIFY_URL_TOO_LONG回调地址长度不能超过200字符

    9. 交付物相关(404xx)#

    错误码常量名说明
    40401FILE_SIZE_EXCEED_ERROR文件大小超限
    40402FILE_FORMAT_NOT_SUPPORTED文件格式不支持
    40403FILE_COUNT_EXCEED_ERROR文件数量超限
    40404FILE_TYPE_NOT_SUPPORTED_ERROR不支持的文件格式
    40405DELIVERABLE_MAKER_NOT_FOUND创客不存在
    40406DELIVERABLE_PROJECT_NOT_FOUND项目不存在
    40407DELIVERABLE_SETTLEMENT_NOT_FOUND结算单不存在

    10. 收入申报相关(405xx)#

    错误码常量名说明
    40501INCOME_MAKER_NOT_FOUND创客不存在
    40502INCOME_DATA_FORMAT_ERROR申报数据格式错误
    40503INCOME_PERIOD_INVALID申报期间无效
    40504INCOME_AMOUNT_FORMAT_ERROR金额格式错误
    40505INCOME_DATE_FORMAT_ERROR日期格式错误
    40506INCOME_RECORD_EXISTS申报记录已存在
    40507INCOME_DATA_MISSING申报数据缺失
    40508INCOME_BATCH_LIMIT_ERROR批量数量超限

    11. 商户相关(406xx)#

    错误码常量名说明
    40601MERCHANT_EXIST_ERROR商户已存在
    40602MERCHANT_NOT_EXISTS商户不存在
    40603MERCHANT_STATUS_INVALID商户状态异常,无法访问API

    12. 额度相关(408xx)#

    错误码常量名说明
    40801QUOTA_MONTH_NOT_ENOUGH月度额度不足
    40802QUOTA_SINGLE_AMOUNT_EXCEEDED单笔金额超限
    40803QUOTA_DAY_LIMIT_EXCEEDED日累计额度超限
    40804QUOTA_MAKER_MONTH_NOT_ENOUGH创客月度额度不足
    40805QUOTA_PAYMENT_METHOD_NOT_ENOUGH收款方式额度不足
    40806QUOTA_YEAR_EXCEEDED年度额度超限
    40807QUOTA_CALCULATION_ERROR额度计算异常

    13. 支付相关(409xx)#

    错误码常量名说明
    40901PAYMENT_CHANNEL_ERROR支付渠道异常
    40902PAYMENT_BANK_ACCOUNT_INVALID银行账号无效
    40903PAYMENT_ALIPAY_ACCOUNT_INVALID支付宝账号无效
    40904PAYMENT_WECHAT_ACCOUNT_INVALID微信账号无效
    40905PAYMENT_NAME_MISMATCH收款人姓名不匹配
    40906PAYMENT_PROCESSING支付处理中
    40907PAYMENT_FAILED支付失败
    40908PAYMENT_BANK_MAINTENANCE银行维护中
    40909PAYMENT_AMOUNT_EXCEEDED支付金额超限

    14. 系统异常码(5xxxx)#

    错误码常量名说明
    50000SYSTEM_INTERNAL_ERROR系统内部错误
    50001SYSTEM_BUSINESS_ERROR业务处理异常
    50002SYSTEM_CACHE_ERROR缓存服务异常
    50003SYSTEM_THIRD_PARTY_TIMEOUT第三方服务超时
    50004SYSTEM_THIRD_PARTY_ERROR第三方服务异常
    50005SYSTEM_NETWORK_ERROR网络异常
    50006SYSTEM_SERVICE_UNAVAILABLE服务暂时不可用
    50007SYSTEM_MAINTENANCE系统维护中
    50099SYSTEM_DATABASE_ERROR数据库异常

    15. 发票相关(6xxxx)#

    错误码常量名说明
    60001INVOICE_AMOUNT_EXCEEDED申请开票金额超出可开票金额
    60002INVOICE_NOT_FOUND发票不存在
    60003INVOICE_AMOUNT_ZERO可开票金额为0

    16. 历史通用错误码#

    错误码常量名说明
    400ERROR_400请求参数错误400
    401ERROR_401未授权401
    403ERROR_403未授权403
    403ERROR_423此账号已被锁定,请稍后再试!
    修改于 2026-03-26 09:01:43
    下一页
    查询结算单列表
    Built with