Skip to content

Create Order

주문을 생성하는 요청을 보냅니다. 주문자의 정보, 주문 항목의 정보를 생성합니다. 이 정보는 브이리뷰 챗봇이 사용합니다.

모든 API 는 유효한 Authorization 헤더가 있어야 사용할 수 있습니다. 헤더를 작성하는 방법은 토큰 생성과 검증 문서를 참고하시기 바랍니다.

API 정보

[POST] /api/v1/orders/

요청

{
  "id": "string",
  "member_id": "string", 
  "recipient_name": "string",
  "recipient_cellphone": "string",
  "items": [
    {
      "id": "string",
      "product": {
        "id": "string",
        "name": "string",
        "image_url": "string"
      },
      "product_option": ["value1", "value2", ...]
    }
  ]
}
항목 설명 필수
id 사용자의 서비스에 저장된 고유한 id 입니다. (중복 불가) 필수
member_id 주문의 회원에 대한 ID입니다. 입력하지 않으면 비회원 주문 처리되며, 적립금이 적용되지 않습니다. 선택
recipient_name 주문자의 성명입니다. 브이리뷰의 챗봇 서비스를 이용하기 위해 꼭 필요한 정보입니다. 필수
recipient_cellphone 주문자의 전화번호입니다. 브이리뷰의 챗봇 서비스를 이용하기 위해 꼭 필요한 정보입니다. 이 번호의 카카오톡 계정으로 챗봇이 메시지를 보냅니다. 필수
items 주문 품목에 대한 정보입니다. 필수
items.id 사용자의 서비스에 저장된 고유한 id 입니다. (중복 불가) 필수
items.product 주문 품목의 상품 정보입니다. 브이리뷰의 챗봇 서비스를 이용하기 위해 꼭 필요한 정보입니다. 필수
items.product.id 주문 품목의 상품 정보입니다. 브이리뷰의 챗봇 서비스를 이용하기 위해 꼭 필요한 정보입니다. 상품 정보는 브이리뷰의 데이터베이스에 기록됩니다. (중복 불가) 필수
items.product.name 주문 품목의 상품 정보입니다. 브이리뷰의 챗봇 서비스를 이용하기 위해 꼭 필요한 정보입니다. 상품 정보는 브이리뷰의 데이터베이스에 기록되며 일주일마다 갱신됩니다. 필수
items.product.image_url 주문 품목의 상품 정보입니다. 브이리뷰의 챗봇 서비스를 이용하기 위해 꼭 필요한 정보입니다. 상품 정보는 브이리뷰의 데이터베이스에 기록되며 일주일마다 갱신됩니다. 필수
items.product_option 주문 품목의 상품 옵션입니다. 선택

요청 예시

curl --location --request POST 'https://URL/api/v1/orders/' \
--header 'Accept: application/json' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <TOKEN>' \
--data-raw '{
  "id": "string",
  "member_id": "string", 
  "recipient_name": "string",
  "recipient_cellphone": "string",
  "items": [
    {
      "id": "string",
      "product": {
        "id": "string",
        "name": "string",
        "image_url": "string"
      },
      "product_option": ["value1", "value2", ...]
    }
  ]
}'
import requests
import json

url = "https://URL/api/v1/orders/"

payload = json.dumps({
  "id": "string",
  "member_id": "string",
  "recipient_name": "string",
  "recipient_cellphone": "string",
  "items": [
    {
      "id": "string",
      "product": {
        "id": "string",
        "name": "string",
        "image_url": "string"
      },
      "product_option": ["value1", "value2", ...]
    }
  ]
})
headers = {
  'Accept': 'application/json',
  'Content-Type': 'application/json',
  'Authorization': 'Basic <TOKEN>'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
import java.io.*;
import okhttp3.*;
public class main {
  public static void main(String []args) throws IOException{
    OkHttpClient client = new OkHttpClient().newBuilder()
      .build();
    MediaType mediaType = MediaType.parse("application/json");
    RequestBody body = RequestBody.create(mediaType, "{\n  \"id\": \"string\",\n  \"member_id\": \"string\", \n  \"recipient_name\": \"string\",\n  \"recipient_cellphone\": \"string\",\n  \"items\": [\n    {\n      \"id\": \"string\",\n      \"product\": {\n        \"id\": \"string\",\n        \"name\": \"string\",\n        \"image_url\": \"string\"\n      },\n      \"product_option\": ["value1\", "value2\"]}\n  ]\n}");
    Request request = new Request.Builder()
      .url("https://URL/api/v1/orders/")
      .method("POST", body)
      .addHeader("Accept", "application/json")
      .addHeader("Content-Type", "application/json")
      .addHeader("Authorization", "Basic <TOKEN>")
      .build();
    Response response = client.newCall(request).execute();
    System.out.println(response.body().string());
  }
}
import com.mashape.unirest.http.*;
import java.io.*;
public class main {
  public static void main(String []args) throws Exception{
    Unirest.setTimeouts(0, 0);
    HttpResponse<String> response = Unirest.post("https://URL/api/v1/orders/")
      .header("Accept", "application/json")
      .header("Content-Type", "application/json")
      .header("Authorization", "Basic <TOKEN>")
      .body("{\n  \"id\": \"string\",\n  \"member_id\": \"string\", \n  \"recipient_name\": \"string\",\n  \"recipient_cellphone\": \"string\",\n  \"items\": [\n    {\n      \"id\": \"string\",\n      \"product\": {\n        \"id\": \"string\",\n        \"name\": \"string\",\n        \"image_url\": \"string\"\n      },\n      \"product_option\": ["value1\", "value2\"]}\n  ]\n}")
      .asString();

    System.out.println(response.getBody());
  }
}
package main

import (
  "fmt"
  "strings"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "https://URL/api/v1/orders/"
  method := "POST"

  payload := strings.NewReader(`{
  "id": "string",
  "member_id": "string", 
  "recipient_name": "string",
  "recipient_cellphone": "string",
  "items": [
    {
      "id": "string",
      "product": {
        "id": "string",
        "name": "string",
        "image_url": "string"
      },
      "product_option": ["value1", "value2", ...]
    }
  ]
}`)

  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Add("Accept", "application/json")
  req.Header.Add("Content-Type", "application/json")
  req.Header.Add("Authorization", "Basic <TOKEN>")

  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://URL/api/v1/orders/',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
  "id": "string",
  "member_id": "string", 
  "recipient_name": "string",
  "recipient_cellphone": "string",
  "items": [
    {
      "id": "string",
      "product": {
        "id": "string",
        "name": "string",
        "image_url": "string"
      },
      "product_option": ["value1", "value2", ...]
    }
  ]
}',
  CURLOPT_HTTPHEADER => array(
    'Accept: application/json',
    'Content-Type: application/json',
    'Authorization: Basic <TOKEN>'
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;
var axios = require('axios');
var data = JSON.stringify({
  "id": "string",
  "member_id": "string",
  "recipient_name": "string",
  "recipient_cellphone": "string",
  "items": [
    {
      "id": "string",
      "product": {
        "id": "string",
        "name": "string",
        "image_url": "string"
      },
      "product_option": ["value1", "value2", ...]
    }
  ]
});

var config = {
  method: 'post',
  url: 'https://URL/api/v1/orders/',
  headers: { 
    'Accept': 'application/json', 
    'Content-Type': 'application/json', 
    'Authorization': 'Basic <TOKEN>'
  },
  data : data
};

axios(config)
.then(function (response) {
  console.log(JSON.stringify(response.data));
})
.catch(function (error) {
  console.log(error);
});

✅ 응답 - 202 : 생성 요청 완료

이 API는 요청 양이 매우 많으므로 요청으로부터 데이터 반영 시간까지 수 분 소요될 수 있습니다.

{
  "message": "Successfully order creation request queued."
}

❌ 응답 - 401

{
  "detail": "<에러의 내용>"
}
401 에러의 내용은 아래와 같습니다.

detail 설명
Authorization header required. 인증 헤더가 설정되어있지 않은 경우입니다.
Authorization header was invalid. 인증 헤더가 올바르지 않은 형식으로 되어있는 경우입니다.
Access key id was invalid. 인증 헤더의 Access key id가 유효하지 않은 경우입니다.
Secret access key was invalid. 인증 헤더의 Secret access key가 유효하지 않은 경우입니다.

❌ 응답 - 422

요청 바디의 유효성 검증이 실패한 경우입니다.

{
  "detail": [
    {
      "loc": [
        "string"
      ],
      "msg": "string",
      "type": "string"
    }
  ]
}

주의사항

생성 API의 경우 요청량이 많아, 생성 반영까지 1분정도의 시간이 필요할 수 있습니다.