| | |
| | | card.put("cert_no", command.idCardNo()); |
| | | card.put("cert_validity_type", command.certificateValidityType()); |
| | | card.put("cert_begin_date", command.certificateBeginDate()); |
| | | if (!blank(command.certificateEndDate())) card.put("cert_end_date", command.certificateEndDate()); |
| | | // 长期有效(cert_validity_type=1)时截止日期留空——官方写明「当 cert_validity_type=1 时为空」。 |
| | | if (!"1".equals(command.certificateValidityType()) && !blank(command.certificateEndDate())) card.put("cert_end_date", command.certificateEndDate()); |
| | | card.put("mp", command.mobileNo()); |
| | | card.put("is_settle_default", "Y"); |
| | | |
| | |
| | | request.put("reg_name", command.name()); |
| | | request.put("short_name", command.name()); |
| | | request.put("mcc", command.mcc()); |
| | | request.put("scene_type", "ONLINE"); |
| | | // 进件场景:线下 OFFLINE(线上 ONLINE)。线下属「有实体场所」口径,经营详细地址随之变成必填, |
| | | // 所以 detail_addr 取商户填的经营地址,不再用证件地址顶替(见 legal_addr 与 detail_addr 的分离)。 |
| | | request.put("scene_type", properties.getMerchantOnboardingSceneType()); |
| | | request.put("prov_id", command.provinceCode()); |
| | | request.put("area_id", command.cityCode()); |
| | | request.put("district_id", command.districtCode()); |
| | | request.put("detail_addr", command.address()); |
| | | request.put("detail_addr", command.businessAddress()); |
| | | request.put("legal_cert_no", command.idCardNo()); |
| | | request.put("legal_cert_validity_type", command.certificateValidityType()); |
| | | request.put("legal_cert_begin_date", command.certificateBeginDate()); |
| | | putIfPresent(request, "legal_cert_end_date", command.certificateEndDate()); |
| | | // 证件「长期有效」(validity_type=1)时不填截止日期——官方口径已确认:长期有效无需填写。 |
| | | if (!"1".equals(command.certificateValidityType())) putIfPresent(request, "legal_cert_end_date", command.certificateEndDate()); |
| | | request.put("legal_addr", command.address()); |
| | | request.put("legal_cert_front_pic", command.legalFrontPictureId()); |
| | | request.put("legal_cert_back_pic", command.legalBackPictureId()); |
| | |
| | | request.put("login_name", loginName(command.applicationNo())); |
| | | request.put("card_info", JSON.toJSONString(card)); |
| | | request.put("settle_card_front_pic", command.settlementCardFrontPictureId()); |
| | | // 店铺照片(F22):个人(小微)商户进件的必填项,三种经营类型都要传,只是图片内容要求不同—— |
| | | // 线上商品/服务交易传店铺首页截图、流动经营/便民服务传经营现场照、门店场所传实体门头照。 |
| | | // 这里只负责把商户交的图带上,内容按经营类型由商户端提示。 |
| | | request.put("store_header_pic", command.storeHeaderPictureId()); |
| | | // 线下经营的门店材料是一组三张:门头照(F22)、内景照(F24)、收银台(F105)。通道的 |
| | | // 「商户材料校验服务」在进件这一步按 F-code 逐张核对,缺一张就整笔驳回——报错原文 |
| | | // 「缺失图片:F22-店铺门头照图片;F24-店铺内景图片;F105-店铺收银台」(2026-09-29 实测)。 |
| | | // 字段名 store_indoor_pic / store_cashier_desk_pic 取自通道自己的报错原文。 |
| | | putIfPresent(request, "store_indoor_pic", command.storeIndoorPictureId()); |
| | | putIfPresent(request, "store_cashier_desk_pic", command.storeCashierPictureId()); |
| | | request.put("cash_config", JSON.toJSONString(List.of(cash))); |
| | | // 与商户主体一致:进件即打开自动结算,核销确认后的钱由斗拱按结算周期自动划到结算卡。 |
| | | request.put("settle_config", JSON.toJSONString(HuifuEnterpriseOnboardingGateway.settleConfig())); |