오너클랜 API 센터
로그인 | 회원가입

주문 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
}));