Back to top
Collapse All
Expand All

코코넛 클라이언트 연동 API 문서




서론

접속 방식 요약 설명

  • 코코넛 클라이언트와 연동은 제공된 DLL의 함수를 호출하여 한다.



구성도




파일설명

  • CoconutBridge.dll : 코코넛과의 연동을 위한 라이브러리

  • libzmq.dll : CoconutBridge.dll 의존성 라이브러리 (연동 DLL 에서는 ZMQ를 내부적으로 사용하고 있다.)




API설명

////////////////////////////////////////////////////////////////////////////////
// 코코넛 클라와 통신을 하기위한 초기화함수
// 써드파티 클라에서 통신을 시작하기전 반드시 호출해야 한다.
////////////////////////////////////////////////////////////////////////////////
COCONUTBRIDGE_API int COCONUT_Init(
    LPCSTR szInitOption,                // 초기화 요청전문 (써드파티 클라의 계정정보등 ...)
    LPSTR szResponse,                   // 초기화 응답전문
    int nResponseLength,                // 초기화 응답전문의 길이
    LP_COCONUT_OnPush pFuncOnPush,      // 콜백수신함수 포인터
    LPCSTR szInitType,                  // 초기화타입 ex) "pos", "posDaemon", "crm"
    bool bCanInstallCoconut);           // 코코넛설치를 진행할지 여부
////////////////////////////////////////////////////////////////////////////////
// 써드파티 클라에서 코코넛 클라로 요청하는 함수
////////////////////////////////////////////////////////////////////////////////
COCONUTBRIDGE_API int COCONUT_Request(
    LPCSTR szRequest,               // 요청전문
    LPSTR szResponse,               // 응답전문
    int nResponseLength,            // 응답전문의 길이
    int nTimeout);                  // 타임아웃
////////////////////////////////////////////////////////////////////////////////
// 써드파티 클라에서 코코넛 클라의 전문을 콜백 수신받는 함수
////////////////////////////////////////////////////////////////////////////////
typedef int (*LP_COCONUT_OnPush)(
    LPCSTR szRequest,               // 콜백 수신전문
    LPSTR szResponse,               // 콜백 응답전문
    int nResponseLength);           // 콜백 응답전문의 길이



init

시퀀스

GET/

POS -> coconut client : initRequest
coconut client -> POS : initResponse



Example URI

GET /

스키마 & 샘플

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "initRequest",
  "data": {
    "vendor_id": "1000",
    "pos_type": 2,
    "franchise_code": "10001",
    "franchise_name": "이디야커피",
    "van_code": "10",
    "store_code": "DS00001",
    "pos_no": "001",
    "business_no": "0123456789",
    "business_name": "이디야커피 가산점",
    "ceo": "이순신",
    "uptae": "간이음식점",
    "jongmok": "커피전문점",
    "zip_no": "08521",
    "store_addr": "서울시 금천구 가산동",
    "store_detail_addr": "60-25 에이스하이엔드6차 1층 이디야커피",
    "store_tel": "0212345678",
    "store_ceo_mobile": "01012345678",
    "store_fax": "0212341234",
    "store_email": "ediya-okpos@nice.co.kr",
    "tariff": 0.1,
    "delivery_yn": "Y",
    "reservation_yn": "Y",
    "packing_yn": "Y",
    "wsize_info": 3,
    "widget_position": {
      "X": 100,
      "Y": 100
    },
    "dp_coupon_goods_code": "00000001",
    "dp_interface_type": "tablet"
  }
}
Schema
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "initResponse",
    "data": {
      "last_goods_update_time": "20161118122530"
    }
  }
}
Schema

goodsListUpload

시퀀스

GET/

POS -> coconut client : goodsListUploadRequest
coconut client-> POS : goodsListUploadResponse



Example URI

GET /

스키마 & 샘플

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "goodsListUploadRequest",
  "data": [
    {
      "goods_code": "00000001",
      "goods_name": "아메리카노",
      "goods_division": 0,
      "barcode_no": "8812345678901",
      "tax_division": 0,
      "surtax_division": 0,
      "sale_price": 2000,
      "point_yn": "Y",
      "use_yn": "Y"
    }
  ]
}
Schema
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "goodsListUploadResponse"
  }
}
Schema

saleUpload

시퀀스

GET/

POS -> coconut client : saleUploadRequest
coconut client -> crm : saleUploadRequest
alt (sync)처리 완료 데이터 POS 전송
    crm -> crm : 멤버십 처리
    crm -> coconut client : saleUploadResponse
    coconut client -> POS : saleUploadResponse
    POS -> coconut client : dpCustInfoGetRequest
    coconut client  -> crm  : dpCustInfoGetRequest
    crm -> coconut client : dpCustInfoGetResponse
    coconut client -> POS : dpCustInfoGetResponse
    POS -> POS : crm 데이터 저장, 영수증 출력  
else (async)응답 후 비동기 처리
    crm -> coconut client : saleUploadResponse
    coconut client -> POS : saleUploadResponse
    POS -> POS : 영수증 출력 
    note right of crm
       멤버십 비동기 처리
    end note



Example URI

GET /

스키마 & 샘플

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "saleUploadRequest",
  "data": {
    "sales_date": "20161118",
    "sales_no": 1234,
    "total_amt": 50000,
    "card_amt": 20000,
    "cash_amt": 30000,
    "cashreceipt_yn": "Y",
    "e_receipt_yn": "Y",
    "e_receipt_id": "01012345678",
    "cust_id": "01012345678",
    "dctotal_amt": 5000,
    "amt_dc": 1000,
    "coupon_dc": 1000,
    "goods_dc": 1000,
    "price_dc": 1000,
    "event_dc": 1000,
    "membership_point": 1000,
    "partner_point": 1000,
    "surtax": 1000,
    "netsale_amt": 50000,
    "service_amt": 50000,
    "gift_amt": 10000,
    "pays_amt": 10000,
    "time_stamp": "20161118122530",
    "coco_dc_trn_id": "2016111800001",
    "smart_order_no": "2016111812345",
    "sales_type": "S",
    "org_time_stamp": "20161117122530",
    "org_sales_no": "1233",
    "org_sales_date": "20161117",
    "saleDetails": [
      {
        "sales_date": "20161118",
        "sales_no": 1234,
        "sales_seq": 1,
        "goods_code": "00000001",
        "goods_name": "아메리카노",
        "barcode": "8812345678901",
        "sale_price": 5000,
        "qty": 1,
        "sales_amt": 5000,
        "tax_division": 1,
        "surtax_division": 1,
        "dctotal_amt": 1000,
        "amt_dc": 100,
        "coupon_dc": 100,
        "goods_dc": 100,
        "price_dc": 100,
        "event_dc": 100,
        "membership_point": 100,
        "partner_point": 100,
        "surtax": 1000,
        "netsale_amt": 5000
      }
    ],
    "giftSales": [
      {
        "sales_date": "20161118",
        "sales_no": 1234,
        "sales_seq": 1,
        "gift_seq": 1,
        "gift_no": "1234567809871234",
        "gift_type": 1,
        "approval_date": "20161118122530",
        "approval_division": 1,
        "approval_no": "1234098712",
        "gift_amt": 5000,
        "org_approval_no": "1234098711"
      }
    ],
    "cardSales": [
      {
        "sales_date": "20161118",
        "sales_no": 1234,
        "sales_seq": 1,
        "card_seq": 1,
        "bin_no": "123456",
        "purchase_name": "KB국민카드",
        "issue_name": "KB국민카드",
        "approval_division": 1,
        "approval_date": "20161118122530",
        "approval_no": "12340987",
        "approval_amt": 5000,
        "org_approval_no": "12340986"
      }
    ],
    "cashReceipt": [
      {
        "sales_date": "20161118",
        "sales_no": 1234,
        "sales_seq": 1,
        "cash_seq": 1,
        "business_division": 0,
        "approval_date": "20161118122530",
        "approval_no": "12340987",
        "approval_amt": 5000,
        "org_approval_no": "12340986"
      }
    ],
    "paySales": [
      {
        "sales_date": "20161118",
        "sales_no": 1234,
        "sales_seq": 1,
        "pay_seq": 1,
        "barcode_no": "1234098712340987",
        "qr_code": "https://os.alipayobjects.com/rmsportal/qLlKVsZuTordMlU.png",
        "payments_name": "알리페이",
        "approval_date": "20161118122530",
        "approval_division": 1,
        "approval_no": "12340987",
        "approval_amt": 5000,
        "org_approval_no": "12340986"
      }
    ]
  }
}
Schema
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "saleUploadResponse",
    "data": {
      "crm_acc_type": "point",
      "cust_no": "1234567890",
      "crm_acc_stamp_count": 3,
      "crm_acc_point": 10,
      "crm_total_stamp_count": 9,
      "crm_total_point": 1000
    }
  }
}
Schema

smartOrderReceived

시퀀스

GET/

coconut client -> coconut client : 신규 스마트오더 팝업 알림, 수락
POS -> coconut client : smartOrderReceivedRequest(신규 스마트오더 내역 요청)
coconut client -> POS : smartOrderReceivedResponse
POS -> POS : 스마트오더 주문처리\n매출발생



Example URI

GET /

스키마 & 샘플

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "smartOrderReceivedRequest"
}
Schema
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "smartOrderReceivedResponse",
    "data": {
      "action_kind": 1,
      "order_no": "2016111812345",
      "order_vendor_name": "시럽오더",
      "order_datetime": "20160101120000",
      "custmer_name": "홍길동",
      "custmer_phone": "01011112222",
      "custmer_address": "서울시 마포구 마포대로 217 크레디트센터 6층",
      "total_amt": 20000,
      "pay_type": 1,
      "paid_type": 1,
      "paid_amt": 20000,
      "store_pick_yn": "Y",
      "order_message": "맛있게 해주세요~",
      "order_list": [
        {
          "goods_code": "00000001",
          "goods_name": "아메리카노",
          "goods_price": 5000,
          "goods_qty": 2,
          "goods_option": "물 조금만"
        }
      ]
    }
  }
}
Schema

posCommon

스키마 & 샘플

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "posCommonRequest",
  "data": {
    "pay_amt": 10000,
    "taxable_amt": 10000,
    "surtax": 909,
    "tax_free_amt": 0,
    "auth_type": "S",
    "pin_no": "1234",
    "auth_sms": "S",
    "cust_no": "1234567890",
    "total_amt": 15000,
    "goods_list": [
      {
        "goods_code": "00000001",
        "goods_name": "아메리카노",
        "goods_price": 5000,
        "surtax_fg": 1,
        "goods_qty": 1
      }
    ],
    "payment_list": [
      {
        "service_type": 1,
        "giftcard_kind": 1,
        "payment_kind": 1,
        "serial_no": "281234000000000009",
        "approval_no": "12345678",
        "approval_datetime": "20161118122530",
        "approval_amt": 2000,
        "goods_code": 12345678,
        "goods_name": "아메리카노",
        "etc_desc": "맛있게 해 주세요~"
      }
    ],
    "discount_list": [
      {
        "approval_no": "1234567890",
        "discount_type": 2,
        "discount_amt": 0,
        "coupon_type": 2,
        "goods_code": "00000001",
        "goods_name": "아메리카노",
        "goods_price": 5000
      }
    ]
  }
}
Schema
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "posCommomResponse",
    "data": {
      "cust_no": "12345678",
      "need_pin": "S",
      "reset_cust_phone": "R",
      "payment_list": [
        {
          "service_kind": 1,
          "payment_kind": 1,
          "serial_no": "280000000000001234",
          "approval_no": "12345678",
          "approval_datetime": "20161118122530",
          "approval_amt": 2000,
          "goods_code": "00000002",
          "goods_name": "아메리카노",
          "etc_desc": "정상처리 되었습니다. 감사합니다."
        }
      ],
      "discount_list": [
        {
          "approval_no": "567891234",
          "discount_type": 2,
          "discount_amt": 0,
          "coupon_type": 2,
          "goods_code": "00000002"
        }
      ]
    }
  }
}
Schema

샘플1 : 쿠스포 사용 요청, 쿠스포 사용 응답

GET/

Example URI

GET /
Request
HideShow
Body
//posCommonRequest_auth_type_sms.json
{
  "command": "posCommonRequest",
  "data": {
    "pay_amt": 10000,
    "taxable_amt": 10000,
    "surtax": 909,
    "tax_free_amt": 0,
    "auth_type":  "S",
    "pin_no": "1234",
    "goods_list": [
      {
        "goods_code": "00000001",
        "goods_name": "아메리카노",
        "goods_price": 5000,
        "surtax_fg": 1,
        "goods_qty": 1
      },
      {
        "goods_code": "00000002",
        "goods_name": "카페라테",
        "goods_price": 5000,
        "surtax_fg": 1,
        "goods_qty": 1
      }
    ],
    "payment_list": [
      {
        "service_type": 1,
        "payment_kind": 1,
        "serial_no": "281234000000000009",
        "approval_no": "12345678",
        "approval_datetime": "20161118122530",
        "approval_amt": 2000
      },
      {
        "service_type": 2,
        "giftcard_kind": 1,
        "serial_no": "123400000000000001",
        "approval_no": "87654321",
        "approval_datetime": "20161118122600",
        "approval_amt": 2500,
        "goods_code": "00000001"
      }
    ],
    "discount_list": [
      {
        "approval_no": "1234567890",
        "discount_type": 2,
        "discount_amt": 0.0,
        "coupon_type": 2,
        "goods_code": "00000002",
        "goods_name": "카페라테",
        "goods_price": 5000
      },
      {
        "approval_no": "1234567891",
        "discount_type": 1,
        "discount_amt": 5000,
        "coupon_type": 2,
        "goods_code": "00000002",
        "goods_name": "카페라테",
        "goods_price": 5000
      }
    ]
  }
}
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "posCommomResponse",
    "data": {
      "payment_list": [
        {
          "service_kind": 1,
          "payment_kind": 1,
          "serial_no": "280000000000001234",
          "approval_no": "12345678",
          "approval_datetime": "20161118122530",
          "approval_amt": 2000,
          "etc_desc": "정상처리 되었습니다. 감사합니다."
        },
        {
          "service_kind": 2,
          "giftcard_kind": 2,
          "serial_no": "1234123412341234",
          "approval_no": "87654321",
          "approval_datetime": "20161118122600",
          "approval_amt": 2500,
          "etc_desc": "정상처리 되었습니다. 감사합니다."
        }
      ],
      "discount_list": [
        {
          "approval_no": "",
          "discount_type": 2,
          "discount_amt": 0.0,
          "coupon_type": 2,
          "goods_code": "00000002",
        },
        {
          "approval_no": "",
          "discount_type": 1,
          "discount_amt": 5000,
          "coupon_type": 2,
          "goods_code": "00000002",
        }
      ]
    }
  }
}

<br>
<br>
<br>

샘플2 : SMS인증 변경 요청, SMS인증 입력 응답

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "posCommonRequest",
  "data": {
    "auth_sms": "S"
  }
}
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "posCommomResponse",
    "data": {
      "need_pin" : "S"
    }
  }
}

<br>
<br>
<br>

샘플3 : 쿠스포 사용 요청, 고객 변경 재조회/클리어 응답

GET/

Example URI

GET /
Request
HideShow
Body
//posCommonRequest_auth_type_sms.json
{
  "command": "posCommonRequest",
  "data": {
    "pay_amt": 10000,
    "taxable_amt": 10000,
    "surtax": 909,
    "tax_free_amt": 0,
    "auth_type":  "S",
    "pin_no": "1234",
    "goods_list": [
      {
        "goods_code": "00000001",
        "goods_name": "아메리카노",
        "goods_price": 5000,
        "surtax_fg": 1,
        "goods_qty": 1
      },
      {
        "goods_code": "00000002",
        "goods_name": "카페라테",
        "goods_price": 5000,
        "surtax_fg": 1,
        "goods_qty": 1
      }
    ],
    "payment_list": [
      {
        "service_type": 1,
        "payment_kind": 1,
        "serial_no": "281234000000000009",
        "approval_no": "12345678",
        "approval_datetime": "20161118122530",
        "approval_amt": 2000
      },
      {
        "service_type": 2,
        "giftcard_kind": 1,
        "serial_no": "123400000000000001",
        "approval_no": "87654321",
        "approval_datetime": "20161118122600",
        "approval_amt": 2500,
        "goods_code": "00000001"
      }
    ],
    "discount_list": [
      {
        "approval_no": "1234567890",
        "discount_type": 2,
        "discount_amt": 0.0,
        "coupon_type": 2,
        "goods_code": "00000002",
        "goods_name": "카페라테",
        "goods_price": 5000
      },
      {
        "approval_no": "1234567891",
        "discount_type": 1,
        "discount_amt": 5000,
        "coupon_type": 2,
        "goods_code": "00000002",
        "goods_name": "카페라테",
        "goods_price": 5000
      }
    ]
  }
}
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "posCommomResponse",
    "data": {
      "reset_cust_phone" : "R"
    }
  }
}

<br>
<br>
<br>

샘플4 : 쿠스포 사용 요청, 인증필요 응답

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "posCommonRequest",
  "data": {
    "pay_amt": 10000,
    "taxable_amt": 10000,
    "surtax": 909,
    "tax_free_amt": 0,
    "goods_list": [
      {
        "goods_code": "00000001",
        "goods_name": "아메리카노",
        "goods_price": 5000,
        "surtax_fg": 1,
        "goods_qty": 1,
      },
      {
        "goods_code": "00000002",
        "goods_name": "카페라테",
        "goods_price": 5000,
        "surtax_fg": 1,
        "goods_qty": 1,
      }
    ],
    "payment_list": [
      {
        "service_type": 1,
        "payment_kind": 1,
        "serial_no" : "281234000000000009",
        "approval_no": "12345678",
        "approval_datetime": "20161118122530",
        "approval_amt": 2000
      },
      {
        "service_type": 2,
        "giftcard_kind": 1,
        "serial_no" : "123400000000000001",
        "approval_no": "87654321",
        "approval_datetime": "20161118122600",
        "approval_amt": 2500,
        "goods_code" : "00000001"
      }
    ],
    "discount_list": [
      {
        "approval_no": "1234567890",
        "discount_type": 2,
        "discount_amt": 0.0,
        "coupon_type": 2,
        "goods_code": "00000002",
        "goods_name": "카페라테",
        "goods_price": 5000
      },
      {
        "approval_no": "1234567891",
        "discount_type": 1,
        "discount_amt": 5000,
        "coupon_type": 2,
        "goods_code": "00000002",
        "goods_name": "카페라테",
        "goods_price": 5000
      }
    ]
  }
}
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "posCommomResponse",
    "data": {
      "need_pin" : "S"
    }
  }
}

<br>
<br>
<br>

시퀀스1 : okpos 듀얼앱 연동없음, 단골플러스 태블릿 사용

GET/

POS -> coconut client : posCommonRequest\n(결제+상품정보)
opt 
    note right of coconut client 
        쿠스포 or PAY 선택
    end note
    coconut client -> coconut client :
    alt PAY
        coconut client -> coconut client : PAY 선택\n결제정보 입력
        coconut client -> OOPAY 사업자 : 승인요청
        OOPAY 사업자 -> coconut client : 승인완료
    else 쿠스포
        coconut client -> 멤버십 client : posCommonRequest(bypass)
        멤버십 client -> 멤버십 client : 상품별 할인선택 팝업 띄움(캐셔)
        멤버십 client -> coconut client : posCommonRsponse(상품별 멤버십 할인내역)
    else 전자상품권/기프티콘
        coconut client -> 전자상품권 client : 승인요청
        전자상품권 client -> coconut client : 승인완료
    end
end
coconut client -> POS : posCommonResponse\n(결제승인/할인내역 정보)
POS -> POS : 결제/할인 적용



Example URI

GET /

시퀀스2 : okpos 듀얼앱연동, 고객미조회 상태

GET/

note over dualapp, okpos, ccn, dp : okpos 듀얼앱연동, 고객미조회 상태

okpos -> okpos : 단플버튼(고객미조회 상태) 클릭 okpos -> dualapp : 단플 전화번호 입력요청 dualapp -> dualapp : 손님이 전화번호11자리 입력 dualapp -> okpos : 전화번호11자리 응답 okpos -> ccn : 고객정보 요청 dpCustInfoGetRequest [PC-REQUEST 1] ccn -> dp : 고객정보 요청 dpCustInfoGetRequest [CD-REQUEST 1] dp -> dp : 회원정보조회 dp -> ccn : 고객정보 응답 dpCustInfoSetResponse [CD-RESPONSE 1]\n(잔여포인트, 적립률) ccn -> okpos : 고객정보 응답 dpCustInfoSetResponse [PC-RESPONSE 1]\n(잔여포인트, 적립률) okpos -> dualapp : 회원정보 출력 opt 쿠스포 okpos -> ccn : 쿠스포사용 요청 posCommonRequset [PC-REQUEST 2] ccn -> dp : 쿠스포사용 요청 posCommonRequset [CD-REQUEST 2] dp -> dp : 쿠스포 alt 쿠스포 사용 note over dualapp, okpos, ccn, dp : 인증필요판단, 쿠스포사용 else 쿠스포 미사용 dp -> ccn : 실행취소 응답 [CD-RESPONSE 2] ccn -> okpos : 실행취소 응답 [PC-RESPONSE 2] end end




Example URI

GET /

시퀀스3 : okpos 듀얼앱연동, 고객 조회된 상태

GET/

note over dualapp, okpos, ccn, dp : okpos 듀얼앱연동, 고객 조회된 상태

okpos -> okpos : 단플버튼(고객 조회된 상태) 클릭 okpos -> ccn : 쿠스포 사용요청 posCommonRequest [PC-REQUEST 4] ccn -> dp : 쿠스포 사용요청 posCommonRequest [CD-REQUEST 4] dp -> dp : note right of dp : 쿠스포사용 or 고객 변경 선택 alt 쿠스포 사용 note over dualapp, okpos, ccn, dp : 인증필요판단, 쿠스포 사용 else 고객 전화번호 번경 dp -> dp : 고객 초기화 dp -> ccn : 전화번호 재입력 요청 응답 posCommonResponse [CD-RESPONSE 4] ccn -> okpos : 전화번호 재입력 요청 응답 posCommonResponse [PC-RESPONSE 4] okpos -> okpos : 고객초기화 okpos -> dualapp : 전화번호 입력 요청 dualapp -> dualapp : 손님이 전화번호11자리 입력 dualapp -> okpos : 전화번호11자리 응답 okpos -> ccn : dpCustInfoGetRequest 요청 [PC-REQUSET 6] ccn -> dp : dpCustInfoGetRequest 요청 [CD-REQUEST 7] dp -> dp : 회원정보조회 dp -> ccn : dpCustInfoSetResponse 응답 [CD-RESPONSE 6]\n(잔여포인트, 적립률) ccn -> okpos : dpCustInfoSetResponse 응답 [PC-RESPONSE 6]\n(잔여포인트, 적립률) okpos -> dualapp : 회원정보 출력 opt 쿠스포 okpos -> ccn : 쿠스포사용 요청 posCommonRequest [PC-REQUEST 7] ccn -> dp : 쿠스포사용 요청 posCommonRequest [CD-REQUEST 7] dp -> dp : 쿠스포 alt 쿠스포 사용 note over dualapp, okpos, ccn, dp : 인증필요판단, 쿠스포사용 else 쿠스포 미사용 dp -> ccn : 실행취소 응답 [CD-RESPONSE 7] ccn -> okpos : 실행취소 응답 [PC-RESPONSE 7] end end end




Example URI

GET /

시퀀스 2, 3 공통모듈 : 인증필요시 ~ 쿠스포사용

GET/

note over dualapp, okpos, ccn, dp : 인증필요시 ~ 쿠스포사용

alt 인증 필요시 dp -> ccn : 인증번호 입력 필요 응답 posCommonResponse [CD-RESPONSE 7]\n(SMS or password) ccn -> okpos : 인증번호 입력필요 응답 posCommonResponse [PC-RESPONSE 7]\n(SMS or password) loop okpos -> dualapp : 인증번호 입력 요청\n(SMS or password) dualapp -> dualapp : 인증번호 입력\n(SMS or password) alt SMS 인증버튼 클릭 dualapp -> okpos : SMS 인증변경 요청 okpos -> ccn : SMS 인증변경 요청 posCommonRequest [PC-REQUEST 9] ccn -> dp : SMS 인증변경 요청 posCommonRequest [CD-REQUEST 9] dp -> dp : SMS 발송 dp -> ccn : 인증번호 입력 필요 응답 posCommonResponse [CD-RESPONSE 9] ccn -> okpos : 인증번호 입력 필요 응답 posCommonResponse [PC-RESPONSE 9] note left of okpos : go to loop else SMS인증/비밀번호 입력 dualapp -> okpos : 인증번호 응답 okpos -> ccn : 인증번호 전송 posCommonRequest [PC-REQUEST 8] ccn -> dp : 인증번호 전송 posCommonRequest [CD-REQUEST 8] alt 인증성공 dp -> ccn : 쿠스포사용 응답 posCommonResponse [CD-RESPONSE 8] ccn -> okpos : 쿠스포사용 응답 posCommonResponse [PC-RESPONSE 8] okpos -> dualapp : 쿠스포사용 결과 출력 okpos -> okpos : 단플 버튼 로그인 상태로 변경 note left of okpos : break loop else 인증실패 dp -> ccn : 인증번호 재입력 요청 응답 posCommonResponse [CD-RESPONSE 8] ccn -> okpos : 인증번호 재입력 요청 응답 posCommonResponse [PC-RESPONSE 8] note left of okpos : go to loop end end else 인증 불필요시 dp -> ccn : 쿠스포사용 응답 posCommonResponse [CD-RESPONSE 7] ccn -> okpos : 쿠스포사용 응답 posCommonResponse [PC-RESPONSE 7] okpos -> dualapp : 쿠스포사용 결과 출력 okpos -> okpos : 단플 버튼 로그인 상태로 변경 end




Example URI

GET /

posCommonCancel

시퀀스

GET/

POS -> coconut client : posCommonCancelRequest\n(결제정보/쿠스포 정보)
alt PAY/상품권
    note right of coconut client 
        PAY /전자상품권(기프티콘)취소처리
    end note
    coconut client  -> coconut client  : opt. 필요시 취소 UI 팝업
    alt OOPAY
        coconut client -> OOPAY 사업자 : 승인취소 요청
        OOPAY 사업자 -> coconut client : 승인취소 완료
    else 전자상품권
        coconut client -> 전자상품권 사업자 : 승인취소 요청
        전자상품권 사업자 -> coconut client : 승인취소 완료
    else .......
    else .......    
    end
else 쿠스포(단골플러스)
    note right of coconut client 
        쿠스포 취소처리
    end note
    coconut client -> dp : posCommonCancelRequest\n(쿠스포 취소 요청)
    dp -> coconut client : posCommonCancelResponse\n(쿠스포 취소 응답)
end
coconut client -> POS : posCommonCancelResponse\n(취소승인 정보)
POS -> POS : 취소 적용



Example URI

GET /

스키마 & 샘플

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "posCommonCancelRequest",
  "data": {
    "pay_all_cancel": "Y",
    "discount_all_cancel": "Y",
    "payment_list": [
      {
        "service_type": 1,
        "giftcard_kind": 1,
        "payment_kind": 1,
        "serial_no": "12345678",
        "approval_no": "01234",
        "approval_datetime": "20170301123030",
        "approval_amt": "3000",
        "goods_code": "1234",
        "goods_name": "아메리카노",
        "etc_desc": "맛있게"
      }
    ],
    "discount_list": [
      {
        "approval_no": "01234",
        "discount_type": 1,
        "discount_amt": 1000,
        "coupon_type": 1,
        "goods_code": "1234"
      }
    ]
  }
}
Schema
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "posCommonCancelResponse",
    "data": {
      "pay_all_cancel_return": "A",
      "discount_all_cancel_return": "A",
      "payment_list": [
        {
          "service_type": 1,
          "giftcard_kind": 1,
          "payment_kind": 1,
          "serial_no": "12345678",
          "approval_no": "01234",
          "approval_datetime": "20170301123030",
          "approval_amt": "3000",
          "goods_code": "1234",
          "goods_name": "아메리카노",
          "etc_desc": "맛있게"
        }
      ],
      "discount_list": [
        {
          "approval_no": "01234",
          "discount_type": 1,
          "discount_amt": 1000,
          "coupon_type": 1,
          "goods_code": "1234"
        }
      ]
    }
  }
}
Schema

샘플1 : 전체 취소 요청 - 전체 취소 성공 응답

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "posCommonCancelRequest",
  "data": {
    "discount_all_cancel": "Y"
  }
}
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "posCommonCancelResponse",
    "data": {
      "discount_all_cancel_return": "A"
    }
  }
}

<br>
<br>
<br>

샘플2 : 전체 취소 요청, 모두 실패 응답

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "posCommonCancelRequest",
  "data": {
    "discount_all_cancel": "Y"
  }
}
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "posCommonCancelResponse",
    "data": {
      "discount_all_cancel_return": "F"
    }
  }
}

<br>
<br>
<br>

샘플3 : 전체 취소 요청 - 일부 취소 성공 응답

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "posCommonCancelRequest",
  "data": {
    "discount_all_cancel": "Y"
  }
}
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "posCommonCancelResponse",
    "data": {
      "discount_all_cancel_return": "P",
      "discount_list": [
        {
          "return_code": "S",
          "approval_no": "1234567890",
          "discount_type": 2,
          "discount_amt": 0.0,
          "coupon_type": 2,
          "goods_code": "00000002",
          "goods_name": "카페라테",
          "goods_price": 5000
        },
        {
          "return_code": "S",
          "approval_no": "1234567891",
          "discount_type": 1,
          "discount_amt": 5000,
          "coupon_type": 2,
          "goods_code": "00000002",
          "goods_name": "카페라테",
          "goods_price": 5000
        }
      ]
    }
  }
}

<br>
<br>
<br>

샘플4 : 일부 취소 요청, 일부 취소 성공 응답

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "posCommonCancelRequest",
  "data": {
    "payment_list": [
      {
        "service_type": 1,
        "payment_kind": 1,
        "serial_no": "280000000000001234",
        "approval_no": "12345678",
        "approval_datetime": "20161118122530",
        "approval_amt": 2000
      },
      {
        "service_type": 2,
        "giftcard_kind": 2,
        "serial_no": "1234123412340001",
        "approval_no": "87654321",
        "approval_datetime": "20161118122600",
        "approval_amt": 2500
      }
    ],
    "discount_list": [
      {
        "approval_no": "1234567890",
        "discount_type": 2,
        "discount_amt": 0,
        "coupon_type": 2,
        "goods_code": "00000002",
        "goods_name": "카페라테",
        "goods_price": 5000
      },
      {
        "approval_no": "1234567891",
        "discount_type": 1,
        "discount_amt": 5000,
        "coupon_type": 2,
        "goods_code": "00000002",
        "goods_name": "카페라테",
        "goods_price": 5000
      }
    ]
  }
}
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "posCommonCancelResponse",
    "data": {
      "payment_list": [
        {
          "return_code": "S",
          "service_type": 1,
          "payment_kind": 1,
          "serial_no": "280000000000001234",
          "approval_no": "12345678",
          "approval_datetime": "20161118122530",
          "approval_amt": 2000
        },
        {
          "return_code": "S",
          "service_type": 2,
          "giftcard_kind": 2,
          "serial_no": "1234123412340001",
          "approval_no": "87654321",
          "approval_datetime": "20161118122600",
          "approval_amt": 2500
        }
      ],
      "discount_list": [
        {
          "return_code": "S",
          "approval_no": "1234567890",
          "discount_type": 2,
          "discount_amt": 0.0,
          "coupon_type": 2,
          "goods_code": "00000002",
          "goods_name": "카페라테",
          "goods_price": 5000
        },
        {
          "return_code": "S",
          "approval_no": "1234567891",
          "discount_type": 1,
          "discount_amt": 5000,
          "coupon_type": 2,
          "goods_code": "00000002",
          "goods_name": "카페라테",
          "goods_price": 5000
        }
      ]
    }
  }
}

<br>
<br>
<br>

dpCustInfoGet

스키마 & 샘플

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "dpCustInfoGetRequest",
  "data": {
    "phone_no": "01000001234"
  }
}
Schema
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "dpCustInfoSetResponse",
    "data": {
      "dp_store_type": "Point",
      "cust_no": "0000000001",
      "cust_name": "홍길동",
      "phone_no": "01000001234",
      "usable_point": 10000,
      "cash_rate": 3,
      "credit_rate": 1
    }
  }
}
Schema

initSimple

시퀀스

GET/

POS demon process -> coconut client : initSimpleRequest
coconut client -> POS demon process : initSimpleResponse



Example URI

GET /

스키마 & 샘플

GET/

Example URI

GET /
Request
HideShow
Body
{
  "command": "initSimpleRequest"
}
Schema
Response  200
HideShow
Body
{
  "res_code": "RQ001",
  "res_desc": "성공",
  "res_time": "20161118122530",
  "res_type": "R0",
  "res_content": {
    "command": "initSimpleResponse"
  }
}
Schema

시퀀스 예제

시퀀스 : CRM + CRM-TAB 사용

note over POS, COCONUT, CRM, CRM-TAB : 코코넛+단플태블릿 시나리오

POS->POS : 상품입력 CRM-TAB->CRM-TAB : (옵션)전번으로 단플로그인 POS->POS : 결제 POS->COCONUT : saleUploadRequest + sale_type=S + total_amt + saleDetails COCONUT->CRM : saleUploadRequest + sale_type=S + total_amt + saleDetails

opt 동기적립 모드 opt 로그아웃 상태 CRM->CRM : 회원로그인후 적립하시겠습니까? 문의 팝업 띄움 opt 확인 클릭 CRM-TAB->CRM-TAB : 전번으로 단플로그인 else 취소 클릭 CRM->COCONUT : saleUploadResponse + RQ001 COCONUT->POS : saleUploadResponse + RQ001 end end

opt 로그인 상태 opt 스탬프가맹점 모드 CRM->CRM : 적립할 스탬프갯수 입력 팝업 띄우기 end

CRM->CRM : 서버 트랜젝션
    CRM->COCONUT : saleUploadResponse + RQ001 + crm_xxx...
    COCONUT->POS : saleUploadResponse + RQ001 + crm_xxx...        
    POS->COCONUT : dpCustInfoGetRequest + phone_no=None
    COCONUT->CRM : dpCustInfoGetRequest + phone_no=None
    CRM->COCONUT : dpCustInfoGetResponse + data=현재 로그인된 회원정보
    COCONUT->POS : dpCustInfoGetResponse + data=현재 로그인된 회원정보
    POS->POS : 영수증출력 + cust_no
else 로그아웃 상태
    POS->POS : 영수증출력
end

else 비동기적립 모드 CRM->COCONUT : saleUploadResponse + RQ001 COCONUT->POS : saleUploadResponse + RQ001 POS->POS : 영수증출력 opt 로그인 상태 CRM->CRM : 서버 트랜젝션 else 로그아웃 상태 CRM-TAB->CRM-TAB : 전번으로 단플로그인 CRM->CRM : 서버 트랜젝션 end end




부록

POS main

char szContent[COCONUT_BRIDGE_BUFFER_SIZE_NORMAL] = { 0, };
_ReadFile(L"initRequest.json", szContent, COCONUT_BRIDGE_BUFFER_SIZE_NORMAL);
_WriteLog(CStringA("REQ : ") + szContent);
char szResponse[COCONUT_BRIDGE_BUFFER_SIZE_NORMAL] = { 0, };
m_pFunc_COCONUT_INIT(szContent, szResponse, COCONUT_BRIDGE_BUFFER_SIZE_NORMAL, _Coconut_OnPush, "pos", false);
_WriteLog(CStringA("RES : ") + szResponse);



POS deamon

char szContent[COCONUT_BRIDGE_BUFFER_SIZE_NORMAL] = { 0, };
_ReadFile(L"initRequestSimple.json", szContent, COCONUT_BRIDGE_BUFFER_SIZE_NORMAL);
_WriteLog(CStringA("REQ : ") + szContent);
char szResponse[COCONUT_BRIDGE_BUFFER_SIZE_NORMAL] = { 0, };
m_pFunc_COCONUT_INIT(szContent, szResponse, COCONUT_BRIDGE_BUFFER_SIZE_NORMAL, _Coconut_OnPush, "posDaemon", false);
_WriteLog(CStringA("RES : ") + szResponse);



CRM 서비스

char szContent[COCONUT_BRIDGE_BUFFER_SIZE_NORMAL] = { 0, };
_ReadFile(L"initRequestSimple.json", szContent, COCONUT_BRIDGE_BUFFER_SIZE_NORMAL);
_WriteLog(CStringA("REQ : ") + szContent);
char szResponse[COCONUT_BRIDGE_BUFFER_SIZE_NORMAL] = { 0, };
m_pFunc_COCONUT_INIT(szContent, szResponse, COCONUT_BRIDGE_BUFFER_SIZE_NORMAL, _Coconut_OnPush, "crm", false);
_WriteLog(CStringA("RES : ") + szResponse);



init 응답의 실패처리

  • init 응답은 코코넛의 상태에 따라 실패메시지를 리턴한다.

  • 아래에 실패원인, 응답샘플, 처리방법을 기술한다.




코코넛 설치 안된경우

  • 원인

    • 코코넛이 설치안된 포스에서 init을 호출하면 가장 먼저 리턴되는 실패응답
  • 처리방법

    • 코코넛이 설치안된 상황이면 포스는 즉시 이 응답을 받게되며, 이후 CoconutBridge.dll은 백그라운드에서 코코넛설치프로그램을 다운로드 받아 설치를 silent모드로 진행하게 된다
    • 첫 설치는 포스머신의 상태와 네트워크 상태에 따라 3~15분 정도 걸리게 되므로 그 이후에 다시 init을 호출하도록 처리해야 한다.
{
  "res_code": "RQ002",
  "res_desc": "코코넛 설치필요, 코코넛 설치중 ...",
  "res_time": "161219114758",
  "res_type": "R0",
  "res_content": {
    "command": "initResponse"
  }
}



코코넛 시작 안된경우

  • 원인

    • 코코넛은 설치되었는데 코코넛이 시작안된 경우
  • 처리방법

    • 코코넛이 시작안된 경우이면 포스는 즉시 이 응답을 받게되며, 이후 CoconutBridge.dll은 백그라운드에서 코코넛을 실행한다.
    • 코코넛 시작은 1~5초 정도 걸리게 되므로 그 이후에 다시 init을 호출하도록 처리해야 한다.
{
  "res_code": "RQ002",
  "res_desc": "코코넛 실행필요, 코코넛 실행중 ...",
  "res_time": "161219143948",
  "res_type": "R0",
  "res_content": {
    "command": "initResponse"
  }
}



통신 전문 수정 내역

일자 수정내역 수정자 비고
2017-01-01 최초작성 황현동 감수3인
2017-01-23 통합 인터페이스 전문추가 최두용 감수3인
2017-02-09 OKPOS 듀얼APP 연동 추가 최두용 감수3인
2017-02-14 인증타입 추가 황현동 감수3인
2017-02-16 posCommonCacel 수정 최두용 감수3인

Generated by aglio on 25 Jul 2017