코코넛 클라이언트 연동 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/
Example URI
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
200Body
{
"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/
Example URI
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
200Body
{
"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/
Example URI
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
200Body
{
"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/
Example URI
Body
{
"command": "smartOrderReceivedRequest"
}Schema
200Body
{
"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
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
200Body
{
"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
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
}
]
}
}200Body
{
"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
Body
{
"command": "posCommonRequest",
"data": {
"auth_sms": "S"
}
}200Body
{
"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
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
}
]
}
}200Body
{
"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
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
}
]
}
}200Body
{
"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
시퀀스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
시퀀스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
시퀀스 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
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/
Example URI
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
200Body
{
"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
Body
{
"command": "posCommonCancelRequest",
"data": {
"discount_all_cancel": "Y"
}
}200Body
{
"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
Body
{
"command": "posCommonCancelRequest",
"data": {
"discount_all_cancel": "Y"
}
}200Body
{
"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
Body
{
"command": "posCommonCancelRequest",
"data": {
"discount_all_cancel": "Y"
}
}200Body
{
"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
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
}
]
}
}200Body
{
"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
Body
{
"command": "dpCustInfoGetRequest",
"data": {
"phone_no": "01000001234"
}
}Schema
200Body
{
"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 ¶
시퀀스 예제 ¶
시퀀스 : 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인 |