品牌商:品牌会员入驻中心,点击创建应用,在新开页面提交开发者信息。
【企业资质】请上传企业执照副本图片;
【请填写选用的APPKEY 】如果接入方式为自己研发,请填写无,审核同意后需进行创建应用,应用创建成功后自动赋予【品牌会员基础包】(SPI场景组)和【品牌会员积分包】(API权限包)的权限;如果为第三方ISV代开发,联系isv获取应用的AppKey,如果isv应用分前后台,请填写后台AppKey。
ISV:无线开放平台
1、开发帐号必须为卖家帐号或者企业资质的帐号。如果是ISV代开发,则ISV需要经过企业资质认证或者由商家申请权限。
2、审核通过后: 应用由ISV提供,【品牌会员基础包】(SPI场景组)和【品牌会员积分包】(API权限包)的权限自动赋予给ISV的应用。
注意事项:
1 品牌商自己研发入驻审核通过以后创建应用。应用标签是--【商家品牌会员】;
2 如果为第三方ISV代开发,isv应该先创建--【零售通】。在商家申请入驻的时候,商家联系isv获取应用的AppKey,isv提供后台AppKey。
服饰商家开发详见: 会员中心系统接口文档
开发测试过程中商家相关操作见:会员中心-开发者后台(操作说明:点击查看)。
会员入会流程
①②③④均为SPI接口,开发者根据接口实现返回json数据即可
① qimen.alibaba.member.activate(会员激活)该接口为全新接口,只有在商家从官方版/定制版切换到会员通时,存量会员从店铺会员点击升级为存量会员时才会用到,详细字段可点击文档,奇门接入可点击文档进行查看
② tmall.mei.crm.member.bind.query(绑定查询)
③ tmall.mei.crm.bind(绑定)
④ tmall.mei.crm.member.register(注册)
会员积分变动流程
如果是java开发,消息用长连接可获取,如果是php需要开发者主动调用接口获取,点击查看消息服务使用介绍,积分变更需订阅消息:tmall_mei_PointChange
1接口名称:tmall.mei.crm.member.sync,线下积分变动通知到阿里,保证线上线下积分一致,详见接口文档
2接口名称:taobao.tmc.messages.consume 消费消息,消息消费后,指针自动后移,下次调用自动获取到未消费过的消息,但是消费确认后的消息无法再次获取。
3接口名称:tmall.mei.crm.callback.point.change,告知阿里服务商系统处理是否成功的结果,一定要确认回调,否则积分变更流程会未完结,进行积分兑券/兑礼的积分会处于冻结中,无法正常使用。注:积分兑礼的礼品签收不代表积分变更流程的完结
4接口名称:taobao.tmc.messages.confirm 确认消息,获取消息后,如果不确认,消息服务会选择时机重发,重发次数由消息服务控制,如果消息3天内都没有被确认将会被删除。
点击开放平台【控制台】相关应用的【应用管理】>【API服务提供】,选择【品牌会员基础包】进入开发,如下图所示。
进入开发填写相关相关环境,开发者填写测试url,系统实现接收处理。
SPI详细了解见:SPI服务接入文档.
SPI名称tmall.mei.crm.member.bind.query
场景说明 当用户在页面发起绑定操作时,会触发该请求。
请求查询参数
名称 |
类型 |
描述 |
seller_name |
字符串 |
卖家昵称 |
mix_mobile |
字符串 |
默认密文手机号码 |
ouid |
字符串 |
淘宝买家在当前店铺的唯一标识 |
omid |
字符串 |
淘宝买家在当前品牌/企业的唯一标识,需做品牌认领 |
extend |
字符串 |
extend{"alipay_user_id":"2088702372175543", |
body示例(不同权限会透出不同的组合参数,其他接口body示例类同,这里仅是其中一种):
例: { "seller_name": "天猫精灵", " mix_mobile ": "79470e382ca75f219d2616b6c646abf1", "ouid" :3452435234523, "omid" :3452435234523, "extend":"{"alipay_user_id":"2088702372175543" }" }
请求返回结果(所有字段均为必选)
名称 |
类型 |
描述 |
是否必填 |
bindable |
布尔值 |
是否能绑定。如果返回true,则需要品牌方将明文的nick,mobile返回。 |
是 |
bind_code |
字符串 |
必填 以下为不能绑定的代码,如果可绑定返回SUC(需返回明文手机号)。 E01:会员不存在 E02:会员已被绑定 E04:会员不存在,可注册 E05:系统繁忙或异常,可重试 其他原因可传F01,F02等, 系统统一识别为会员不存在 |
是 |
member |
复杂类型 |
会员信息见下表 |
是 |
member信息:
名称 |
类型 |
描述 |
是否必填 |
point |
数字 |
积分数值 |
是 |
ouid |
字符串 |
淘宝买家在当前店铺的唯一标识 |
是 |
level |
数字 |
会员等级 |
是 |
extend |
字符串 |
json对象,如果商家有卡号需要同步落支付宝卡包,可以回传 "card_no":"10000";一般建议直接传空值 |
是 |
mix_mobile |
字符串 |
会员密文手机号码 |
是 |
返回值示例(严格按照接口返回类型进行返回,其他接口返回值示例类同):
{"bind_code":"SUC","bindable":true,"member":{"mix_mobile":"79470e382ca75f219d2616b6c646abf1", "ouid" :3452435234523,"point":"2000","level":"1","extend":"{/"card_no/":/"1000001/"}"}}
SPI名称 tmall.mei.crm.bind
场景说明
请求查询参数
名称 |
类型 |
描述 |
seller_name |
字符串 |
卖家昵称 |
type |
字符串 |
操作类型,1-绑定,2-解绑 |
mobile |
字符串 |
明文手机号码 |
ouid |
字符串 |
淘宝买家在当前店铺的唯一标识 |
omid |
字符串 |
淘宝买家在当前品牌/企业的唯一标识,需做品牌认领 |
extend |
Json字符串 |
会员的拓展信息extend:{ "source":"ScanCode", |
注: 用户拓展信息为姓名、性别、出生年月日、邮箱、宝宝出生年月日、省份,城市;name:消费者姓名;sex:1(男性)2(女性);babyBirthday:宝宝的生日;birthday:出生月日,birthDate:出生年月日,province:省份,city:城市,(目前扩展字段已不接受新增申请)
请求示例: 手机号权限方式: { "seller_name": "天猫魔盒", "mobile": "15088909090", "ouid" :3452435234523, "omid" :3452435234523, "type": "1" }
注:解绑时,type字段值为2,接口请求里无extend字段。
请求返回结果(所有字段均为必选)
名称 |
类型 |
描述 |
是否必填 |
member |
复杂类型 |
会员信息,见下表 |
是 |
bind_code |
字符串 |
绑定结果代码: SUC:处理成功 E01:系统异常,可重试,E02:绑定失败,非品牌会员,不可绑定 E03:绑定失败,已被其他用户绑定 E04:绑定失败,该帐号已经绑定 其他原因可传F01,F02等, 系统统一识别为非品牌会员,不可绑定 |
是 |
member信息:
名称 |
类型 |
描述 |
是否必填 |
point |
数字 |
积分数值 |
是 |
level |
数字 |
会员等级 |
是 |
extend |
字符串 |
json对象,如果商家有卡号需要同步落支付宝卡包,可以回传 "card_no":"10000";一般建议直接传空值 |
是 |
ouid |
字符串 |
淘宝买家在当前店铺的唯一标识 |
是 |
mobile |
字符串 |
会员明文手机号码 |
是 |
返回值示例: {"bind_code":"SUC","member":{"point":"2000","extend":"{/"card_no/":/"1000001/"}","level":"1", "ouid" :3452435234523,"mobile":"15088551672"}}
SPI名称 tmall.mei.crm.member.register
场景说明 当绑定查询返回可注册时,会触发该请求。
请求查询参数
名称 |
类型 |
描述 |
seller_name |
字符串 |
卖家昵称 |
mix_mobile |
字符串 |
默认密文手机号码 |
ouid |
字符串 |
淘宝买家在当前店铺的唯一标识 |
omid |
字符串 |
淘宝买家在当前品牌/企业的唯一标识,需做品牌认领 |
extend |
字符串 |
会员的拓展信息extend:{ "source":"ScanCode", |
注: 用户拓展信息为姓名、性别、出生年月日、邮箱、宝宝出生年月日、省份,城市;name:消费者姓名;sex:1(男性)2(女性);babyBirthday:宝宝的生日;birthday:出生月日,birthDate:出生年月日,province:省份,city:城市,(目前扩展字段已不接受新增申请)
请求示例: { "seller_name": "天猫魔盒", "ouid" :3452435234523, "omid" :3452435234523, "mix_mobile": "79470e382ca75f219d2616b6c646abf1" }
请求返回结果(所有字段均为必选)
名称 |
类型 |
描述 |
是否必填 |
register_code |
字符串 |
SUC:完成注册 E01:系统异常,可重试 E02:注册失败,非品牌会员,不可注册 E03:注册失败,已被其他用户注册 E04:注册失败,该帐号已经注册 其他原因可传F01,F02等, 系统统一识别为不可绑定 |
是 |
member |
复杂类型 |
会员信息,见下表 |
是 |
member信息:
名称 |
类型 |
描述 |
是否必填 |
point |
数字 |
积分数值 |
是 |
level |
数字 |
会员等级 |
是 |
ouid |
字符串 |
淘宝买家在当前店铺的唯一标识 |
是 |
extend |
字符串 |
json对象,如果商家有卡号需要同步落支付宝卡包,可以回传 "card_no":"10000";一般建议直接传空值 |
否 |
mix_mobile |
会员手机号 |
会员密文手机号码 |
是 |
返回值示例: {"register_code":"SUC","member":{"point":"2000","extend":"{/"card_no/":/"1000001/"}","level":"1", "ouid" :3452435234523,"mix_mobile":"79470e382ca75f219d2616b6c646abf1"}}
SPI名称 tmall.mei.crm.query
场景说明 品牌方务必实现该接口,用于查询会员信息,校验会员中心和品牌方会员信息的一致性。
请求查询参数
名称 |
类型 |
描述 |
seller_name |
字符串 |
卖家昵称 |
ouid |
字符串 |
淘宝买家在当前店铺的唯一标识 |
omid |
字符串 |
淘宝买家在当前品牌/企业的唯一标识,需做品牌认领 |
mix_mobile |
字符串 |
密文手机号码 |
请求示例body:
查询绑定类型的用户: { "seller_name": "天猫魔盒", "ouid" :3452435234523, "omid" :3452435234523, "mobile": "15088890012" }
查询注册类型的用户: { "seller_name": "天猫魔盒", "ouid" :3452435234523, "omid" :3452435234523,"mix_mobile":"79470e382ca75f219d2616b6c646abf1" }
请求返回结果(所有字段均为必选)
名称 |
类型 |
描述 |
是否必填 |
member |
复杂类型 |
会员信息,见下表 |
是 |
query_code |
字符串 |
绑定结果代码: SUC:完成绑定 E01:不存在的会员 E02:会员未绑定 E04:系统异常,查询失败,可重试。 其他原因可传E05,E06等, 系统统一识别为查询失败 |
是 |
member信息:
名称 |
类型 |
描述 |
是否必填 |
point |
数字 |
积分数值 |
是 |
level |
数字 |
会员等级 |
是 |
ouid |
字符串 |
淘宝买家在当前店铺的唯一标识 |
是 |
extend |
字符串 |
json对象,如果商家有卡号需要同步落支付宝卡包,可以回传 "card_no":"10000";一般建议直接传空值 |
是 |
mobile |
会员手机号 |
会员明文手机号码 |
是 |
返回值示例: {"query_code":"SUC","member":{"point":"2000","extend":"{/"card_no/":/"1000001/"}","level":"1","ouid" :3452435234523,"mobile":"15088551672"}}
消息名称 tmall_mei_pointChange
消息说明 会员中心系统发起的积分变更,比如积分兑换礼品、优惠券、支付宝红包、流量钱包,签到送积分等。
消息输出参数
名称 |
类型 |
描述 |
mobile |
字符串 |
明文会员手机号码,作为变更的查询依据 |
ouid | 字符串 |
淘宝买家在当前店铺的唯一标识 |
omid |
字符串 |
淘宝买家在当前品牌/企业的唯一标识,需做品牌认领 |
seller_name |
字符串 |
卖家名称 |
point |
整型 |
变更的积分值,大于零 |
Type |
数字 |
积分变更类型,1-扣减,2-增加 |
record_id |
数字 |
记录ID,唯一 |
biz_type |
字符串 |
详见下面biz_type说明 |
ext_info |
字符串 |
拓展信息,json格式,根据业务类型有相应格式。 |
biz_type值:
权益类型 |
兑换 |
取消兑换 |
支付宝红包 |
red_packet_exchange |
cancel_red_packet_exchange |
流量钱包 |
flow_wallet_exchange |
cancel_flow_wallet_exchange |
优惠劵 |
coupon_exchange |
cancel_coupon_exchange |
礼品 |
gift_exchange |
cancel_exchange |
入会送积分 |
member_join | cancel_member_join |
非兑换(来自平台或者经平台中转的三方积分扣和增,如签到积分) |
OnlineSend |
ext_info结构:
名称 |
类型 |
描述 |
order_id |
字符串 |
订单号,兑换礼品和取消兑换礼品时传入,其他情况为空 |
biz_detail |
业务描述 |
签到和玩游戏等传入,其他情况为空 |
消息体格式示例
给绑定类型的用户发送: { "ouid" :3452435234523, "omid" :3452435234523,"mobile": "15089990091", "point": "100", "type": "1","record_id": 3234, "biz_type": "gift_exchange","ext_info": "{\"order_id\":\"VCsdd03289328\"}"}
给注册类型的用户发送: { "ouid" :3452435234523, "omid" :3452435234523,"mix_mobile": "sadjkajfiasnmdsasdmas","point": "100","type": "1","record_id": 3234,"biz_type": "gift_exchange","ext_info": "{\"order_id\":\"VCsdd03289328\"}"}
测试平台地址:
https://bvip.tmall.com/crm-settings/memberTest.htm?spm=a219a.7629140.0.0.f0SW1D
首先要进入测试平台页面,需要商家在客户运营平台设置开发者信息,开发者账号填写服务商登录开放平台的账号,否则开发者进无法入到测试平台页面
并且在页面上填入商家账号nick(注意不是开发者账号,是开发者账号登录测试平台,在如下页面填写商家nick账号)
进入测试平台如下图所示:注意有个手机加密密钥是用来明文变密码加密算法的key
SPI AppKey
请填写提供SPI服务的应用AppKey,通常为第一步创建应用的AppKey
消息通知AppKey
消息接收应用的AppKey,若不使用积分兑换功能可不填写。通常为第一步创建应用的AppKey
应用(SPI)创建者账号
仅拥有混淆nick权限且开发积分兑换功能用户使用,该账号用于混淆nick加密,不能修改,如有问题请联系小二。如该字段为空,请填写SPI AppKey保存后刷新页面。
测试地址配置
在开放平台控制台点击应用管理,选择的appkey进入API 服务提供页面,在点击进入开发测试,可配置SPI地址,配置好后点击进入测试,提交测试, 点击完成测试可以配置SPI上线后的url地址如下图所示:
注意:测试平台其中一项“调用测试地址”先勾选,勾选上代表SPI调用的你在TOP填写的SPI测试地址,如果不勾选代表SPI调用的你在TOP填写的SPI线上地址
开放平台的测试通过只是代表SPI的URL能访问,不代表SPI返回数据的准确性,在测试平台测试的是SPI返回数据是否正确的测试
测试平台的接口测试比开发者的接口多,是由于测试平台是按照测试场景来做的测试,例如
其中的“绑定-->解绑-->绑定”测试的是某个消费者绑定后在解绑在绑定的场景,实质是测试的绑定接口
以SPI(Service Provider Interface)的方式实现的,即会员中心将绑卡,注册等信息通spi接口传给开发者,开发者实现相关逻辑。文档参见:会员中心系统接口文档。
开发者后台会员通相关功能测试完毕,发布上线。正式上线需要勾选去掉。
目前有礼品兑换和优惠券兑换,之后会拓展兑换场景,如签到获取积分,抽奖拿积分等等,开发者使用消息通知来接收(兑换的消息),然后调用API,告知是否兑换成功。
登录客户运营平台 忠诚度设置-新版无线端会员中心装修进行会员卡面设计
打开开放平台首页,点击控制台,找到相关应用,点【概览】点击【提交发布上线】。这个与功能无关,可提前操作。
1)SPI测试后需增加线上SPI地址,如下图所示
2)在开放平台申请发布SPI如下图所示
3)保证所有接口测试通过后,点击测试平台页面上的“发布上线”按钮
注意:如果没有测试通过就上线,消费者在淘宝下单后都收到消息提醒入会,进入到入会页面点击绑卡会报错,所以一定要测试通过后在点击发布上线
程序逻辑上的处理是在http入口处先做签名校验,保证接口调用方只能是淘宝,保证接口的安全性。当然,如果你能以其他方式保证接口的安全性,不做校验亦可,不做强制要求。
引入SignTool.java和encryptUtil.java以及io包,加密串为相关应用的AppSecret(非沙箱AppSecret),签名的测试可在SPI开发中测试。
然后,实现接收接口相关逻辑处理。
示例代码:
String body = SignTool.getBody(request); // 由于是流类型读取,只能调用一次,后面的body使用body字符串 if(!SpiUtils.checkSign4TextRequest(request, body, "04925a6333e62f8ce4cb576a314743d2")) { return {\"bindable\":\"false\",\"bind_code\":\"\" }
}
//业务处理 todo