123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- var ws;
- var ws2;
- var conninfo;
- //status : 현재 상태
- var status = 5;
- var sendbuf;
- var rtndata;
- String.prototype.NCbyteLength = function(){
- var l=0;
-
- for(var idx = 0; idx < this.length; idx++){
- var c = escape(this.charAt(idx));
- if(c.length == 1) l++;
- else if(c.indexOf("%u") != -1) l += 3;
- else if(c.indexOf("%") != -1) l += c.length/3; //JDK20210205 : UTF-8기준. EUC-KR은 /2로 수정 필요.
- }
-
- return l;
- };
- function NCpad(n,width)
- {
- n = n + '';
- return n.length >= width ? n : new Array(width - n.length + 1).join('0') + n;
- }
- function POSSEND(port, type, senddata, callback)
- {
- //port: 로컬 데몬 PORT, type : (PCAT -> postocat , VCAT -> NVCAT) , senddata : 거래 요청 데이터, callback : 응답 CallBack 함수
- //svrport = "50001";
- if(status != 5)
- return ;
- status = 0;
-
- sendbuf = make_send_data(type,senddata);
-
- conninfo = "ws://localhost:" + port + "/" + type;
-
- if ("WebSocket" in window) {
- ws = new WebSocket(conninfo);
- ws.onopen = function(event) {
- //연결성공
- status = 1;
- ws_send_data(ws,sendbuf);
- };
- ws.onerror = function(event) {
- //연결실패
- status = 6;
- //callback(-1,"");
- return false;
- };
- ws.onmessage = function(event) {
- //응답수신
- status = 3;
- ws_disconnect(ws);
- parse_recv_data(event.data,callback);
- //callback(0,event.data);
- };
- ws.onclose = function(event) {
- status = 5;
- //연결종료
- };
- } else {
- //브라우저가 webSocket을 지원하지 않음.
- return false;
- }
- }
- function ReqStop(port,type)
- {
- if(status != 1 && status != 2) return;
-
- port = Number(port) + 1; //Stop 포트번호 1 높음
-
- conninfo = "ws://localhost:" + port + "/" + type;
-
- if ("WebSocket" in window) {
- ws2 = new WebSocket(conninfo);
- ws2.onopen = function(event) {
- //연결성공
- ws_send_data(ws2,make_send_data(type,"STOP"));
- };
- ws2.onerror = function(event) {
- //연결실패
- return false;
- };
- ws2.onmessage = function(event) {
- //응답수신
- status = 3;
- //ws_disconnect(ws2);
- //parse_recv_data(event.data,callback);
- //callback(0,event.data);
- };
- ws2.onclose = function(event) {
- ws_disconnect(ws2);
- status = 6;
- //연결종료
- };
- } else {
- //브라우저가 webSocket을 지원하지 않음.
- return false;
- }
- }
- function ws_disconnect(aws) {
- status = 4;
- aws.close();
- }
- function ws_send_data(aws,sendbuf) {
- status = 2;
- aws.send(sendbuf);
- return false;
- }
- function make_send_data(type, senddata) {
- var m_sendmsg;
- var m_totlen;
- var m_bodylen;
-
- m_bodylen = senddata.NCbyteLength();
- m_totlen = 12 + m_bodylen;
-
- return NCpad(m_totlen,4) + type + " " + NCpad(m_bodylen,4) + senddata;
- }
- function parse_recv_data(recvdata, callback) {
- var rtndata;
- var bodylen;
-
- bodylen = recvdata.substr(12,4);
-
- if(recvdata.substr(8,4) != "0000")
- {
- //오류코드 매핑!!
- /*
- //NVCAT
- 1 : 정상
- -1 : NVCAT 실행 중이 아님
- -2 : 거래금액이 존재하지 않음
- -3 : 환경정보 읽기 실패
- -4 : NVCAT 연동오류 실패
- -5 : 기타 응답데이터 오류
- -6 : 카드리딩 타임아웃
- -7 : 사용자 및 리더기 취소
- -8 : FALLBACK 거래요청
- -9 : 기타오류
- -10 :IC우선거래 요청
- -11 : FALLBACK 거래 아님
- -12 : 거래불가카드
- -13 : 서명요청 오류
- -14 : 요청 전문 데이터 오류
- -15 : 카드리더 Port Open 오류
-
- //PCAT
- 1 : 정상
- -1 : 포트 오픈 실패
- -2 : 포트 이미 오픈된 상태
- -3 : ACK 수신 실패 (단말기 연결 실패)
- -4 : LRC오류 OR 종료버튼
- -14 : 요청 전문 데이터 오류
- */
-
- var errcd;
-
- errcd = recvdata.substr(8,4) * -1
-
- callback(errcd,"");
- }else
- {
- callback(1,recvdata.substr(16,bodylen));
- }
- }
|