京东侧同步数据给外部三方时同样基于HTTP协议调用,开发者(ISV)可以使用开放平台提供的SDK来接收调用(目前只支持JAVA语言,其它语言请根据协议规则使用HTTP方式接收调用)、也可以根据协议规则处理HTTP请求来进行接收调用。接下来会分别针对这两种方式进行详细说明。
注意: 三方应用审核通过,需提供APP_KEY和APP_SECRET给京东侧,京东侧使用这两个参数进行请求的SIGN操作,同时三方需根据以下接入方式说明,提供可访问的地址,用于接收请求。双方敏感信息的交互请参考加解密说明章节进行处理。
#
一、SDK-Java接入方式外部三方提供可访问的接口地址,使用京东侧提供的SDK包,接收京东测调用,接口提供方式为http接口。简单例子,入参使用HttpServletRequest接收,返回使用SDK包中工具类 ResultBuilder.buildSuccessResult
@RequestMapping("/test")public Map<String, JosResult> index(HttpServletRequest req) { try { //获取调用参数 String body = RequestUtil.getBody(req); //鉴权 boolean isLegal = SignUtils.checkSign(req, body, appSecret); //body json字符串中获取信息 //业务处理-开始
//业务处理-结束 //返回结果,根据实际业务处理调用buildSuccessResult或buildErrorResult方法 return ResultBuilder.buildSuccessResult(true); } catch (Exception e) { return ResultBuilder.buildErrorResult("错误码","错误描述"); }}
#
二、自定义HTTP接入方式#
1. 请求接收和处理第三方提供可访问的接口地址,并按照说明进行参数签名鉴权,并返回规定格式数据京东测调用时,会使用以下方式进行调用,链接上可获取到参数
参数名 | 类型 | 描述 |
---|---|---|
app_key | String | 宙斯申请应用的key |
method | String | 京东侧调用方法名 |
v | String | 版本号 |
sign | String | 签名 |
timestamp | String | 时间字符串,格式为:2020-06-29 16:54:41 |
链接示例:
http://www.demo.com/beneficialChange?app_key=AAE201E8D10BD811855A9CBC8CD773DF&method=com.jd.health.ares.open.platform.export.service.BeneficialExportService.beneficialSyncToThirdPart&v=2.0&sign=41AE736739D76B10808883F4A1E128F7×tamp=2021-05-13+13:35:40
request参数,参数说明详见请求响应章节,示例:
360buy_param_json : {"beneficialId":105282132771041,"businessType":201,"totalCount":2,"residueCount":2,"providerCode":"1"}
- 提供post接口,接口路径例如:http://www.myh.com/beneficialChange
- 接口获取参数,请求公共参数从链接上获取5个固定参数,业务参数从parameter中获取参数,key为360buy_param_json
- 获取全部参数后,进行签名验证操作将获取到的所有参数放入有序map,包含从链接和param中获取的所有参数,map根据key升序排列,map需要排除掉sign参数【sign不参与签名】;拼接字符串,字符串方式为app_secret+ 上一步所有参数排序key+value +app_secret;拼接结果如下:
e2180c50df99488badbc7a64be2a9c4e360buy_param_json{"affliation":1,"pageSize":1,"resourceId":"9a79e1ed5d3f46adb7667b6d9fc9ff06","scrollId":null,"serviceGroupTypeSet":"1,2,3"}app_keyD0AAA6C17F41177CB9A9F6707455CC27methodjingdong.health.basicdata.doctor.getDoctorInfoListtimestamp2020-06-29 16:54:41v2.0e2180c50df99488badbc7a64be2a9c4e
对字符串进行md5加密转大写以后得到签名sign;使用得到的签名与传递过来的签名字段进行对比,若相同,则签名验证通过
- 处理接入第三方自己的业务
- 返回京东侧调用结果
#
2. 请求响应处理业务参数说明,根据对接业务不同,京东侧会提供详细的文档说明,以权益服务变更示例:
参数名 | 类型 | 业务描述 |
---|---|---|
beneficialId | Long | 权益ID |
businessType | Integer | 权益场景细分枚举:201:绿通挂号 |
providerCode | String | 供应商code |
residueCount | Integer | 权益细项剩余总次数 |
totalCount | Integer | 权益细项享有总次数 |
业务处理完成,统一返回结果格式如下:
参数名 | 下级参数 | 类型 | 描述 |
---|---|---|---|
reponse | |||
code | String | 响应码,0000成功,其它失败情况根据业务自定义 | |
data | Object | 返回数据(根据对接业务不同,京东侧会提供详细的文档说明) | |
uuid | String | 日志ID | |
errMsg | String | 错误描述 |
正确结果示例:
{"reponse":{"code":"0000","data":true,"uuid":"f602e02e-a8c6-4fed-94f5-d7052d16b033"}}
错误结果示例:
{"reponse":{"code":"错误码","errMsg":"错误描述","uuid":"1ded1b62-c60f-4e4f-9620-a78a16b8f284"}}