模块:business-marketing(HTTP 入口在 business-mobile-gateway)
前缀:${jeesharp.web.mobilePath}(默认/mobile)
更新日期:2026-06-25
版本:P0
Content-Type: application/json;charset=UTF-8
access_token: {token}
X-Platform: MINI | APP | H5
X-Device-Id: {deviceId}
{
"code": 200,
"msg": "操作成功",
"data": { },
"requestId": "uuid-xxx"
}
currentTenantCode(来自 landing 接口)。tenantCode,后端强校验与券/入会关系一致。须同时满足:
/mobile/noAuth/marketing/**skipAuth: truenoAuth/marketing/tenantController:MarketingTenantNoAuthMobileController
GET /noAuth/marketing/tenant/landingskipAuth: true)Query:
| 参数 | 必填 | 说明 |
|---|---|---|
| scene | ✅ | 小程序码 scene |
响应 data:
| 字段 | 说明 |
|---|---|
| tenantId | 店铺租户ID |
| tenantCode | 店铺租户编码 |
| tenantName | 店铺名称(来自 sys_tn_tenant_info) |
| marketingEnabled | 是否开通营销 |
| autoJoinOnQr | 是否扫码免审 |
| welcomeTitle / welcomeSubtitle | 落地文案 |
| logoUrl | Logo |
| channelCode | 解析出的渠道 |
marketing/memberTenantController:MemberTenantMobileController
基础路径:/mobile/marketing/memberTenant
POST /join请求体:
{
"tenantCode": "T10086",
"channelCode": "DEFAULT"
}
响应:绑定关系摘要;已绑定幂等返回成功。
GET /myTenants响应 data:[{ tenantId, tenantCode, tenantName, joinDate, bindStatus }]
marketing/couponController:MarketingCouponMobileController
基础路径:/mobile/marketing/coupon
说明:内部编排 MemberCouponMobileApi(coupon-api)
POST /available请求体:
{
"tenantCode": "T10086",
"pageNo": 1,
"pageSize": 10
}
前置:已入会该 tenantCode;仅返回该租户下 STORE_OFFLINE 场景且进行中的模板。
POST /receive请求体:
{
"tenantCode": "T10086",
"templateId": "模板ID"
}
POST /myList请求体:
{
"tenantCode": "T10086",
"pageNo": 1,
"pageSize": 10,
"status": 0
}
status:0未用 1已用 2过期 3冻结 4作废。
GET /detail?memberCouponId={id}&tenantCode={code}GET /verifyCode?memberCouponId={id}&tenantCode={code}响应 data:
| 字段 | 说明 |
|---|---|
| verifyToken | 核销令牌 |
| expireAt | 过期时间戳 |
| qrcodeContent | 二维码内容 |
marketing/clerk/couponController:MarketingCouponVerifyMobileController
基础路径:/mobile/marketing/clerk/coupon
POST /verify请求体:
{
"tenantCode": "T10086",
"verifyToken": "动态码令牌"
}
校验:
tenantCodetenant_id == 该租户响应 data:券名、会员脱敏信息、核销时间。
POST /verifyRecords请求体:分页 + tenantCode + 时间范围
business-mobile-gateway/pom.xml 须增加:
<dependency>
<groupId>com.xinghuacuntravel</groupId>
<artifactId>business-marketing-api</artifactId>
</dependency>
<dependency>
<groupId>com.xinghuacuntravel</groupId>
<artifactId>business-marketing-bean</artifactId>
</dependency>
MarketingMobileApi(business-marketing-api,由 ApiImpl 实现):
| 方法 | 说明 |
|---|---|
| resolveLandingByScene(scene) | 扫码落地 |
| joinTenant(memberId, dto) | 入会 |
| listMyTenants(memberId) | 我的店铺 |
| pageAvailableCoupons(...) | 可领券 |
| receiveCoupon(...) | 领券 |
| pageMyCoupons(...) | 我的券 |
| getVerifyCode(...) | 动态核销码 |
| verifyCoupon(...) | 店员核销 |
void offlineConfirmUsed(MemberCouponOfflineConfirmDTO dto);
DTO 要点:
| 字段 | 说明 |
|---|---|
| memberCouponId | 会员券ID |
| memberId | 会员ID |
| tenantId / tenantCode | 券归属租户 |
| verifyToken | 幂等号 |
| operatorId | 店员 |
在 jeesharp.member-auth.sa-interceptor.exclude-path-patterns 追加:
- /mobile/noAuth/marketing/**
勿 放行 /mobile/marketing/** 整体(写操作须登录)。
| 操作 | 方法 | URL | 认证 |
|---|---|---|---|
| 扫码落地 | GET | /mobile/noAuth/marketing/tenant/landing |
否 |
| 入会 | POST | /mobile/marketing/memberTenant/join |
是 |
| 我的店铺 | GET | /mobile/marketing/memberTenant/myTenants |
是 |
| 可领券 | POST | /mobile/marketing/coupon/available |
是 |
| 领券 | POST | /mobile/marketing/coupon/receive |
是 |
| 我的券 | POST | /mobile/marketing/coupon/myList |
是 |
| 券详情 | GET | /mobile/marketing/coupon/detail |
是 |
| 到店码 | GET | /mobile/marketing/coupon/verifyCode |
是 |
| 店员核销 | POST | /mobile/marketing/clerk/coupon/verify |
是 |
| 核销记录 | POST | /mobile/marketing/clerk/coupon/verifyRecords |
是 |
遵循 mobile-api-rules:200 成功、201 需登录、203 参数错误等。
| 版本 | 日期 | 说明 |
|---|---|---|
| 1.0.0 | 2026-06-25 | P0 初版 |