간단히 설명하자면, 앱이나 웹사이트에서 payment:// URL을 열면 Payment for Stripe 결제를 진행하고, 결제 완료 후 콜백 URL을 열어줍니다. SDK도 필요 없고, 서버 작업도 필요 없습니다. 아이폰과 안드로이드에서 동일하게 작동하지만, 아래에 몇 가지 차이점이 있습니다.
전체 참조 정보는 paymentforstripe.com/api 에서 확인할 수 있습니다.
작동 방식
- 앱이 매개변수와 함께
payment://URL을 엽니다. - Payment for Stripe 열리면 판매 거래가 설정됩니다. 판매자는 카드 리더기, Tap to Pay) 또는 직접 카드 정보를 입력하는 방식으로 결제를 받습니다.
- 완료되면 앱은 결과를 쿼리 매개변수로 추가하여
callbackURL을 엽니다.
판매자는 로그인되어 있어야 합니다. 다른 결제가 진행 중인 동안 링크가 도착하면 앱에서 해당 링크를 거부하고 콜백 함수에서 error=charge_in_progress 가 발생합니다.
결제 생성: paymentnew
설정한 금액으로 한 번만 결제하는 방식입니다.
| 이름 | 유형 | 필수의 | 설명 |
|---|---|---|---|
amount
|
정수 | 예 | 통화의 최소 단위로 표시된 금액으로 0보다 큽니다. 1000 = 10.00달러. |
currency
|
끈 | 아니요 | usd 또는 eur 와 같은 세 글자 ISO 코드를 입력하세요. 입력하지 않으면 앱은 이미 설정된 통화를 사용합니다. |
description
|
끈 | 아니요 | 요금 내역을 URL 인코딩하세요. |
customer
|
끈 | 아니요 | 기존 Stripe 고객 ID( cus_…)도 사용 가능합니다. customer_id 설정하면 email 과 name 무시됩니다. |
email
|
끈 | 아니요 | 고객 이메일입니다. 신규 고객을 생성합니다. |
name
|
끈 | 아니요 | 고객 이름입니다. URL 인코딩하세요. 새 고객을 생성합니다. |
metadata
|
끈 | 아니요 | 결제에 추가되는 키-값 쌍으로 구성된 URL 인코딩된 JSON 객체입니다. Stripe 의 메타데이터 제한 사항이 적용됩니다. |
callback
|
끈 | 아니요 | 판매가 종료되면 열릴 URL입니다. |
autoprocess
|
부울 | 아니요 | true 설정하면 키패드 입력을 건너뛰고 바로 충전을 시작합니다. 기본값은 false. |
auto_return
|
부울 | 아니요 | true 설정하면 결과가 나오는 즉시 콜백이 실행됩니다. 기본값은 false 이며, 이 경우 콜백은 판매자가 결과 화면을 닫을 때까지 기다립니다. |
payment://new?amount=2500¤cy=eur&description=Coffee%20and%20pastry payment://new?amount=3500&autoprocess=true&auto_return=true&callback=myapp://payment-complete amount 누락되었거나, 0이거나, 숫자가 아닌 링크는 무시됩니다.
카탈로그에서 결제 카트를 이용하여 송장을 생성하세요.
Stripe 제품 카탈로그에서 가격을 가져와 장바구니에 담습니다. 판매자는 평소처럼 결제를 진행하고, 해당 판매 내역은 Stripe 에 결제 완료된 송장으로 저장되며, 송장에는 해당 품목들이 포함됩니다. 고객에게는 이메일로 송장이 발송되지 않습니다.
| 이름 | 유형 | 필수의 | 설명 |
|---|---|---|---|
prices
|
끈 | 예 | 쉼표로 구분된 price_id:quantity 쌍(예: price_abc:2,price_xyz:1)을 사용하세요. line_items 도 작동합니다. |
coupon
|
끈 | 아니요 | 장바구니에 적용할 Stripe 쿠폰 ID입니다. |
customer
|
끈 | 아니요 | 기존 Stripe 고객 ID입니다. customer_id 도 사용 가능합니다. |
email
|
끈 | 아니요 | 고객 이메일입니다. 신규 고객을 생성합니다. |
name
|
끈 | 아니요 | 고객 이름입니다. URL 인코딩하세요. |
metadata
|
끈 | 아니요 | 키-값 쌍으로 구성된 URL 인코딩된 JSON 객체입니다. |
callback
|
끈 | 아니요 | 판매가 종료되면 열릴 URL입니다. |
autoprocess
|
부울 | 아니요 | true 모든 가격 정보(및 쿠폰)가 로드된 후에 요금 청구를 시작합니다. |
auto_return
|
부울 | 아니요 | 위와 동일합니다. 기본값은 false. |
payment://cart?prices=price_coffee:2,price_muffin:1&email=customer@example.com prices 과 amount 함께 보내지 마세요. 총액은 가격을 합산하여 계산되므로, 금액과 가격이 모두 포함된 링크는 무시됩니다. payment_hidden 으로 가격을 숨긴 경우에도 정상적으로 작동합니다.
기존 청구서 결제: 청구서 결제
Stripe 결제 시스템에 등록된 미결제 송장에 대한 대면 결제를 처리합니다. 금액, 통화, 고객 정보, 세금 정보는 모두 송장에서 가져옵니다. 결제가 완료되면 앱에서 송장을 결제 완료로 표시합니다. iPhone 및 Android 기기에서 사용 가능합니다.
| 이름 | 유형 | 필수의 | 설명 |
|---|---|---|---|
id
|
끈 | 예 | Stripe 송장 ID. 반드시 in_ 으로 시작해야 합니다. 미결제 송장을 전송합니다. iPhone에서는 먼저 초안이 확정됩니다. Android에서는 초안이 거부되고 error=invoice_state_changed. |
metadata
|
끈 | 아니요 | URL로 인코딩된 JSON 객체가 PaymentIntent에 추가되었습니다. |
callback
|
끈 | 아니요 | 판매가 완료되면 열릴 URL입니다. 성공 시 invoice_id 와 payment_intent_id 가져옵니다. |
autoprocess
|
부울 | 아니요 | true 카드 판독기가 연결된 경우에만 청구서 확인이 완료된 후에 요금 청구를 시작합니다. |
auto_return
|
부울 | 아니요 | 위와 동일합니다. 기본값은 false. |
payment://invoice?id=in_1ABC123xyz&autoprocess=true&callback=myapp://invoice-paid 송장은 판매 정보를 결정하므로 amount, currency, customer, customer_id, email, name, description, coupon, prices 또는 line_items 중 하나라도 잘못 입력되면 링크가 거부되고 error=invoice_invalid_param. 이미 결제되었거나, 무효이거나, 회수 불가능하거나, 금액이 0이거나, 구독과 연결되어 있거나, 기본 결제 수단으로 설정된 송장도 각각 고유한 오류 invoice_… 와 함께 거부됩니다.
콜백
앱은 다음 항목들을 콜백 URL에 추가합니다.
| 이름 | 유형 | 전송된 | 설명 |
|---|---|---|---|
status
|
끈 | 언제나 | success, error 또는 cancelled. |
charge_id
|
끈 | 성공에 관하여 | 결제 ID입니다. iPhone에서는 Stripe 청구 ID( ch_…)이고, Android에서는 PaymentIntent( pi_…)입니다. |
stripe_charge_id
|
끈 | 안드로이드 전용 | Stripe 수수료( ch_…). |
payment_intent_id
|
끈 | 성공에 관하여 | PaymentIntent는 iPhone에서는 payment://invoice 에만 전송되고, Android에서는 모든 카드 결제 시에 전송됩니다. |
invoice_id
|
끈 | 송장 링크 | payment://invoice. |
amount
|
정수 | 성공에 관하여 | 청구 금액(최소 단위). |
currency
|
끈 | 성공에 관하여 | 소문자 ISO 코드. |
error
|
끈 | 오류 발생 | charge_in_progress 또는 invoice_already_paid 와 같은 짧은 코드 또는 카드 거절 시 읽기 쉬운 메시지. |
myapp://payment-complete?status=success&charge_id=ch_3Qx…&success=true&amount=3500¤cy=usd&chargeId=ch_3Qx… 두 플랫폼에서 동일한 ID가 필요하신가요? 먼저 stripe_charge_id 읽고, 필요한 경우 charge_id 로 대체하세요.
기존 통합의 경우 앱은 success=true, chargeId, cancelled=true 및 error[message] 도 전송합니다. 새 코드는 status 읽어야 합니다.
취소 요청은 콜백 함수를 즉시 실행합니다. 결제 성공 또는 오류는 판매자가 결과 화면을 닫을 때까지 기다립니다. 단, auto_return=true 지정한 경우는 예외입니다. 아이폰의 경우 현금 결제는 결제가 이루어지지 않으므로 콜백 함수가 실행되지 않습니다.
URL 인코딩
- 공백이나 기호가 포함된 모든 값을 인코딩합니다. 공백은
%20, 중괄호{와}는%7B와%7D, 큰따옴표"는%22,:은%3A로 변환합니다. - 콜백 URL에 자체 쿼리 문자열이 있는 경우, 콜백 전체를 인코딩하여
&가payment://링크를 분할하지 않도록 하세요. -
prices에 있는 쉼표와 콜론은 그대로 두어도 됩니다.
메타데이터 {"order_id":"1234","location":"Store A"} 다음과 같이 변경됩니다.
payment://new?amount=10000&description=Invoice%20%231234&metadata=%7B%22order_id%22%3A%221234%22%2C%22location%22%3A%22Store%20A%22%7D 이전 metadata[order_id]=1234 형식도 작동합니다.