Skip to main content

jingdong

简单说明如何对接京东商家开放平台(宙斯)

一、京东开放平台

  • 编排平台对接京东宙斯平台,需要提供对应的appkeyappsecret,因此需要商家先入驻京东宙斯平台
  • 京东商家开放平台是基于HTTP协议调用的,开发者可以使用开放平台提供的SDK (支持多种语言,SDK提供对请求的封装、签名加解密等)来调用、也可以根据协议规则进行封装为HTTP请求来进行调用,本流程里面通过HTTP请求来调用

  • 用户需要按照开放平台的协议规范拼装一个正确的URL,通过Https请求到开放平台才能够获取到所需数据。主要流程包含:填写参数、生成签名、拼装HTTPS请求、发起请求、得到响应结果、解析结果。

  • 调用入口:调用京东商家开放平台API服务的URL地址

调用环境服务地址(HTTPS)
预发环境https://api-dev.jd.com/routerjson
正式环境https://api.jd.com/routerjson
  • 调用参数

    1. 系统参数:调用任何一个API都需要传入的参数,目前支持的系统参数是:
    参数名称参数类型是否必传参数描述
    methodStringAPI接口名称
    access_tokenString采用OAuth授权方式是必填参数,具体的获取查看页面:https://open.jd.com/home/home/#/doc/common?listId=1908
    app_keyString应用的app_key
    signString签名
    timestampString时间戳,格式为yyyy-MM-dd HH:mm:ss,例如:2019-05-01 00:00:00。京东API服务端允许客户端请求时间误差为10分钟
    formatString暂时只支持json
    vStringAPI协议版本,参考接口文档版本
    1. 应用级参数(参考对应API接口文档)
  • 为了防止API在调用过程中被恶意者拦截随意篡改,调用API是需要传入签名参数,开放平台服务端会根据请求参数对签名进行验证,判断请求参数是否合法。开放平台签名规则过程如下:

    1. 将所有请求参数按照字母先后顺序排列,例如:access_token,app_key,method,timestamp,v,360buy_param_json ,排序为360buy_param_json,access_token,app_key,method,timestamp,v

    2. 把所有参数名和参数值进行拼接,例如:360buy_param_jsonxxxaccess_tokenxxxapp_keyxxxmethodxxxxxxtimestampxxxxxxvx

    3. 把appSecret夹在字符串(上一步拼接串)的两端,例如:appSecret+XXXX+appSecret

    4. 使用MD5进行加密,再转化成大写

  • API调用注意事项

    1. 所有的API请求和响应数据编码皆为utf-8 格式,URL里的所有参数值请做urlencode编码

    2. API请求的应用级参数需要转换成json格式,例如:360buy_param_json={"return_id":"20032","trade_no":"20032"}

    3. json格式应为标准的json

    4. 目前只支持返回结果是json格式

    5. 所有API请求和响应内的日期格式都为yyyy-MM-dd HH:mm:ss,注意小时格式是24小时制,例如:2011-07-21 20:23:30

    6. API接口的错误信息在http response body内

    7. 签名方式为 md5(appsecret + key+ value .... key + value+appsecret)然后转大写字母,其中key、value对是除签名所有请求参数按key做的升序排列,value无需编码。

二、获取access_token

1. 通过code获取access_token

code需要用户通过浏览器登录跳转连接里面获取

https://open-oauth.jd.com/oauth2/access_token?app_key=XXXXX&app_secret=XXXXX&grant_type=authorization_code&code=XXXXX
参数是否必须说明
app_key应用标识
app_secret应用密钥
grant_type固定为authorization_code
code用户通过浏览器登录跳转连接里面获取

2.刷新授权有效期

定时刷新第一步获取到的token,避免过期需要重新登录获取

https://open-oauth.jd.com/oauth2/refresh_token?app_key=XXXXX&app_secret=XXXXX&grant_type=refresh_token&refresh_token=XXXXX
参数是否必须说明
app_key应用标识
app_secret应用密钥
grant_type固定为refresh_token
refresh_token获取access_token时同时获取的refresh_token

三、签名

开放平台签名规则过程如下:

  • 将所有请求参数按照字母先后顺序排列,例如:access_token,app_key,method,timestamp,v,360buy_param_json,排序为360buy_param_json,access_token,app_key,method,timestamp,v
  • 把所有参数名和参数值进行拼接,例如:360buy_param_jsonxxxaccess_tokenxxxapp_keyxxxmethodxxxxxxtimestampxxxxxxvx
  • appSecret夹在字符串(上一步拼接串)的两端,例如:appSecret+XXXX+appSecret
  • 使用MD5进行加密,再转化成大写

1. 设置参数和基础信息

通过updateAttribute组件,设置接口的系统参数和应用参数

  • jd_360buy_param_json: 接口请求参数
  • jd_method: 请求接口名称

不同的接口只需要设置这两部分即可,其余部分都是通用参数设置

2. 拼接参数

  • 将所有请求参数按照字母先后顺序排列,例如:access_token,app_key,method,timestamp,v,360buy_param_json ,排序为360buy_param_json,access_token,app_key,method,timestamp,v

  • 把所有参数名和参数值进行拼接,例如:360buy_param_jsonxxxaccess_tokenxxxapp_keyxxxmethodxxxxxxtimestampxxxxxxvx

  • 把appSecret夹在字符串(上一步拼接串)的两端,例如:appSecret+XXXX+appSecret

  • 使用ReplaceText组件,替换值部分用属性表达式取前面UpdateAttribute组件设置的属性

3. MD5签名

四、请求京东接口

京东宙斯平台接口都是用form表单方式提交请求参数的,所以在签名完成以后需要将参数转换成form表单格式:

  • 通过ReplaceText组件组装请求参数(注意对各部分参数进行urlEncoded)

  • 然后通过InvokeHTTP组件发起请求,注意需要设置Content-Typeapplication/x-www-form-urlencoded;charset=utf-8

特别的:调用不同接口,只需要修改签名- 设置参数和基础信息里面的 jd_360buy_param_json和 jd_method 即可

五、京东数据解密

京东某些接口返回的个别字段是密文,如果要查看对应明文需要使用SDK进行数据解密,这里提供对应的解密脚本

import com.jd.security.tdeclient.SecretJdClient
import com.jd.security.tdeclient.TDEClient

def flowFile = session.get();

if (flowFile == null) {
return
}

// 获取变量

def appKey = flowFile.getAttribute("jd_appkey") as String
def appSecret = flowFile.getAttribute("jd_appsecret") as String
def accessToken = flowFile.getAttribute("jd_accesstoken") as String
def serverUrl = flowFile.getAttribute("jd_serverurl") as String
def address = flowFile.getAttribute("searchAllOrders.address") as String
def consigneeName = flowFile.getAttribute("searchAllOrders.consigneeName") as String

/*
* 请求宙斯网关获取凭证和密钥
* 1、凭证和密钥缓存本地(用于数据加解密)
* 2、数据来源于请求宙斯网关API敏感字段值
* 3、数据加解密案例如下
*/
TDEClient tdeClient = SecretJdClient.getInstance(serverUrl,accessToken,appKey, appSecret);
if(tdeClient.isEncryptData(address)) {
//解密地址
def address_decrypt = tdeClient.decryptString(address)
flowFile = session.putAttribute(flowFile, "searchAllOrders.address", address_decrypt)
}
if(tdeClient.isEncryptData(consigneeName)) {
//解密收货人姓名
def consigneeName_decrypt = tdeClient.decryptString(consigneeName)
flowFile = session.putAttribute(flowFile, "searchAllOrders.consigneeName", consigneeName_decrypt)
}
REL_SUCCESS << flowFile
  • 需要引用京东的SDK驱动包

六、流程模板

下载模板