活动工场接入标准API
1.说明
1.1 接口加解密
内部客户接口可不加密,外网调用数据必须加密验签,外部客户验签说明,密钥由活动工场平台提供。
如果采用加密验签方式,则以下参数需要放在Http Request Header中:
参数 | 参数值 | 参数说明 | 是否必填 |
platform | activityPlatform | 平台名称,固定为activityPlatform | 是 |
sign | 见参数说明 | 签名信息。拼接字符串规则: String str = 秘钥|unionMsgPlatform ,然后对str进行md5加密: String md5Encode = MD5Util.MD5Encode(str,"UTF-8"), 最终String sign = md5Encode + ”|” + System.currentTimeMillis()。 sign即为最终传递的签名信息 | 是 |
timestamp | System.currentTimeMillis() | 是 |
1.2 所有接口公共返回
名称 | 类型 | 说明 |
success | Boolean | 是否处理成功,true成功,false失败 |
message | String | 响应结果消息,如“操作成功”,“操作失败” |
msgCode | String | 响应码 |
value | Object | 数据对象 |
备注:以下接口返回只说明数据对象value部分,数据均以json标准格式传输
msgCode=0,message=‘‘操作成功’’
用户未登陆
msgCode=2,message=‘‘用户未登录’’
以下为分页标准入参数据项:
名称 | 类型 | 说明 |
pageNum | Integer | 当前页 |
pageSize | Integer | 每页显示的总条数 |
param | object | 分页查询筛选参数对象 |
以下为分页标准返回数据项:
名称 | 类型 | 说明 |
pageNo | Integer | 当前页 |
pageSize | Integer | 每页显示的总条数 |
totalRows | Integer | 总条数 |
isMore | Integer | 是否有下一页 |
totalPage | Integer | 总页数 |
list | List | 分页结果数据列表 |
1.3 微信相关配置
微信需进行公众号IP白名单,JS安全域名和网页授权回调域名配置
2. 接口分类
2.1 基础功能API(外部客户提供)
2.1.1 otp 登录发送短信验证码
接口地址:account/sendSmsCode
请求方式:GET
入参:
名称 | 类型 | 说明 | 是否必填 |
platform | String | ios/android | 是 |
phone | String | 手机号,必填 | 是 |
parentId | String | 平台主账号 | 是 |
channel | String | 0:h5;1:公众号;2:小程序;3:app | 是 |
请求示例
https://uri.domain.com/account/sendSmsCode?platform=ios&parentId=xxxsshssdfhksg&phone=137612365283&channel=2
返回:返回公共参数即可
备注:最好1min之内只允许发送一条短信,否则提示相关错误消息
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": null
}
2.1.2 otp 登录或注册
接口地址:account/registerAndLogin
请求方式:POST
入参:
名称 | 类型 | 说明 | 是否必填 |
platform | String | ios/android | 是 |
phone | String | 手机号,必填 | 是 |
smsCode | String | 验证码 | 是 |
bizOrigin | String | 链接投放渠道编码 | 否 |
channel | String | 0:h5;1:公众号;2:小程序;3:app | 是 |
source | String | 注册用户来源,如可以使用 activityCode | 是 |
openId | String | 微信openId,可用于账户与微信绑定 | 否 |
parentId | String | 平台主账号 | 是 |
extraInfo | String | 扩展信息 | 否 |
请求示例
{
"platform": "ios",
"phone": "13712673248",
"smsCode": "124553",
"bizOrigin": "toutiao",
"channel": "2",
"source": "turn123",
"openId": "sadfdsfdgfjhgkjhk",
"parentId": "124335676643464",
"extraInfo": null
}
返回
名称 | 类型 | 说明 |
accessKey | String | 该用户的加密登录凭证 |
register | boolean | 该用户是否第一次注册平台账户 |
accountId | String | 用户账户Id |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"accountId": "aaa0213",
"accessKey": "13245674ddddddadssfgfhgjh",
"register": true
}
}
2.1.3 用户账户信息获取
接口地址:account/getUserInfo
请求方式:Get
入参:
名称 | 类型 | 说明 | 是否必填 |
platform | String | ios/android | 是 |
accessKey | String | 该用户的加密登录凭证,header传入 | 是 |
parentId | String | 平台主账号 | 是 |
请求示例
https://uri.domain.com/account/getUserInfo?platform=ios&accessKey=aaaaaaaaaaxxxxvbvbbb&parentId=xxxsshssdfhksg
返回,如果accessKey失效或错误,返回用户未登录错误码和错误消息
名称 | 类型 | 说明 |
accountId | String | 用户账户唯一标识 |
phone | String | 用户手机号 |
nickName | String | 昵称,以微信优先 |
headImg | String | 头像,以微信优先 |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"accountId": "aaa0213",
"phone": "13245674",
"nickName": "jack",
"headImg": "https://sss.domain.com/a.jpg"
}
}
2.1.4 微信API的token获取
接口地址:account/getWechatToken
请求方式:Get
入参:
名称 | 类型 | 说明 | 是否必填 |
appId | String | 微信公众号的APPID | 是 |
parentId | String | 平台主账号 | 是 |
请求示例
https://uri.domain.com/account/getWechatToken?appId=sdsfdjgjkdfjljl&parentId=xxxsshssdfhksg
返回,
名称 | 类型 | 说明 |
token | String | 微信API的token |
expireTime | String | 多少毫秒后失效(可选) |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"token": "hjkdshkhfkfjskds1132j66kjnsdfjh6",
"expireTime": "7200"
}
}
2.1.5微信js签名的ticket获取(外部客户提供)
接口地址:account/getWechatTicket
请求方式:Get
入参:
名称 | 类型 | 说明 | 是否必填 |
appId | String | 微信公众号的APPID | 是 |
parentId | String | 平台主账号 | 是 |
请求示例
https://uri.domain.com/account/getWechatTicket?appId=sdsfdjgjkdfjljl&parentId=xxxsshssdfhksg
返回,
名称 | 类型 | 说明 |
ticket | String | 微信JS签名的ticket |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"ticket": "hjkdshkhfkfjskds1132j66kjnsdfjh6zcdsgfdcjhgkjfsd"
}
}
2.1.6 微信公众号授权获取,
授权回调在X-Man活动工场,用在客户无授权开发的情况下,该方案需要客户在公众号中配置活动侧授权回调域名。
接口地址:account/getOauth2Token
请求方式:Get
入参:
名称 | 类型 | 说明 | 是否必填 |
appId | String | 微信公众号的APPID | 是 |
code | String | 获取的微信授权code | 是 |
parentId | String | 平台主账号 | 是 |
请求示例
http://uri.domain.com/account/getWechatTicket?appId=sdsfdjgjkdfjljl&parentId=xxxsshssdfhksg&code=huudasjdsf
返回,
名称 | 类型 | 说明 |
accessToken | String | 微信网页授权的token |
openId | String | 用户在当前公众号下的openId |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"accessToken": "hjkdshkhfkfjskjdsshjgfsdfdcjhgkjfsd",
"openId": "hjkdshkhfksdfdcjhgkjfsd"
}
}
2.1.7 微信公众号授权获取
授权回调在客户方,用在客户已授权开发的情况下该授权API直接提供外网域名,并且无需进行接口验签。
接口地址:account/getOauth2Authorize
请求方式:Get
入参:
名称 | 类型 | 说明 | 是否必填 |
appId | String | 微信公众号的APPID | 是 |
scope | String | 微信授权方式(snsapi_base静默授权,snsapi_userinfo手动授权) | 是 |
redirectUrl | String | 授权完全后回调授权结果的url | 是 |
parentId | String | 平台主账号 | 是 |
请求示例
https://uri.domain.com/account/getWechatTicket?appId=sdsfdjgjkdfjljl&parentId=xxxsshssdfhksg&scope=snsapi_userinfo&redirectUrl=http%253a%252f%252ftool.chinaz.com%252ftools%252furlencode.aspx
返回,
名称 | 类型 | 说明 |
openId | String | 用户在当前公众号下的openId |
nickName | String | 微信昵称 |
headImg | String | 微信头像 |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"openId": "cxvcxbvcnzcvxdfc",
"nickName": "太乙真人",
"headImg": "https://sdffdsjjhdskkdfhhjdsfhjhgd.png"
}
}
2.1.8 关注微信公众号查询
适用于客户要查询非本活动关联的公众号。
接口地址:account/getSubscribeByUnionid
请求方式:Get
入参:
名称 | 类型 | 说明 | 是否必填 |
appId | String | 要查询的微信公众号的APPID | 是 |
openId | String | 微信用户对应活动关联公众号的唯一标识 | 是 |
parentId | String | 平台主账号 | 是 |
请求示例
https://uri.domain.com/account/getWechatTicket?appId=sdsfdjgjkdfjljl&parentId=xxxsshssdfhksg&openId=hfhsdshfshgkhdsahiyihh
返回,
名称 | 类型 | 说明 |
subscribe | Boolean | 是否关注 |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"subscribe": true
}
}
2.1.9 分页查询奖品列表queryPrizeList
请求方式:POST
入参:
名称 | 类型 | 说明 | 是否必填 |
prizeName | String | 奖品名称,非必填,用于查询搜索 | 否 |
parentId | String | 平台主账号 | 是 |
请求示例
{
"pageNum": 1,
"pageSize": "20",
"param": {
"prizeName": "京东E卡20元",
"parentId": "jhgfsd73q834rr"
}
}
返回为List分页形式,每项如下
名称 | 类型 | 说明 |
prizeName | String | 奖品名称 |
prizeImageUrl | String | 奖品图片 |
prizeStock | String | 奖品可用库存 |
prizeCode | String | 奖品编码 |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"pageNo": 1,
"pageSize": "20",
"totalRows": "100",
"isMore": "1",
"totalPage": "5",
"list": [
{
"prizeName": "京东E卡20元",
"prizeImageUrl": "https://dasddshfssf.png",
"prizeStock": "100",
"prizeCode": "wxc8298"
},
{
"prizeName": "京东E卡30元",
"prizeImageUrl": "https://dasddshfssf.png",
"prizeStock": "1000",
"prizeCode": "wxc8223"
}
]
}
}
2.1.10 奖品库存查询queryDmPrizeStock
请求方式:GET
入参:
名称 | 类型 | 说明 | 是否必填 |
prizeCode | String | 奖品编码 | 是 |
parentId | String | 平台主账号 | 是 |
请求示例
https://uri.domain.com/queryDmPrizeStock?prizeCode=sdsfdjgjkdfjljl&parentId=xxxsshssdfhksg
返回如下:
名称 | 类型 | 说明 |
result | String | 库存数量 |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"result": "100"
]
}
}
2.1.11 发奖release
请求方式:POST
入参:
名称 | 类型 | 说明 | 是否必填 |
accountId | String | 用户账户唯一标识 | 否 |
phone | String | 用户手机号,与accountId二者有其一 | 否 |
purchaseCode | String | 奖品编码 | 是 |
releaseNum | Integer | 发放数量 | 是 |
uuid | String | 幂等值 | 是 |
parentId | String | 平台主账号 | 是 |
同步发奖直接返回奖品发放结果,异步发奖需要实现第12个API,发奖结果查询
请求示例
{
"accountId": "35446we3",
"phone": "13761328163",
"purchaseCode": "WQsdfr3",
"releaseNum": 1,
"uuid": "gvcfbvnhjsdfufdskshh73465gffdh",
"parentId": "fdgfdg1232ee"
}
返回为公共返回
以下为返回数据项
名称 | 类型 | 说明 |
result | String | 发奖结果:SUCCESS、订单提交成功;FAIL、订单提交失败 |
resultMsg | String | 发奖结果消息 |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"result": "SUCCESS",
"resultMsg":"发奖成功"
]
}
}
2.1.12 发奖结果查询
请求方式:GET
入参:
名称 | 类型 | 说明 | 是否必填 |
accountId | String | 用户账户唯一标识 | 否 |
phone | String | 用户手机号,与accountId二者有其一 | 否 |
uuid | String | 幂等值 | 是 |
parentId | String | 平台主账号 | 是 |
请求示例
https://uri.domain.com/queryDmPrizeStock?accountId=sdsfdjd23&phone=1376128362&uuid=bfjdgfgdshjg3478&parentId=xxxsshssdfhksg
以下为返回数据项
名称 | 类型 | 说明 |
result | String | 发奖结果:SUCCESS、发奖成功;FAIL、发奖失败;PROCESS、处理中 |
resultMsg | String | 发奖结果消息 |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"result": "SUCCESS",
"resultMsg":"发奖成功"
]
}
}
2.2 活动工场开放API(请通过科技云开放网关接入)
科技云开放网关接入指南
2.2.1 otp 登录增加抽奖机会
接口地址:xman-activity/addChance
请求方式:POST
入参:
名称 | 类型 | 说明 | 是否必填 |
openId | String | 用户微信openId | 是 |
accountId | String | 用户账户唯一标识 | 否 |
phone | String | 用户手机号,与accountId二者有其一 | 否 |
activityCode | String | 活动code | 是 |
请求示例
{
"accountId": "35446we3",
"openId": "vxcjkjjkhxcfkjkjxcj,bkfjhfsda783qx",
"phone": "16372365427",
"releaseNum": 1,
"activityCode": "turn123"
}
返回:返回公共参数
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": null
}
2.2.2 otp 登录查询活动账户信息(标准分页)
接口地址:xman-activity/getActivityAccountList
请求方式:POST
入参:
名称 | 类型 | 说明 | 是否必填 |
activityCode | String | 活动code | 是 |
请求示例
{
"pageNum": 1,
"pageSize": "20",
"param": {
"activityCode": "register123"
}
}
返回列表数据项:
名称 | 类型 | 说明 |
openId | String | 用户openId |
unionId | String | 用户unionId |
channel | String | 注册渠道0:h5;1公众号;2小程序 |
accountId | String | 账户唯一标识 |
phone | String | 手机号 |
nickName | String | 昵称,客户方需要base64解码 |
headImg | String | 用户微信头像 |
shareCode | String | 用户分享码 |
recommendCode | String | 用户推荐码 |
source | String | 用户注册来源,一般为activityCode |
bizOrigin | String | 用户自定义投放来源 |
extraInfo | String | 账户扩展信息 |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"pageNo": 1,
"pageSize": "20",
"totalRows": "100",
"isMore": "1",
"totalPage": "5",
"list": [
{
"openId": "gddhsfjhkdkhdfkghjdfgj",
"unionId": "jsdghskdfjkdfk",
"channel": "4",
"accountId": "gdgjshfi23",
"phone": "13761238734",
"nickName": "大雨",
"headImg": "https://dsfdsdfd.33df.com/ssdfdsf.png",
"shareCode": "dfsgfdx",
"recommendCode": "fdsfsd",
"source": "trun12",
"bizOrigin": "weixin",
"extraInfo": "value"
},
{
"openId": "gddhsfjhkdkhdfkghjdfgj",
"unionId": "jsdghskdfjkdfk",
"channel": "4",
"accountId": "gdgjshfi23",
"phone": "13761238734",
"nickName": "大雨",
"headImg": "https://dsfdsdfd.33df.com/ssdfdsf.png",
"shareCode": "dfsgfdx",
"recommendCode": "fdsfsd",
"source": "trun12",
"bizOrigin": "weixin",
"extraInfo": "value"
}
]
}
}
2.2.3 查询注册记录(标准分页)
接口地址:xman-activity/getRegisterRecord
请求方式:POST
入参:
名称 | 类型 | 说明 | 是否必填 |
activityCode | String | 活动code | 是 |
请求示例
{
"pageNum": 1,
"pageSize": "20",
"param": {
"activityCode": "register123"
}
}
返回列表数据项:
名称 | 类型 | 说明 |
activityCode | String | 活动code |
phone | String | 手机号 |
registerData | JsonObject | 注册提交的数据 |
isRegister | String | 是否新用户注册 |
gmtCreated | Date | 创建时间 |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": {
"pageNo": 1,
"pageSize": "20",
"totalRows": "100",
"isMore": "1",
"totalPage": "5",
"list": [
{
"activityCode": "gddhsfjhkdkhdfkghjdfgj",
"phone": "jsdghskdfjkdfk",
"registerData": "4",
"isRegister": true,
"gmtCreated": "value"
},
{
"activityCode": "gddhsfjhkdkhdfkghjdfgj",
"phone": "jsdghskdfjkdfk",
"registerData": "4",
"isRegister": true,
"gmtCreated": "value"
}
]
}
}
2.3 业务方业务结果查询API(需客户方提供)
2.3.1 业务列表查询
接口地址:xman-activity/getBusinessList
请求方式:GET
入参:
名称 | 类型 | 说明 | 是否必填 |
parentId | String | 平台主账号 | 是 |
请求示例
https://uri.domain.com/xman-activity/getBusinessList?parentId=xxxsshssdfhksg
返回列表数据项:
名称 | 类型 | 说明 |
businessCode | String | 业务code |
businessName | String | 业务名称 |
gmtModified | Date | 更新时间 |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": [
{
"businessCode": "dsfsgsfg",
"businessName": "达标次数",
"gmtModified": 1598425676217
},
{
"businessCode": "dsfsgdedzsfg",
"businessName": "注册次数",
"gmtModified": 1598425676217
}
]
}
2.3.2 业务结果查询
接口地址:xman-activity/getBusinessResult
请求方式:POST
入参:
名称 | 类型 | 说明 | 是否必填 |
parentId | String | 平台主账号 | 是 |
startTime | Date | 活动开始时间,时间戳 | 是 |
endTime | Date | 活动结束时间,时间戳 | 是 |
businessCodeList | List | 业务code数据列表 | 是 |
accountId | String | 用户账户唯一标识,如果不为空以此为条件,如果为空则以phone为条件 | 否 |
phone | String | 用户手机号,如果accountId不为空,phone不一定有值,accountId为空,则phone一定有值 | 否 |
businessCodeList为列表数据,每项如下:
名称 | 类型 | 说明 | 是否必填 |
businessCode | String | 业务code | 是 |
请求示例
{
"parentId": "sdfdgfghjhueq366jn",
"startTime": 1598425676217,
"endTime": 1598425676217,
"accountId": "dsfdfbf53",
"phone": "13652367236",
"businessCodeList": [
{
"businessCode": "hdshjdf"
},
{
"businessCode": "hdshjdf"
}
]
}
返回数据为List,每项如下:
名称 | 类型 | 说明 |
businessNum | Integer | 业务达标次数 |
businessCode | String | 业务code |
响应示例
{
"success": true,
"msgCode": 0,
"message": "操作成功",
"value": [
{
"businessCode": "dsfsgsfg",
"businessNum": 3
},
{
"businessCode": "dsfsgdedzsfg",
"businessNum": 2
}
]
}