Skip to main content

京东侧同步数据给外部三方时同样基于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_keyString宙斯申请应用的key
methodString京东侧调用方法名
vString版本号
signString签名
timestampString时间字符串,格式为: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&timestamp=2021-05-13+13:35:40

request参数,参数说明详见请求响应章节,示例:

360buy_param_json  : {"beneficialId":105282132771041,"businessType":201,"totalCount":2,"residueCount":2,"providerCode":"1"}
  1. 提供post接口,接口路径例如:http://www.myh.com/beneficialChange
  2. 接口获取参数,请求公共参数从链接上获取5个固定参数,业务参数从parameter中获取参数,key为360buy_param_json
  3. 获取全部参数后,进行签名验证操作将获取到的所有参数放入有序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;使用得到的签名与传递过来的签名字段进行对比,若相同,则签名验证通过

  1. 处理接入第三方自己的业务
  2. 返回京东侧调用结果
2. 请求响应处理#

业务参数说明,根据对接业务不同,京东侧会提供详细的文档说明,以权益服务变更示例:

参数名类型业务描述
beneficialIdLong权益ID
businessTypeInteger权益场景细分枚举:201:绿通挂号
providerCodeString供应商code
residueCountInteger权益细项剩余总次数
totalCountInteger权益细项享有总次数

业务处理完成,统一返回结果格式如下:

参数名下级参数类型描述
reponse
codeString响应码,0000成功,其它失败情况根据业务自定义
dataObject返回数据(根据对接业务不同,京东侧会提供详细的文档说明)
uuidString日志ID
errMsgString错误描述

正确结果示例:

{"reponse":{"code":"0000","data":true,"uuid":"f602e02e-a8c6-4fed-94f5-d7052d16b033"}}

错误结果示例:

{"reponse":{"code":"错误码","errMsg":"错误描述","uuid":"1ded1b62-c60f-4e4f-9620-a78a16b8f284"}}