This repository was archived by the owner on Mar 5, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathopenapi.json
More file actions
11658 lines (11658 loc) · 526 KB
/
openapi.json
File metadata and controls
11658 lines (11658 loc) · 526 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"swagger": "2.0",
"info": {
"title": "포트원 REST API",
"description": "* 결제완료된 정보, 결제취소, 상태별 결제목록 조회 등의 기능을 하는 REST API를 제공합니다.<br> 비인증결제, 정기 자동결제 등 부가기능을 위한 REST API를 제공합니다.",
"contact": {
"name": "(주)코리아포트원",
"url": "https://admin.portone.io",
"email": "cs@portone.io"
},
"version": "1.0"
},
"host": "api.iamport.kr",
"basePath": "/",
"schemes": [
"https"
],
"paths": {
"/users/getToken": {
"post": {
"tags": [
"authenticate"
],
"summary": "access_token 발급 API",
"description": "API키 & API secret으로 access_token을 발급받습니다.<br> access_token의 만료기한은 발행 시간 부터 30분입니다. 만료된 토큰으로 API 요청을 하면 <b>401 Unauthorized </b>응답을 받습니다. <br> <ul><li>재발행 (만료 후 발급): 새로운 access token을 발급한다. (만료기한: 발행시간 후 30분)</li> <li>재사용 (만료 전 발급): 기존 access token을 발급한다. (만료기한: 기존과 동일, 단 기존 만료시간 전 1분이내 요청 시 5분 연장 됨)</li></ul>",
"operationId": "getToken",
"consumes": [
"application/json",
"application/x-www-form-urlencoded"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "imp_key",
"in": "formData",
"description": "REST API key (포트원 관리자콘솔 내 [결제 연동] > [식별코드・API Keys] > [V1 API]에서 확인할 수 있습니다. : https://admin.portone.io)",
"required": true,
"type": "string",
"x-portone-name": "REST API KEY",
"x-portone-description": "REST API key로 포트원 관리자콘솔 내 [결제 연동] > [식별코드・API Keys] > [V1 API]에서 확인할 수 있습니다. : https://admin.portone.io"
},
{
"name": "imp_secret",
"in": "formData",
"description": "REST API Secret (포트원 관리자콘솔 내 [결제 연동] > [식별코드・API Keys] > [V1 API]에서 확인할 수 있습니다. : https://admin.portone.io)",
"required": true,
"type": "string",
"x-portone-name": "REST API SECRET",
"x-portone-description": "REST API Secret으로 포트원 관리자콘솔 내 [결제 연동] > [식별코드・API Keys] > [V1 API]에서 확인할 수 있습니다. : https://admin.portone.io"
}
],
"responses": {
"200": {
"description": "정상적으로 access_token을 받아왔습니다",
"schema": {
"$ref": "#/definitions/AuthResponse"
}
},
"401": {
"description": "imp_key, imp_secret 인증에 실패한 경우"
}
},
"x-portone-category": "auth"
}
},
"/benepia/point": {
"post": {
"tags": [
"benepia"
],
"summary": "포인트 단건조회 API",
"description": "API를 통해 베네피아 포인트(복지포인트)조회합니다.<br>\n 사용자로부터 베네피아 계정 아이디, 비밀번호를 전달받아 보유중인 베네피아 포인트를 조회할 수 있습니다.<br>\n KCP를 통해서만 진행되므로 KCP사이트코드 발급이 필요합니다.",
"operationId": "queryBenepiaPoint",
"consumes": [
"application/json",
"application/x-www-form-urlencoded"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "benepia_user",
"in": "formData",
"description": "베네피아 계정 아이디",
"required": true,
"type": "string",
"x-portone-name": "계정 아이디",
"x-portone-description": "베네피아 계정 아이디"
},
{
"name": "benepia_password",
"in": "formData",
"description": "베네피아 계정 비밀번호",
"required": true,
"type": "string",
"x-portone-name": "계정 비밀번호",
"x-portone-description": "베네피아 계정 비밀번호"
},
{
"name": "channel_key",
"in": "formData",
"description": "베네피아 포인트 조회 시 사용할 채널의 채널키",
"required": true,
"type": "string"
}
],
"responses": {
"200": {
"description": "베네피아 포인트 조회 완료",
"schema": {
"$ref": "#/definitions/BenepiaPointResponse"
}
},
"401": {
"description": "인증 Token이 전달되지 않았거나 유효하지 않은 경우"
},
"500": {
"description": "베네피아 포인트 조회 실패"
}
},
"x-portone-supported-pgs": [
"kcp"
],
"x-portone-category": "etc.benepia"
}
},
"/benepia/payment": {
"post": {
"tags": [
"benepia"
],
"summary": "포인트 결제 요청 API",
"description": "API를 통해 베네피아 포인트(복지포인트)사용 결제요청합니다.<br>\n 사용자로부터 전달받은 베네피아 계정 아이디, 비밀번호와 함께 결제정보를 요청하여 베네피아 포인트 사용처리합니다. <br>\n KCP를 통해서만 진행되므로 KCP사이트코드 발급이 필요합니다.",
"operationId": "payBenepiaPoint",
"consumes": [
"application/json",
"application/x-www-form-urlencoded"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "benepia_user",
"in": "formData",
"description": "베네피아 계정 아이디",
"required": true,
"type": "string",
"x-portone-name": "계정 아이디",
"x-portone-description": "베네피아 계정 아이디"
},
{
"name": "benepia_password",
"in": "formData",
"description": "베네피아 계정 비밀번호",
"required": true,
"type": "string",
"x-portone-name": "계정 비밀번호",
"x-portone-description": "베네피아 계정 비밀번호"
},
{
"name": "benepia_member_code",
"in": "formData",
"description": "베네피아 기관에서 부여한 회원사 코드(미입력시, 테스트 결제 처리됨)",
"required": false,
"type": "string",
"x-portone-name": "회원사 코드",
"x-portone-description": "베네피아 기관에서 부여한 회원사 코드(미입력시, 테스트 결제 처리됨)"
},
{
"name": "merchant_uid",
"in": "formData",
"description": "고객사 거래 고유번호. 이미 결제가 이뤄진 적이 있는 merchant_uid로는 결제요청이 불가능합니다.",
"required": true,
"type": "string",
"maxLength": 40,
"x-portone-name": "고객사 주문번호",
"x-portone-summary": "고객사 거래 고유번호",
"x-portone-description": "이미 결제가 이뤄진 적이 있는 merchant_uid로는 결제요청이 불가능합니다."
},
{
"name": "amount",
"in": "formData",
"description": "결제요청금액",
"required": true,
"type": "number",
"x-portone-name": "결제요청금액",
"x-portone-description": "결제 요청하고자 하는 금액"
},
{
"name": "name",
"in": "formData",
"description": "주문명",
"required": true,
"type": "string",
"maxLength": 40,
"x-portone-name": "주문명",
"x-portone-description": "주문명"
},
{
"name": "buyer_name",
"in": "formData",
"description": "주문자명",
"required": false,
"type": "string",
"maxLength": 16,
"x-portone-name": "주문자명",
"x-portone-description": "주문자명"
},
{
"name": "buyer_email",
"in": "formData",
"description": "주문자 Email주소",
"required": false,
"type": "string",
"maxLength": 64,
"x-portone-name": "주문자 Email 주소",
"x-portone-description": "주문자 Email주소"
},
{
"name": "buyer_tel",
"in": "formData",
"description": "주문자 전화번호",
"required": false,
"type": "string",
"maxLength": 16,
"x-portone-name": "주문자 전화번호",
"x-portone-description": "주문자 전화번호"
},
{
"name": "buyer_addr",
"in": "formData",
"description": "주문자 주소",
"required": false,
"type": "string",
"maxLength": 128,
"x-portone-name": "주문자 주소",
"x-portone-description": "주문자 주소"
},
{
"name": "buyer_postcode",
"in": "formData",
"description": "주문자 우편번호",
"required": false,
"type": "string",
"maxLength": 8,
"x-portone-name": "주문자 우편번호",
"x-portone-description": "주문자 우편번호"
},
{
"name": "channel_key",
"in": "formData",
"description": "베네피아 포인트 결제 시 사용할 채널의 채널키",
"required": true,
"type": "string"
},
{
"name": "notice_url",
"in": "formData",
"description": "선언되지 않으면 포트원 관리자 페이지에 정의된 Notification URL값을 사용",
"required": false,
"type": "array",
"x-portone-name": "Notification URL(Webhook URL)",
"x-portone-description": "웹훅을 수신하고자 하는 URL"
},
{
"name": "custom_data",
"in": "formData",
"description": "결제정보와 함께 저장할 custom_data. 객체로 전달되는 경우 JSON 문자열로 저장",
"required": false,
"type": "string",
"x-portone-name": "추가정보",
"x-portone-summary": "결제정보와 함께 저장할 custom_data",
"x-portone-description": "객체로 전달되는 경우 JSON 문자열로 저장"
}
],
"responses": {
"200": {
"description": "베네피아 포인트 결제 완료",
"schema": {
"$ref": "#/definitions/PaymentResponse"
}
},
"401": {
"description": "인증 Token이 전달되지 않았거나 유효하지 않은 경우"
},
"500": {
"description": "베네피아 포인트 결제 실패"
}
},
"x-portone-supported-pgs": [
"kcp"
],
"x-portone-category": "etc.benepia"
}
},
"/certifications/{imp_uid}": {
"get": {
"tags": [
"certifications"
],
"summary": "본인인증 결과조회 API",
"description": "본인인증된 결과를 imp_uid를 이용하여 조회합니다.",
"operationId": "getCertification",
"consumes": [
"application/json",
"application/x-www-form-urlencoded"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "imp_uid",
"in": "path",
"description": "포트원 인증 고유번호",
"required": true,
"type": "string",
"x-portone-name": "포트원 인증 고유번호",
"x-portone-description": "본인인증 결과로 리턴 받은 포트원 인증 고유번호"
}
],
"responses": {
"200": {
"description": "본인인증결과 조회 성공",
"schema": {
"$ref": "#/definitions/CertificationResponse"
}
},
"401": {
"description": "인증 Token이 전달되지 않았거나 유효하지 않은 경우"
},
"404": {
"description": "본인인증결과를 찾을 수 없음"
}
},
"x-portone-supported-pgs": [
"danal",
"inicis_unified",
"inicis",
"kcp_v2"
],
"x-portone-category": "certification"
},
"delete": {
"tags": [
"certifications"
],
"summary": "본인인증 정보삭제 API",
"description": "본인인증 결과를 삭제합니다.<br>본인인증 결과정보를 포트원 서버내에서 완전히 삭제하고 싶을 때 요청합니다.",
"operationId": "deleteCertification",
"consumes": [
"application/json",
"application/x-www-form-urlencoded"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "imp_uid",
"in": "path",
"description": "포트원 인증 고유번호",
"required": true,
"type": "string",
"x-portone-name": "포트원 인증 고유번호",
"x-portone-description": "본인인증 결과로 리턴받은 포트원 인증 고유번호"
}
],
"responses": {
"200": {
"description": "본인인증결과 삭제 완료",
"schema": {
"$ref": "#/definitions/CertificationResponse"
}
},
"401": {
"description": "인증 Token이 전달되지 않았거나 유효하지 않은 경우"
},
"404": {
"description": "본인인증결과를 찾을 수 없음"
},
"500": {
"description": "DB삭제도중 서버 장애 발생"
}
},
"x-portone-supported-pgs": [
"danal",
"inicis_unified",
"inicis",
"kcp_v2"
],
"x-portone-category": "certification"
}
},
"/certifications/otp/request": {
"post": {
"tags": [
"certifications"
],
"summary": "본인인증 요청 API",
"description": "사용자 개인정보를 API로 전달하여, 통신사로부터 확인되는 경우 OTP(6자리 인증번호)를 사용자에게 SMS로 전달합니다.\n<br><br>통신사 승인을 받은 일부 고객사에 한해 사용하실 수 있으며, 현재 <b>다날</b>, <b>kcp(신모듈)</b>을 통해서만 서비스되고 있습니다.\n<br><br>본인인증 대상자의 성명, 생년월일 + 주민등록 뒷부분 첫 자리, 휴대폰번호, 통신사 정보를 고객사에서 직접 입력받아 API요청하면 됩니다. 전달된 개인정보가 올바를 경우 해당 휴대폰으로 인증번호 SMS가 전송됩니다.\n<br><br>200응답 시 imp_uid 가 응답데이터로 전달되며, SMS전송된 인증번호를 본인인증 완료 API 로 요청주시면 최종 본인인증 프로세스가 완료됩니다.",
"operationId": "requestOTP",
"consumes": [
"application/json",
"application/x-www-form-urlencoded"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "name",
"in": "formData",
"description": "본인인증 대상자 성명",
"required": true,
"type": "string",
"x-portone-name": "성명",
"x-portone-description": "본인인증 대상자 성명"
},
{
"name": "phone",
"in": "formData",
"description": "본인인증 대상자 전화번호<br>(- 또는 . 과 같은 기호가 포함되어도 무방 - 포트원 내에서 숫자 외에는 정규식으로 모두 제거처리)",
"required": true,
"type": "string",
"x-portone-name": "휴대폰번호",
"x-portone-summary": "본인인증 대상자 전화번호",
"x-portone-description": "- 또는 . 과 같은 기호가 포함되어도 무방 - 포트원 내에서 숫자 외에는 정규식으로 모두 제거처리"
},
{
"name": "birth",
"in": "formData",
"description": "본인인증 대상자 생년월일<br> YYMMDD 6자리(연/월/일 사이에 - 또는 . 과 같은 기호가 포함되어도 무방 - 포트원 내에서 숫자 외에는 정규식으로 모두 제거처리함)",
"required": true,
"type": "string",
"x-portone-name": "생년월일",
"x-portone-summary": "본인인증 대상자 생년월일",
"x-portone-description": "`YYMMDD` 6자리(연/월/일 사이에 - 또는 . 과 같은 기호가 포함되어도 무방 - 포트원 내에서 숫자 외에는 정규식으로 모두 제거처리함)"
},
{
"name": "gender_digit",
"in": "formData",
"description": "본인인증 대상자 주민등록번호 뒷부분 첫자리(주민등록번호 13자리 중 7번째 자리<br>2000년 이전 출생자는 1 또는 2, 2000년 이후 출생자는 3 또는 4)\n<br><br> 외국인 고객은 다음 기준에 따라 입력해주세요:\n- 남성: ~1999년생은 5, 2000년 이후 출생자는 7\n- 여성: ~1999년생은 6, 2000년 이후 출생자는 8",
"required": true,
"type": "string",
"x-portone-name": "성별구분코드",
"x-portone-summary": "본인인증 대상자 주민등록번호 뒷부분 첫자리",
"x-portone-description": "주민등록번호 13자리 중 7번째 자리\n\n2000년 이전 출생자는 1 또는 2, 2000년 이후 출생자는 3 또는 4\n<br><br> kcp(신모듈)의 경우 외국인 고객은 다음 기준에 따라 입력해주세요:\n- 남성: ~1999년생은 5, 2000년 이후 출생자는 7\n- 여성: ~1999년생은 6, 2000년 이후 출생자는 8"
},
{
"name": "carrier",
"in": "formData",
"description": "본인인증 대상자 통신사 코드 (알뜰폰 사용자의 경우, carrier파라메터 SKT, KT, LGT 중 하나를 지정한 후 <b>is_mvno : true</b> 로 설정)\n <ul><li>SKT</li>\n <li>KT</li>\n <li>LGT</li></ul>",
"required": true,
"type": "string",
"enum": [
"SKT",
"KT",
"LGT"
],
"x-portone-name": "통신사구분코드",
"x-portone-summary": "본인인증 대상자 통신자 코드",
"x-portone-description": "알뜰폰 사용자의 경우, carrier파라메터 SKT, KT, LGT 중 하나를 지정한 후 **is_mvno : true** 로 설정\n- SKT\n- KT\n- LGT"
},
{
"name": "is_mvno",
"in": "formData",
"description": "본인인증 대상자 알뜰폰 사용 여부",
"required": false,
"type": "boolean",
"default": "false",
"x-portone-name": "알뜰폰 사용 여부",
"x-portone-description": "본인인증 대상자 알뜰폰 사용 여부"
},
{
"name": "company",
"in": "formData",
"description": "고객사 서비스명칭 또는 domain URL. <br> KISA에서 대상자에게 발송하는 SMS에 안내될 서비스 명칭",
"required": false,
"type": "string",
"x-portone-name": "고객사 서비스명칭",
"x-portone-summary": "고객사 서비스명칭 또는 domain URL",
"x-portone-description": "KISA에서 대상자에게 발송하는 SMS에 안내될 서비스 명칭"
},
{
"name": "merchant_uid",
"in": "formData",
"description": "본인인증 요청건을 식별하기 위한 고객사 주문번호",
"required": false,
"type": "string",
"x-portone-name": "고객사 주문번호",
"x-portone-description": "본인인증 요청건을 식별하기 위한 고객사 주문번호"
},
{
"name": "pg",
"in": "formData",
"description": "PG사 구분자<br>다날 상점아이디를 2개 이상 동시에 사용하시려는 경우 설정하시면 됩니다. <b>danal.{상점아이디}</b> 형태로 지정. Deprecated 되었으므로 channel_key 파라미터를 사용해주세요.",
"required": false,
"type": "string",
"x-portone-name": "PG사 구분코드(deprecated)",
"x-portone-summary": "본인인증을 요청하고자 하는 PG사 구분자",
"x-portone-description": "다날 상점아이디를 2개 이상 동시에 사용하시려는 경우 설정하시면 됩니다. **danal.{상점아이디}** 형태로 지정. Deprecated 되었으므로 channel_key 파라미터를 사용해주세요."
},
{
"name": "channel_key",
"in": "formData",
"description": "본인인증을 요청하고자 하는 PG사의 채널키로 kcp(신모듈) 본인인증을 사용하시려는 경우 반드시 channel_key를 입력해야합니다.",
"required": true,
"type": "string",
"x-portone-name": "채널키",
"x-portone-summary": "본인인증을 요청하고자 하는 PG사의 채널키",
"x-portone-description": "kcp(신모듈) 본인인증을 사용하시려는 경우 반드시 channel_key를 입력해야합니다."
},
{
"name": "verification_method",
"in": "formData",
"description": "본인인증을 진행하고자 하는 방식.\n - SMS\n - APP\n\n지원하는 pg사\n- kcp(신모듈)",
"required": false,
"type": "string",
"enum": [
"SMS",
"APP"
],
"x-portone-name": "본인인증 방식",
"x-portone-summary": "본인인증을 진행하고자 하는 방식",
"x-portone-description": "본인인증을 진행하고자 하는 방식. (현재 kcp(신모듈)만 지원)\n- SMS\n- APP",
"x-portone-supported-pgs": [
"kcp_v2"
]
},
{
"name": "bypass",
"in": "formData",
"description": "JSON string 형식의 PG사별로 특화된 파라미터. <br>전달 한 값은 가공 없이 그대로 PG사로 전달 됩니다. <br>각 PG사별 스펙은 PG사별 연동 문서 참고해주세요",
"required": false,
"type": "string",
"x-portone-name": "bypass 데이터",
"x-portone-summary": "JSON string 형식의 PG사별로 특화된 파라미터",
"x-portone-description": "전달 한 값은 가공 없이 그대로 PG사로 전달 됩니다. 각 PG사별 스펙은 PG사별 연동 문서 참고해주세요",
"x-portone-supported-pgs": [
"kcp_v2"
]
}
],
"responses": {
"200": {
"description": "본인인증을 위한 대상자 정보 검증 완료(인증번호 SMS전송요청 중)",
"schema": {
"$ref": "#/definitions/CertificationOTPResponse"
}
},
"401": {
"description": "인증 Token이 전달되지 않았거나 유효하지 않은 경우"
},
"400": {
"description": "대상자 개인정보 중 일부가 누락되었거나 올바르지 않은 경우"
},
"500": {
"description": "처리 중 다날서버 응답오류 등 오류가 발생한 경우"
}
},
"x-portone-supported-pgs": [
"danal",
"kcp_v2"
],
"x-portone-category": "certification"
}
},
"/certifications/otp/confirm/{imp_uid}": {
"post": {
"tags": [
"certifications"
],
"summary": "본인인증 완료 API",
"description": "본인인증 요청 API를 통해 SMS/APP로 전송된 인증번호를 전달하여 본인인증을 완료합니다. <br>\n 본인인증이 완료되면 대상자의 이름, 전화번호, 통신사, 성별, 외국인 여부, 생년월일, CI, DI 값을 응답받을 수 있습니다.",
"operationId": "confirmOTP",
"consumes": [
"application/json",
"application/x-www-form-urlencoded"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "imp_uid",
"in": "path",
"description": "본인인증 요청 API 요청 후 응답된 인증 고유번호",
"required": true,
"type": "string",
"x-portone-name": "포트원 인증 고유번호",
"x-portone-description": "본인인증 요청 API 요청 후 응답된 인증 고유번호"
},
{
"name": "otp",
"in": "formData",
"description": "SMS로 전송된 본인인증 번호. KCP (신모듈) APP 방식의 경우에는 해당 값을 전달하지 않습니다.",
"required": false,
"type": "string",
"x-portone-name": "본인인증 번호",
"x-portone-description": "SMS로 전송된 본인인증 번호. KCP (신모듈) APP 방식의 경우에는 해당 값을 전달하지 않습니다."
}
],
"responses": {
"200": {
"description": "본인인증완료",
"schema": {
"$ref": "#/definitions/CertificationResponse"
}
},
"401": {
"description": "인증 Token이 전달되지 않았거나 유효하지 않은 경우"
},
"400": {
"description": "인증번호를 누락하였거나 이미 인증처리가 완료된 건에 대해 재요청하는 경우"
},
"404": {
"description": "imp_uid 에 해당되는 요청건이 없는 경우"
},
"500": {
"description": "처리 중 다날서버 응답오류 등 오류가 발생한 경우"
}
},
"x-portone-supported-pgs": [
"danal",
"kcp_v2"
],
"x-portone-category": "certification"
}
},
"/subscribe/customers": {
"get": {
"tags": [
"subscribe.customer"
],
"summary": "빌링키 정보 복수조회 API",
"description": "여러 개의 빌링키를 한 번에 조회하는 API입니다.<br><br>등록된 카드마다 1개의 customer_uid가 매핑되므로,\n 고객사 시스템 내에 1명의 고객이 여러 장의 카드를 등록할 수 있는 경우 여러 개의 customer_uid를 가지게 됩니다.<br> 해당 고객이 등록해놓은 카드정보 목록을 한 번에 조회하는데 사용하면 편리합니다.\n <br><br>예시) /subscribe/customers?customer_uid[]=hong_1234_a&customer_uid[]=hong_1234_b",
"operationId": "customer_view_multiple",
"consumes": [
"application/json",
"application/x-www-form-urlencoded"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "customer_uid[]",
"in": "query",
"description": "빌링키와 매핑되며 고객사에서 채번하는 구매자의 결제 수단 식별 고유번호",
"required": true,
"type": "array",
"items": {
"type": "string"
},
"collectionFormat": "multi",
"default": "customer_1234",
"x-portone-name": "구매자의 결제 수단 식별 고유번호",
"x-portone-description": "빌링키와 매핑되며 고객사에서 채번하는 구매자의 결제 수단 식별 고유번호"
}
],
"responses": {
"200": {
"description": "요청된 모든 customer_uid 에 대한 빌키정보 응답완료. 조회된 빌링키에 따라 일반 빌링키(CustomerAnnotation)와 슈퍼 빌링키(SuperBillingKeyAnnotation)를 포함할 수 있습니다.",
"schema": {
"$ref": "#/definitions/MultipleCustomersResponse"
}
},
"207": {
"description": "요청된 customer_uid 중 일부 빌키정보 조회 실패(ex. 접근권한없음 또는 존재하지 않는 customer_uid). 조회된 빌링키에 따라 일반 빌링키(CustomerAnnotation)와 슈퍼 빌링키(SuperBillingKeyAnnotation)를 포함할 수 있습니다.",
"schema": {
"$ref": "#/definitions/MultipleCustomersResponse"
}
},
"401": {
"description": "인증 Token이 전달되지 않았거나 유효하지 않은 경우"
},
"404": {
"description": "유효하지 않은 customer_uid"
}
},
"x-portone-supported-pgs": [
"chai",
"danal",
"danal_tpay",
"daou",
"html5_inicis",
"inicis",
"kakaopay",
"kcp",
"kcp_billing",
"kicc",
"ksnet",
"mobilians",
"naverpay",
"nice",
"payco",
"paymentwall",
"settle",
"settle_acc",
"settle_firm",
"smartro_v2",
"tosspayments",
"paypal_v2",
"welcome",
"tosspay_v2"
],
"x-portone-category": "billingkey",
"x-portone-per-pg": {
"paypal_v2": {
"description": "연동 유의사항\n\n빌링키 발급 수단 및 정보를 알 수 없음\n\n페이팔을 통해 다양한 수단으로 빌링키 발급이 가능하지만, 페이팔이 승인 된 빌링키 발급 수단 및 정보를 알려주지 않습니다.\n따라서 페이팔 빌링키 발급 건의 결제 수단(pay_method)은 모두 **paypal**로 일괄 저장되며 발급 된 빌링키 정보 조회시 카드 정보는 모두 **null**로 내려갑니다.\n```json\n\\\\ GET /subscribe/customers/{customer_uid}\n{\n ...중략\n pg_provider: 'paypal_v2',\n customer_uid: '{customer_uid}'\n card_name: null,\n card_code: null,\n card_number: null,\n card_type: null,\n}\n```\n "
}
}
}
},
"/subscribe/customers/{customer_uid}": {
"get": {
"tags": [
"subscribe.customer"
],
"summary": "빌링키 정보 단건조회 API",
"description": "구매자의 빌링키 정보 조회",
"operationId": "customer_view",
"consumes": [
"application/json",
"application/x-www-form-urlencoded"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "customer_uid",
"in": "path",
"description": "빌링키와 매핑되며 고객사에서 채번하는 구매자의 결제 수단 식별 고유번호",
"required": true,
"type": "string",
"default": "customer_1234",
"x-portone-name": "구매자의 결제 수단 식별 고유번호",
"x-portone-description": "빌링키와 매핑되며 고객사에서 채번하는 구매자의 결제 수단 식별 고유번호"
}
],
"responses": {
"200": {
"description": "정상 조회 시, 일반 빌링키 조회는 CustomerResponse를 반환하며, 슈퍼 빌링키 조회는 SuperBillingKeyResponse를 반환합니다.",
"schema": {
"properties": {
"CustomerResponse": {
"$ref": "#/definitions/CustomerResponse"
},
"SuperBillingKeyResponse": {
"$ref": "#/definitions/SuperBillingKeyResponse"
}
}
}
},
"401": {
"description": "인증 Token이 전달되지 않았거나 유효하지 않은 경우"
},
"404": {
"description": "유효하지 않은 customer_uid"
}
},
"x-portone-supported-pgs": [
"chai",
"danal",
"danal_tpay",
"daou",
"html5_inicis",
"inicis",
"kakaopay",
"kcp",
"kcp_billing",
"kicc",
"ksnet",
"mobilians",
"naverpay",
"nice",
"payco",
"paymentwall",
"settle",
"settle_acc",
"settle_firm",
"smartro_v2",
"tosspayments",
"paypal_v2",
"nice_v2",
"welcome",
"tosspay_v2"
],
"x-portone-category": "billingkey",
"x-portone-per-pg": {
"paypal_v2": {
"description": "연동 유의사항\n\n빌링키 발급 수단 및 정보를 알 수 없음\n\n페이팔을 통해 다양한 수단으로 빌링키 발급이 가능하지만, 페이팔이 승인 된 빌링키 발급 수단 및 정보를 알려주지 않습니다.\n따라서 페이팔 빌링키 발급 건의 결제 수단(pay_method)은 모두 **paypal**로 일괄 저장되며 발급 된 빌링키 정보 조회시 카드 정보는 모두 **null**로 내려갑니다.\n```json\n\\\\ GET /subscribe/customers/{customer_uid}\n{\n ...중략\n pg_provider: 'paypal_v2',\n customer_uid: '{customer_uid}'\n card_name: null,\n card_code: null,\n card_number: null,\n card_type: null,\n}\n```\n "
}
}
},
"post": {
"tags": [
"subscribe.customer"
],
"summary": "빌링키 발급 API",
"description": "구매자에 대해 빌링키 발급 및 저장 <br> 해당 빌링키 발급 API는 PG사와 협의가 완료된 경우 이용 가능한 서비스입니다.\n <ul> <li>PG사 협의를 통해 카드정보 필수 조건 값 조정이 가능합니다.</li>\n <li>민감한 카드정보를 이용하기 때문에 보안에 특히 유의하셔야 합니다.</li>\n <li>customer_uid 값은 <b>고객 & 카드번호</b> 단위별로 고유하게 발급 관리되어야 합니다</li>\n </ul>",
"operationId": "customer_save",
"consumes": [
"application/json",
"application/x-www-form-urlencoded"
],
"produces": [
"application/json"
],
"parameters": [
{
"name": "customer_uid",
"in": "path",
"description": "빌링키와 매핑되며 고객사에서 채번하는 구매자의 결제 수단 식별 고유번호",
"required": true,
"type": "string",
"default": "customer_1234",
"maxLength": 80,
"x-portone-name": "구매자의 결제 수단 식별 고유번호",
"x-portone-description": "빌링키와 매핑되며 고객사에서 채번하는 구매자의 결제 수단 식별 고유번호"
},
{
"name": "pg",
"in": "formData",
"description": "API 방식 비인증 PG설정이 2개 이상인 경우, 결제가 진행되길 원하는 PG사를 지정하실 수 있습니다. pg 파라메터는 <b>{PG사}</b> 혹은 <b>{PG사}.{PG상점아이디}</b> 형태의 문자열입니다. <br>지정하지 않거나 유효하지 않은 값이 전달되면 기본PG설정된 값을 이용해 결제하게 됩니다. <br><ul><li>나이스페이먼츠, KCP 2가지 PG설정이 되어있다면, pg 파라메터로 <b>nice</b> 또는 <b>kcp</b>로 구분 가능</li><li>나이스페이먼츠로부터 2개 이상의 상점아이디를 발급받았다면, <b>nice.MID1</b> 또는 <b>nice.MID2</b>로 구분 가능</li></ul>",
"required": false,
"type": "string",
"maxLength": 80,
"x-portone-name": "PG 구분코드",
"x-portone-description": "빌링키 발급을 받고자 하는 PG사 구분코드"
},
{
"name": "customer_id",
"in": "formData",
"description": "구매자 식별 고유 번호 (필수 : 토스페이먼츠)",
"required": false,
"type": "string",
"x-portone-name": "구매자 ID",
"x-portone-description": "구매자 식별 고유 번호",
"x-portone-per-pg": {
"tosspayments": {
"required": true,
"description": "customer_id는 optional이기 때문에 보내지 않아도 동작은 하지만 보내지 않으면\n (포트원이 빌링키 발급 요청시마다 customer_id에 uuid값을 채번하기 때문에)\n 구매자와 결제수단은 매칭되지 않으니 유념하시기 바랍니다."
}
}
},
{
"name": "card_number",
"in": "formData",
"description": "카드번호(dddd-dddd-dddd-dddd)",
"required": true,
"type": "string",
"x-portone-name": "카드번호",
"x-portone-description": "빌링키 발급 하고자 하는 카드의 번호(`dddd-dddd-dddd-dddd`)"
},
{
"name": "expiry",
"in": "formData",
"description": "카드 유효기간(YYYY-MM)",
"required": true,
"type": "string",
"x-portone-name": "카드 유효기간",
"x-portone-description": "빌링키 발급 하고자 하는 카드 유효기간(`YYYY-MM`)"
},
{
"name": "birth",
"in": "formData",
"description": "생년월일6자리(법인카드의 경우 사업자등록번호10자리)<br> PG사별로 혹은 계약상황에따라 필수값 여부가 상이합니다.",
"required": false,
"type": "string",
"x-portone-name": "생년월일",
"x-portone-summary": "생년월일6자리",
"x-portone-description": "법인카드의 경우 사업자등록번호10자리\n\nPG사별로 혹은 계약상황에따라 필수값 여부가 상이합니다.",
"x-portone-per-pg": {
"ksnet": {
"required": true
}
}
},
{
"name": "pwd_2digit",
"in": "formData",
"description": "카드비밀번호 앞 2자리로 PG사별로 혹은 계약상황에 따라 필수값 여부가 상이합니다.",
"required": false,
"type": "string",
"x-portone-name": "카드비밀번호 앞 2자리",
"x-portone-summary": "빌링키 발급 하고자 하는 카드비밀번호 앞 2자리",
"x-portone-description": "PG사별 혹은 계약상황에 따라 필수값 여부가 상이합니다.",
"x-portone-per-pg": {
"ksnet": {
"required": true
}
}
},
{
"name": "cvc",
"in": "formData",
"description": "카드 인증번호 (카드 뒷면 3자리, AMEX의 경우 4자리). Paymentwall에서만 사용",
"required": false,
"type": "string",
"x-portone-name": "카드 인증번호",
"x-portone-description": "빌링키 발급 받고자 하는 카드 카드 뒷면 3자리, AMEX의 경우 4자리",
"x-portone-supported-pgs": [
"paymentwall"
],
"x-portone-per-pg": {
"paymentwall": {
"required": true
}
}
},
{
"name": "customer_name",
"in": "formData",
"description": "고객(카드소지자) 관리용 성함",
"required": false,
"type": "string",
"maxLength": 20,
"x-portone-name": "카드소유자명",
"x-portone-description": "고객(카드소지자) 관리용 성함",
"x-portone-per-pg": {
"welcome": {
"required": true
}
}
},
{
"name": "customer_tel",
"in": "formData",
"description": "고객(카드소지자) 전화번호",
"required": false,
"type": "string",
"maxLength": 20,
"x-portone-name": "카드소유자 연락처",
"x-portone-description": "고객(카드소지자) 전화번호"
},
{
"name": "customer_email",
"in": "formData",
"description": "고객(카드소지자) Email",
"required": false,
"type": "string",
"maxLength": 200,
"x-portone-name": "카드소유자 이메일주소",
"x-portone-description": "고객(카드소지자) Email"
},
{
"name": "customer_addr",
"in": "formData",
"description": "고객(카드소지자) 주소",
"required": false,
"type": "string",
"maxLength": 200,
"x-portone-name": "카드소유자 주소",
"x-portone-description": "고객(카드소지자) 주소"
},
{
"name": "customer_postcode",
"in": "formData",
"description": "고객(카드소지자) 우편번호",
"required": false,
"type": "string",
"maxLength": 8,
"x-portone-name": "카드소유자 우편번호",
"x-portone-description": "고객(카드소지자) 우편번호"
},
{
"name": "channel_group_id",
"in": "formData",
"description": "<ul><li>관리자 콘솔의 [연동관리] -> [스마트 라우팅] 메뉴에서 확인할 수 있습니다.</li> <li> 스마트 라우팅 그룹 ID를 지정하여 결제를 요청하면, 스마트 라우팅 그룹 내 활성화 된 모든 채널로 빌링키 발급 요청을 합니다. <br>이때, pg 파라메터는 무시됩니다.</li></ul>",
"required": false,
"type": "string",
"maxLength": 55,
"x-portone-name": "스마트 라우팅 그룹 ID",
"x-portone-description": "스마트 라우팅 그룹 내 활성화 된 모든 채널로 빌링키 발급 요청을 합니다."
}
],
"responses": {
"200": {
"description": "정상 등록 시, 일반 빌링키 발급은 CustomerResponse를 반환하며, channel_group_id를 이용한 슈퍼 빌링키 발급은 SuperBillingKeyResponse를 반환합니다.",
"schema": {
"properties": {
"CustomerResponse": {
"$ref": "#/definitions/CustomerResponse"
},
"SuperBillingKeyResponse": {
"$ref": "#/definitions/SuperBillingKeyResponse"
}
}
}
},
"401": {
"description": "인증 Token이 전달되지 않았거나 유효하지 않은 경우"
}