@portone/mcp-server 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE-APACHE +201 -0
- package/LICENSE-MIT +21 -0
- package/README.md +165 -0
- package/assets/docs/README.md +27 -0
- package/assets/docs/api/backward-compatibility.md +40 -0
- package/assets/docs/blog/posts/2024-02/v2-oom.md +341 -0
- package/assets/docs/blog/posts/2024-02/v2-webhook.md +314 -0
- package/assets/docs/blog/posts/2024-02/v2-zio.md +529 -0
- package/assets/docs/blog/posts/2024-03/tgs.md +238 -0
- package/assets/docs/blog/posts/2024-04/gcp-datastream.md +307 -0
- package/assets/docs/blog/posts/2024-04/solid.md +558 -0
- package/assets/docs/blog/posts/2024-07/v2-event-sourcing-basic.md +231 -0
- package/assets/docs/help/admin-console/analytics/content32.md +270 -0
- package/assets/docs/help/admin-console/console-account/content31.md +94 -0
- package/assets/docs/help/admin-console/console_home/content34.md +82 -0
- package/assets/docs/help/admin-console/integration/content28.md +79 -0
- package/assets/docs/help/admin-console/payment-service/content29.md +260 -0
- package/assets/docs/help/admin-console/pg-settlement/content30.md +352 -0
- package/assets/docs/help/admin-console/platform-settlement/content33-1.md +201 -0
- package/assets/docs/help/api-sdk-2024-12-19.md +64 -0
- package/assets/docs/help/api-sdk-2025-01-15.md +84 -0
- package/assets/docs/help/applepay.md +46 -0
- package/assets/docs/help/content100000.md +46 -0
- package/assets/docs/help/content100002.md +52 -0
- package/assets/docs/help/content100004.md +29 -0
- package/assets/docs/help/content100014.md +50 -0
- package/assets/docs/help/content100015.md +20 -0
- package/assets/docs/help/content100016.md +28 -0
- package/assets/docs/help/content100020.md +28 -0
- package/assets/docs/help/content100022.md +40 -0
- package/assets/docs/help/content100023.md +21 -0
- package/assets/docs/help/content100024.md +25 -0
- package/assets/docs/help/content100025.md +40 -0
- package/assets/docs/help/content100026.md +20 -0
- package/assets/docs/help/content100027.md +24 -0
- package/assets/docs/help/content100029.md +29 -0
- package/assets/docs/help/content100030.md +82 -0
- package/assets/docs/help/content100033.md +44 -0
- package/assets/docs/help/content100035.md +34 -0
- package/assets/docs/help/content100036.md +14 -0
- package/assets/docs/help/content100037.md +16 -0
- package/assets/docs/help/content100038.md +32 -0
- package/assets/docs/help/content100039.md +28 -0
- package/assets/docs/help/content100040.md +31 -0
- package/assets/docs/help/content100041.md +37 -0
- package/assets/docs/help/content100044.md +15 -0
- package/assets/docs/help/content100045.md +21 -0
- package/assets/docs/help/content100046.md +34 -0
- package/assets/docs/help/content100047.md +32 -0
- package/assets/docs/help/content100048.md +25 -0
- package/assets/docs/help/content100049.md +20 -0
- package/assets/docs/help/content100052.md +147 -0
- package/assets/docs/help/content100053.md +40 -0
- package/assets/docs/help/content100054.md +18 -0
- package/assets/docs/help/content100055.md +37 -0
- package/assets/docs/help/content100056.md +15 -0
- package/assets/docs/help/content100057.md +28 -0
- package/assets/docs/help/content100058.md +36 -0
- package/assets/docs/help/content100059.md +23 -0
- package/assets/docs/help/content100060.md +43 -0
- package/assets/docs/help/content200001.md +21 -0
- package/assets/docs/help/content200002.md +38 -0
- package/assets/docs/help/content200005.md +30 -0
- package/assets/docs/help/content200012.md +91 -0
- package/assets/docs/help/content200013.md +52 -0
- package/assets/docs/help/content200015.md +41 -0
- package/assets/docs/help/content200016.md +30 -0
- package/assets/docs/help/content200017.md +39 -0
- package/assets/docs/help/content200018.md +105 -0
- package/assets/docs/help/content200019.md +59 -0
- package/assets/docs/help/content200020.md +42 -0
- package/assets/docs/help/content200023.md +54 -0
- package/assets/docs/help/content200024.md +49 -0
- package/assets/docs/help/content200025.md +68 -0
- package/assets/docs/help/content200027.md +34 -0
- package/assets/docs/help/content200028.md +70 -0
- package/assets/docs/help/content200029.md +71 -0
- package/assets/docs/help/content200030.md +67 -0
- package/assets/docs/help/content200032.md +39 -0
- package/assets/docs/help/content200033.md +21 -0
- package/assets/docs/help/content200034.md +34 -0
- package/assets/docs/help/content200037.md +38 -0
- package/assets/docs/help/content200038.md +50 -0
- package/assets/docs/help/content200039.md +45 -0
- package/assets/docs/help/content200040.md +15 -0
- package/assets/docs/help/content200043.md +23 -0
- package/assets/docs/help/content200044.md +33 -0
- package/assets/docs/help/content200045.md +25 -0
- package/assets/docs/help/content200046.md +104 -0
- package/assets/docs/help/content200048.md +34 -0
- package/assets/docs/help/content200049.md +54 -0
- package/assets/docs/help/content200050.md +43 -0
- package/assets/docs/help/content200051.md +81 -0
- package/assets/docs/help/content51.md +38 -0
- package/assets/docs/help/content61.md +165 -0
- package/assets/docs/help/core-service/channel-setting/danal.md +170 -0
- package/assets/docs/help/core-service/channel-setting/daou.md +118 -0
- package/assets/docs/help/core-service/channel-setting/eximbay.md +136 -0
- package/assets/docs/help/core-service/channel-setting/inicis.md +340 -0
- package/assets/docs/help/core-service/channel-setting/kakaopay.md +107 -0
- package/assets/docs/help/core-service/channel-setting/kcp_channel.md +235 -0
- package/assets/docs/help/core-service/channel-setting/kicc.md +114 -0
- package/assets/docs/help/core-service/channel-setting/kpn.md +93 -0
- package/assets/docs/help/core-service/channel-setting/ksnet.md +116 -0
- package/assets/docs/help/core-service/channel-setting/mobilians.md +107 -0
- package/assets/docs/help/core-service/channel-setting/naverpay.md +179 -0
- package/assets/docs/help/core-service/channel-setting/nice.md +210 -0
- package/assets/docs/help/core-service/channel-setting/payco.md +124 -0
- package/assets/docs/help/core-service/channel-setting/paymentwall.md +107 -0
- package/assets/docs/help/core-service/channel-setting/paypal.md +247 -0
- package/assets/docs/help/core-service/channel-setting/settle.md +123 -0
- package/assets/docs/help/core-service/channel-setting/smartro.md +164 -0
- package/assets/docs/help/core-service/channel-setting/smilepay.md +83 -0
- package/assets/docs/help/core-service/channel-setting/tosspay.md +168 -0
- package/assets/docs/help/core-service/channel-setting/tosspayments.md +232 -0
- package/assets/docs/help/core-service/channel-setting/welcome.md +110 -0
- package/assets/docs/help/core-service/how-to-use/additional-danal.md +71 -0
- package/assets/docs/help/core-service/how-to-use/additional-daou.md +65 -0
- package/assets/docs/help/core-service/how-to-use/additional-eximbay.md +54 -0
- package/assets/docs/help/core-service/how-to-use/additional-inicis.md +97 -0
- package/assets/docs/help/core-service/how-to-use/additional-kakaopay.md +56 -0
- package/assets/docs/help/core-service/how-to-use/additional-kcp.md +53 -0
- package/assets/docs/help/core-service/how-to-use/additional-kicc.md +67 -0
- package/assets/docs/help/core-service/how-to-use/additional-ksnet.md +68 -0
- package/assets/docs/help/core-service/how-to-use/additional-mobilians.md +71 -0
- package/assets/docs/help/core-service/how-to-use/additional-naverpay-order.md +69 -0
- package/assets/docs/help/core-service/how-to-use/additional-naverpay.md +72 -0
- package/assets/docs/help/core-service/how-to-use/additional-nice.md +112 -0
- package/assets/docs/help/core-service/how-to-use/additional-payco.md +68 -0
- package/assets/docs/help/core-service/how-to-use/additional-settle.md +70 -0
- package/assets/docs/help/core-service/how-to-use/additional-smartro.md +70 -0
- package/assets/docs/help/core-service/how-to-use/additional-tosspay.md +57 -0
- package/assets/docs/help/core-service/how-to-use/additional-tosspayments.md +47 -0
- package/assets/docs/help/core-service/how-to-use/additional-welcome.md +72 -0
- package/assets/docs/help/core-service/how-to-use/cancel-deadline-by-paymethod.md +68 -0
- package/assets/docs/help/core-service/how-to-use/cancel-guide-using-admin-console.md +49 -0
- package/assets/docs/help/core-service/how-to-use/cancel-reversal.md +114 -0
- package/assets/docs/help/core-service/how-to-use/cellphone-identity-verification.md +62 -0
- package/assets/docs/help/core-service/how-to-use/content200000.md +72 -0
- package/assets/docs/help/core-service/how-to-use/content200009.md +83 -0
- package/assets/docs/help/core-service/how-to-use/danal-contract.md +82 -0
- package/assets/docs/help/core-service/how-to-use/daou-contract.md +82 -0
- package/assets/docs/help/core-service/how-to-use/eximbay-contract.md +75 -0
- package/assets/docs/help/core-service/how-to-use/high-risk-industry.md +554 -0
- package/assets/docs/help/core-service/how-to-use/identity-verification-value.md +61 -0
- package/assets/docs/help/core-service/how-to-use/impossible-partial-cancel.md +53 -0
- package/assets/docs/help/core-service/how-to-use/information-pg.md +151 -0
- package/assets/docs/help/core-service/how-to-use/inicis-contract.md +95 -0
- package/assets/docs/help/core-service/how-to-use/inicis-vat.md +45 -0
- package/assets/docs/help/core-service/how-to-use/inicis-vbank-refund.md +45 -0
- package/assets/docs/help/core-service/how-to-use/kakao-contract.md +73 -0
- package/assets/docs/help/core-service/how-to-use/kakaopay-contract.md +41 -0
- package/assets/docs/help/core-service/how-to-use/kcp-contract.md +82 -0
- package/assets/docs/help/core-service/how-to-use/kcp-vat.md +39 -0
- package/assets/docs/help/core-service/how-to-use/kcp-vbank-refund.md +46 -0
- package/assets/docs/help/core-service/how-to-use/kicc-contract.md +81 -0
- package/assets/docs/help/core-service/how-to-use/ksnet-contract.md +78 -0
- package/assets/docs/help/core-service/how-to-use/mobilians-contract.md +81 -0
- package/assets/docs/help/core-service/how-to-use/naverpay-contract.md +86 -0
- package/assets/docs/help/core-service/how-to-use/naverpay-order-1.md +36 -0
- package/assets/docs/help/core-service/how-to-use/naverpay-order-contract.md +88 -0
- package/assets/docs/help/core-service/how-to-use/naverpay-order-diff.md +66 -0
- package/assets/docs/help/core-service/how-to-use/naverpay-order-review-items.md +66 -0
- package/assets/docs/help/core-service/how-to-use/naverpay-review-items.md +199 -0
- package/assets/docs/help/core-service/how-to-use/nice-contract.md +81 -0
- package/assets/docs/help/core-service/how-to-use/open-immediately.md +60 -0
- package/assets/docs/help/core-service/how-to-use/other-hosting-company.md +38 -0
- package/assets/docs/help/core-service/how-to-use/payco-contract.md +74 -0
- package/assets/docs/help/core-service/how-to-use/payment-settlement-method.md +30 -0
- package/assets/docs/help/core-service/how-to-use/paymentwall-contract.md +85 -0
- package/assets/docs/help/core-service/how-to-use/paypal-contract.md +66 -0
- package/assets/docs/help/core-service/how-to-use/point-service.md +293 -0
- package/assets/docs/help/core-service/how-to-use/refund-date.md +66 -0
- package/assets/docs/help/core-service/how-to-use/requirements.md +100 -0
- package/assets/docs/help/core-service/how-to-use/settle-contract.md +79 -0
- package/assets/docs/help/core-service/how-to-use/shopify-available-list.md +65 -0
- package/assets/docs/help/core-service/how-to-use/shopify-guide.md +62 -0
- package/assets/docs/help/core-service/how-to-use/small-business-commission-fee.md +55 -0
- package/assets/docs/help/core-service/how-to-use/smartro-contract.md +77 -0
- package/assets/docs/help/core-service/how-to-use/test-mode-cancel.md +63 -0
- package/assets/docs/help/core-service/how-to-use/tosspay-contract.md +82 -0
- package/assets/docs/help/core-service/how-to-use/tosspayments-contract.md +82 -0
- package/assets/docs/help/core-service/how-to-use/welcome-contract.md +81 -0
- package/assets/docs/help/core-service/how-to-use/withsoft-guide.md +69 -0
- package/assets/docs/help/core-service/how-to-use/wordpress-available-pg.md +49 -0
- package/assets/docs/help/core-service/how-to-use/wordpress-setting.md +50 -0
- package/assets/docs/help/core-service/payment-type/billing-key.md +72 -0
- package/assets/docs/help/core-service/payment-type/content200003.md +39 -0
- package/assets/docs/help/core-service/payment-type/content200007.md +176 -0
- package/assets/docs/help/core-service/payment-type/content200036.md +37 -0
- package/assets/docs/help/core-service/payment-type/content200042.md +150 -0
- package/assets/docs/help/core-service/payment-type/content200047.md +215 -0
- package/assets/docs/help/core-service/payment-type/content200052.md +142 -0
- package/assets/docs/help/core-service/payment-type/content200053.md +128 -0
- package/assets/docs/help/core-service/payment-type/crossborder.md +132 -0
- package/assets/docs/help/core-service/payment-type/eximbay-international.md +96 -0
- package/assets/docs/help/core-service/payment-type/hub-service-fee.md +79 -0
- package/assets/docs/help/core-service/payment-type/inicis-easypay-hub-fee.md +45 -0
- package/assets/docs/help/core-service/payment-type/inicis-international.md +65 -0
- package/assets/docs/help/core-service/payment-type/internationl-high-risk-industry.md +267 -0
- package/assets/docs/help/core-service/payment-type/internationl-pg.md +42 -0
- package/assets/docs/help/core-service/payment-type/kcp-easypay-hub-apply.md +49 -0
- package/assets/docs/help/core-service/payment-type/kcp-international.md +60 -0
- package/assets/docs/help/core-service/payment-type/nice-easypay-hub-fee.md +72 -0
- package/assets/docs/help/core-service/payment-type/nice-international.md +51 -0
- package/assets/docs/help/core-service/payment-type/paymentwall-international.md +84 -0
- package/assets/docs/help/core-service/payment-type/paypal-international.md +86 -0
- package/assets/docs/help/core-service/payment-type/paypal-payment-status.md +55 -0
- package/assets/docs/help/core-service/payment-type/schedule-logic-guide.md +49 -0
- package/assets/docs/help/core-service/payment-type/schedule-requirement.md +111 -0
- package/assets/docs/help/core-service/payment-type/schedule-validity-guide.md +68 -0
- package/assets/docs/help/core-service/payment-type/tosspayment-international.md +54 -0
- package/assets/docs/help/core-service/payment-type/tosspayments-easypay-hub-fee.md +42 -0
- package/assets/docs/help/core-service/payment-type/webhook-re-send.md +41 -0
- package/assets/docs/help/faq/console-faq/2-depth-auth.md +53 -0
- package/assets/docs/help/faq/console-faq/add-admin-account.md +42 -0
- package/assets/docs/help/faq/console-faq/change-console-url.md +51 -0
- package/assets/docs/help/faq/console-faq/impossible-login.md +30 -0
- package/assets/docs/help/faq/console-faq/payment-list.md +45 -0
- package/assets/docs/help/faq/console-faq/sub-store-mgnt.md +97 -0
- package/assets/docs/help/faq/general-inquiry/change-business-number.md +32 -0
- package/assets/docs/help/faq/general-inquiry/confirm-process.md +118 -0
- package/assets/docs/help/faq/general-inquiry/content200004.md +55 -0
- package/assets/docs/help/faq/general-inquiry/content200006.md +86 -0
- package/assets/docs/help/faq/general-inquiry/content200011.md +24 -0
- package/assets/docs/help/faq/general-inquiry/content200031.md +194 -0
- package/assets/docs/help/faq/general-inquiry/content200041.md +21 -0
- package/assets/docs/help/faq/general-inquiry/contract-checkpoint.md +49 -0
- package/assets/docs/help/faq/general-inquiry/main-user.md +56 -0
- package/assets/docs/help/faq/general-inquiry/platform-contract-method.md +67 -0
- package/assets/docs/help/faq/general-inquiry/platform-contract-pg.md +234 -0
- package/assets/docs/help/faq/general-inquiry/portone-advantages.md +71 -0
- package/assets/docs/help/faq/general-inquiry/real-channel-info.md +70 -0
- package/assets/docs/help/faq/general-inquiry/what-is-the-small-business-fee.md +41 -0
- package/assets/docs/help/faq/payment-faq/business-card-available.md +55 -0
- package/assets/docs/help/faq/payment-faq/business-info-change.md +96 -0
- package/assets/docs/help/faq/payment-faq/cancel-deadline.md +32 -0
- package/assets/docs/help/faq/payment-faq/cancel-guide.md +48 -0
- package/assets/docs/help/faq/payment-faq/cash-receipt-guide.md +64 -0
- package/assets/docs/help/faq/payment-faq/content200022.md +73 -0
- package/assets/docs/help/faq/payment-faq/pg-max-min-amount.md +158 -0
- package/assets/docs/help/faq/payment-faq/receipt-guide.md +38 -0
- package/assets/docs/help/faq/payment-faq/tosspayments-cash-receipt.md +32 -0
- package/assets/docs/help/faq/payment-faq/vbank-info.md +35 -0
- package/assets/docs/help/faq/payment-faq/vbank-service-detail.md +67 -0
- package/assets/docs/help/faq/payment-faq/vbank-test-guide.md +65 -0
- package/assets/docs/help/faq/platform-faq/platform_function_partnerbulkupload.md +190 -0
- package/assets/docs/help/faq/platform-faq/platform_infosec.md +56 -0
- package/assets/docs/help/faq/platform-faq/platform_nocode_guide.md +104 -0
- package/assets/docs/help/faq/platform-faq/platform_payout_guide.md +75 -0
- package/assets/docs/help/faq/platform-faq/platform_policymanagement_calculator.md +73 -0
- package/assets/docs/help/faq/platform-faq/platform_settlmentandpayout_guide.md +83 -0
- package/assets/docs/help/faq/platform-faq/platform_tax_setting_guide.md +108 -0
- package/assets/docs/help/faq/platform-faq/taxinvoice_guide.md +107 -0
- package/assets/docs/help/faq/platform-faq/taxinvoice_signupemail.md +67 -0
- package/assets/docs/help/holidays.md +29 -0
- package/assets/docs/help/notice-kakaopay-2025-06-30.md +47 -0
- package/assets/docs/help/platform-2024-11-07.md +73 -0
- package/assets/docs/help/platform-2024-11-25.md +91 -0
- package/assets/docs/help/platform-2024-12-10.md +71 -0
- package/assets/docs/help/platform-2025-03-04.md +54 -0
- package/assets/docs/help/platform-2025-04-03.md +105 -0
- package/assets/docs/help/platform-2025-04-08.md +120 -0
- package/assets/docs/help/platform-2025-05-14.md +70 -0
- package/assets/docs/help/platform-2025-1-16.md +65 -0
- package/assets/docs/help/platform-2025-2-10.md +75 -0
- package/assets/docs/help/platform-2025-2-13.md +43 -0
- package/assets/docs/help/portone-service/portone-service/content50.md +80 -0
- package/assets/docs/help/pricing/pg/domestic-and-oversea-fees.md +34 -0
- package/assets/docs/help/pricing/portone/portone-pricing.md +116 -0
- package/assets/docs/help/procedure/payment-integration/real-integration.md +43 -0
- package/assets/docs/help/procedure/payment-integration/test-integration.md +91 -0
- package/assets/docs/help/procedure/pg-application/content53.md +49 -0
- package/assets/docs/help/procedure/pg-application/content54.md +136 -0
- package/assets/docs/help/procedure/pg-application/content59.md +53 -0
- package/assets/docs/help/procedure/pg-application/start.md +154 -0
- package/assets/docs/help/procedure/recommendation/package.md +98 -0
- package/assets/docs/help/procedure/service-addition/add-service.md +98 -0
- package/assets/docs/help/recon_issue1.md +25 -0
- package/assets/docs/help/recon_issue2.md +29 -0
- package/assets/docs/help/service/identity-verification/identity-verification.md +65 -0
- package/assets/docs/help/service/integration-type/integration-type.md +49 -0
- package/assets/docs/help/service/payment-type/payment-type.md +100 -0
- package/assets/docs/help/service/paymethod/paymethod.md +100 -0
- package/assets/docs/help/service/pg/pg-service-list.md +339 -0
- package/assets/docs/help/service/version/portone-version.md +61 -0
- package/assets/docs/opi/ko/console/guide/account.md +111 -0
- package/assets/docs/opi/ko/console/guide/api-keys.md +34 -0
- package/assets/docs/opi/ko/console/guide/billing-payments.md +312 -0
- package/assets/docs/opi/ko/console/guide/channel-manage.md +303 -0
- package/assets/docs/opi/ko/console/guide/connect.md +84 -0
- package/assets/docs/opi/ko/console/guide/home.md +37 -0
- package/assets/docs/opi/ko/console/guide/integration.md +18 -0
- package/assets/docs/opi/ko/console/guide/list.md +183 -0
- package/assets/docs/opi/ko/console/guide/pay.md +14 -0
- package/assets/docs/opi/ko/console/guide/payments.md +298 -0
- package/assets/docs/opi/ko/console/guide/promotion.md +140 -0
- package/assets/docs/opi/ko/console/guide/readme.md +22 -0
- package/assets/docs/opi/ko/console/guide/reg.md +159 -0
- package/assets/docs/opi/ko/console/guide/smartrouting.md +74 -0
- package/assets/docs/opi/ko/console/pg.md +92 -0
- package/assets/docs/opi/ko/etc/recon.md +286 -0
- package/assets/docs/opi/ko/extra/confirm-process/readme-v1.md +98 -0
- package/assets/docs/opi/ko/extra/confirm-process/readme-v2.md +152 -0
- package/assets/docs/opi/ko/extra/identity-verification/readme-v2.md +261 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/all/0.md +35 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/all/1.md +44 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/all/2.md +75 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/all/3.md +134 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/all/readme.md +17 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/credit-auth/1.md +35 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/credit-auth/2.md +78 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/credit-auth/3.md +75 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/credit-auth/4.md +134 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/credit-auth/readme.md +17 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/phone/1.md +37 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/phone/2.md +86 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/phone/3.md +77 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/phone/4.md +149 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/phone/readme.md +19 -0
- package/assets/docs/opi/ko/extra/identity-verification/v1/readme.md +9 -0
- package/assets/docs/opi/ko/extra/link-pay/readme-v1.md +235 -0
- package/assets/docs/opi/ko/extra/plugins/readme-v1.md +7 -0
- package/assets/docs/opi/ko/extra/plugins/shopify/readme-v1.md +54 -0
- package/assets/docs/opi/ko/extra/plugins/shopify/shopify/shopify-1.md +16 -0
- package/assets/docs/opi/ko/extra/plugins/shopify/shopify/shopify-2.md +32 -0
- package/assets/docs/opi/ko/extra/plugins/shopify/shopify/shopify-3.md +16 -0
- package/assets/docs/opi/ko/extra/plugins/shopify/shopify/shopify-4.md +35 -0
- package/assets/docs/opi/ko/extra/plugins/shopify/shopify/shopify-5.md +27 -0
- package/assets/docs/opi/ko/extra/plugins/wordpress/button.md +166 -0
- package/assets/docs/opi/ko/extra/plugins/wordpress/edd.md +56 -0
- package/assets/docs/opi/ko/extra/plugins/wordpress/readme-v1.md +10 -0
- package/assets/docs/opi/ko/extra/plugins/wordpress/woocommerce/payment.md +62 -0
- package/assets/docs/opi/ko/extra/plugins/wordpress/woocommerce/readme.md +30 -0
- package/assets/docs/opi/ko/extra/plugins/wordpress/woocommerce/subscription.md +60 -0
- package/assets/docs/opi/ko/extra/plugins/wordpress/woocommerce/vbank.md +64 -0
- package/assets/docs/opi/ko/extra/promotion/console-guide.md +148 -0
- package/assets/docs/opi/ko/extra/promotion/integration.md +769 -0
- package/assets/docs/opi/ko/extra/promotion/intro.md +31 -0
- package/assets/docs/opi/ko/extra/promotion/refund.md +316 -0
- package/assets/docs/opi/ko/extra/smart-routing/console-guide.md +73 -0
- package/assets/docs/opi/ko/extra/smart-routing/integration.md +1324 -0
- package/assets/docs/opi/ko/extra/smart-routing/intro.md +155 -0
- package/assets/docs/opi/ko/integration/cancel/v1/basic.md +324 -0
- package/assets/docs/opi/ko/integration/cancel/v1/virtual-account.md +99 -0
- package/assets/docs/opi/ko/integration/cancel/v2/readme.md +378 -0
- package/assets/docs/opi/ko/integration/checklist/readme-v1.md +83 -0
- package/assets/docs/opi/ko/integration/pg/v1/blue.md +99 -0
- package/assets/docs/opi/ko/integration/pg/v1/danal.md +409 -0
- package/assets/docs/opi/ko/integration/pg/v1/daou/readme.md +305 -0
- package/assets/docs/opi/ko/integration/pg/v1/daou/undefined.md +214 -0
- package/assets/docs/opi/ko/integration/pg/v1/eximbay.md +242 -0
- package/assets/docs/opi/ko/integration/pg/v1/hyphen.md +196 -0
- package/assets/docs/opi/ko/integration/pg/v1/inicis.md +444 -0
- package/assets/docs/opi/ko/integration/pg/v1/kakaopay.md +207 -0
- package/assets/docs/opi/ko/integration/pg/v1/kcp-v2-identity-verification.md +188 -0
- package/assets/docs/opi/ko/integration/pg/v1/kg.md +177 -0
- package/assets/docs/opi/ko/integration/pg/v1/kicc.md +308 -0
- package/assets/docs/opi/ko/integration/pg/v1/ksnet/readme.md +533 -0
- package/assets/docs/opi/ko/integration/pg/v1/ksnet/warning.md +175 -0
- package/assets/docs/opi/ko/integration/pg/v1/naver.md +558 -0
- package/assets/docs/opi/ko/integration/pg/v1/newtoss/readme.md +503 -0
- package/assets/docs/opi/ko/integration/pg/v1/newtoss/warning.md +364 -0
- package/assets/docs/opi/ko/integration/pg/v1/nhn-kcp.md +1186 -0
- package/assets/docs/opi/ko/integration/pg/v1/nice-v2/billing-api-caution.md +150 -0
- package/assets/docs/opi/ko/integration/pg/v1/nice-v2/payment-caution.md +429 -0
- package/assets/docs/opi/ko/integration/pg/v1/nice-v2/readme.md +364 -0
- package/assets/docs/opi/ko/integration/pg/v1/nice.md +319 -0
- package/assets/docs/opi/ko/integration/pg/v1/payco.md +201 -0
- package/assets/docs/opi/ko/integration/pg/v1/paymentwall.md +283 -0
- package/assets/docs/opi/ko/integration/pg/v1/paypal.md +158 -0
- package/assets/docs/opi/ko/integration/pg/v1/readme.md +73 -0
- package/assets/docs/opi/ko/integration/pg/v1/rt/readme.md +501 -0
- package/assets/docs/opi/ko/integration/pg/v1/rt/warning.md +297 -0
- package/assets/docs/opi/ko/integration/pg/v1/settle/mybank.md +304 -0
- package/assets/docs/opi/ko/integration/pg/v1/settle/readme.md +185 -0
- package/assets/docs/opi/ko/integration/pg/v1/smartro-v2/api.md +197 -0
- package/assets/docs/opi/ko/integration/pg/v1/smartro-v2/caution.md +387 -0
- package/assets/docs/opi/ko/integration/pg/v1/smartro-v2/readme.md +293 -0
- package/assets/docs/opi/ko/integration/pg/v1/smartro.md +104 -0
- package/assets/docs/opi/ko/integration/pg/v1/smilepay.md +97 -0
- package/assets/docs/opi/ko/integration/pg/v1/spb/readme.md +441 -0
- package/assets/docs/opi/ko/integration/pg/v1/spb/stc.md +226 -0
- package/assets/docs/opi/ko/integration/pg/v1/spb/warning.md +729 -0
- package/assets/docs/opi/ko/integration/pg/v1/toss-brandpay/module.md +227 -0
- package/assets/docs/opi/ko/integration/pg/v1/toss-brandpay/readme.md +404 -0
- package/assets/docs/opi/ko/integration/pg/v1/toss-brandpay/warning.md +81 -0
- package/assets/docs/opi/ko/integration/pg/v1/toss-brandpay/widget.md +152 -0
- package/assets/docs/opi/ko/integration/pg/v1/toss.md +112 -0
- package/assets/docs/opi/ko/integration/pg/v1/tosspay-v2/caution.md +65 -0
- package/assets/docs/opi/ko/integration/pg/v1/tosspay-v2/readme.md +308 -0
- package/assets/docs/opi/ko/integration/pg/v1/tosspay.md +110 -0
- package/assets/docs/opi/ko/integration/pg/v1/welcome/api.md +229 -0
- package/assets/docs/opi/ko/integration/pg/v1/welcome/caution.md +517 -0
- package/assets/docs/opi/ko/integration/pg/v1/welcome/readme.md +795 -0
- package/assets/docs/opi/ko/integration/pg/v2/danal-identity-verification.md +121 -0
- package/assets/docs/opi/ko/integration/pg/v2/eximbay-v2.md +964 -0
- package/assets/docs/opi/ko/integration/pg/v2/hyphen.md +205 -0
- package/assets/docs/opi/ko/integration/pg/v2/inicis-jp.md +403 -0
- package/assets/docs/opi/ko/integration/pg/v2/inicis-unified-identity-verification.md +89 -0
- package/assets/docs/opi/ko/integration/pg/v2/inicis-v2.md +1598 -0
- package/assets/docs/opi/ko/integration/pg/v2/kakaopay.md +108 -0
- package/assets/docs/opi/ko/integration/pg/v2/kcp-v2-identity-verification.md +291 -0
- package/assets/docs/opi/ko/integration/pg/v2/kcp-v2.md +1273 -0
- package/assets/docs/opi/ko/integration/pg/v2/kpn.md +1133 -0
- package/assets/docs/opi/ko/integration/pg/v2/ksnet.md +526 -0
- package/assets/docs/opi/ko/integration/pg/v2/naverpay.md +186 -0
- package/assets/docs/opi/ko/integration/pg/v2/nice-v2.md +868 -0
- package/assets/docs/opi/ko/integration/pg/v2/payletter-global.md +62 -0
- package/assets/docs/opi/ko/integration/pg/v2/paypal-v2.md +1874 -0
- package/assets/docs/opi/ko/integration/pg/v2/readme.md +194 -0
- package/assets/docs/opi/ko/integration/pg/v2/smartro-v2.md +1043 -0
- package/assets/docs/opi/ko/integration/pg/v2/tosspay-v2.md +433 -0
- package/assets/docs/opi/ko/integration/pg/v2/tosspayments.md +551 -0
- package/assets/docs/opi/ko/integration/pg/v2/welcome.md +1441 -0
- package/assets/docs/opi/ko/integration/ready/readme.md +1069 -0
- package/assets/docs/opi/ko/integration/start/v1/auth.md +483 -0
- package/assets/docs/opi/ko/integration/start/v1/non-auth.md +420 -0
- package/assets/docs/opi/ko/integration/start/v1/readme.md +9 -0
- package/assets/docs/opi/ko/integration/start/v2/billing/issue.md +122 -0
- package/assets/docs/opi/ko/integration/start/v2/billing/payment.md +41 -0
- package/assets/docs/opi/ko/integration/start/v2/billing/readme.md +24 -0
- package/assets/docs/opi/ko/integration/start/v2/billing/schedule.md +54 -0
- package/assets/docs/opi/ko/integration/start/v2/checkout.md +258 -0
- package/assets/docs/opi/ko/integration/start/v2/keyin.md +54 -0
- package/assets/docs/opi/ko/integration/start/v2/readme.md +120 -0
- package/assets/docs/opi/ko/integration/using-ai-tools.md +140 -0
- package/assets/docs/opi/ko/integration/virtual-account/readme.md +268 -0
- package/assets/docs/opi/ko/integration/webhook/readme-v1.md +242 -0
- package/assets/docs/opi/ko/integration/webhook/readme-v2.md +599 -0
- package/assets/docs/opi/ko/quick-guide/payment.md +3305 -0
- package/assets/docs/opi/ko/readme.md +193 -0
- package/assets/docs/opi/ko/support/agency-and-tier.md +51 -0
- package/assets/docs/opi/ko/support/code-info/card-code.md +29 -0
- package/assets/docs/opi/ko/support/code-info/code.md +22 -0
- package/assets/docs/opi/ko/support/code-info/pg-1.md +161 -0
- package/assets/docs/opi/ko/support/code-info/pg-2.md +41 -0
- package/assets/docs/opi/ko/support/code-info/pg-3.md +36 -0
- package/assets/docs/opi/ko/support/code-info/pg.md +41 -0
- package/assets/docs/opi/ko/support/code-info/portone-code.md +15 -0
- package/assets/docs/opi/ko/support/code-info/readme.md +20 -0
- package/assets/docs/opi/ko/support/contact.md +23 -0
- package/assets/docs/opi/ko/support/faq/undefined.md +60 -0
- package/assets/docs/opi/ko/support/flow.md +24 -0
- package/assets/docs/opi/ko/support/redirect.md +26 -0
- package/assets/docs/opi/ko/support/tax.md +142 -0
- package/assets/docs/opi/ko/support/tls-support.md +497 -0
- package/assets/docs/platform/ko/guides/dictionary.md +20 -0
- package/assets/docs/platform/ko/guides/process.md +33 -0
- package/assets/docs/platform/ko/guides/webhook.md +171 -0
- package/assets/docs/platform/ko/readme.md +64 -0
- package/assets/docs/platform/ko/usages/client.md +17 -0
- package/assets/docs/platform/ko/usages/contract.md +126 -0
- package/assets/docs/platform/ko/usages/discount.md +89 -0
- package/assets/docs/platform/ko/usages/fee.md +97 -0
- package/assets/docs/platform/ko/usages/order.md +1666 -0
- package/assets/docs/platform/ko/usages/partner.md +115 -0
- package/assets/docs/platform/ko/using-ai-tools.md +140 -0
- package/assets/docs/release-notes/api-sdk/2023-04-24.md +10 -0
- package/assets/docs/release-notes/api-sdk/2023-05-08.md +22 -0
- package/assets/docs/release-notes/api-sdk/2023-05-12.md +24 -0
- package/assets/docs/release-notes/api-sdk/2023-05-22.md +46 -0
- package/assets/docs/release-notes/api-sdk/2023-05-25.md +15 -0
- package/assets/docs/release-notes/api-sdk/2023-06-19.md +20 -0
- package/assets/docs/release-notes/api-sdk/2023-07-03.md +26 -0
- package/assets/docs/release-notes/api-sdk/2023-07-10.md +35 -0
- package/assets/docs/release-notes/api-sdk/2023-07-17.md +31 -0
- package/assets/docs/release-notes/api-sdk/2023-07-31.md +14 -0
- package/assets/docs/release-notes/api-sdk/2023-08-31.md +29 -0
- package/assets/docs/release-notes/api-sdk/2023-12-15.md +12 -0
- package/assets/docs/release-notes/api-sdk/2024-01-08.md +36 -0
- package/assets/docs/release-notes/api-sdk/2024-01-11.md +18 -0
- package/assets/docs/release-notes/api-sdk/2024-01-25.md +35 -0
- package/assets/docs/release-notes/api-sdk/2024-01-30.md +19 -0
- package/assets/docs/release-notes/api-sdk/2024-02-23.md +26 -0
- package/assets/docs/release-notes/api-sdk/2024-03-08.md +12 -0
- package/assets/docs/release-notes/api-sdk/2024-03-15.md +30 -0
- package/assets/docs/release-notes/api-sdk/2024-03-25.md +23 -0
- package/assets/docs/release-notes/api-sdk/2024-04-01.md +37 -0
- package/assets/docs/release-notes/api-sdk/2024-04-05.md +10 -0
- package/assets/docs/release-notes/api-sdk/2024-04-12.md +32 -0
- package/assets/docs/release-notes/api-sdk/2024-05-08.md +34 -0
- package/assets/docs/release-notes/api-sdk/2024-05-14.md +17 -0
- package/assets/docs/release-notes/api-sdk/2024-06-03.md +48 -0
- package/assets/docs/release-notes/api-sdk/2024-06-17.md +37 -0
- package/assets/docs/release-notes/api-sdk/2024-06-19.md +39 -0
- package/assets/docs/release-notes/api-sdk/2024-06-20.md +13 -0
- package/assets/docs/release-notes/api-sdk/2024-07-04.md +15 -0
- package/assets/docs/release-notes/api-sdk/2024-07-11.md +47 -0
- package/assets/docs/release-notes/api-sdk/2024-09-05.md +36 -0
- package/assets/docs/release-notes/api-sdk/2024-09-27.md +27 -0
- package/assets/docs/release-notes/api-sdk/2024-12-19.md +52 -0
- package/assets/docs/release-notes/api-sdk/2025-01-15.md +76 -0
- package/assets/docs/release-notes/api-sdk/2025-05-19.md +49 -0
- package/assets/docs/release-notes/console/2023-04-24.md +41 -0
- package/assets/docs/release-notes/console/2023-05-08.md +6 -0
- package/assets/docs/release-notes/console/2023-05-22.md +15 -0
- package/assets/docs/release-notes/console/2023-07-05.md +29 -0
- package/assets/docs/release-notes/console/2023-07-07.md +25 -0
- package/assets/docs/release-notes/console/2023-07-17.md +16 -0
- package/assets/docs/release-notes/console/2023-08-23.md +17 -0
- package/assets/docs/release-notes/console/2023-09-12.md +16 -0
- package/assets/docs/release-notes/console/2023-12-27.md +24 -0
- package/assets/docs/release-notes/console/2024-09-05.md +23 -0
- package/assets/docs/release-notes/platform/2023-08-31.md +16 -0
- package/assets/docs/release-notes/platform/2023-11-08.md +37 -0
- package/assets/docs/release-notes/platform/2023-11-14.md +28 -0
- package/assets/docs/release-notes/platform/2023-12-15.md +11 -0
- package/assets/docs/release-notes/platform/2024-05-20.md +31 -0
- package/assets/docs/release-notes/platform/2024-05-29.md +159 -0
- package/assets/docs/release-notes/platform/2024-06-05.md +30 -0
- package/assets/docs/release-notes/platform/2024-07-05.md +49 -0
- package/assets/docs/release-notes/platform/2024-07-11.md +62 -0
- package/assets/docs/release-notes/platform/2024-07-30.md +44 -0
- package/assets/docs/release-notes/platform/2024-08-07.md +37 -0
- package/assets/docs/release-notes/platform/2024-08-22.md +111 -0
- package/assets/docs/release-notes/platform/2024-10-21.md +75 -0
- package/assets/docs/release-notes/platform/2024-11-07.md +65 -0
- package/assets/docs/release-notes/platform/2024-11-25.md +82 -0
- package/assets/docs/release-notes/platform/2024-12-10.md +61 -0
- package/assets/docs/release-notes/platform/2025-01-16.md +56 -0
- package/assets/docs/release-notes/platform/2025-02-10.md +67 -0
- package/assets/docs/release-notes/platform/2025-02-13.md +27 -0
- package/assets/docs/release-notes/platform/2025-03-04.md +49 -0
- package/assets/docs/release-notes/platform/2025-03-17.md +40 -0
- package/assets/docs/release-notes/platform/2025-04-03.md +96 -0
- package/assets/docs/release-notes/platform/2025-04-08.md +119 -0
- package/assets/docs/release-notes/platform/2025-05-14.md +77 -0
- package/assets/docs/release-notes/platform/2025-07-02.md +64 -0
- package/assets/docs/release-notes/platform/2025-07-07.md +55 -0
- package/assets/docs/schema/browser-sdk.yml +6349 -0
- package/assets/docs/schema/v1.openapi.json +11632 -0
- package/assets/docs/schema/v1.openapi.yml +11489 -0
- package/assets/docs/schema/v2.graphql +13849 -0
- package/assets/docs/schema/v2.openapi.json +47721 -0
- package/assets/docs/schema/v2.openapi.yml +34749 -0
- package/assets/docs/sdk/ko/readme.md +56 -0
- package/assets/docs/sdk/ko/v1-mobile-sdk/readme.md +31 -0
- package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/cft-rt.md +32 -0
- package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/cft.md +108 -0
- package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/load-module-rt.md +10 -0
- package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/load-module.md +55 -0
- package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/payrq.md +502 -0
- package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/payrt.md +300 -0
- package/assets/docs/sdk/ko/v1-sdk/javascript-sdk/readme.md +46 -0
- package/assets/docs/sdk/ko/v1-sdk/javascript-sdk-old/readme.md +33 -0
- package/assets/docs/sdk/ko/v2-mobile-sdk/android.md +268 -0
- package/assets/docs/sdk/ko/v2-mobile-sdk/react-native.md +239 -0
- package/assets/docs/sdk/ko/v2-mobile-sdk/readme.md +30 -0
- package/assets/docs/sdk/ko/v2-sdk/billing-key-and-pay-request.md +26 -0
- package/assets/docs/sdk/ko/v2-sdk/billing-key-and-pay-response.md +15 -0
- package/assets/docs/sdk/ko/v2-sdk/billing-key-request.md +24 -0
- package/assets/docs/sdk/ko/v2-sdk/billing-key-response.md +15 -0
- package/assets/docs/sdk/ko/v2-sdk/changelog.md +8 -0
- package/assets/docs/sdk/ko/v2-sdk/identity-verification-request.md +15 -0
- package/assets/docs/sdk/ko/v2-sdk/identity-verification-response.md +15 -0
- package/assets/docs/sdk/ko/v2-sdk/load-issue-billing-key-ui-request.md +15 -0
- package/assets/docs/sdk/ko/v2-sdk/load-issue-billing-key-ui-response.md +23 -0
- package/assets/docs/sdk/ko/v2-sdk/load-payment-ui-request.md +15 -0
- package/assets/docs/sdk/ko/v2-sdk/load-payment-ui-response.md +23 -0
- package/assets/docs/sdk/ko/v2-sdk/payment-request.md +15 -0
- package/assets/docs/sdk/ko/v2-sdk/payment-response.md +15 -0
- package/assets/docs/sdk/ko/v2-sdk/readme.md +73 -0
- package/assets/docs/sdk/ko/v2-sdk/update-load-issue-billing-key-ui-request.md +15 -0
- package/assets/docs/sdk/ko/v2-sdk/update-load-payment-ui-request.md +15 -0
- package/assets/docs/sdk/ko/v2-server-sdk/javascript.md +170 -0
- package/assets/docs/sdk/ko/v2-server-sdk/jvm.md +170 -0
- package/assets/docs/sdk/ko/v2-server-sdk/python.md +152 -0
- package/assets/docs/sdk/ko/v2-server-sdk/readme.md +259 -0
- package/assets/docs/v1-docs-full.md +36540 -0
- package/assets/docs/v2-docs-full.md +34980 -0
- package/assets/docs/website-links.md +331 -0
- package/assets/instructions.md +19 -0
- package/manifest.json +50 -0
- package/package.json +66 -0
- package/server/index.js +1764 -0
|
@@ -0,0 +1,483 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: 인증 결제 연동하기
|
|
3
|
+
description: PG 결제창을 이용하는 인증 결제를 연동합니다.
|
|
4
|
+
targetVersions:
|
|
5
|
+
- v1
|
|
6
|
+
versionVariants:
|
|
7
|
+
v2: /opi/ko/integration/start/v2/checkout
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## 인증 결제란? <span id="definition" />
|
|
11
|
+
|
|
12
|
+
인증 결제는 결제 시 PG사로부터 결제에 대한 인증 결과 수신 이후 해당 인증키로 결제를 요청하는
|
|
13
|
+
결제 방식을 지칭합니다. 국내에서 제일 많이 볼 수 있는 결제 방식으로 결제 주문 페이지에서 결제가
|
|
14
|
+
요청되면 각 PG사의 결제창이 활성화되고, 그 후 고객이 선택한 카드사에 따른 카드사 전용 결제 모듈에서
|
|
15
|
+
인증이 완료되면 해당 인증값을 통해 결제를 요청하는 흐름으로 결제가 진행됩니다.
|
|
16
|
+
|
|
17
|
+
(이미지 첨부: 일반적인 인증 결제 플로우)
|
|
18
|
+
|
|
19
|
+
<div class="hint" data-style="info">
|
|
20
|
+
|
|
21
|
+
실제 결제 요청을 위한 통신은 고객사 서버와 PG사 서버 간에 직접적으로 이루어지며,
|
|
22
|
+
해당 결제 요청 과정에 카드 정보는 포함되지 않습니다.
|
|
23
|
+
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
인증 결제는 인증 방법에 따라 전통적으로 아래 두 가지 형태로 구분됩니다.
|
|
27
|
+
|
|
28
|
+
- ISP 결제 : 공개 키 기반의 전자인증서를 통해 사전에 등록된 카드 정보를 인증하는 방식
|
|
29
|
+
- MPI 결제 : 카드 번호, CVC, 안심클릭 비밀번호를 입력하여 카드 정보를 인증하는 방식
|
|
30
|
+
|
|
31
|
+
최근에는 대부분의 카드사에서 카드사 자체 간편결제를 지원하고 있으며, 고객은 사전에 카드를
|
|
32
|
+
등록하고 결제 시 결제 비밀번호를 이용하여 간편하게 결제를 요청할 수 있는 구조를 가지고
|
|
33
|
+
있습니다.
|
|
34
|
+
|
|
35
|
+
(이미지 첨부: 인증 결제 사용 예시)
|
|
36
|
+
|
|
37
|
+
## 인증 결제 연동하기
|
|
38
|
+
|
|
39
|
+
<details>
|
|
40
|
+
|
|
41
|
+
<summary>
|
|
42
|
+
|
|
43
|
+
<strong>영상으로 보기</strong>
|
|
44
|
+
|
|
45
|
+
</summary>
|
|
46
|
+
|
|
47
|
+
[포트원 인증 결제의 이해 - 쇼핑몰 멀티PG 연동하기](https://www.youtube.com/watch?v=DhcQFLYV9Q8)
|
|
48
|
+
|
|
49
|
+
</details>
|
|
50
|
+
|
|
51
|
+
### 1. 포트원 SDK 설치하기 <span id="sdk-installation" />
|
|
52
|
+
|
|
53
|
+
포트원은 다양한 PG의 결제창을 통일된 방법으로 호출할 수 있도록 자바스크립트 SDK를 제공합니다.
|
|
54
|
+
브라우저에서 포트원 SDK를 호출하여 결제를 진행하게 됩니다.
|
|
55
|
+
|
|
56
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT START -->
|
|
57
|
+
|
|
58
|
+
결제창 연동을 진행할 주문 페이지에 아래 JS 라이브러리를 추가합니다.
|
|
59
|
+
|
|
60
|
+
```html
|
|
61
|
+
<script src="https://cdn.iamport.kr/v1/iamport.js"></script>
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
[포트원 라이브러리 추가하기](https://www.youtube.com/watch?v=FLyOmbtnr48)
|
|
65
|
+
|
|
66
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT END -->
|
|
67
|
+
|
|
68
|
+
### 2. 결제 요청하기
|
|
69
|
+
|
|
70
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT START -->
|
|
71
|
+
|
|
72
|
+
#### SDK 초기화하기 <span id="sdk-initialization" />
|
|
73
|
+
|
|
74
|
+
포트원 SDK를 사용하여 결제창을 호출하려면, 먼저 포트원 SDK를 초기화하여야 합니다.
|
|
75
|
+
|
|
76
|
+
먼저, 관리자 콘솔의 결제 연동 페이지에서 **고객사 식별코드**를 확인해 주세요.
|
|
77
|
+
|
|
78
|
+
그리고 결제창을 호출할 페이지에서 다음과 같이 포트원 SDK를 초기화합니다.
|
|
79
|
+
|
|
80
|
+
<div class="hint" data-style="warning">
|
|
81
|
+
|
|
82
|
+
아래 초기화 함수를 2회 이상 중복 호출하지 않도록 주의해 주세요.
|
|
83
|
+
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
IMP.init("고객사 식별코드"); // 예: 'imp00000000'
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
##### 하위 상점에서 SDK 초기화하기
|
|
91
|
+
|
|
92
|
+
하위 상점에서 SDK를 초기화하려면, `IMP.init()` 함수 대신 `IMP.agency()` 함수를 사용합니다.
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
IMP.agency("고객사 식별코드", "티어코드"); // 예: 'imp00000000', '123'
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
#### 결제창 불러오기
|
|
99
|
+
|
|
100
|
+
SDK의 `IMP.request_pay()` 함수를 호출하여 결제 수단에 따른 결제창을 열 수 있습니다.
|
|
101
|
+
|
|
102
|
+
아래와 같이 [결제 요청 파라미터](https://developers.portone.io/sdk/ko/v1-sdk/javascript-sdk/payrq)를 `request_pay()` 함수의
|
|
103
|
+
첫 인자로 설정하여 호출합니다.
|
|
104
|
+
|
|
105
|
+
```ts
|
|
106
|
+
IMP.request_pay(
|
|
107
|
+
{
|
|
108
|
+
channelKey: "{콘솔 내 연동 정보의 채널키}",
|
|
109
|
+
pay_method: "card",
|
|
110
|
+
merchant_uid: `payment-${crypto.randomUUID()}`, // 주문 고유 번호
|
|
111
|
+
name: "노르웨이 회전 의자",
|
|
112
|
+
amount: 64900,
|
|
113
|
+
buyer_email: "gildong@gmail.com",
|
|
114
|
+
buyer_name: "홍길동",
|
|
115
|
+
buyer_tel: "010-4242-4242",
|
|
116
|
+
buyer_addr: "서울특별시 강남구 신사동",
|
|
117
|
+
buyer_postcode: "01181",
|
|
118
|
+
},
|
|
119
|
+
function (response) {
|
|
120
|
+
// 결제 종료 시 호출되는 콜백 함수
|
|
121
|
+
// response.imp_uid 값으로 결제 단건조회 API를 호출하여 결제 결과를 확인하고,
|
|
122
|
+
// 결제 결과를 처리하는 로직을 작성합니다.
|
|
123
|
+
},
|
|
124
|
+
);
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
[결제하기 버튼 생성 및 결제창 호출](https://www.youtube.com/watch?v=Gq7r5AUoMKs)
|
|
128
|
+
|
|
129
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT END -->
|
|
130
|
+
|
|
131
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT START -->
|
|
132
|
+
|
|
133
|
+
SDK의 `PortOne.requestPayment()` 함수를 호출하여 결제 수단에 따른 결제창을 열 수 있습니다.
|
|
134
|
+
|
|
135
|
+
먼저, 관리자 콘솔의 결제 연동 페이지에서 **Store ID**와 사용할 채널의 **채널 키**를 확인해 주세요.
|
|
136
|
+
|
|
137
|
+
그리고 아래와 같이 [결제 요청 파라미터](https://developers.portone.io/sdk/ko/v2-sdk/payment-request)를
|
|
138
|
+
`requestPayment()` 함수의 첫 인자로 설정하여 호출합니다.
|
|
139
|
+
|
|
140
|
+
```ts
|
|
141
|
+
const response = await PortOne.requestPayment({
|
|
142
|
+
// Store ID 설정
|
|
143
|
+
storeId: "store-4ff4af41-85e3-4559-8eb8-0d08a2c6ceec",
|
|
144
|
+
// 채널 키 설정
|
|
145
|
+
channelKey: "channel-key-893597d6-e62d-410f-83f9-119f530b4b11",
|
|
146
|
+
paymentId: `payment-${crypto.randomUUID()}`,
|
|
147
|
+
orderName: "나이키 와플 트레이너 2 SD",
|
|
148
|
+
totalAmount: 1000,
|
|
149
|
+
currency: "CURRENCY_KRW",
|
|
150
|
+
payMethod: "CARD",
|
|
151
|
+
});
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT END -->
|
|
155
|
+
|
|
156
|
+
<div class="hint" data-style="info">
|
|
157
|
+
|
|
158
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT START -->
|
|
159
|
+
|
|
160
|
+
**주문 고유 번호(`merchant_uid`) 관련 유의사항**
|
|
161
|
+
|
|
162
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT END -->
|
|
163
|
+
|
|
164
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT START -->
|
|
165
|
+
|
|
166
|
+
**주문 고유 번호(`paymentId`) 관련 유의사항**
|
|
167
|
+
|
|
168
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT END -->
|
|
169
|
+
|
|
170
|
+
- 주문 고유 번호는 개별 결제 요청을 구분하기 위해 사용되는 문자열입니다.
|
|
171
|
+
|
|
172
|
+
- 따라서 주문 고유 번호는 결제 요청 시 항상 **고유한 값**으로 채번되어야 하며,
|
|
173
|
+
결제 완료 이후 결제 기록 조회나 위변조 대사 작업 시 사용되기 때문에
|
|
174
|
+
고객사 **DB 상에 별도로 저장**해야 합니다.
|
|
175
|
+
|
|
176
|
+
</div>
|
|
177
|
+
|
|
178
|
+
### 3. 결제 결과 처리하기 <span id="handle-result" />
|
|
179
|
+
|
|
180
|
+
결제창이 활성화되는 방식에 따라 결제 결과를 획득하는 방법이 상이합니다.
|
|
181
|
+
|
|
182
|
+
일반적으로 PC 환경에서는 iframe 또는 팝업 방식으로 페이지 이동 없이 결제창이 활성화되며,
|
|
183
|
+
따라서 SDK의 반환값을 통해서 결제 결과를 받아 볼 수 있습니다.
|
|
184
|
+
반면, 모바일 환경에서는 일반적으로 새로운 페이지로 리다이렉트되는 방식으로 결제창이 활성화되고,
|
|
185
|
+
SDK의 반환값 대신 URL의 [쿼리 문자열](http://en.wikipedia.org/wiki/Query_string) 형태로
|
|
186
|
+
결제 결과를 받아볼 수 있습니다.
|
|
187
|
+
|
|
188
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT START -->
|
|
189
|
+
|
|
190
|
+
결제창이 활성화되는 방식은 `windowType` 파라미터를 통해 명시적으로 설정할 수 있습니다.
|
|
191
|
+
|
|
192
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT END -->
|
|
193
|
+
|
|
194
|
+
#### SDK 반환값으로 처리하기 <span id="handle-callback" />
|
|
195
|
+
|
|
196
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT START -->
|
|
197
|
+
|
|
198
|
+
**`request_pay()`** 함수의 두 번째 인자인 **callback** 함수를 통해 결제 결과를 확인할 수 있습니다.
|
|
199
|
+
|
|
200
|
+
```ts
|
|
201
|
+
IMP.request_pay(
|
|
202
|
+
{
|
|
203
|
+
/* 파라미터 생략 */
|
|
204
|
+
},
|
|
205
|
+
async (response) => {
|
|
206
|
+
if (response.error_code != null) {
|
|
207
|
+
return alert(`결제에 실패하였습니다. 에러 내용: ${response.error_msg}`);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
// 고객사 서버에서 /payment/complete 엔드포인트를 구현해야 합니다.
|
|
211
|
+
// (다음 목차에서 설명합니다)
|
|
212
|
+
const notified = await fetch(`${SERVER_BASE_URL}/payment/complete`, {
|
|
213
|
+
method: "POST",
|
|
214
|
+
headers: { "Content-Type": "application/json" },
|
|
215
|
+
// imp_uid와 merchant_uid, 주문 정보를 서버에 전달합니다
|
|
216
|
+
body: JSON.stringify({
|
|
217
|
+
imp_uid: response.imp_uid,
|
|
218
|
+
merchant_uid: response.merchant_uid,
|
|
219
|
+
// 주문 정보...
|
|
220
|
+
}),
|
|
221
|
+
});
|
|
222
|
+
},
|
|
223
|
+
);
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
결제가 완료되면 반환되는 응답 객체([response](https://developers.portone.io/sdk/ko/v1-sdk/javascript-sdk-old/readme))의
|
|
227
|
+
에러 여부에 따라 처리 로직을 콜백 함수에 작성합니다.
|
|
228
|
+
요청이 성공했을 경우에 결제번호(`imp_uid`)와 주문번호(`merchant_uid`)를
|
|
229
|
+
서버에 전달하는 로직을 위와 같이 작성합니다.
|
|
230
|
+
|
|
231
|
+
<div class="hint" data-style="danger">
|
|
232
|
+
|
|
233
|
+
최종 결제 결과 처리는 반드시 [웹훅](https://developers.portone.io/opi/ko/integration/webhook/readme-v1)을 이용하여
|
|
234
|
+
안정적으로 처리해 주셔야 합니다.
|
|
235
|
+
|
|
236
|
+
웹훅 연동을 생략하시는 경우 결제 결과를 정상적으로 수신받지 못하는 상황이 발생합니다.
|
|
237
|
+
|
|
238
|
+
</div>
|
|
239
|
+
|
|
240
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT END -->
|
|
241
|
+
|
|
242
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT START -->
|
|
243
|
+
|
|
244
|
+
`PortOne.requestPayment()` 함수의 반환값을 통해 결제 요청의 결과를 확인할 수 있습니다.
|
|
245
|
+
|
|
246
|
+
`code`가 있으면 결제 과정에서 오류가 발생한 것이므로 적절히 처리하여야 합니다.
|
|
247
|
+
|
|
248
|
+
결제가 성공한 경우 `paymentId`를 서버에 전달하여 서버 측에서 결제 완료 처리를 진행하도록 합니다.
|
|
249
|
+
(가상 계좌 결제의 경우 결제가 아직 완료되지 않은 상태일 수 있습니다)
|
|
250
|
+
|
|
251
|
+
```ts
|
|
252
|
+
async function requestPayment() {
|
|
253
|
+
const response = await PortOne.requestPayment({
|
|
254
|
+
/* 파라미터 생략 */
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
if (response.code !== undefined) {
|
|
258
|
+
// 오류 발생
|
|
259
|
+
return alert(response.message);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
// 고객사 서버에서 /payment/complete 엔드포인트를 구현해야 합니다.
|
|
263
|
+
// (다음 목차에서 설명합니다)
|
|
264
|
+
const notified = await fetch(`${SERVER_BASE_URL}/payment/complete`, {
|
|
265
|
+
method: "POST",
|
|
266
|
+
headers: { "Content-Type": "application/json" },
|
|
267
|
+
// paymentId와 주문 정보를 서버에 전달합니다
|
|
268
|
+
body: JSON.stringify({
|
|
269
|
+
paymentId: paymentId,
|
|
270
|
+
// 주문 정보...
|
|
271
|
+
}),
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
결과값에 들어 있는 필드는 다음과 같습니다.
|
|
277
|
+
|
|
278
|
+
|필드명 |설명 |비고 |
|
|
279
|
+
|-----------|----------|------------|
|
|
280
|
+
|`paymentId`|결제 건 ID|공통 |
|
|
281
|
+
|`code` |오류 코드 |실패 시 포함|
|
|
282
|
+
|`message` |오류 문구 |실패 시 포함|
|
|
283
|
+
|
|
284
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT END -->
|
|
285
|
+
|
|
286
|
+
#### URL 쿼리 문자열로 처리하기 <span id="handle-redirect" />
|
|
287
|
+
|
|
288
|
+
모바일 환경에서의 결제는 대부분 리다이렉트 방식으로 이루어집니다.
|
|
289
|
+
리다이렉트 방식에서는 브라우저가 결제창으로 리다이렉트되었다가,
|
|
290
|
+
결제창에서의 작업이 끝나면 지정한
|
|
291
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT START -->`m_redirect_url`<!-- VERSION-SPECIFIC: V1 ONLY CONTENT END --><!-- VERSION-SPECIFIC: V2 ONLY CONTENT START -->`redirectUrl`<!-- VERSION-SPECIFIC: V2 ONLY CONTENT END -->로
|
|
292
|
+
다시 리다이렉트됩니다.
|
|
293
|
+
이 경우에는 함수 호출 결과를 이용할 수 없고,
|
|
294
|
+
결제 성공 여부 등은 [쿼리 문자열](http://en.wikipedia.org/wiki/Query_string)로 전달받게 됩니다.
|
|
295
|
+
|
|
296
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT START -->
|
|
297
|
+
|
|
298
|
+
```ts
|
|
299
|
+
IMP.request_pay({
|
|
300
|
+
/* 기타 파라미터 생략 */
|
|
301
|
+
m_redirect_url: `${BASE_URL}/payment-redirect`,
|
|
302
|
+
}); // 리다이렉트 방식의 경우 콜백은 실행되지 않습니다.
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT END -->
|
|
306
|
+
|
|
307
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT START -->
|
|
308
|
+
|
|
309
|
+
```ts
|
|
310
|
+
PortOne.requestPayment({
|
|
311
|
+
/* 기타 파라미터 생략 */
|
|
312
|
+
redirectUrl: `${BASE_URL}/payment-redirect`,
|
|
313
|
+
});
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT END -->
|
|
317
|
+
|
|
318
|
+
쿼리 문자열로 전달되는 내용은 다음과 같습니다.
|
|
319
|
+
|
|
320
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT START -->
|
|
321
|
+
|
|
322
|
+
|키 |설명 |비고 |
|
|
323
|
+
|--------------|---------------------|------------|
|
|
324
|
+
|`imp_uid` |포트원 결제 ID |공통 |
|
|
325
|
+
|`merchant_uid`|고객사 주문 고유 번호|공통 |
|
|
326
|
+
|`error_code` |오류 코드 |실패 시 포함|
|
|
327
|
+
|`error_msg` |오류 문구 |실패 시 포함|
|
|
328
|
+
|
|
329
|
+
예를 들어 `merchant_uid`가 `payment-39ecfa97`, `m_redirect_url`이 `https://example.com/payment-redirect`인 경우,
|
|
330
|
+
결제 성공 시에 `https://example.com/payment-redirect?merchant_uid=payment-39ecfa97`로 리다이렉트됩니다.
|
|
331
|
+
|
|
332
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT END -->
|
|
333
|
+
|
|
334
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT START -->
|
|
335
|
+
|
|
336
|
+
|키 |설명 |비고 |
|
|
337
|
+
|------------|----------|------------|
|
|
338
|
+
|`payment_id`|결제 건 ID|공통 |
|
|
339
|
+
|`code` |오류 코드 |실패 시 포함|
|
|
340
|
+
|`message` |오류 문구 |실패 시 포함|
|
|
341
|
+
|
|
342
|
+
예를 들어 `paymentId`가 `payment-39ecfa97`, `redirectUrl`이 `https://example.com/payment-redirect`인 경우,
|
|
343
|
+
결제 성공 시에 `https://example.com/payment-redirect?payment_id=payment-39ecfa97`로 리다이렉트됩니다.
|
|
344
|
+
|
|
345
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT END -->
|
|
346
|
+
|
|
347
|
+
### 4. 결제 완료 처리하기 <span id="complete" />
|
|
348
|
+
|
|
349
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT START -->
|
|
350
|
+
|
|
351
|
+
`imp_uid`와 `merchant_uid`를 서버에 전달하면, 서버는 포트원의 [결제 조회 API](https://developers.portone.io/api/rest-v1/payment#get%20%2Fpayments%2F%7Bimp_uid%7D)를
|
|
352
|
+
호출하여 해당 결제 건의 상태를 확인하고 결제 완료 처리를 진행하여야 합니다.
|
|
353
|
+
|
|
354
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT END -->
|
|
355
|
+
|
|
356
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT START -->
|
|
357
|
+
|
|
358
|
+
`paymentId`를 서버에 전달하면, 서버는 포트원의 [결제 조회 API](https://developers.portone.io/api/rest-v2/payment#get%20%2Fpayments%2F%7BpaymentId%7D)를
|
|
359
|
+
호출하여 해당 결제 건의 상태를 확인하고 결제 완료 처리를 진행하여야 합니다.
|
|
360
|
+
|
|
361
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT END -->
|
|
362
|
+
|
|
363
|
+
<div class="hint" data-style="info">
|
|
364
|
+
|
|
365
|
+
**결제 검증 필수**
|
|
366
|
+
|
|
367
|
+
인증 결제의 흐름상 결제 금액 등 정보가 고객의 브라우저 측에서 처리되므로,
|
|
368
|
+
의도한 결제 내용이 맞는지 서버 측에서 꼭 확인하여야 위변조를 막을 수 있습니다.
|
|
369
|
+
|
|
370
|
+
</div>
|
|
371
|
+
|
|
372
|
+
예시로, 위에서 사용했던 `/payment/complete` 엔드포인트를 다음과 같이 구현할 수 있습니다.
|
|
373
|
+
|
|
374
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT START -->
|
|
375
|
+
|
|
376
|
+
```ts title="Express"
|
|
377
|
+
// JSON 요청을 처리하기 위해 body-parser 미들웨어 세팅
|
|
378
|
+
app.use(bodyParser.json());
|
|
379
|
+
|
|
380
|
+
// POST 요청을 받는 /payments/complete
|
|
381
|
+
app.post("/payment/complete", async (req, res) => {
|
|
382
|
+
try {
|
|
383
|
+
// 요청의 body로 imp_uid와 merchant_uid가 전달되기를 기대합니다.
|
|
384
|
+
const { imp_uid, merchant_uid } = req.body;
|
|
385
|
+
|
|
386
|
+
// 1. 포트원 API 엑세스 토큰 발급
|
|
387
|
+
const tokenResponse = await fetch("https://api.iamport.kr/users/getToken", {
|
|
388
|
+
method: "POST",
|
|
389
|
+
headers: { "Content-Type": "application/json" },
|
|
390
|
+
body: JSON.stringify({
|
|
391
|
+
imp_key: "imp_apikey", // REST API 키
|
|
392
|
+
imp_secret: "ekKoeW8RyKuT0zgaZsUtXXTLQ4AhPFW", // REST API Secret
|
|
393
|
+
}),
|
|
394
|
+
});
|
|
395
|
+
if (!tokenResponse.ok)
|
|
396
|
+
throw new Error(`tokenResponse: ${await tokenResponse.json()}`);
|
|
397
|
+
const { response } = await tokenResponse.json();
|
|
398
|
+
const { access_token } = response;
|
|
399
|
+
|
|
400
|
+
// 2. 포트원 결제내역 단건조회 API 호출
|
|
401
|
+
const paymentResponse = await fetch(
|
|
402
|
+
`https://api.iamport.kr/payments/${imp_uid}`,
|
|
403
|
+
{ headers: { Authorization: access_token } },
|
|
404
|
+
);
|
|
405
|
+
if (!paymentResponse.ok)
|
|
406
|
+
throw new Error(`paymentResponse: ${await paymentResponse.json()}`);
|
|
407
|
+
const payment = await paymentResponse.json();
|
|
408
|
+
|
|
409
|
+
// 3. 고객사 내부 주문 데이터의 가격과 실제 지불된 금액을 비교합니다.
|
|
410
|
+
const order = await OrderService.findById(merchant_uid);
|
|
411
|
+
if (order.amount === payment.amount) {
|
|
412
|
+
switch (payment.status) {
|
|
413
|
+
case "ready": {
|
|
414
|
+
// 가상 계좌가 발급된 상태입니다.
|
|
415
|
+
// 계좌 정보를 이용해 원하는 로직을 구성하세요.
|
|
416
|
+
break;
|
|
417
|
+
}
|
|
418
|
+
case "paid": {
|
|
419
|
+
// 모든 금액을 지불했습니다! 완료 시 원하는 로직을 구성하세요.
|
|
420
|
+
break;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
423
|
+
} else {
|
|
424
|
+
// 결제 금액이 불일치하여 위/변조 시도가 의심됩니다.
|
|
425
|
+
}
|
|
426
|
+
} catch (e) {
|
|
427
|
+
// 결제 검증에 실패했습니다.
|
|
428
|
+
res.status(400).send(e);
|
|
429
|
+
}
|
|
430
|
+
});
|
|
431
|
+
```
|
|
432
|
+
|
|
433
|
+
<!-- VERSION-SPECIFIC: V1 ONLY CONTENT END -->
|
|
434
|
+
|
|
435
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT START -->
|
|
436
|
+
|
|
437
|
+
[PORTONE\_API\_SECRET](https://developers.portone.io/opi/ko/integration/ready/readme?v=v2#4-2-v2-api-secret-%EB%B0%9C%EA%B8%89%ED%95%98%EA%B8%B0)
|
|
438
|
+
은 V2 전용 시크릿으로, 포트원 콘솔 내 결제연동 탭에서 발급받을 수 있습니다.
|
|
439
|
+
|
|
440
|
+
```ts title="Express"
|
|
441
|
+
// JSON 요청을 처리하기 위해 body-parser 미들웨어 세팅
|
|
442
|
+
app.use(bodyParser.json());
|
|
443
|
+
|
|
444
|
+
// POST 요청을 받는 /payments/complete
|
|
445
|
+
app.post("/payment/complete", async (req, res) => {
|
|
446
|
+
try {
|
|
447
|
+
// 요청의 body로 paymentId가 전달되기를 기대합니다.
|
|
448
|
+
const { paymentId, orderId } = req.body;
|
|
449
|
+
|
|
450
|
+
// 1. 포트원 결제내역 단건조회 API 호출
|
|
451
|
+
const paymentResponse = await fetch(
|
|
452
|
+
`https://api.portone.io/payments/${paymentId}`,
|
|
453
|
+
{ headers: { Authorization: `PortOne ${PORTONE_API_SECRET}` } },
|
|
454
|
+
);
|
|
455
|
+
if (!paymentResponse.ok)
|
|
456
|
+
throw new Error(`paymentResponse: ${await paymentResponse.json()}`);
|
|
457
|
+
const payment = await paymentResponse.json();
|
|
458
|
+
|
|
459
|
+
// 2. 고객사 내부 주문 데이터의 가격과 실제 지불된 금액을 비교합니다.
|
|
460
|
+
const order = await OrderService.findById(orderId);
|
|
461
|
+
if (order.amount === payment.amount.total) {
|
|
462
|
+
switch (payment.status) {
|
|
463
|
+
case "VIRTUAL_ACCOUNT_ISSUED": {
|
|
464
|
+
// 가상 계좌가 발급된 상태입니다.
|
|
465
|
+
// 계좌 정보를 이용해 원하는 로직을 구성하세요.
|
|
466
|
+
break;
|
|
467
|
+
}
|
|
468
|
+
case "PAID": {
|
|
469
|
+
// 모든 금액을 지불했습니다! 완료 시 원하는 로직을 구성하세요.
|
|
470
|
+
break;
|
|
471
|
+
}
|
|
472
|
+
}
|
|
473
|
+
} else {
|
|
474
|
+
// 결제 금액이 불일치하여 위/변조 시도가 의심됩니다.
|
|
475
|
+
}
|
|
476
|
+
} catch (e) {
|
|
477
|
+
// 결제 검증에 실패했습니다.
|
|
478
|
+
res.status(400).send(e);
|
|
479
|
+
}
|
|
480
|
+
});
|
|
481
|
+
```
|
|
482
|
+
|
|
483
|
+
<!-- VERSION-SPECIFIC: V2 ONLY CONTENT END -->
|