주문 API
단일 주문 정보 조회 API
단일 주문 정보를 조회합니다. 오너클랜 주문 코드와 일치하는 주문 정보를 반환합니다.
파라미터
- key (String): 조회할 주문 내역의 key입니다. 오너클랜 주문 코드와 같습니다.
반환 데이터
주문 정보를 반환하며, 다음 항목을 포함합니다:
- key (String): 주문 내역의 key입니다. 오너클랜 주문 코드와 같습니다.
- id (String): 주문 내역의 API ID입니다.
- products ([OrderProduct]): 주문된 제품 정보의 배열입니다.
- quantity (Int): 주문 제품의 수량
- price (Float): 주문 제품의 가격 (수량 반영 전)
- shippingType (ShippingType): 배송비 결제 방식
- itemKey (String): 주문 제품의 상품 key
- itemOptionInfo (Object): 주문 제품의 옵션 정보
- optionAttributes ([Object]): 옵션 정보
- name (String): 옵션명
- value (String): 옵션값
- price (Float): 옵션 가격 (옵션 추가금이 아닌 전체 금액)
- trackingNumber (String): 택배 운송장 번호
- shippingCompanyName (String): 택배사 이름
- shippedDate (Int): 운송장 입력 일시 (Unix timestamp)
- additionalAttributes ([Object]): 추가 속성 정보
- name (String): 속성 이름
- value (String): 속성 값
- taxFree (Boolean): 면세 여부
- status (OrderStatus): 주문 상태
- shippingInfo (ShippingInfo): 배송 정보
- sender (Sender): 보내는 사람 정보
- recipient (Recipient): 받는 사람 정보
- destinationAddress (Address): 받는 주소
- shippingFee (Float): 배송비
- createdAt (Int): 주문 생성 시각 (Unix timestamp)
- updatedAt (Int): 주문 업데이트 시각 (Unix timestamp)
- note (String): 기타 메모 사항
- ordererNote (String): 소비자가 남긴 주문 메모
- sellerNote (String): 판매사 메모 사항
- isBeingMediated (Boolean): 중재 여부
- adjustments ([Adjustment]): 조정 내역
- transactions ([Transaction]): 오클 머니 사용 내역
- refundDetails ([RefundedOrder]): 반품 요청 내역
/**
* 아래 예제는 인터넷 브라우저의 콘솔 창에서 실행해볼 수 있습니다.
* 크롬 브라우저에서 테스트되었습니다.
*
* 토큰은 API 이용 가이드(/V2/service/api-center-guide.php)의 JWT 인증 섹션에 있는 방식으로 발급받을 수 있으며,
* 이 예제 코드 하단부에 있는 client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN"); 코드의
* YOUR_TOKEN 부분에 발급받은 토큰을 넣어주시면 됩니다.
*/
/**
* 이 예제는 단일 주문내역에 대해 조회할 수 있는 모든 정보를 불러옵니다.
*/
var client = new XMLHttpRequest();
/**
* 정보를 읽어올 주문 코드입니다.
*/
var orderKey = "2019000000000000000A";
var readQuery = `
query {
order(key: "$") {
key
id
products {
quantity
price
shippingType
itemKey
itemOptionInfo {
optionAttributes {
name
value
}
price
}
trackingNumber
shippingCompanyCode
shippedDate
additionalAttributes {
key
value
}
taxFree
}
status
shippingInfo {
sender {
name
phoneNumber
email
}
recipient {
name
phoneNumber
destinationAddress {
addr1
addr2
postalCode
}
}
shippingFee
}
createdAt
updatedAt
note
ordererNote
sellerNote
isBeingMediated
adjustments {
reason
price
taxFree
}
transactions {
key
id
kind
status
amount {
currency
value
}
createdAt
updatedAt
closedAt
note
}
}
}
`;
client.open("GET", "https://api-sandbox.ownerclan.com/v1/graphql?query=" + encodeURIComponent(readQuery), true);
client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN");
client.onreadystatechange = function (aEvt) {
if (client.readyState === 4) {
if (client.status === 200) {
var response = JSON.parse(client.responseText);
if (response.errors) {
// 에러가 있다면 에러를 콘솔에 씁니다.
console.log(JSON.stringify(response.errors));
} else {
// 에러가 없다면 반환된 데이터를 콘솔에 씁니다.
console.log(JSON.stringify(response.data));
}
} else {
// API 서버 응답이 정상이 아닌 경우 에러와 HTTP status code를 콘솔에 씁니다.
console.error(client.status, client.responseText);
}
}
}
client.send(null);
복수 주문 내역 조회 API
복수의 주문내역을 조회합니다. 한 번에 최대 1000개의 주문 내역을 조회할 수 있으며, pagination을 위한 cursor를 제공합니다.
파라미터
Pagination 관련 파라미터:
- after (String): API 고유 cursor 값으로, 지정된 경우 이 cursor 값 이후의 주문 내역만을 불러옵니다.
- before (String): API 고유 cursor 값으로, 지정된 경우 이 cursor 값 이전의 주문 내역만을 불러옵니다.
- first (Int): 조건을 만족하는 모든 주문 내역 중 처음 몇 개의 주문 내역을 불러올지를 나타냅니다.
- last (Int): 조건을 만족하는 모든 주문 내역 중 마지막 몇 개의 주문 내역을 불러올지를 나타냅니다.
현재 `before`와 `last`는 정상적으로 동작하지 않을 수 있으니 가급적 `after`와 `first`를 위주로 사용하는 것을 권장합니다.
Search 관련 파라미터:
- dateFrom (Timestamp): 주문 내역이 생성된 시각이 이 값 이후인 것들만을 불러옵니다. 생략하면 90일 전으로 설정됩니다.
- dateTo (Timestamp): 주문 내역이 생성된 시각이 이 값 이전인 것들만을 불러옵니다. 생략하면 현재로 설정됩니다.
- note (String): note 필드(원장주문코드)의 값에 입력한 값이 포함되는 주문 내역만을 검색합니다.
검색 시 dateFrom과 dateTo를 사용해 기간을 90일 또는 그 이내로 지정해야 합니다. - sellerNote (String): sellerNote 필드(주문 관리 코드)의 값에 입력한 값이 포함되는 주문 내역만을
검색합니다.
검색 시 dateFrom과 dateTo를 사용해 기간을 90일 또는 그 이내로 지정해야 합니다. - status (OrderStatus): 주어진 상태에 해당하는 주문 내역만을 불러옵니다.
- shippedAfter (Timestamp): 송장번호가 입력된 시각이 이 값 이후인 것들만을 불러옵니다.
- shippedBefore (Timestamp): 송장번호가 입력된 시각이 이 값 이전인 것들만을 불러옵니다.
`shippedBefore`는 `shippedAfter` 없이 단독으로 사용할 수 없습니다.
*기간을 명시하는 경우, 기간은 반드시 90일 이내여야 합니다.
반환 값
allOrders는 pagination을 위한 정보와 주문내역 정보를 동시에 담고 있습니다.
- pageInfo: pagination을 위한 정보입니다.
- hasNextPage: 데이터가 뒤에 더 있는지를 나타냅니다.
- hasPreviousPage: 데이터가 앞에 더 있는지를 나타냅니다.
- startCursor: 현재 페이지의 첫 데이터에 대한 cursor 값입니다.
이 값을 `before` 파라미터에 넘겨주면 정확하게 이전 페이지의 데이터를 가져올 수 있습니다. - endCursor: 현재 페이지의 마지막 데이터에 대한 cursor 값입니다.
이 값을 `after` 파라미터에 넘겨주면 정확하게 다음 페이지의 데이터를 가져올 수 있습니다. - edges: 주문 내역 데이터입니다.
- cursor: 해당 주문 내역의 pagination cursor입니다.
- node: 주문 내역에 대한 정보입니다. `order` 쿼리에서 노출하는 정보와 동일합니다.
/**
* 아래 예제는 인터넷 브라우저의 콘솔 창에서 실행해볼 수 있습니다.
* 크롬 브라우저에서 테스트되었습니다.
*
* 토큰은 API 이용 가이드(/V2/service/api-center-guide.php)의 JWT 인증 섹션에 있는 방식으로 발급받을 수 있으며,
* 이 예제 코드 하단부에 있는 client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN"); 코드의
* YOUR_TOKEN 부분에 발급받은 토큰을 넣어주시면 됩니다.
*/
/**
* 이 예제는 여러 개의 주문내역을 동시에 불러옵니다.
* 검색 조건을 명시하지 않았으므로 모두 기본값으로 동작합니다.
* (지난 90일 간의 주문 내역 중 주문 시점 내림차순으로 100개)
* 예제 코드 - 날짜 범위 검색 [https://gist.github.com/hjiung/e7a30751cf5bb900b70e26b7ca78950f]
* 예제 코드 - 날짜 범위 및 주문 상태 검색 [https://gist.github.com/hjiung/e7a30751cf5bb900b70e26b7ca78950f]
* 예제 코드 - 원장 주문코드 검색 [https://gist.github.com/hjiung/a380d22596e228ddda8d64f60837a76b]
* 예제 코드 - 주문관리 메모 검색 [https://gist.github.com/hjiung/fa57abe13543fb838779d85f5dd9fec4]
* 예제 코드 - 페이지네이션 [https://gist.github.com/hjiung/e7bc7bcc1fa610dd5057a5136a350d64]
* 예제 코드 - 송장입력 날짜 범위 검색 [https://gist.github.com/jhyeonj/1c57ad52d46a58e3c0bc3be2ec7478db]
*/
var client = new XMLHttpRequest();
var readQuery = `
query {
allOrders {
edges {
node {
key
id
products {
quantity
price
shippingType
itemKey
itemOptionInfo {
optionAttributes {
name
value
}
price
}
trackingNumber
shippingCompanyName
shippedDate
additionalAttributes {
key
value
}
taxFree
}
status
shippingInfo {
sender {
name
phoneNumber
email
}
recipient {
name
phoneNumber
destinationAddress {
addr1
addr2
postalCode
}
}
shippingFee
}
createdAt
updatedAt
note
ordererNote
sellerNote
isBeingMediated
adjustments {
reason
price
taxFree
}
transactions {
key
id
kind
status
amount {
currency
value
}
createdAt
updatedAt
closedAt
note
}
}
}
}
}
`;
client.open("GET", "https://api-sandbox.ownerclan.com/v1/graphql?query=" + encodeURIComponent(readQuery), true);
client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN");
client.onreadystatechange = function (aEvt) {
if (client.readyState === 4) {
if (client.status === 200) {
var response = JSON.parse(client.responseText);
if (response.errors) {
// 에러가 있다면 에러를 콘솔에 씁니다.
console.log(JSON.stringify(response.errors));
} else {
// 에러가 없다면 반환된 데이터를 콘솔에 씁니다.
console.log(JSON.stringify(response.data));
}
} else {
// API 서버 응답이 정상이 아닌 경우 에러와 HTTP status code를 콘솔에 씁니다.
console.error(client.status, client.responseText);
}
}
}
client.send(null);
새 주문 등록 API
새 주문을 등록합니다. 주문은 입력된 상품 정보에 따라 여러 개로 나뉘어 생성될 수 있습니다.
파라미터
- input (OrderInput): 입력할 데이터입니다.
- simulationResult ([object]): 등록할 주문의 입력 데이터를 기반으로 simulateCreateOrder 쿼리에서 반환된 시뮬레이션 결과입니다. 만약 이 필드에 값이 주어지면, 시뮬레이션 결과와 실제 등록할 주문 내역이 일치하지 않으면 주문이 실패합니다. (자세한 내용은 예제코드 L9 참조)
입력 데이터
굵은 글씨는 필수 필드입니다:
- sender (SenderInput): 보내는 사람의 정보입니다. SenderInput 타입의 필드 구성은 아래 예제 코드의 입력값을 참고합니다. 생략하면 판매사 계정의 기본값이 사용되므로 필수 항목이 아닙니다.
- recipient (RecipientInput): 받는 사람의 정보입니다. RecipientInput 타입의 필드 구성은 아래 예제 코드의 입력값을 참고합니다.
- products ([OrderProductInput]): 주문할 상품들의 리스트입니다. OrderProductInput 타입에 대한 필드 구성은 아래 예제 코드의 입력값을 참고합니다.
- note (String): 주문 건에 대한 메모 (원장주문코드).
- sellerNote (String): 주문 건에 대한 판매사 메모 (주문관리코드).
- ordererNote (String): 주문 건에 대한 최종 구매자의 배송 요청 사항.
- customsClearanceCode (CustomsClearanceCodeInput): 해외배송 상품 주문 시 입력하는 데이터입니다. 해외배송이 아닐 경우 생략 가능합니다.
- value (String): 입력할 데이터입니다.
- type (CustomsClearanceCodeType): CustomsClearanceCodeType 타입에 대한 정보는 아래 예제 코드의 입력값을 참고합니다.
반환 데이터
새로 생성된 주문 정보를 반환합니다. 상품 내용에 따라 주문이 여러 개로 나뉘어 생성될 수 있습니다.
- 공급사(Item.metadata.vendorKey 필드)가 다른 경우
- 배송비 부과 방식(Item.shippingType 필드)이 다른 경우
- 예: 공급사 A의 선불 상품 2개, B의 무료배송 상품 1개, 착불 상품 1개를 주문한 경우 3개의 주문으로 나뉘어 생성됩니다.
/**
* 아래 예제는 인터넷 브라우저의 콘솔 창에서 실행해볼 수 있습니다.
* 크롬 브라우저에서 테스트되었습니다.
*
* 토큰은 API 이용 가이드(/V2/service/api-center-guide.php)의 JWT 인증 섹션에 있는 방식으로 발급받을 수 있으며,
* 이 예제 코드 하단부에 있는 client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN"); 코드의
* YOUR_TOKEN 부분에 발급받은 토큰을 넣어주시면 됩니다.
* 예제코드 - 시뮬레이션 결과 검증이 들어간 단일 주문 [https://gist.github.com/hjiung/9660e4ad4053ff8edae9e3b7142a095f]
* 예제코드 - 해외배송 상품 주문 생성 [https://gist.github.com/jhyeonj/ddaeae3fb59ca866015f3cbb02c7a466]
*/
/**
* XHR 클라이언트 객체입니다.
*/
var client = new XMLHttpRequest();
/**
* `createOrder` 쿼리 본문입니다.
*/
var createQuery = `mutation CreateOrder($input: OrderInput!) {
createOrder(input: $input) {
key
id
products {
quantity
price
shippingType
itemKey
productName
itemOptionInfo {
optionAttributes {
name
value
}
price
}
trackingNumber
shippingCompanyCode
shippingCompanyName
shippedDate
additionalAttributes {
key
value
}
taxFree
}
status
shippingInfo {
sender {
name
phoneNumber
email
}
recipient {
name
phoneNumber
destinationAddress {
addr1
addr2
postalCode
}
}
shippingFee
}
createdAt
updatedAt
note
ordererNote
sellerNote
isBeingMediated
adjustments {
reason
price
taxFree
}
transactions {
key
id
kind
status
amount {
currency
value
}
createdAt
updatedAt
closedAt
note
}
}
}`;
/**
* `createOrder` 쿼리에 사용되는 변수를 설정하는 object입니다.
*
* 위의 쿼리에서는 `$input`이라는 변수만 사용하므로 여기에서도 `input`에 대한 값만을 설정합니다.
*
* 아래 예시 입력에 사용된 상품코드는 예시이므로 동작하지 않습니다.
*/
var inputVariables = {
input: {
sender: {
name: "보내는이",
phoneNumber: "010-1234-5678",
email: "[email protected]"
},
recipient: {
name: "받는이",
phoneNumber: "010-8765-4321",
destinationAddress: {
addr1: "서울 금천구 가산디지털1로 128",
addr2: "808호",
postalCode: "08507"
}
},
products: [
{
quantity: 4,
itemKey: "W999999",
optionAttributes: [
"블랙"
]
},
{
quantity: 3,
itemKey: "W999999",
optionAttributes: [
"로즈골드"
]
},
{
quantity: 1,
itemKey: "W999998",
optionAttributes: [
"골드"
]
},
{
quantity: 2,
itemKey: "W999998",
optionAttributes: [
"실버"
]
},
{
quantity: 5,
itemKey: "W999997",
optionAttributes: [
"화이트",
"토끼당근"
]
},
{
quantity: 2,
itemKey: "W999996",
optionAttributes: [
"그린티"
]
},
{
quantity: 1,
itemKey: "W999995",
optionAttributes: []
}
],
note: "원장주문코드",
sellerNote: "주문관리코드",
ordererNote: "배송시 요청사항",
customsClearanceCode: {
type: "PersonalNumber",
value: "P012345678910"
}
}
};
// XHR 클라이언트를 열고, 인증 헤더와 XHR 요청이 완료되었을 때의 callback을 설정합니다.
client.open("POST", "https://api-sandbox.ownerclan.com/v1/graphql", true);
client.setRequestHeader("Content-Type", "application/json");
client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN");
client.onreadystatechange = function (aEvt) {
if (client.readyState === 4) {
if (client.status === 200) {
var response = JSON.parse(client.responseText);
if (response.errors) {
// API 서버 응답이 정상이지만 API 에러가 있다면 에러를 콘솔에 씁니다.
console.error(JSON.stringify(response.errors));
} else {
// API 서버 응답도 정상이고, API 에러도 없다면 반환된 데이터를 콘솔에 씁니다.
console.log(JSON.stringify(response.data));
}
} else {
// API 서버 응답이 정상이 아닌 경우 에러와 HTTP status code를 콘솔에 씁니다.
console.error(client.status, client.responseText);
}
}
}
/*
* XHR 요청을 전송합니다.
* operationName은 GraphQL 쿼리에서 `mutation ... {` 부분의 `...`과 같은 값이어야합니다.
* query는 위에서 문자열 변수로 만든 것을 사용하면 되고,
* variables 역시 위에서 object로 만든 것을 사용하면 됩니다.
*/
client.send(JSON.stringify({
operationName: "CreateOrder",
query: createQuery,
variables: inputVariables
}));
테스트 주문 API
주문을 실제로 등록하지 않고, 예상되는 상품 금액과 배송비 정보를 제공합니다.
파라미터
- input (OrderInput): 입력할 데이터입니다. createOrder와 동일합니다.
입력 데이터
createOrder의 입력과 동일합니다.
반환 데이터
상품 금액 정보와 배송비 정보를 반환합니다. 각 object는 1개의 주문에 대응되며, 아래와 같은 필드를 포함합니다:
- itemAmounts ([object]): 상품 관련 금액 정보
- amount (Int): 주문 수량이 반영된 최종 상품 금액
- itemKey (String): 상품 Key (오너클랜 상품 코드)
- shippingAmount (Int): 최종 배송비 (추가 배송비 포함)
- extraShippingFeeExists (Boolean): 추가 배송비 반영 여부
/**
* 아래 예제는 인터넷 브라우저의 콘솔 창에서 실행해볼 수 있습니다.
* 크롬 브라우저에서 테스트되었습니다.
*
* 토큰은 API 이용 가이드(/V2/service/api-center-guide.php)의 JWT 인증 섹션에 있는 방식으로 발급받을 수 있으며,
* 이 예제 코드 하단부에 있는 client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN"); 코드의
* YOUR_TOKEN 부분에 발급받은 토큰을 넣어주시면 됩니다.
*/
/**
* XHR 클라이언트 객체입니다.
*/
var client = new XMLHttpRequest();
/**
* `createOrder` 쿼리 본문입니다.
*/
var createQuery = `mutation SimulateCreateOrder($input: OrderInput!) {
simulateCreateOrder(input: $input) {
itemAmounts {
amount
itemKey
}
shippingAmount
extraShippingFeeExists
}
}`;
/**
* `createOrder` 쿼리에 사용되는 변수를 설정하는 object입니다.
*
* 위의 쿼리에서는 `$input`이라는 변수만 사용하므로 여기에서도 `input`에 대한 값만을 설정합니다.
*
* 아래 예시 입력에 사용된 상품코드는 예시이므로 동작하지 않습니다.
*/
var inputVariables = {
input: {
sender: {
name: "보내는이",
phoneNumber: "010-1234-5678",
email: "[email protected]"
},
recipient: {
name: "받는이",
phoneNumber: "010-8765-4321",
destinationAddress: {
addr1: "서울 금천구 가산디지털1로 128",
addr2: "808호",
postalCode: "08507"
}
},
products: [
{
quantity: 4,
itemKey: "W999999",
optionAttributes: [
"블랙"
]
},
{
quantity: 3,
itemKey: "W999999",
optionAttributes: [
"로즈골드"
]
},
{
quantity: 1,
itemKey: "W999998",
optionAttributes: [
"골드"
]
},
{
quantity: 2,
itemKey: "W999998",
optionAttributes: [
"실버"
]
},
{
quantity: 5,
itemKey: "W999997",
optionAttributes: [
"화이트",
"토끼당근"
]
},
{
quantity: 2,
itemKey: "W999996",
optionAttributes: [
"그린티"
]
},
{
quantity: 1,
itemKey: "W999995",
optionAttributes: []
}
],
note: "원장주문코드",
sellerNote: "주문관리코드",
ordererNote: "배송시 요청사항",
customsClearanceCode: "통관고유번호"
}
};
// XHR 클라이언트를 열고, 인증 헤더와 XHR 요청이 완료되었을 때의 callback을 설정합니다.
client.open("POST", "https://api-sandbox.ownerclan.com/v1/graphql", true);
client.setRequestHeader("Content-Type", "application/json");
client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN");
client.onreadystatechange = function (aEvt) {
if (client.readyState === 4) {
if (client.status === 200) {
var response = JSON.parse(client.responseText);
if (response.errors) {
// API 서버 응답이 정상이지만 API 에러가 있다면 에러를 콘솔에 씁니다.
console.error(JSON.stringify(response.errors));
} else {
// API 서버 응답도 정상이고, API 에러도 없다면 반환된 데이터를 콘솔에 씁니다.
console.log(JSON.stringify(response.data));
}
} else {
// API 서버 응답이 정상이 아닌 경우 에러와 HTTP status code를 콘솔에 씁니다.
console.error(client.status, client.responseText);
}
}
}
/*
* XHR 요청을 전송합니다.
* operationName은 GraphQL 쿼리에서 `mutation ... {` 부분의 `...`과 같은 값이어야합니다.
* query는 위에서 문자열 변수로 만든 것을 사용하면 되고,
* variables 역시 위에서 object로 만든 것을 사용하면 됩니다.
*/
client.send(JSON.stringify({
operationName: "SimulateCreateOrder",
query: createQuery,
variables: inputVariables
}));
주문 메모 업데이트 API
기존 주문의 원청주문코드와 주문관리메모를 업데이트합니다.
파라미터
- key (String): 원청주문코드 또는 주문관리메모를 수정할 주문의 주문코드입니다.
- input (OrderUpdateNotesInput): 수정할 데이터입니다.
입력 데이터
- note (String): 원청주문코드입니다.
- sellerNotes ([SellerNoteInput]): 주문관리메모입니다.
- sellerNote (String): 설정할 주문관리메모입니다.
주의사항
주문관리메모는 주문 전체 또는 주문 상품별로 설정할 수 있으며, 다음 원칙을 따라야 합니다:
- 주문 전체에 대해 설정하는 경우: 배열에 하나의 object만 있어야 하며, 주문 전체에 대해 하나의 주문관리메모만 노출됩니다. (Order.sellerNote)
- 주문 상품별로 설정하는 경우: READ API(order)에서 얻은 주문 상품 순서에 맞게 주문관리메모 object를 배열로 지정하면 됩니다. 첫 번째 주문 상품의 주문관리메모가 주문 전체에 대해 노출됩니다. (Order.products.sellerNote)
반환 데이터
업데이트된 주문 정보를 반환합니다. 반환 데이터는 order 쿼리의 결과와 동일합니다.
/**
* 아래 예제는 인터넷 브라우저의 콘솔 창에서 실행해볼 수 있습니다.
* 크롬 브라우저에서 테스트되었습니다.
*
* 토큰은 API 이용 가이드(/V2/service/api-center-guide.php)의 JWT 인증 섹션에 있는 방식으로 발급받을 수 있으며,
* 이 예제 코드 하단부에 있는 client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN"); 코드의
* YOUR_TOKEN 부분에 발급받은 토큰을 넣어주시면 됩니다.
* 예제 코드 - 주문관리메모 전체 수정 [https://gist.github.com/hjiung/f6b83ad6957ea74974292e0ec8cc66ba]
* 예제 코드 - 주문관리메모 상품별 수정 [https://gist.github.com/hjiung/96e64e7fcd28e5af8b409e83fc6da40f]
*/
/**
* XHR 클라이언트 객체입니다.
*/
var client = new XMLHttpRequest();
/**
* `updateOrderNotes` 쿼리 본문입니다.
*
* 아래 예시에서 사용된 주문 코드는 예시이므로 동작하지 않습니다.
*/
var updateQuery = `mutation UpdateOrderNotes($input: OrderUpdateNotesInput!) {
updateOrderNotes(key: "2020022000000000000A", input: $input) {
key
id
products {
quantity
price
shippingType
itemKey
productName
itemOptionInfo {
optionAttributes {
name
value
}
price
}
trackingNumber
shippingCompanyCode
shippingCompanyName
shippedDate
additionalAttributes {
key
value
}
taxFree
sellerNote
}
status
shippingInfo {
sender {
name
phoneNumber
email
}
recipient {
name
phoneNumber
destinationAddress {
addr1
addr2
postalCode
}
}
shippingFee
}
createdAt
updatedAt
note
ordererNote
sellerNote
isBeingMediated
adjustments {
reason
price
taxFree
}
transactions {
key
id
kind
status
amount {
currency
value
}
createdAt
updatedAt
closedAt
note
}
}
}`;
/**
* `updateOrderNotes` 쿼리에 사용되는 변수를 설정하는 object입니다.
*
* 위의 쿼리에서는 `$input`라는 변수를 사용하므로 여기에서도 `input`에 대한 값을 설정합니다.
*/
var inputVariables = {
"input": {
"note": "원장주문코드 - 수정"
}
};
// XHR 클라이언트를 열고, 인증 헤더와 XHR 요청이 완료되었을 때의 callback을 설정합니다.
client.open("POST", "https://api-sandbox.ownerclan.com/v1/graphql", true);
client.setRequestHeader("Content-Type", "application/json");
client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN");
client.onreadystatechange = function (aEvt) {
if (client.readyState === 4) {
if (client.status === 200) {
var response = JSON.parse(client.responseText);
if (response.errors) {
// API 서버 응답이 정상이지만 API 에러가 있다면 에러를 콘솔에 씁니다.
console.error(JSON.stringify(response.errors));
} else {
// API 서버 응답도 정상이고, API 에러도 없다면 반환된 데이터를 콘솔에 씁니다.
console.log(JSON.stringify(response.data));
}
} else {
// API 서버 응답이 정상이 아닌 경우 에러와 HTTP status code를 콘솔에 씁니다.
console.error(client.status, client.responseText);
}
}
}
/*
* XHR 요청을 전송합니다.
* operationName은 GraphQL 쿼리에서 `mutation ... {` 부분의 `...`과 같은 값이어야합니다.
* query는 위에서 문자열 변수로 만든 것을 사용하면 되고,
* variables 역시 위에서 object로 만든 것을 사용하면 됩니다.
*/
client.send(JSON.stringify({
operationName: "UpdateOrderNotes",
query: updateQuery,
variables: inputVariables
}));
주문 취소 API
주문을 취소합니다. 단, 결제 완료(paid) 상태인 주문만 취소할 수 있습니다.
파라미터
- key (String): 취소할 주문의 주문코드입니다.
반환 데이터
취소된 주문의 정보를 반환합니다. 반환 데이터는 order 쿼리의 결과와 동일합니다.
예시 쿼리
아래 2개의 코드 중 첫 번째는 실제 쿼리이고, 두 번째는 쿼리에서 쓰이는 $key variable을 정
의한 것입니다.
GraphQL Playground에서 테스트할 때는 쿼리를 입력하는 공간 아래에 QUERY
VARIABLES에 입력하면 됩니다.
(예시 데이터이므로 그대로 붙여넣어도 작동하지는 않습니다.)
mutation CancelOrder($key: ID!) {
cancelOrder(key: $key) {
key
id
products {
quantity
price
shippingType
itemKey
productName
itemOptionInfo {
optionAttributes {
name
value
} price
}
trackingNumber
shippingCompanyCode
shippingCompanyName
shippedDate
additionalAttributes {
key
value
}
taxFree
sellerNote
}
status
shippingInfo {
sender {
name
phoneNumber
email
}
recipient {
name
phoneNumber
destinationAddress {
addr1
addr2
postalCode
}
}
shippingFee
}
createdAt
updatedAt
note
ordererNote
sellerNote
isBeingMediated
adjustments {
reason
price
taxFree
}
transactions {
key
id
kind
status
amount {
currency
value
}
createdAt
updatedAt
closedAt
note
}
}
}
------------------------------------------------------
{
"key": "2020000000000000000A"
}
/**
* 아래 예제는 인터넷 브라우저의 콘솔 창에서 실행해볼 수 있습니다.
* 크롬 브라우저에서 테스트되었습니다.
*
* 토큰은 API 이용 가이드(/V2/service/api-center-guide.php)의 JWT 인증 섹션에 있는 방식으로 발급받을 수 있으며,
* 이 예제 코드 하단부에 있는 client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN"); 코드의
* YOUR_TOKEN 부분에 발급받은 토큰을 넣어주시면 됩니다.
*/
/**
* XHR 클라이언트 객체입니다.
*/
var client = new XMLHttpRequest();
/**
* `cancelOrder` 쿼리 본문입니다.
*
* 아래 예시에서 사용된 주문 코드는 예시이므로 동작하지 않습니다.
*/
var updateQuery = `mutation CancelOrder($key: ID!) {
cancelOrder(key: $key) {
key
id
products {
quantity
price
shippingType
itemKey
productName
itemOptionInfo {
optionAttributes {
name
value
}
price
}
trackingNumber
shippingCompanyCode
shippingCompanyName
shippedDate
additionalAttributes {
key
value
}
taxFree
sellerNote
}
status
shippingInfo {
sender {
name
phoneNumber
email
}
recipient {
name
phoneNumber
destinationAddress {
addr1
addr2
postalCode
}
}
shippingFee
}
createdAt
updatedAt
note
ordererNote
sellerNote
isBeingMediated
adjustments {
reason
price
taxFree
}
transactions {
key
id
kind
status
amount {
currency
value
}
createdAt
updatedAt
closedAt
note
}
}
}`;
/**
* `cancelOrder` 쿼리에 사용되는 변수를 설정하는 object입니다.
*
* 위의 쿼리에서는 `$key`라는 변수를 사용하므로 여기에서도 `key`에 대한 값을 설정합니다.
*/
var inputVariables = {
"key": "2020000000000000000A"
};
// XHR 클라이언트를 열고, 인증 헤더와 XHR 요청이 완료되었을 때의 callback을 설정합니다.
client.open("POST", "https://api-sandbox.ownerclan.com/v1/graphql", true);
client.setRequestHeader("Content-Type", "application/json");
client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN");
client.onreadystatechange = function (aEvt) {
if (client.readyState === 4) {
if (client.status === 200) {
var response = JSON.parse(client.responseText);
if (response.errors) {
// API 서버 응답이 정상이지만 API 에러가 있다면 에러를 콘솔에 씁니다.
console.error(JSON.stringify(response.errors));
} else {
// API 서버 응답도 정상이고, API 에러도 없다면 반환된 데이터를 콘솔에 씁니다.
console.log(JSON.stringify(response.data));
}
} else {
// API 서버 응답이 정상이 아닌 경우 에러와 HTTP status code를 콘솔에 씁니다.
console.error(client.status, client.responseText);
}
}
}
/*
* XHR 요청을 전송합니다.
* operationName은 GraphQL 쿼리에서 `mutation ... {` 부분의 `...`과 같은 값이어야합니다.
* query는 위에서 문자열 변수로 만든 것을 사용하면 되고,
* variables 역시 위에서 object로 만든 것을 사용하면 됩니다.
*/
client.send(JSON.stringify({
operationName: "CancelOrder",
query: updateQuery,
variables: inputVariables
}));
주문 취소 요청 API
주문 취소를 요청합니다. 단, 배송 준비중(preparing) 상태의 주문만 취소 요청이 가능합니다.
파라미터
- key (String): 주문 취소를 요청할 주문의 주문코드입니다.
- input (RequestOrderCancellationInput): 주문 취소에 필요한 입력 데이터입니다.
입력 데이터
- cancelReason (String): 취소 요청 사유입니다.
반환 데이터
취소 요청이 처리된 주문의 정보를 반환합니다. 반환 데이터는 order 쿼리의 결과와 동일합니다.
예시 쿼리
아래 두 개의 코드는 첫 번째가 실제 쿼리이며, 두 번째는 $key와 $input 변수를 정의한 것입니다.
GraphQL Playground에서 테스트할 때 쿼리 공간
아래의 QUERY VARIABLES에 입력하면 됩니다.
(예시 데이터이므로 그대로 붙여넣어도 작동하지 않습니다.)
mutation RequestOrderCancellation($key: ID!, $input: RequestOrderCancellationInput!) {
requestOrderCancellation(key: $key, input: $input) {
key
id
products {
quantity
price
shippingType
itemKey
productName
itemOptionInfo {
optionAttributes {
name
value
}
price
}
trackingNumber
shippingCompanyCode
shippingCompanyName
shippedDate
additionalAttributes {
key
value
}
taxFree
sellerNote
}
status
shippingInfo {
sender {
name
phoneNumber
email
}
recipient {
name
phoneNumber
destinationAddress {
addr1
addr2
postalCode
}
}
shippingFee
}
createdAt
updatedAt
note
ordererNote
sellerNote
isBeingMediated
adjustments {
reason
price
taxFree
}
transactions {
key
id
kind
status
amount {
currency
value
}
createdAt
updatedAt
closedAt
note
}
}
}
------------------------------------------------------
{
"key": "2020000000000000000A",
"input": {
"cancelReason": "주문 취소 요청 사유."
}
}
/**
* 아래 예제는 인터넷 브라우저의 콘솔 창에서 실행해볼 수 있습니다.
* 크롬 브라우저에서 테스트되었습니다.
*
* 토큰은 API 이용 가이드(/V2/service/api-center-guide.php)의 JWT 인증 섹션에 있는 방식으로 발급받을 수 있으며,
* 이 예제 코드 하단부에 있는 client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN"); 코드의
* YOUR_TOKEN 부분에 발급받은 토큰을 넣어주시면 됩니다.
*/
/**
* XHR 클라이언트 객체입니다.
*/
var client = new XMLHttpRequest();
/**
* `requestOrderCancellation` 쿼리 본문입니다.
*
* 아래 예시에서 사용된 주문 코드는 예시이므로 동작하지 않습니다.
*/
var updateQuery = `mutation RequestOrderCancellation($key: ID!, $input: RequestOrderCancellationInput!) {
requestOrderCancellation(key: $key, input: $input) {
key
id
products {
quantity
price
shippingType
itemKey
productName
itemOptionInfo {
optionAttributes {
name
value
}
price
}
trackingNumber
shippingCompanyCode
shippingCompanyName
shippedDate
additionalAttributes {
key
value
}
taxFree
sellerNote
}
status
shippingInfo {
sender {
name
phoneNumber
email
}
recipient {
name
phoneNumber
destinationAddress {
addr1
addr2
postalCode
}
}
shippingFee
}
createdAt
updatedAt
note
ordererNote
sellerNote
isBeingMediated
adjustments {
reason
price
taxFree
}
transactions {
key
id
kind
status
amount {
currency
value
}
createdAt
updatedAt
closedAt
note
}
}
}`;
/**
* `requestOrderCancellation` 쿼리에 사용되는 변수를 설정하는 object입니다.
*
* 위의 쿼리에서는 `$key`, `$input`이라는 두 개의 변수를 사용하므로 여기에서도 `key`와 `input`에 대한 값을 설정합니다.
*/
var inputVariables = {
"key": "2020000000000000000A",
"input": {
cancelReason: "주문 취소 사유."
}
};
// XHR 클라이언트를 열고, 인증 헤더와 XHR 요청이 완료되었을 때의 callback을 설정합니다.
client.open("POST", "https://api-sandbox.ownerclan.com/v1/graphql", true);
client.setRequestHeader("Content-Type", "application/json");
client.setRequestHeader("Authorization", "Bearer YOUR_TOKEN");
client.onreadystatechange = function (aEvt) {
if (client.readyState === 4) {
if (client.status === 200) {
var response = JSON.parse(client.responseText);
if (response.errors) {
// API 서버 응답이 정상이지만 API 에러가 있다면 에러를 콘솔에 씁니다.
console.error(JSON.stringify(response.errors));
} else {
// API 서버 응답도 정상이고, API 에러도 없다면 반환된 데이터를 콘솔에 씁니다.
console.log(JSON.stringify(response.data));
}
} else {
// API 서버 응답이 정상이 아닌 경우 에러와 HTTP status code를 콘솔에 씁니다.
console.error(client.status, client.responseText);
}
}
}
/*
* XHR 요청을 전송합니다.
* operationName은 GraphQL 쿼리에서 `mutation ... {` 부분의 `...`과 같은 값이어야합니다.
* query는 위에서 문자열 변수로 만든 것을 사용하면 되고,
* variables 역시 위에서 object로 만든 것을 사용하면 됩니다.
*/
client.send(JSON.stringify({
operationName: "RequestOrderCancellation",
query: updateQuery,
variables: inputVariables
}));