第三方CRM对接总览
高级会员/OEM 可把 24好玩活动嵌入自有触点,并与自有 CRM 双向打通:玩家身份由 CRM 侧签名注入(免二次登录);积分查询/扣减/增加、优惠券与奖品发放由平台在玩家中奖时回调 CRM 接口完成;CRM 也可反向调用平台接口(如为指定用户加抽奖次数)。参考实现为印力集团商场 SCRM(57 个商场在线运行)。
集成全景
玩家 ──打开──> CRM APP/公众号/小程序
│ ①签名进入(带会员ID/手机号)
▼
24好玩活动页(H5, iframe或跳转)
│ ②玩游戏/抽奖
▼
24好玩平台 ──③发奖回调──> CRM接口(积分/优惠券/奖品)
▲
└──④CRM主动调用(加抽奖次数/名单管理/查配置)──
方向③是对接的主体工作量:CRM 侧需要实现一组接收接口;方向④按需选用。
凭据体系(先分清两张"钥匙")⚠️
平台有两套独立凭据,对接中最易混淆:
| 凭据 | 用途 | 相关签名 |
|---|---|---|
应用凭据(app_auth):数字 appid + private_token(密钥) |
玩家进入签名、CRM→平台业务接口、平台→CRM 发奖回调 | 方案 A / B / D |
渠道凭据(open_auth):appid + appsecret |
商家(创建者)SSO 登录工作台、渠道子账号 | 方案 C |
应用凭据可通过 GET /open/gameBox/getWebUserByGameId?game_id= 按活动查询(返回 app_id、app_secret)。
四套签名速查
所有签名均为 MD5,但取参与拼接规则不同,按接口族选择:
| 方案 | 方向/场景 | 规则要点 |
|---|---|---|
| A | CRM → 平台(open-api,如 addChance、crm24 系列) | 除 sign 外全部参数按 key 升序,仅拼接值(无 key、无分隔符),末尾拼 private_token,取 md5 |
| B | 玩家进入(appEntry/game_enter 嵌入) | 固定字段集(game_id, appid, uid, headimgurl, nickname, timestamp, phone, is_from_app, reg_time, reg_area, is_new, sex, sessionId;token 字段本身不参与拼接)ksort 后拼值;跳过空值但保留字符串 '0';nickname 需 urldecode 一致;timestamp 秒,560 秒窗口 |
| C | 商家 SSO(/auth 渠道登录) | 固定顺序直拼:md5(appid + appsecret + timestamp + uid + name + phone)(不排序);timestamp 秒 |
| D | 平台 → CRM 发奖回调(CRM 侧验签用) | 参数先过滤空值/0 值,ksort 升序拼值(数组字段 JSON 序列化),末尾拼密钥取 md5;timestamp 为毫秒,建议 ±300 秒窗口;POST JSON body |
方案 A 算例:body {game_id:"5", appid:"42", u_id:"OABC", num:"10", sequence_id:"x1", timestamp:"1700000000"},密钥 SEC → 排序后取值拼接 42 5 10 x1 1700000000 OABC → sign = md5("42510x11700000000OABCSEC")。
方案 D 算例(CRM 侧验签用,由规则推导,最终以沙箱验签为准):平台推送 body(已过滤空值/0 值){appid:"42", game_id:"5", game_name:"周年庆", num:"10", sequence_id:"x1", timestamp:"1700000000000", u_id:"OABC", sign:"…"},密钥 SEC → 除 sign 外按 key 升序取值拼接 42 5 周年庆 10 x1 1700000000000 OABC → sign = md5("425周年庆10x11700000000000OABCSEC")。注意 timestamp 为毫秒;数组类字段以 JSON 序列化后参与拼接。
CRM 侧需要实现什么(方向③)
平台在玩家中奖/消耗积分时 POST JSON 到商家配置的 URL(含 appid、sign、毫秒 timestamp),CRM 返回 {code:0, ...} 表示成功:
| 回调 | 触发时机 | 关键入参 | 成功返回 |
|---|---|---|---|
| 积分查询 | 玩家进入/抽奖前 | u_id, req_type |
{code:0, result:{integral, free_times}} |
| 积分扣减 | 消耗积分抽奖 | num, u_id, game_id, sequence_id |
{code:0} |
| 积分增加 | 中积分奖 | num, u_id, sequence_id(幂等键) |
{code:0} |
| 优惠券发放 | 中优惠券奖 | coupon_id, u_id, game_id |
{code:0} |
| 奖品发放(第三方奖品) | 中第三方奖 | gift_id, u_id, game_id |
{code:0} |
约定:积分不足返回 {code:8100, msg:"积分不足"}(msg 会展示给玩家);必须返回 code 字段,缺失按结构错误处理(积分类直接失败,券/奖品进入人工确认队列);用 sequence_id 做幂等去重;玩家标识字段名为 u_id。
超时与可靠性:平台侧单次调用超时 10 秒,仅 HTTP 2xx 的响应体会被解析;失败不承诺自动重试(积分类直接判失败,券/奖品类转人工确认队列人工补发)——所以 CRM 侧必须做到幂等(同一 sequence_id 重复到达只生效一次)且快速返回。回调 URL 建议使用 HTTPS。接口自身的 QPS 限额未公开,以联调与商务约定为准。
平台可供 CRM 调用的接口(方向④)
- 加抽奖/游玩次数:
POST /open/games/addChance(方案 A 签名); - 名单管理、按商场查活动列表、查奖品配置等(JWT 鉴权族);
- 详见高级会员接口逐接口契约。
⚠️ 运营注意:活动结束后请停止定时调用 addChance 等接口(历史上有伙伴的调度器对已结束活动持续空调多年)。
对接步骤(建议顺序)
- 商务开通高级会员/OEM,获取渠道凭据;平台侧配置回调 URL 与积分/券/奖品开关;
- 从平台获取应用凭据(appid + 密钥);
- CRM 实现方向③回调接口(验签方案 D + 幂等 + code 约定);
- 实现玩家进入链路(方案 B 签名或 iframe 嵌入,见渠道模式开放接口);
- 在沙箱环境联调(平台提供模拟门户 + 假 CRM,可回看每次请求的验签结果,联系客服开通访问);
- 生产灰度:先单活动小流量验证发奖链路,再放量。
参考实现:印力集团(SCPG)
印力商场 SCRM 是本契约的最大在网实现:57 个商场账号(1 账号=1 商场=1 plazaCode),积分单位"星贝",全量走 积分查询/扣减/增加 + 优惠券 + 第三方奖品回调,玩家从商场 APP 签名进入。多商场共享活动时,发奖按玩家所属商场路由。