API使用说明

一、API调用入口

用入口即调用API的请求访问该地址,开放平台提供了正式环境入口网关。

正式环境对应蘑菇街线上数据,正式环境测试则直接用正式环境的入口网关、AppKey、AppSecret及蘑菇街账号。

正式环境http网关:

输入/输出字符集:

请求方式:


二、API调用组装

调用API:xiaodian.item.get(查询商品详情),使用系统默认MD5加密,因为各语言语法不一致,以下实例只体现逻辑。假设AppSecret为TESTAPPSECRET

1、输入参数为

method=xiaodian.item.get(公共参数)

access_token=TESTACCESSTOKEN(公共参数)

timestamp=1367819523(公共参数)

format=json(公共参数)

app_key=10011(公共参数)

version=1.0(公共参数)

sign_method=md5(公共参数)

itemId=95i27(API参数)

2、按首字母ASCII升序排列

access_token=TESTACCESSTOKEN

app_key=10011

format=json

itemId=95i27

method=xiaodian.item.get

sign_method=md5

timestamp=1367819523

version=1.0

3、组装加签字符串

将第2步排序好的参数进行参数名与参数值格式拼接,并在首尾加上AppSecret,如下:

TESTAPPSECRETaccess_tokenTESTACCESSTOKENapp_key10011formatjsonitemId95i27 methodxiaodian.item.getsign_methodmd5timestamp1367819523version1.0TESTAPPSECRET

注意:

加签的字符串中存在全角或中文字符时请用转成UTF-8字符集编码

4、生成sign(测试工具

将第3步组装的字符串通过MD5编码获取到32位字符串再转大写后得到32位大写MD5值(使用标准MD5库)

34619030B487EC1B49B9EF564A877925

当前请求中除sign参数外其他所有参数(公共参数、API参数)都参与加签

5、拼装API请求

将所有参数(公共参数、API参数)值转换为UTF-8编码后进行拼装,通过浏览器访问该地址,即成功调用一次接口,如下(http网关):

https://openapi.mogujie.com/invoke?sign=34619030B487EC1B49B9EF564A877925&timestamp=1367819523&version=1.0& app_key=10011&method=xiaodian.item.get&format=json&itemId=95i27&&sign_method=md5&access_token=TESTACCESSTOKEN

注意:

6、返回结果解密

涉及到敏感信息的接口,会对返回结果进行加密。

解密:使用应用的appSecret的前16位作为key,对加密结果AES解密即可。

appSecret = mysecretmysecretmysecretmysecret

key = appSecret.sub(0, 16)

output = AES(input, key)

参考代码:

public class AESUtil {

private static final String ALGORITHM = "AES/ECB/PKCS5Padding";

public static String decrypt(String cipherText, String key) throws NoSuchPaddingException, NoSuchAlgorithmException,InvalidKeyException, BadPaddingException, IllegalBlockSizeException {

Cipher cipher = Cipher.getInstance(ALGORITHM);

SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");

cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);

byte[] plainText = cipher.doFinal(Base64.getDecoder() .decode(cipherText));

return new String(plainText);

}

}


三、API相关说明

调用API,必须传入公共参数和api参数(目前只支持UTF-8编码)。公共参数详细介绍如下;应用参数则根据不同API 具体入参,更多请参考API 文档。这里以调用xiaodian.item.get 为例说明(通过API文档可看到调用该API应用参数)

1、公共参数

参数名称 类型 必填 描述
app_key long 接入时申请的app_key
method String 接口名称
access_token String Oauth2.0授权获得的access_token
sign String 对 API 调用参数(除sign外)进行 md5 加密获得。参数的顺序为字母表的顺序
format String 响应格式。默认为json格式,固定
timestamp long 时间戳,使用Unix时间戳格式
version String API协议版本,固定值为:1.0
sign_method String 参数的加密方法选,当前只支持Md5,此参数不参与加密

2、系统错误码

返回码共7位,其中前2位代表系统码,后5位代表错误码; 开放平台系统码为:00。其中0000000为特殊返回码,代表成功; 注:0000000为所有业务方共享的成功返回码,后缀为500的返回码,代表代码内部处理错误。

系统码 Api类别
00 开放平台
10 交易
11 商品
12 店铺
13 物流
14 基础类目
20 用户

开放平台系统码定义

返回码 错误描述
0000000 成功
0000001 参数校验失败
0000002 Timesteamp时间误差超过5分钟
0000003 SignMethod错误
0000004 sign错误
0000005 服务实现不存在
0000006 参数类型错误
0000007 参数不能为空
0000008 参数不识别
0000009 API未订阅或者审批未通过
0000010 AccessToken已过期
0000011 aAccessToken不存在
0000012 无法识别接入的应用唯一标识
0000013 触发流控,请降低调用频率
0000014 API调用超时
0000015 API不存在
0000016 AppKey不存在
0000017 触发应用限流,请降低调用频率
0000018 大促期间API限流
0000020 API未上线,不能调用
0000021 App未审批通过
0000022 App未上线
0000401 API服务已到期
0000500 系统错误
0007001 更新token失效
0007002 AuthCode不存在

物流返回码定义:

返回码 错误描述
1020001 快递单号格式不正确
1020002 订单状态不一致
1020003 添加物流信息失败,请重试
1020004 当前用户没有操作权限
1020005 退货退款中订单不允许发货
1020006 发货操作太频繁
1020007 发货物流公司黑名单,禁止使用

商品、店铺返回码定义:

返回码 错误描述
1100400 参数错误
1100401 请先进行实名认证
1101400 商品数据出错
1101403 无访问该商品权限
1101404 商品不存在或已被删除
1102400 SKU数据出错
1102404 SKU不存在或已被删除
1103404 类目不存在
1200404 请先开通店铺

订单管理返回码定义:

返回码 错误描述
1010001 参数异常
1010002 订单数据查询失败
1010003 卖家无此订单查询权限

3、应用参数

详见相应API说明文档

4、限流

目前限流分API和APP两种限流。

API - 针对单个API总共流量进行的限流,不区分应用。

APP - 针对单个应用(AppKey)进行的限流,不区分API。