Q&A

  • [질문]POS에서 신용승인 결제받기


델파이 5로 POS 프로그램을 개발 하고 있습니다...
POS 프로그램에 카드결제 부분은 처음 해봐서..
예제를 보고 하고 있습니다.

신용 결제에서 정상처리는 되는데 승인값 받고
마지막에 메모리 제거 하는 부분에서 오류가 발생 합니다.
경험이 있는 고수님... 부탁합니다.
첨부파일은 오류 부분입니다.

<!--CodeS-->
//신용 승인
// DLL 함수
     function FDIK_CreditAuth_Simple(in_terminal_number : pChar; in_sequence_number : pChar; in_pos_initial : pChar;
                                     in_temp_info : pChar; in_credit_info : pChar; in_credit_input_type : pChar;
                                     in_install_period : pChar; in_total_amount : pChar; in_service_amount : pChar;
                                     in_tax_amount : pChar; in_ocb_info : pChar; in_ocb_input_type : pChar;
                                     in_sign_compress_method : pChar; in_sign_mac : pChar; in_sign_data : pChar;
                                     out_print_flag : pChar; out_res_code : pChar; out_auth_number : pChar;
                                     out_auth_date : pChar; out_member_number : pChar; out_ddc_flag : pChar;
                                     out_ddc_number : pChar; out_res_msg : pChar; out_card_name : pChar;
                                     out_issuer_code : pChar; out_issuer_name : pChar; out_acquirer_code : pChar;
                                     out_acquirer_name : pChar; out_gift_cash : pChar; out_notice : pChar;
                                     out_ocb_res_code : pChar; out_customer_name : pChar; out_add_point : pChar;
                                     out_save_point : pChar; out_usable_point : pChar; out_broad_msg : pChar) : integer; stdcall; external 'fdikpos43.dll' name 'FDIK_CreditAuth_Simple';


   //출력변수 할당
   GetMem(out_print_flag, 10);
   GetMem(out_res_code, 10);
   GetMem(out_auth_number, 20);
   GetMem(out_auth_date, 10);
   GetMem(out_member_number, 20);
   GetMem(out_ddc_flag, 10);
   GetMem(out_ddc_number, 10);
   GetMem(out_res_msg, 40);
   GetMem(out_card_name, 40);
   GetMem(out_issuer_code, 10);
   GetMem(out_issuer_name, 10);
   GetMem(out_acquirer_code, 10);
   GetMem(out_acquirer_name, 10);
   GetMem(out_gift_cash, 10);
   GetMem(out_notice, 30);
   GetMem(out_ocb_res_code, 10);
   GetMem(out_customer_name, 20);
   GetMem(out_add_point, 10);
   GetMem(out_save_point, 10);
   GetMem(out_usable_point, 10);
   GetMem(out_broad_msg, 120);

try
      ZeroMemory(in_sign_data, 1600); //사인데이터 초기화
      //출력변수 초기화
      ZeroMemory(out_print_flag, 10);
      ZeroMemory(out_res_Code, 10);
      ZeroMemory(out_auth_number, 20);
      ZeroMemory(out_auth_date, 10);
      ZeroMemory(out_member_number, 20);
      ZeroMemory(out_ddc_flag, 10);
      ZeroMemory(out_ddc_number, 10);
      ZeroMemory(out_res_msg, 40);
      ZeroMemory(out_card_name, 40);
      ZeroMemory(out_issuer_code, 10);
      ZeroMemory(out_issuer_name, 10);
      ZeroMemory(out_acquirer_code, 10);
      ZeroMemory(out_acquirer_name, 10);
      ZeroMemory(out_gift_Cash, 10);
      ZeroMemory(out_notice, 30);
      ZeroMemory(out_ocb_res_code, 10);
      ZeroMemory(out_customer_name, 20);
      ZeroMemory(out_add_point, 10);
      ZeroMemory(out_save_point, 10);
      ZeroMemory(out_usable_point, 10);
      ZeroMemory(out_broad_msg, 120);

      //신용 승인 함수 실행
      iRet := FDIK_CreditAuth_Simple(PChar(in_terminal_number), PChar  (in_sequence_number), PChar(in_pos_initial),
                                    PChar(in_temp_info), PChar(in_credit_info), PChar(in_credit_input_type),
                                    PChar(in_install_period), PChar(in_total_amount), PChar(in_service_amount),
                                    PChar(in_tax_amount), PChar(in_ocb_info), PChar(in_ocb_input_type),
                                    PChar(in_sign_compress_method), PChar(in_sign_mac), in_sign_data,
                                    out_print_flag, out_res_code, out_auth_number, out_auth_date,
                                    out_member_number, out_ddc_flag, out_ddc_number, out_res_msg,
                                    out_card_name, out_issuer_code, out_issuer_name, out_acquirer_code,
                                    out_acquirer_name, out_gift_cash, out_notice, out_ocb_res_code,
                                    out_customer_name, out_add_point, out_save_point, out_usable_point,
                                    out_broad_msg);

  // ===============
  // 결과값 DB에 저장
  // ===============

  finally
      FreeMem(in_sign_data, 1600);
      FreeMem(out_print_flag, 10);
      FreeMem(out_res_Code, 10);
      FreeMem(out_auth_number, 20);
      FreeMem(out_auth_date, 10);                     <- 오류 부분
      FreeMem(out_member_number, 20);
      FreeMem(out_ddc_flag, 10);
      FreeMem(out_ddc_number, 10);
      FreeMem(out_res_msg, 40);
      FreeMem(out_card_name, 40);
      FreeMem(out_issuer_code, 10);
      FreeMem(out_issuer_name, 10);
      FreeMem(out_acquirer_code, 10);
      FreeMem(out_acquirer_name, 10);
      FreeMem(out_gift_Cash, 10);
      FreeMem(out_notice, 30);
      FreeMem(out_ocb_res_code, 10);
      FreeMem(out_customer_name, 20);
      FreeMem(out_add_point, 10);
      FreeMem(out_save_point, 10);
      FreeMem(out_usable_point, 10);
      FreeMem(out_broad_msg, 120);
    
  end;


<!--CodeE-->
4  COMMENTS
  • Profile
    이정욱 2008.10.24 16:49
    pChar 말고 로컬 변수로 Array of Char[크기] 로 선언 후 사용해 보세요. 알아서 관리 됩니다. ^^
  • Profile
    이정욱 2008.10.24 16:50
    사실 위의 에러에 관련된 부분은 윗 부분의 소스만을 가지고는 판단하기 어려울 것 같습니다.
  • Profile
    정경철 2008.10.24 19:00
    DLL 함수 원형에 파라미터값이 char *out_print_flag 이처럼 되어 있어서 델파이에서
    PChar 로 받은거 같습니다.

    Array of char[크기] 를 어떻게 선언 해야 되는지?
    보통 array [0..9] of char; 이렇게 하는데
    뒤에 크기는 무엇을 의미 하는지 모르겠습니다.
  • Profile
    이정욱 2008.10.24 19:55
    제 뜻이..그거였습니다. ^^ Array[크기] of Char...
    • TOMATO
    • 2008.10.24 19:26
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 석주현
      2008.10.24 19:34
      Test.exe 핸들을 가지고 메시지를 보내면 되지 않을까요.
    • 정경철
    • 2008.10.24 05:13
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 이정욱
      2008.10.24 16:49
      pChar 말고 로컬 변수로 Array of Char[크기] 로 선언 후 사용해 보세요. 알아서 관리 됩니다. ^^
    • 이정욱
      2008.10.24 16:50
      사실 위의 에러에 관련된 부분은 윗 부분의 소스만을 가지고는 판단하기 어려울 것 같습니다.
    • 정경철
      2008.10.24 19:00
      DLL 함수 원형에 파라미터값이 char *out_print_flag 이처럼 되어 있어서 델파이에서 PChar 로 받...
    • 이정욱
      2008.10.24 19:55
      제 뜻이..그거였습니다. ^^ Array[크기] of Char...
    • 이정욱
      2008.10.24 16:54
      보통 Timeout 속성을 설정하고 사용하게 되죠.. 혹시 .socket.close 는 사용해 보셨나요?
    • 이승현
      2008.10.28 21:47
      넵 다 안됩니다. ㅜ.ㅜ
    • 아르스
    • 2008.10.24 03:06
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 아르스
      2008.10.24 03:20
      ExtractICon(HInstance, 'C:\icon.dll', 0); 이런식으로 뽑아서 쓰면 되네요 ^^
    • 아르스
      2008.10.28 18:48
      음... 뭐가 문제인지 몰라도 아이콘이 추출되었다 안되었다 하는거 같네요..
    • TOMATO
    • 2008.10.24 00:00
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2008.10.24 00:28
      예외처리라고 쓰인 부분에서 하시는것이 아니라 TSaveDialog.Execute에서 하시는것이 맞습니다. if Save...
    • 장진환
      2008.10.24 01:10
      if SaveDialog1.Execute = mrOK then // OK 버튼을 눌렀을 때... if SaveDialog1.Execute = true the...
    • 최용일
      2008.10.24 02:19
      이런... 실수했군요... ^^
    • 황성일
    • 2008.10.23 02:59
    • 0 COMMENTS
    • /
    • 0 LIKES
    • phono
      2008.10.23 21:56
      기본 데이터 컨트롤에 있는 그리드로는 안되구요.. 그래서 그리드보다는 db 컨트롤 그리드가 마련되...
    • 소울해커
      2008.10.24 02:06
      DBGrid 안에 라디오버튼을 넣으실려면 상당히 복잡합니다. 대충 그려보면 private rdFirst,...
    • 장성호
      2008.10.23 00:38
      뭐 대부분 다음과 같이 하면 됩니다. WebBroswer1.OleObject.Document.ParentWindow.ScrollTo( Y ...
    • 이강석
      2008.10.23 00:46
      음....근데 Y, X의 좌표는 어디서 나오는건지 제가 무식해서~~ㅠㅠ
    • 장성호
      2008.10.23 01:07
      기냥 맨 마지막으로 보내려면 WebBrower1.OleObject.Document.DocumentElement.scrollTop :=20000000...
    • 이강석
      2008.10.23 01:56
      음..위에처럼 엄청 큰숫자를 줬어도..... 스크롤을 중간에다가 놓고... 저 조건을 타면 중간정도로...
    • 장성호
      2008.10.23 02:52
      테스트 해보니 Naver.com , daum.net ,paran.com 은 되구.. empas.com 은 안되구 http://ww...
    • 이강석
      2008.10.23 03:01
      아...^^ 넵 감사합니다...찾아볼꼐요...^^
    • 이강석
      2008.10.24 02:08
      OleDocument.body.scrollTop := OleDocument.body.scrollHeight; 이렇게 하니깐 되긴 되는데...제대...
    • 이정욱
      2008.10.25 09:06
      Fields Edit에서 아예 설정 하지 않으면 저절로 모든 필드가 세팅됩니다. 그렇게 사용하시면 될거 같은데...
    • 정경철
      2008.11.13 06:32
      Fields Edit에서 표시 형식이나... Excel 로 변환 할때 Field 순서등을 지정 하기 위에서 설정을 하였습...
    • 소울해커
      2008.10.24 01:41
      그리드에 piter 여부 사과 감 귤 001 Y ㅁ <-체크 ㅁ ...
    • 꼬꼬마
      2008.10.24 20:38
      감사합니다~~ 한가지 질문이 있는데요~~ grid.SetCheckBoxState(3, i, (grid.Cells[0, i] = '001')...
    • 소울해커
      2008.10.24 21:38
      grid.SetCheckBoxState(3, i, (grid.Cells[0, i] = '001') and (grid.Cells[1, i] = 'Y') ); grid.Se...
    • 꼬꼬마
      2008.10.25 00:00
      점심 식사는 하셨나요^^ 좋은 정보 많이 주시는데... 갑자하 하다가 궁금증이 생겨서요... 날...
    • 소울해커
      2008.10.25 00:47
      쿼리에서 날짜와 지역으로 DISTINCT 해서 불러오거나 GROUP BY로 불러오거나 ROWNUM 으로 중복값을...
    • 꼬꼬마
      2008.10.25 01:13
      근데요... 중복값을 제가한다는게... 어떻게 보면 중복값이 아니지 않나여? 날짜 ...
    • 소울해커
      2008.10.25 01:59
      셀병합을 말씀하시는 것 같은데... 그거라면 위에 쓴건 필요없구요. 일단 쿼리에서 정렬순서를 날짜...
    • • • •
    • 정경철
      2008.10.22 20:07
      이 메시지만 보면.. SQL 문장이 잘못 된것 같은데 SQL 조건절이나 ODBC를 다시 한번 확인 해 보십시오.
    • 가르쳐주삼
      2008.10.22 23:29
      ODBC 문제였네요~^^ 감사합니다.
    • 홍성락
      2008.10.23 04:42
      아마! 인덱스가 넘는다는 건데요. 소스상에서 ...Bitmap.Scanline[인덱스]의 소스를 디버깅 해보세요. ...
    • 정경철
      2008.10.22 20:05
      혹시..전송속도가 많지 않을 싶은데 전송속도를 한번 맞춰 보십시오. 보통 9600bps 로 되어 있는데 48...
    • 황성일
      2008.10.22 20:13
      9600bps로 해야지만 저렇게 숫자가 제대로 나오고요 나머지는 다 이상한 외계어 문자들이 찍히내요
    • 이정욱
      2008.10.22 20:55
      저것은 외계어가 아닌 프로토콜 상의 시작과 끝을 알려주는 문자 같습니다. 숫자가 제데로 들어오니까요....
    • 석주현
      2008.10.22 21:30
      개발사에 프로토콜을 의뢰 하시는게 맞을 겁니다. 달랑 저거 하나만 쓰는 경우라면 모르지만 보통 다...
    • 황성일
      2008.10.22 21:48
      아 답변들 감사합니다. 머라고 말하긴 점 그렇지만-.- 당황스럽게도 이 리더기 개발사 망했더군요;; ...
    • 장성호
      2008.10.22 05:18
      가능합니다. var fZoom: Double; // 축소하기 (Zoom-Out) procedure TForm1.Button2Click...
    • 이강석
      2008.10.22 18:48
      감사합니다...^^
    • 문형국
    • 2008.10.21 23:33
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 홍성락
      2008.10.22 08:01
      이건 보통dll이 아니네요, Register에 등록 부터하여야 합니다. 델파이에서 'import Type Library'로 dll...
    • 문형국
      2008.10.30 10:58
      답변 감사드립니다. 시도해 보겠습니다. 꾸벅~
    • 이정욱
      2008.10.25 09:08
      TBX툴바에 대해 조금 더 자세한 정보를....
    • 아르스
      2008.10.27 20:38
      아... TBX가 Toolbar2000이(tb2k)이랑 서로 호환되지 않으면(패치를 했다손 치더라도) 이런 문제가 발...
    • 델파인
    • 2008.10.21 20:03
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2008.10.21 19:31
      간단하게 실행파일명 뒤에 파라매터를 추가하세요 Winexec('xxx.exe parameter1 parameter2', SW_SHOW...
    • 장성호
      2008.10.21 20:52
      WinExec보다는 ShellExecute 나 CreateProcess 를 이용하는것이 좋습니다. 참조 http://blog.naver...