플랫폼 기술-API 호출 프로토콜


TOP(Open Platform)의 API는 HTTP 프로토콜을 기반으로 호출됩니다. 개발자(ISV)는 TOP에서 제공하는 공식 SDK를 직접 사용할 수 있습니다. (요청 캡슐화, 서명 암호화, 응답 해석 및 성능 최적화를 포함한 다국어 지원) 등) 또는 TOP 프로토콜에 따라 호출에 대한 HTTP 요청을 캡슐화할 수 있습니다. 다음은 API 호출에 대한 자체 캡슐화 HTTP 요청의 원리에 대한 자세한 설명입니다.

호출 프로세스

TOP의 프로토콜에 따르면: 매개변수 채우기> HTTP 요청 조립> HTTP 응답 가져오기> json/xml 결과 해석은 다음과 같습니다.


콜 입력

호출 API용 서비스 URL 주소 오픈 플랫폼은 현재 ISV가 사용할 수 있는 샌드박스 테스트 환경, 공식 테스트 환경, 공식 환경, 해외 환경 4가지를 제공합니다.

  • 샌드박스 테스트 환경: 애플리케이션 생성 후 사용할 수 있는 ISV 소프트웨어용 테스트 환경입니다. 이 환경은 대부분의 시나리오에서 API 호출을 지원하는 단순화된 버전의 Taobao를 제공합니다. 샌드박스 환경의 권한과 트래픽은 무제한이며 자유롭게 사용할 수 있습니다.
  • 공식 테스트 환경: ISV 소프트웨어가 출시되기 전의 공식 시뮬레이션 환경은 애플리케이션이 성공적으로 생성된 후에 사용할 수 있습니다. 이 환경은 샌드박스에서 테스트를 완료할 수 없는 일부 시나리오에 주로 사용됩니다. API 호출은 하루 5,000회로 제한되며, 승인된 사용자 수는 5명이며, 호출할 수 있는 API는 권한 및 기능과 일치합니다. 응용 프로그램의.
  • 공식 환경: ISV 소프트웨어 출시 후 사용되는 환경은 공식 테스트 환경과 동일합니다. 단, 애플리케이션이 출시된 후에는 특정 트래픽이 제한됩니다. 클래스 애플리케이션은 API 호출을 하루에 100만 번으로 제한합니다.
  • 해외 환경: 해외 환경도 형식적인 환경의 일종으로 주로 해외(유럽 및 미국 국가) ISV가 사용합니다. 해외 ISV의 경우 해외 환경 사용 성능이 2배 이상 높아집니다. 국내 환경.

호출 환경서비스 주소(HTTP)서비스 주소(HTTPS)
샌드박스 환경http://gw.api.tbsandbox.com/router/rest https://gw.api.tbsandbox.com/router/rest
공식 환경http://gw.api.taobao.com/router/resthttps://eco.taobao com. /router/rest
해외 환경http://api.taobao.com/router/resthttps://api.taobao.com/router/rest

공개 매개변수

모든 API를 호출할 때 전달해야 하는 매개변수는 다음과 같습니다. 현재 지원되는 공개 매개변수는 다음과 같습니다.

매개변수 이름매개변수 유형필요 여부매개변수 설명
method String API 인터페이스 이름입니다.
app_keyStringTOP이 애플리케이션에 할당한 AppKey입니다. 这里要注意正式环境和沙箱环境的AppKey是不同的(包括AppSecret),使用时要注意区分;进入开放平台控制台“应用管理-概览” 和 “应用管理-沙箱环境管理”可分别查看正式环境及沙箱环境的AppKey、AppSecret
sessionStringNoTOP은 사용자 로그인 인증이 성공한 후 인증 정보를 애플리케이션에 발급합니다. 자세한 내용은 여기를 클릭하세요. 이 API 문서의 라벨이 "승인 필요"로 표시되면 이 매개변수는 "승인 필요 없음"으로 전달되어야 하며, 이 매개변수는 "선택적 승인"으로 전달될 필요가 없으며 이 매개변수는 선택 사항입니다.
timestampString 타임스탬프입니다. 형식은 yyyy-MM-dd HH:mm:ss이고 시간대는 GMT+8입니다. 예: 2016-01-01 12:00: 00. Taobao API 서버는 클라이언트 요청에 대해 최대 10분의 시간 오류를 허용합니다.
formatStringNo응답 형식입니다. 기본값은 xml 형식이고 선택 값: xml, json입니다.
vStringAPI 프로토콜 버전이며 선택 값: 2.0입니다.
partner_idStringNo파트너 ID.
target_app_keyStringNo호출된 대상 AppKey는 호출된 API가 타사 ISV에서 제공되는 경우에만 유효합니다.
simplifyBooleanNo간단한 JSON 반환 형식을 사용할지 여부는 format=json인 경우에만 유효하며 기본값은 false입니다.
sign_methodString 서명의 다이제스트 알고리즘이며, 선택 값은 hmac, md5입니다.
signStringAPI 입력 매개변수 서명 결과입니다. 서명 알고리즘은 아래 소개를 참조합니다.

비즈니스 매개변수

API 호출에 반드시 포함되어야 하는 공개 매개변수 외에도 API 자체에 비즈니스 수준 매개변수가 있는 경우 해당 매개변수도 전달해야 합니다. 각 API의 비즈니스 수준 매개변수는 API 문서를 참조하세요. .

서명 알고리즘

API 호출 프로세스 중 해커의 악의적인 변조를 방지하려면 모든 API 호출에 서명이 필요합니다. TOP 서버는 요청 매개변수에 따라 서명을 확인합니다. TOP는 현재 MD5(sign_method=md5), HMAC_MD5(sign_method=hmac)라는 두 가지 서명 알고리즘을 지원합니다. 일반적인 서명 프로세스는 다음과 같습니다.

  • 모든 API 요청 매개변수(공개 매개변수 및 비즈니스 매개변수 포함, 서명 매개변수 및 byte[] 유형 매개변수), 매개변수 이름의 ASCII 코드 테이블 순서에 따라 정렬됩니다. 예: foo=1, bar=2, foo_bar=3, foobar=4, 정렬 순서는 bar=2, foo=1, foo_bar=3, foobar=4입니다.
  • 정렬된 매개변수 이름과 매개변수 값을 함께 조합하면 결과는 bar2foo1foo_bar3foobar4입니다.
  • 어셈블된 문자열을 UTF-8로 인코딩하고 서명 알고리즘을 사용하여 인코딩된 바이트 스트림을 다이제스트합니다. MD5 알고리즘을 사용하는 경우 조합된 문자열 앞뒤에 앱의 비밀을 추가한 다음 다음과 같이 요약해야 합니다. md5(secret+bar2foo1foo_bar3foobar4+secret) HMAC_MD5 알고리즘을 사용하는 경우 다음을 수행해야 합니다. 앱의 비밀로 다이제스트 알고리즘을 초기화한 다음 hmac_md5(bar2foo1foo_bar3foobar4)와 같이 요약합니다.
  • 다음과 같이 요약에서 얻은 바이트 스트림 결과의 16진수 표현을 사용합니다. hex("helloworld".getBytes("utf-8")) = "68656C6C6F776F726C64"

참고: MD5 및 HMAC_MD5는 모두 128비트입니다. 다이제스트 알고리즘의 길이는 16진수로 표현됩니다. 하나의 16진수 문자는 4비트를 나타낼 수 있으므로 부호 있는 문자열의 길이는 32개의 16진수 문자로 고정됩니다.

JAVA 서명 샘플 코드

public static String signTopRequest(Map<String, String> params, String secret, String signMethod) throws IOException {
// 1단계: 매개변수가 정렬되었는지 확인
String[] 키 = params.keySet() . toArray(new String[0]);
Arrays.sort(keys);

// 2단계: 모든 매개변수 이름과 매개변수 값을 함께 문자열로 묶습니다
StringBuilder query = new StringBuilder();
if (Constants.SIGN_METHOD_MD5 .equals(signMethod)) {
                                                                                            사용   사용 사용 ‐          통해   통해 통해 통해 통해 통해 통해 통해 아웃 통해 통해 통해 통해 통해 통해 통해 '     's ' 통해 ' s 통해 통해 '''‐ 통해 through‐be‐after's‐equal ​value)) {
query.append(key).append(value);
}
}

}

// 3단계: MD5/HMAC 암호화 사용
byte[] bytes;
if (Constants.SIGN_METHOD_HMAC.equals (signMethod)) {
Bytes = encryptHMAC(query.toString(), secret);
} else {
 query.append(secret);
 bytes = encryptMD5(query.toString());
}

  // 단계 4: 바이너리를 대문자 16진수로 변환
return byte2hex(bytes);
}

public static byte[] encryptHMAC(String data, String secret) throws IOException {
byte[] bytes = null;
try {
Secret Key secretKey = new SecretKeySpec (secret.getBytes(Constants.CHARSET_UTF8), "HmacMD5");
  Mac mac = Mac.getInstance(secretKey.getAlgorithm());
  mac.init(secretKey);
  bytes = mac.doFinal(data.getBytes (상수 .CHARSET_UTF8));
    } catch(GeneralSecurityException gse) {
        새 IOException(gse.toString());
    }
    반환 바이트;
}
 
public static 바이트 [] encryptMD5(문자열 데이터)는 IOException을 발생시킵니다. {
    StringBuilder sign = new StringBuilder();
    for (int i = 0; i <bytes.length; i++) {
        String hex = Integer.toHexString(bytes[i] & 0xFF);
        if (hex.length() == 1) {
           sign.append("0");
        }
        sign.append(hex.toUpper 케이스() );
    }
    return sign.toString();
}





# 🎜 🎜#



#🎜 🎜#



# 🎜 🎜#



#🎜 🎜#



# 🎜 🎜#



#🎜 🎜#



# 🎜 🎜#



#🎜 🎜#



# 🎜 🎜#


#🎜 🎜#



# 🎜 🎜#



#🎜 🎜#



# 🎜 🎜#
C#签name示例代码


public static string SignTopRequest(IDictionary<string, string>parameters, string secret, string signMethod)
{
// 1단계: 키를 기준으로 사전순으로 정렬 # 🎜🎜# IDictionary<string, string> sortedParams = new SortedDictionary<string, string>(parameters, StringComparer.Ordinal);
IEnumerator<KeyValuePair<string, string>> sortedPardem = ams.GetEnumerator();# 🎜 🎜#
// 2단계: 모든 매개변수 이름과 매개변수 값을 함께 문자열로 묶기
StringBuilder query = new StringBuilder();
if (Constants.SIGN_METHOD_MD5.Equals(signMethod))# 🎜 🎜# {
query.Append(secret);
}
while (dem.MoveNext())
{
string key = dem.Current.Key # 🎜🎜#                 문자열 값 =   dem.Current.Value;   #                                                                                                  ' ' s ' s ' s ' s ' ‐ ‐ dem.Current.Value;                                   Query.Append(key) .Append(value);
}
}

// 3단계: MD5/HMAC 암호화 사용
byte[] bytes;
if ( Constants.SIGN_METHOD_HMAC.Equals(signMethod))#🎜 🎜# {
HMACMD5 hmac = new HMACMD5(Encoding.UTF8.GetBytes(secret));
bytes = hmac.ComputeHash(Encoding .UTF8.GetBytes( query.ToString()));#🎜🎜 # }
else
{
query.Append(secret);
MD5 md5 = MD5.Create();# 🎜🎜 # Bytes = md5.ComputeHash(Encoding.UTF8. GetBytes(query.ToString()));
}

// 4단계: 이진수를 대문자 16진수로 변환
StringBuilder result = new StringBuilder();
for (int i = 0; i < bytes.Length; i++)
{
result.Append(bytes[i].ToString("X2"));
}

return result.ToString();
}


기타 언어 서명 샘플 코드는 TOP 공식 SDK 소스코드를 참고해주세요.

통화 예시

taobao.item.seller.get 통화를 예시로 들어보겠습니다.

#🎜🎜 #1. 매개변수 값 설정

공개 매개변수:

    method = "taobao.item.seller.get"
  • #🎜 🎜#app_key = " 12345678"
  • session = "테스트"
  • timestamp = "2016-01-01 12:00:00"
  • format = "json"
  • v = “2.0”
  • sign_method = “md5”
  • 비즈니스 매개변수:

# 🎜🎜#fields = “num_iid,title,nick,price,num”

    num_iid = 11223344
  • 2. ASCII 순서로 정렬# 🎜🎜#

app_key = “12345678”

fields = “num_iid,title,nick,price,num”
  • format = "json"
  • method = "taobao.item.seller.get"
  • num_iid = 11223344
  • session = " 테스트" #🎜🎜 #
  • sign_method = “md5”
  • timestamp = “2016-01-01 12:00:00”
  • v = “2.0”
  • # 🎜🎜#
  • 3. 🎜🎜#app_key12345678fieldsnum_iid, 제목,닉네임,가격,numformatjsonmethodtaobao.item.seller.getnum_iid11223344sessiontestsign_methodmd5timestamp2016-01-01 12:00:00v2.0

# 🎜🎜#4. 서명 생성#🎜🎜 # 앱의 비밀이 helloworld라고 가정하면 서명 결과는 다음과 같습니다. hex(md5(helloworld+매개변수 이름 및 매개변수 값 ​​spliced ​​​​in order+helloworld)) = “66987CB115214E59E6EC978214934FB8 ”

#🎜 🎜#5. HTTP 요청 조합
utf-8을 사용하여 모든 매개변수 이름과 매개변수 값을 URL 인코딩합니다. (매개변수 순서는 임의적일 수 있습니다. 그러나 서명 매개변수는 포함되어야 함) GET 또는 POST(바이트 [] 유형 매개변수 포함)를 사용하면 다음과 같은 요청이 시작됩니다. //gw.api.taobao.com/router/rest?method=taobao.item.seller.get&app_key=12345678&session=test×tamp=2016-01-01+12%3A00%3A00&format=json&v=2.0&sign_method=md5&fields=num_iid% 2Ctitle%2Cnick%2Cprice%2Cnum&num_iid=11223344&sign=66987CB11 5214E59E6EC978214934FB8

Notes

  • 모든 요청 및 응답 데이터 인코딩은 UTF-8 형식입니다. URL의 모든 매개변수 이름과 매개변수 값을 URL 인코딩하세요. 요청의 Content-Type이 application/x-www-form-urlencoded인 경우 HTTP 본문의 모든 매개변수 값도 URL로 인코딩됩니다. multipart/form-data 형식인 경우 매개변수 값은 ​​각 양식 필드의 문자 집합 부분은 utf-8로 지정해야 합니다.
  • 매개변수 이름과 매개변수 값으로 조합된 URL의 길이가 1024자 미만인 경우 매개변수 유형에 byte[] 유형이 포함되어 있거나 조합된 요청 URL이 너무 길면 GET을 사용하여 요청을 시작할 수 있습니다. 요청을 시작하려면 POST를 사용해야 합니다. 모든 API는 POST를 사용하여 요청을 시작할 수 있습니다.
  • 샌드박스 환경에서 테스트해야 하는 경우, 애플리케이션 콘솔의 샌드박스 관리 페이지에서 샌드박스 환경에 해당하는 app_key(보통 공식 환경의 app_key 앞에 "10"이 붙음)와 app_secret을 얻어오시기 바랍니다. 해당 세션 값도 샌드박스 계정으로 로그인하여 인증을 받습니다. 샌드박스 환경 인증은 공식 환경 인증과 유사합니다. 자세한 내용은 사용자 인증 소개를 참조하세요.
  • TOP 공식 SDK를 사용하지 않고 API를 호출할 때만 서명 생성이 필요합니다. TOP 공식 SDK를 사용하는 경우 SDK가 자동으로 이 단계를 완료합니다.

FAQ

인터페이스 호출에서 "잘못된 서명"이라는 서명 오류가 보고됩니다.