opencloset / OpenCloset-Share-Web

OpenCloset::Share::Web
https://share.theopencloset.net
Artistic License 2.0
2 stars 2 forks source link

결제안내 및 결제 #10

Closed aanoaa closed 7 years ago

yongbin commented 8 years ago

8월 3일부터 진행중이며 8월 10일까지 완료할 수 있을것 같습니다.

기존에 논의한 바 대로 PG서비스의 wrapper로 import를 사용할 예정입니다. 이 이슈에서 현재 진행중인 내용은 아래와 같습니다.

최종산출물은 위 내용이 정리된 문서가 될 예정입니다. 혹시 더 추가되었으면 하는 내용이 있다면 알려주시기 바랍니다.

aanoaa commented 8 years ago

결제가 어떤 방식으로 이루어지는지 설명을 들어봐야 화면구성을 할 수 있을 것 같습니다.

yongbin commented 8 years ago

넵 문서를 따로 정리하고 있는데 그 부분만 먼저 간략하게 말씀드리겠습니다.

yongbin commented 8 years ago

동작 최소 예제 HTML

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>import test</title>
      </head>
      <body>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
        <script type="text/javascript" src="https://service.iamport.kr/js/iamport.payment-1.1.1.js"></script>
        <script type="text/javascript">
        <!-- import request -->
        </script>
      </body>
    </html>

동작 최소 예제 Javascript

      var IMP = window.IMP;
      IMP.init('XXXXXX');
     IMP.request_pay({
       pg : 'html5_inicis', // version 1.1.0부터 지원. 
       /*
         'kakao':카카오페이,
         'inicis':이니시스, 'html5_inicis':이니시스(웹표준결제), 
         'nice':나이스, 
         'jtnet':jtnet, 
         'uplus':LG유플러스,
         'danal':다날
       ,*/
       pay_method : 'card', // 'card':신용카드, 'trans':실시간계좌이체, 'vbank':가상계좌, 'phone':휴대폰소액결제
       merchant_uid : 'merchant_' + new Date().getTime(),
       name : '주문명:test#1',
       amount : 1000,
       buyer_email : 'xxxx@gmail.com',
       buyer_name : '유용빈',
       buyer_tel : '010-4241-xxxx',
       buyer_addr : 'xyxy',
       buyer_postcode : '143-193'
     }, function(rsp) {
       if ( rsp.success ) {
         var msg = '결제가 완료되었습니다.';
         msg += '고유ID : ' + rsp.imp_uid;
         msg += '상점 거래ID : ' + rsp.merchant_uid;
         msg += '결제 금액 : ' + rsp.paid_amount;
         msg += '카드 승인번호 : ' + rsp.apply_num;
       } else {
         var msg = '결제에 실패하였습니다.';
         msg += '에러내용 : ' + rsp.error_msg;
       }
     });
yongbin commented 8 years ago

부수적으로 아임포트를 통해 호출되는 결제요청은 사용자측 JS로 동작하기때문에 위변조에 위험이 있습니다. 아임포트는 이에 대한 대비책으로 사전에 REST API를 통해 merchant_uid 와 금액을 미리 등록한 뒤, 지정한 금액과 요청금액이 다른경우 결제를 진행시키지 않는 기능이 있습니다. 예를들면 이번 결제가 33000원 짜리 결제라면

https://api.iamport.kr/payments/prepare?_token=XXXX

위 API에 다음과 같이 merchant_uid, amount를 설정한 뒤 다

{
  "code": 0,
  "message": null,
  "response": {
    "merchant_uid": "test",
    "amount": 330000
  }
}

다음과 같은 결제 요청을 보내면 됩니다.

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>import test</title>
      </head>
      <body>
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js"></script>
        <script type="text/javascript" src="https://service.iamport.kr/js/iamport.payment-1.1.1.js"></script>
        <script type="text/javascript">
                var IMP = window.IMP;
                IMP.init('XXXXXX');
                IMP.request_pay({
                pg : 'html5_inicis', // version 1.1.0부터 지원. 
                /*
                    'kakao':카카오페이,
                    'inicis':이니시스, 'html5_inicis':이니시스(웹표준결제), 
                    'nice':나이스, 
                    'jtnet':jtnet, 
                    'uplus':LG유플러스,
                    'danal':다날
                ,*/
                pay_method : 'card', // 'card':신용카드, 'trans':실시간계좌이체, 'vbank':가상계좌, 'phone':휴대폰소액결제
                merchant_uid : 'test',                           # <----------------------------------------------------------!!
                name : '주문명:test#1',
                amount : 33000,
                buyer_email : 'xxxx@gmail.com',
                buyer_name : '유용빈',
                buyer_tel : '010-4241-XXXX',
                buyer_addr : 'XX',
                buyer_postcode : '143-193'
                }, function(rsp) {
                if ( rsp.success ) {
                    var msg = '결제가 완료되었습니다.';
                    msg += '고유ID : ' + rsp.imp_uid;
                    msg += '상점 거래ID : ' + rsp.merchant_uid;
                    msg += '결제 금액 : ' + rsp.paid_amount;
                    msg += '카드 승인번호 : ' + rsp.apply_num;
                } else {
                    var msg = '결제에 실패하였습니다.';
                    msg += '에러내용 : ' + rsp.error_msg;
                }
                });
        </script>
      </body>
    </html>

전체 REST API는 다음 문서에 정리되어있습니다.

https://api.iamport.kr/

yongbin commented 8 years ago

대략적으로 결제 프로세스는 아래와 같은 흐름으로 진행됩니다.

  1. 상품선택
  2. 배송지 및 결제방법 선택
    • REST API 호출 (상점 UID, 결제 총액을 고정)
    • 선택된 결제방법, 상점UID, 결제총액을 담은 아임포트 PG 런처 화면 생성
  3. PG 런처 화면을 통해 PG 호출
    • PG를 통해 결제 성공 및 실패경우를 콜백으로 받아서 처리
    • 결제요청과 PG 결제가 일치했는지 여부를 한번 더 확인
aanoaa commented 8 years ago

iamport 의 결제모듈이 허용하는 범위를 확인해봐야 합니다.

aanoaa commented 8 years ago

신용카드, 실시간계좌이체, 가상계좌, 휴대폰소액결제 등에 관한 지원이 가능한 것 같은데, 어떻게어떻게 설정해서 띄우면 UI 가 나타나는 것인지, UI 는 직접 구현하고, 사용자의 액션에 따라 request 을 만들어서 보내야하는 것인지 모르겠습니다.

yongbin commented 8 years ago

넵 좀더 구체적으로 예를 들어서 설명드리겠습니다.

aanoaa commented 8 years ago

http://www.iamport.kr/manual 에 관련된 내용이 있습니다.

yongbin commented 8 years ago

넵 그럼 메뉴얼 보시고 궁금한걸말씀해주시면 그걸 알려드리겠습니다.

aanoaa commented 8 years ago

넵 좀더 구체적으로 예를 들어서 설명드리겠습니다.

지난번에도 이야기 했지만 이런거 말고 실제 답변을 달아주세요. 궁금한게 있으면 멘션해서 물어보겠습니다.

yongbin commented 8 years ago

신용카드, 실시간계좌이체, 가상계좌, 휴대폰소액결제 등에 관한 지원이 가능한 것 같은데, 어떻게어떻게 설정해서 띄우면 UI 가 나타나는 것인지,

IMP.request_pay 요청에 pay_method 값을 변경하면 결제방법 변경이 가능합니다. 물론 그 전화면에서 사용자에게 결제방법을 물어보는 우리측 화면은 별도로 있어야 합니다.

UI 는 직접 구현하고, 사용자의 액션에 따라 request 을 만들어서 보내야하는 것인지 모르겠습니다.

정확하게 무슨말인지 모르겠는데 https://github.com/opencloset/OpenCloset-Share-Web/issues/10#issuecomment-241629595 에서 말한것 처럼 PG로 넘기기 전에 우리측에서 결제와 배송에 대해서 선택할 화면은 별도로 존재합니다. 그 화면에서 필요한 기능은 다음과 같습니다.

aanoaa commented 8 years ago

무통장입금에 대해서는, 결제모듈을 띄울 필요가 없습니다. 계좌번호를 안내하고 다음단계로 진행할 수 있도록 해야 합니다.

aanoaa commented 8 years ago

결제요청시에 우편번호도 요구합니다. 옵션이라면 상관없겠지만 필수라면 사용자 주소를 저장할때에 우편번호도 함께 저장해야 합니다.

aanoaa commented 8 years ago

무통장입금의 시나리오를 가정하고 결제완료부터 배송완료까지의 과정을 만들어야 합니다.

yongbin commented 8 years ago

무통장입금이라면 어떤 결제를 말씀하시는건가요?

aanoaa commented 8 years ago

열린옷장 계좌번호에 사용자가 직접 입금하는 겁니다. 계좌이체죠

yongbin commented 8 years ago

@10001if 님과 한번더 확인해봐야하긴 하는데 예전에 이야기나눴던 바로는 입금확인의 번거러움때문에 기존방식의 계좌이체는 지원하지 않을거 같습니다. 아임포트에서 가상계좌를 통한 계좌이체를 하면 콜백으로 입금확인을 받을수 있기때문에 그쪽을 이용하는게 더 편리합니다.

aanoaa commented 8 years ago

지금 열린옷장 온라인대여가 이방법을 사용하고 있을텐데요? 미리 정해둔 계좌로 입금하면 staff 이 확인해서 옷을 보냅니다.

[열린옷장] 대여 금액 xxxxx원,금일 오후 1시까지 입금해주세요. 국민은행 205737-04-003013 열린옷장/시간내 미확인시 자동 취소됩니다.

https://monitor.theopencloset.net/online 에서 온라인 입금안내

aanoaa commented 8 years ago

그리고 무통장입금은 당연한(기본적인?) 결제수단 입니다.

yongbin commented 8 years ago

지금 기존에 통장으로 직접받고 있는 연체료나 연장비도 아임포트에서 준비가 되면 가상계좌 결제방식으로 변경을 고려하고 있기때문에 온라인 대여에서 기존 방식 계좌입금은 고려안하셔도 될겁니다. 가상계좌를 통한 무통장입금을 제공하기때문에 무통장입금을 결제수단으로 제공하지 않는게 아니라 사람이 수동으로 확인해야하는 방식의 무통장입금을 지원하지 않는것입니다. 온라인 쇼핑몰에서 더이상 계좌번호를 띄워놓고 돈을 입금받지 않는것과 같은 맥락입니다.

aanoaa commented 8 years ago

vbank_num(string) : 가상계좌 입금계좌번호(가상계좌 결제일 때만 있음)

처리 방식에 차이가 있지만 사용자 입장에서는 가상계좌방식이 무통장입금과 같은 것 같습니다. 이 방법을 사용하면 되겠네요.

온라인 쇼핑몰에서는 여전히 계좌번호로 무통장입금이 가능합니다. 개인적으로 이방법만 사용하고 있습니다.

aanoaa commented 8 years ago

결제요청시에 우편번호도 요구합니다. 옵션이라면 상관없겠지만 필수라면 사용자 주소를 저장할때에 우편번호도 함께 저장해야 합니다.

buyer_postcode(string, optional) : 배송주소의 우편번호

optional 입니다.

yongbin commented 8 years ago

처리 방식에 차이가 있지만 사용자 입장에서는 가상계좌방식이 무통장입금과 같은 것 같습니다. 이 방법을 사용하면 되겠네요.

넵 제말이 그말이었습니다 ㅎㅎ

aanoaa commented 8 years ago

결제가 완료되었을때 주문서의 상태를 변경해야 합니다.

결제대기 -> 결제완료

후에 포장해서 운송장을 붙인 후에,

결제완료 -> 발송대기

로 바꾸면 되겠습니다.

yongbin commented 8 years ago

연결된 이슈인지 모르겠지만, 분명 다음 각각 상황에서 문자발송을 고려해야합니다.

aanoaa commented 8 years ago

결제완료가 되었을때에, 의류의 상태 또한 더이상 검색에 노출이 되지 않도록 변경해 주어야 합니다.

대여가능 -> 발송대기

이렇게 하면 될 것 같은데, 문제는 대여가능이 아닌 의류에 대해서 어떻게 처리를 해야할 것인지 입니다.

추천검색된 의류가 대여가능이 아닐 수 도 있습니다. 왜냐하면, 결제완료 전에는 의류의 상태를 변경하지 않습니다.

먼저 결제된 다른 주문서에 의해 의류의 상태가 발송대기 로 변경되었다면, 이때는 선택한 의류를 포장할 수 없습니다.

  1. 비슷한 의류를 staff 의 역량에 따라 골라서 보낸다
  2. 의류를 다시 선택

등의 방법이 있겠습니다. 여기서는 더 편리한 1번의 방법으로 진행합니다.

aanoaa commented 8 years ago

그래도 여전히 문제는 있습니다. 아직 포장하기 전이고 두개 이상의 주문서에서 같은 의류를 선택했습니다. 어떤 주문서에 선택한 의류를 포장해야 할까요?

결제된 시간순으로?

그렇다면 결제시간 컬럼이 추가되어야 합니다. 두명이상이 포장한다면 결제시간 순으로 한다고 해도 해결될 수 없습니다.

방안으로는, 결제완료 되었을때에

결제시간 컬럼도 필요가 없고요, 포장할때에도 어느옷을 포장해야할지 헷갈리지 않습니다.

aanoaa commented 8 years ago

의류의 상태를 발송대기 로 바꾸었을때, 오프라인 대여에 문제가 없는지 확인봐야 합니다.

대여탭에서 포장할때에 상태를 변경할 수 있을 것 같긴합니다.

yongbin commented 8 years ago

제 생각에는 오프라인 대여 프로세스(모니터)에서 대여가능에서 발송대기로 변경된 의류가 뜨는 기능이 요구될것 같습니다. 5층 옷장지기 분들이 그 알람을 보고 옷을 당장 포장하진 않더라도 별도로 빼두는 행동이 필요합니다.

aanoaa commented 8 years ago

그럴여력이 있을까 의문입니다. 알람이 있을때 마다 옷을 찾아서 어딘가에 두어야 빼두어야 하는 작업입니다.

이미 탈의실/포장/결제대기 중인 의류라고 한다면 그걸 다시 빼올 수도 없습니다.

yongbin commented 8 years ago

근데 그 시점에 확보할 방법을 강구하지 않으면 문제가 훨씬 복잡해질거 같습니다. 아이디어가 필요합니다.

aanoaa commented 8 years ago

근데 그 시점에 확보할 방법을 강구하지 않으면 문제가 훨씬 복잡해질거 같습니다. 아이디어가 필요합니다.

대여가능 -> 발송대기

의류에 대한 확보인가요? 얘기가 마찬가지로 도는데, 이미 대여자가 선점한 의류를 다시 가져올 수 없습니다. 일어날 수 밖에 없는 일입니다.

그래서 제안한 방법은 이용약관과 서비스 안내에 서비스 특성을 설명하고 선택한 의류이외의 의류가 발송될 수 있는 점을 넣어두자고 했습니다.

yongbin commented 8 years ago

이미 대여자가 선점한 의류를 다시 가져올 수 없습니다.

네 이부분은 저도 알고있는데 한가지 염려되는게 현재 5층에서 100% 검색을 통해서 의류를 빌려주는것이 아니기때문에 결제가 완료되어 DB에는 발송대기인 의류지만 5층에서 임의로 집어서 오프라인 사용자에게 제공할수 있는 가능성이 남아있습니다.

선택의류 이외에 의류가 발송되는 특성이 있어도 결제시점 이후 확정된 의류가 최대한 전달되도록 시스템을 만들어야 합니다.

aanoaa commented 8 years ago

발송대기로 변경된 의류를 한곳에 모아두는 것이 포장할때의 수고를 덜어주기는 합니다. 여력이 된다면, @yongbin 님의 말처럼 아직 대여되지 않은 의류라면 한곳에 모아두는 것도 좋은 방법 같습니다.

yongbin commented 8 years ago

혹은 5층에서 옷을 탈의실로 보내기 전에 항상 상태를 확인하는 절차를 추가하는 방법도 있을것 같습니다. 이따 북클럽진행할때 열린옷장분들께 한번 여쭤보겠습니다.

aanoaa commented 8 years ago

이미 포장중이거나, 결제진행중인 주문서까지 커버할 수 없습니다. 안 익숙하다 뿐이긴 하지만, 탈의실에 넣기전에 상태를 체크하는건 힘들지 않을까 생각은 됩니다.

yongbin commented 8 years ago

넵 어차피 거기서 체크안한다 하더라도 최종 오프라인 포장시점에서 발송대기인 상태인게 확인될텐데 그렇게 되면 오프라인 대여자분들이 더 난감해지는 상황이 되기때문에 자신들 입장에서도 필요한 절차로 여겨집니다. 1. 매번 미리 알람이 뜨는 옷을 빼두기 2. 탈의실로 보내는 옷을 항상 상태 확인하기 둘중 어떤게 더 편한지 의견물어보고 내일 업데이트 하겠습니다.

aanoaa commented 8 years ago

왜 오프라인 대여자분들이 난감해지나요?

온라인의 예약상태와 상관없이 입어봤던 의류를 대여하는 건 당연한겁니다. 실컷 입어보고 포장해가려고 했는데, 이거 예약된거라서 안된다고 하면 안됩니다.

yongbin commented 8 years ago

넵 그러니까 그런 상태를 미연에 방지하기 위해서는 실컷 입어보기 전에 확인이 필요합니다. 그렇지 않으면 오프라인에서 빌려주는 옷장지기, 빌리러 온 사람, 온라인으로 빌린사람 셋중 한명이 불편한(난감한) 상황이 됩니다.

aanoaa commented 8 years ago

그런건 고민해서 다른 이슈에서 진행해주세요 자꾸 다른 방향으로 이야기가 흘러갑니다.

yongbin commented 8 years ago

넵 알겠습니다.

aanoaa commented 8 years ago

결제가 늦어져서 의류착용일이 +3 일 의 조건을 만족하지 못하면 결제가 되어서는 아니될 것 입니다.

aanoaa commented 8 years ago

19일 23:59 분에 의류착용일(22일)을 입력하고, 다음날 00:01 분에 결제가 진행된다면, +3d 의 조건을 만족하지 못합니다.

20일에 결제를 했는데 착용일이 22일 이라서 의류준비+배송기간이 +2d 입니다.

19일 23:59 분에 의류착용일(22일)을 입력하고, 19일 23:59 분에 결제가 진행된 주문서와 불과 2분 차이이지만 다른 결과입니다.

+3d 같은 조건은 제가 임의로 결정한 것 입니다. 해결한다기 보다는 기록의 의미로 남깁니다.

aanoaa commented 7 years ago

의류착용일을 결제할때에 입력받도록 하면 해결될 수 있습니다.

yongbin commented 7 years ago

share.theopencloset.net 에 전달된 테스트 로그입니다. 가상계좌의 경우 생성요청과 입금완료 두번의 요청이 전달됩니다.

PC 카드

[Wed Aug  3 18:40:44 2016] [debug] POST "/webhooks/import"
[Wed Aug  3 18:40:44 2016] [debug] Routing to controller "OpenCloset::Share::Web::Controller::Root" and action "import_hook"
[Wed Aug  3 18:40:44 2016] [debug] merchant_uid: merchant_1470217099505
[Wed Aug  3 18:40:44 2016] [debug] status: paid
[Wed Aug  3 18:40:44 2016] [debug] imp_uid: imp_178100615645
[Wed Aug  3 18:40:44 2016] [debug] 200 OK (0.002978s, 335.796/s)

PC 실시간 계좌 이체

[Wed Aug  3 18:50:06 2016] [debug] POST "/webhooks/import"
[Wed Aug  3 18:50:06 2016] [debug] Routing to controller "OpenCloset::Share::Web::Controller::Root" and action "import_hook"
[Wed Aug  3 18:50:06 2016] [debug] imp_uid: imp_528671601489
[Wed Aug  3 18:50:06 2016] [debug] status: paid
[Wed Aug  3 18:50:06 2016] [debug] merchant_uid: merchant_1470217670630
[Wed Aug  3 18:50:06 2016] [debug] 200 OK (0.000835s, 1197.605/s)

PC 가상계좌

요청

[Wed Aug  3 18:53:30 2016] [debug] POST "/webhooks/import"
[Wed Aug  3 18:53:30 2016] [debug] Routing to controller "OpenCloset::Share::Web::Controller::Root" and action "import_hook"
[Wed Aug  3 18:53:30 2016] [debug] merchant_uid: merchant_1470217916843
[Wed Aug  3 18:53:30 2016] [debug] status: ready
[Wed Aug  3 18:53:30 2016] [debug] imp_uid: imp_863917815631
[Wed Aug  3 18:53:30 2016] [debug] 200 OK (0.000813s, 1230.012/s)

성공 콜백

[Wed Aug  3 19:01:16 2016] [debug] POST "/webhooks/import"
[Wed Aug  3 19:01:16 2016] [debug] Routing to controller "OpenCloset::Share::Web::Controller::Root" and action "import_hook"
[Wed Aug  3 19:01:16 2016] [debug] merchant_uid: merchant_1470217916843
[Wed Aug  3 19:01:16 2016] [debug] imp_uid: imp_863917815631
[Wed Aug  3 19:01:16 2016] [debug] status: paid
[Wed Aug  3 19:01:16 2016] [debug] 200 OK (0.000872s, 1146.789/s)

모바일 가상계좌

요청

[Tue Nov  8 16:26:47 2016] [debug] POST "/webhooks/import"
[Tue Nov  8 16:26:47 2016] [debug] Routing to controller "OpenCloset::Share::Web::Controller::Root" and action "import_hook"
[Tue Nov  8 16:26:47 2016] [debug] imp_uid: imp_853042109752
[Tue Nov  8 16:26:47 2016] [debug] status: ready
[Tue Nov  8 16:26:47 2016] [debug] merchant_uid: merchant_1478589967254
[Tue Nov  8 16:26:47 2016] [debug] 200 OK (0.000749s, 1335.113/s)

성공 콜백

[Tue Nov  8 16:30:51 2016] [debug] POST "/webhooks/import"
[Tue Nov  8 16:30:51 2016] [debug] Routing to controller "OpenCloset::Share::Web::Controller::Root" and action "import_hook"
[Tue Nov  8 16:30:51 2016] [debug] merchant_uid: merchant_1478589967254
[Tue Nov  8 16:30:51 2016] [debug] status: paid
[Tue Nov  8 16:30:51 2016] [debug] imp_uid: imp_853042109752
[Tue Nov  8 16:30:51 2016] [debug] 200 OK (0.000728s, 1373.626/s)
yongbin commented 7 years ago

결제에서 필요한 테스트는 모두 완료되었습니다.

yongbin commented 7 years ago

정의

결제 프로세스

REST API와 상관없이 단독적으로 결제 가능

  1. 온라인 대여 시스템에서 결제할 총액(amount)와 결제 수단(pay_method)을 결정 한 뒤 post 요청
  2. 전달받은 총액, 결제수단과 간단한 주문자 정보(이메일, 이름, 전화번호 주소)를 전달하고 상점 id를 결정해서 사용자 결제 페이지 생성 후 사용자에게 응답 https://github.com/opencloset/OpenCloset-Share-Web/issues/10#issuecomment-241628535
  3. 사용자 PC / 모바일 브라우져에서 결제화면이 PG화면이 랜더링되고 결제 프로세스가 진행됨 결제가 완료되면 다음 두가지 방법으로 결제 결과를 확인 할 수 있음
    1. 사용자 브라우져 IMP.request_pay의 인자로 전달되는 콜백함수에서 처리
    2. webhook 요청 아임포트 설정에서 등록한 특정 URL로 결제 결과를 POST로 전달받음 https://share.theopencloset.net/webhooks/import https://github.com/opencloset/OpenCloset-Share-Web/issues/10#issuecomment-259067180
  4. 결제 완료

결제 프로세스 약점

결제 프로세스 약점 보완 전략

  1. 위 결제 프로세스 2번 과정에서 payments.validation/preparePayment API 호출해서 상점 id 와 총액을 먼저 아임포트 서버에 전달
  2. 결제 처리 결과는 다음 순서로 신뢰 : js 콜백으로 넘어온 결제 요청 결과 <<<< webhook으로 전달된 결제 요청 처리 결과 < REST API 조회결과 직접 조회 getPaymentByMerchantUid
yongbin commented 7 years ago

결제 취소

오프라인에서는 상대적으로 가능성이 낮지만 온라인 대여기준으로는 결제취소에 대한 대응역시 고려해야합니다. 이때 주의해야할점은 현재 이니시스 PG 기준으로 볼때 '카드','실시간 계좌이체' REST API 요청한번으로 승인이 취소가 가능한 반면 '가상계좌' 방식의 결제의 경우 환불 계좌번호, 은행코드 , 예금주가 전달되어야 하기 때문에 결제방식을 '가상계좌'로 선택한 사용자는 추가적으로 이정보를 미리 입력하게 할지 추후에 환불요청이 오면 수동으로 처리할지를 결정해야합니다.

부분 취소

열린옷장 온라인 결제 정책상 부분취로를 허용하지 않고 필요시 전체 취소 후 재결재 형식으로 하는것이 더 단순하겠지만 아임포트 API에서 부분취소를 지원하고 있다는 점도 참고할 필요가 있습니다.