빌링키 방식으로 자동결제를 연동할 수 있도록 구현한 API입니다.
토스 결제서버는 가맹점의 빌링키 생성요청에 따라 구매자가 인증할 수 있는 유니크한 '결제 인증 URL'을 생성하고,
가맹점을 통해 구매자는 토스 앱을 통해 인증을 진행할 수 있습니다.
각 API의 응답 필드 및 에러코드는 사전 예고 없이 추가될 수 있으니 추가되더라도 오류가 발생하지 않도록 주의가 필요합니다.
토스 자동결제를 등록하기 위해서는 사용자를 식별할 수 있는 고유한 빌링키를 생성해야 합니다.
API 요청의 응답으로 성공 여부와 함께 토스 앱 인증 URL을 전달합니다.
빌링키 생성 요청 API 사양은 다음과 같습니다.
0 | 성공 |
-1 | 실패 (실패사유는 msg와 errorCode로 제공) |
POST https://pay.toss.im/api/v1/billing-key
curl https://pay.toss.im/api/v1/billing-key \ -H "Content-Type: application/json" \ -d '{ "apiKey": "sk_test_w5lNQylNqa5lNQe013Nq", "productDesc": "토스 자동결제 상품", "userId": "TOSS-TEST-1", "resultCallback": "https://YOUR-SITE.COM/callback", "retAppScheme": "testshop://", "returnSuccessUrl": "https://YOUR-SITE.COM/success", "returnFailureUrl": "https://YOUR-SITE.COM/fail" }'
import java.nio.charset.StandardCharsets; URL url = null; URLConnection connection = null; StringBuilder responseBody = new StringBuilder(); try { url = new URL("https://pay.toss.im/api/v1/billing-key"); connection = url.openConnection(); connection.addRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true); connection.setDoInput(true); org.json.simple.JSONObject jsonBody = new JSONObject(); jsonBody.put("apiKey", "sk_test_w5lNQylNqa5lNQe013Nq"); jsonBody.put("productDesc", "토스 자동결제 상품"); jsonBody.put("userId", "TOSS-TEST-1"); jsonBody.put("resultCallback", "https://YOUR-SITE.COM/callback"); jsonBody.put("retAppScheme", "testshop://"); jsonBody.put("returnSuccessUrl", "https://YOUR-SITE.COM/success"); jsonBody.put("returnFailureUrl", "https://YOUR-SITE.COM/fail"); BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream()); bos.write(jsonBody.toJSONString().getBytes(StandardCharsets.UTF_8)); bos.flush(); bos.close(); BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); String line = null; while ((line = br.readLine()) != null) { responseBody.append(line); } br.close(); } catch (Exception e) { responseBody.append(e); } System.out.println(responseBody.toString());
$arrayBody = array(); $arrayBody["apiKey"] = "sk_test_w5lNQylNqa5lNQe013Nq"; $arrayBody["productDesc"] = "토스 자동결제 상품"; $arrayBody["userId"] = "TOSS-TEST-1"; $arrayBody["resultCallback"] = "https://YOUR-SITE.COM/callback"; $arrayBody["retAppScheme"] = "testshop://"; $arrayBody["returnSuccessUrl"] = "https://YOUR-SITE.COM/success"; $arrayBody["returnFailureUrl"] = "https://YOUR-SITE.COM/fail"; $jsonBody = json_encode($arrayBody); $ch = curl_init('https://pay.toss.im/api/v1/billing-key'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonBody); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($jsonBody)) ); $result = curl_exec($ch); curl_close($ch); echo "Response: ".$result;
Dim data, httpRequest, postResponse data = "apiKey=sk_test_w5lNQylNqa5lNQe013Nq" data = data & "&productDesc=토스 자동결제 상품" data = data & "&userId=TOSS-TEST-1" data = data & "&resultCallback=https://YOUR-SITE.COM/callback" data = data & "&retAppScheme=testshop://" data = data & "&returnSuccessUrl=https://YOUR-SITE.COM/success" data = data & "&returnFailureUrl=https://YOUR-SITE.COM/fail" Set httpRequest = Server.CreateObject("MSXML2.ServerXMLHTTP") httpRequest.Open "POST", "https://pay.toss.im/api/v1/billing-key", False httpRequest.SetRequestHeader "Content-Type", "application/json" httpRequest.Send data postResponse = httpRequest.ResponseText Response.Write postResponse
import urllib, urllib2 url = "https://pay.toss.im/api/v1/billing-key" params = { "apiKey": "sk_test_w5lNQylNqa5lNQe013Nq", "productDesc": "토스 자동결제 상품", "userId": "TOSS-TEST-1", "resultCallback": "https://YOUR-SITE.COM/callback", "retAppScheme": "testshop://", "returnSuccessUrl": "https://YOUR-SITE.COM/success", "returnFailureUrl": "https://YOUR-SITE.COM/fail" } response = urllib.urlopen(url, urllib.urlencode(params)) print(response.read())
require 'net/http' require 'json' uri = URI.parse("https://pay.toss.im/api/v1/billing-key") params = { "apiKey" => "sk_test_w5lNQylNqa5lNQe013Nq", "productDesc" => "토스 자동결제 상품", "userId" => "TOSS-TEST-1", "resultCallback" => "https://YOUR-SITE.COM/callback", "retAppScheme" => "testshop://", "returnSuccessUrl" => "https://YOUR-SITE.COM/success", "returnFailureUrl" => "https://YOUR-SITE.COM/fail" } http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Post.new(uri.path) request.set_form_data(params) response = http.request(request) p JSON.parse(response.body)
{
"code": 0,
"billingKey": "example-billingKey",
"checkoutAndroidUri": "intent://pay/BillingKey?billingKey=example-billingKey#Intent;scheme=supertoss;package=viva.republica.toss;end",
"checkoutIosUri": "https://ul.toss.im?scheme=supertoss%3A%2F%2Fpay/BillingKey%3FbillingKey%3Dexample-billingKey",
"checkoutUri": "https://toss.onelink.me/3563614660?pid=referral&af_dp=supertoss%3A%2F%2Fpay%2FbillingKey%3FbillingKey%3Dexample-billingKey%26_minVerAos%3D4.64.0%26_minVerIos%3D4.51.0"
}
사용자가 토스 앱을 통해 빌링 등록을 '성공적'으로 완료한 경우 토스 Server는 가맹점이 설정한 resultCallback URL을 통해 결과를 전달합니다. (실패한 경우는 전달하지 않습니다.)
POST https://YOUR-SITE.COM/callback (결제 생성 시 가맹점에서 설정한 callback URL)
Content-Type application/json;charset=UTF-8
{
"action": "ACTIVATED",
"processedTs" : "2020-04-01 12:34:11",
"userId": "TOSS-TEST-1",
//"displayId": "TEST_SERVICE_1",
"billingKey": "example-billingKey",
"payMethod" : "TOSS_MONEY",
"accountBankCode" : "88",
"accountBankName" : "신한은행",
"accountNumber" : "110******676"
}
빌링키 생성결과 callback 에서 전달받은 빌링키로 가맹점은 승인요청을 할 수 있습니다.
유효시간이나 최대횟수를 제한하지 않으니 승인요청 API 를 활용해서 결제를 진행할 수 있습니다.
자동결제 승인요청 API spec 은 다음과 같습니다.
승인 응답은 가맹점에 예고없이 추가될 수 있으니 오류가 발생하지 않도록 연동 부탁드립니다.
0 | 성공 |
-1 | 실패 (실패사유는 msg와 errorCode로 제공) |
LIVE | 실거래용 |
TEST | 테스트용 |
TOSS_MONEY | 토스머니/계좌 |
CARD | 카드 |
PERSONAL | 본인 카드 |
PERSONAL_FAMILY | 가족 카드 |
CORP_PERSONAL | 법인지정 결제계좌 임직원 |
CORP_PRIVATE | 법인 공용 |
CORP_COMPANY | 법인지정 결제계좌 회사(하나카드만) |
cardCompanyName | cardCompanyCode |
신한 | 1 |
현대 | 2 |
삼성 | 3 |
국민 | 4 |
롯데 | 5 |
하나 | 6 |
우리 | 7 |
농협 | 8 |
씨티 (현재 미지원) | 9 |
비씨(BC) | 10 |
CREDIT | 신용카드 |
CHECK | 체크카드 |
PREPAYMENT | 선불카드 |
true | 무이자 |
false | 일반 |
POST https://pay.toss.im/api/v1/billing-key/bill
curl https://pay.toss.im/api/v1/billing-key/bill \ -H "Content-Type: application/json" \ -d '{ "apiKey": "sk_test_w5lNQylNqa5lNQe013Nq", "billingKey": "example-billingKey", "orderNo": "TEST_billing_1", "productDesc": "테스트샵 빌링 상품", "amount" : 10000, "amountTaxFree" : 0, "spreadOut" : 7, "cashReceipt" : true, "sendFailPush" : true }'
import java.nio.charset.StandardCharsets; URL url = null; URLConnection connection = null; StringBuilder responseBody = new StringBuilder(); try { url = new URL("https://pay.toss.im/api/v1/billing-key/bill"); connection = url.openConnection(); connection.addRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true); connection.setDoInput(true); org.json.simple.JSONObject jsonBody = new JSONObject(); jsonBody.put("apiKey", "sk_test_w5lNQylNqa5lNQe013Nq"); jsonBody.put("billingKey", "example-billingKey"); jsonBody.put("orderNo", "TEST_billing_1"); jsonBody.put("productDesc", "테스트샵 빌링 상품"); jsonBody.put("amount", "10000"); jsonBody.put("amountTaxFree", "0"); jsonBody.put("spreadOut", "7"); jsonBody.put("cashReceipt", "true"); jsonBody.put("sendFailPush", "true"); BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream()); bos.write(jsonBody.toJSONString().getBytes(StandardCharsets.UTF_8)); bos.flush(); bos.close(); BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); String line = null; while ((line = br.readLine()) != null) { responseBody.append(line); } br.close(); } catch (Exception e) { responseBody.append(e); } System.out.println(responseBody.toString());
$arrayBody = array(); $arrayBody["apiKey"] = "sk_test_w5lNQylNqa5lNQe013Nq"; $arrayBody["billingKey"] = "example-billingKey"; $arrayBody["orderNo"] = "TEST_billing_1"; $arrayBody["productDesc"] = "테스트샵 빌링 상품"; $arrayBody["amount"] = "10000"; $arrayBody["amountTaxFree"] = "0"; $arrayBody["spreadOut"] = "7"; $arrayBody["cashReceipt"] = "true"; $arrayBody["sendFailPush"] = "true"; $jsonBody = json_encode($arrayBody); $ch = curl_init('https://pay.toss.im/api/v1/billing-key/bill'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonBody); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($jsonBody)) ); $result = curl_exec($ch); curl_close($ch); echo "Response: ".$result;
Dim data, httpRequest, postResponse data = "apiKey=sk_test_w5lNQylNqa5lNQe013Nq" data = data & "&billingKey=example-billingKey" data = data & "&orderNo=TEST_billing_1" data = data & "&productDesc=테스트샵 빌링 상품" data = data & "&amount=10000" data = data & "&amountTaxFree=0" data = data & "&spreadOut=7" data = data & "&cashReceipt=true" data = data & "&sendFailPush=true" Set httpRequest = Server.CreateObject("MSXML2.ServerXMLHTTP") httpRequest.Open "POST", "https://pay.toss.im/api/v1/billing-key/bill", False httpRequest.SetRequestHeader "Content-Type", "application/json" httpRequest.Send data postResponse = httpRequest.ResponseText Response.Write postResponse
import urllib, urllib2 url = "https://pay.toss.im/api/v1/billing-key/bill" params = { "apiKey": "sk_test_w5lNQylNqa5lNQe013Nq", "billingKey": "example-billingKey", "orderNo": "TEST_billing_1", "productDesc": "테스트샵 빌링 상품", "amount" : 10000, "amountTaxFree" : 0, "spreadOut" : 7, "cashReceipt" : true, "sendFailPush" : true } response = urllib.urlopen(url, urllib.urlencode(params)) print(response.read())
require 'net/http' require 'json' uri = URI.parse("https://pay.toss.im/api/v1/billing-key/bill") params = { "apiKey" => "sk_test_w5lNQylNqa5lNQe013Nq", "billingKey" => "example-billingKey", "orderNo" => "TEST_billing_1", "productDesc" => "테스트샵 빌링 상품", "amount" => "10000", "amountTaxFree" => "0", "spreadOut" => "7", "cashReceipt" => "true", "sendFailPush" => "true" } http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Post.new(uri.path) request.set_form_data(params) response = http.request(request) p JSON.parse(response.body)
{
"code": 0,
"mode": "TEST",
"approvalTime": "2020-04-06 11:28:09",
"amount": "150000",
"payMethod": "CARD", //"TOSS_MONEY"
"payToken": "example-payToken",
"orderNo": "TEST_billing_1",
"transactionId": "3243c76e-e9cf-4669-881b-33a3b82ddf49",
"discountedAmount" : 0,
"paidAmount" : "15000",
//payMethod 가 CARD 일때
"cardCompanyName": "롯데",
"cardCompanyCode": 5,
"cardAuthorizationNo": "00000000",
"salesCheckLinkUrl": "https://alpha-pay.toss.im/payfront/web/external/sales-check?payToken=0PxriKdAz8Nsj7j5ZVO94b&transactionId=5a8cf658-b60d-4ae3-a959-279c66fc6743",
"spreadOut": 0,
"noInterest": false,
"cardUserType": "PERSONAL",
"cardMethodType": "CREDIT",
"cardNumber": "534292******790*"
"cardNum4Print": "410*",
"cardBinNumber": "531764
//payMethod 가 TOSS_MONEY 일때
//"accountBankCode" : "88",
//"accountBankName" : "신한은행",
//"accountNumber" : "110******676"
}
https://tossdev.github.io/api.html#refunds
토스 결제 환불요청은 표준 개발 가이드에 기재된 Spec 과 동일하게 사용할 수 있습니다. 위 링크를 참조 부탁드립니다. (전체/부분환불 모두 가능)
https://tossdev.github.io/api.html#status
승인된 결제의 상태확인은 표준 개발가이드 링크를 참고하시면 되고, 생성된 빌링키 상태확인은 아래 빌링키 상태조회 부분을 참고 부탁드립니다.
가맹점은 생성된 빌링키를 관리하고 회원 관리의 목적으로 빌링키의 상태를 조회할 수 있습니다. 사용자가 토스앱에서 결제수단을 변경한 경우 결제수단(payMethod) 정보가 업데이트 될 수 있습니다.
빌링키 조회 API spec 은 다음과 같습니다.
상태조회 응답은 가맹점 예고없이 추가될 수 있으니 오류가 발생하지 않도록 연동이 필요합니다.
0 | 성공 |
-1 | 실패 (실패 사유는 msg와 errorCode로 제공) |
ACTIVE | 빌링키 활성화 (사용자의 인증이 완료되어 사용할 수 있는 상태) |
CREATE | 미인증 |
AUTH | 인증 |
REMOVE | 삭제 |
FAIL | 실패 |
CANCEL | 취소 |
PERSONAL | 본인 카드 |
PERSONAL_FAMILY | 가족 카드 |
CORP_PERSONAL | 법인지정 결제계좌 임직원 |
CORP_PRIVATE | 법인 공용 |
CORP_COMPANY | 법인지정 결제계좌 회사(하나카드만) |
CREDIT | 신용카드 |
CHECK | 체크카드 |
PREPAYMENT | 선불카드 |
POST https://pay.toss.im/api/v1/billing-key/status
curl https://pay.toss.im/api/v1/billing-key/status \ -H "Content-Type: application/json" \ -d '{ "apiKey": "sk_test_w5lNQylNqa5lNQe013Nq", //"displayId": "TEST_SERVICE_1", "userId": "TOSS-TEST-1" }'
import java.nio.charset.StandardCharsets; URL url = null; URLConnection connection = null; StringBuilder responseBody = new StringBuilder(); try { url = new URL("https://pay.toss.im/api/v1/billing-key/status"); connection = url.openConnection(); connection.addRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true); connection.setDoInput(true); org.json.simple.JSONObject jsonBody = new JSONObject(); jsonBody.put("apiKey", "sk_test_w5lNQylNqa5lNQe013Nq"); // jsonBody.put("displayId", "TEST_SERVICE_1"); jsonBody.put("userId", "TOSS-TEST-1"); BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream()); bos.write(jsonBody.toJSONString().getBytes(StandardCharsets.UTF_8)); bos.flush(); bos.close(); BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); String line = null; while ((line = br.readLine()) != null) { responseBody.append(line); } br.close(); } catch (Exception e) { responseBody.append(e); } System.out.println(responseBody.toString());
$arrayBody = array(); $arrayBody["apiKey"] = "sk_test_w5lNQylNqa5lNQe013Nq"; //$arrayBody["displayId"] = "TEST_SERVICE_1"; $arrayBody["userId"] = "TOSS-TEST-1"; $jsonBody = json_encode($arrayBody); $ch = curl_init('https://pay.toss.im/api/v1/billing-key/status'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonBody); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($jsonBody)) ); $result = curl_exec($ch); curl_close($ch); echo "Response: ".$result;
Dim data, httpRequest, postResponse data = "apiKey=sk_test_w5lNQylNqa5lNQe013Nq" //data = data & "&displayId=TEST_SERVICE_1" data = data & "&userId=TOSS-TEST-1" Set httpRequest = Server.CreateObject("MSXML2.ServerXMLHTTP") httpRequest.Open "POST", "https://pay.toss.im/api/v1/billing-key/status", False httpRequest.SetRequestHeader "Content-Type", "application/json" httpRequest.Send data postResponse = httpRequest.ResponseText Response.Write postResponse
import urllib, urllib2 url = "https://pay.toss.im/api/v1/billing-key/status" params = { "apiKey": "sk_test_w5lNQylNqa5lNQe013Nq", // "displayId": "TEST_SERVICE_1", "userId": "TOSS-TEST-1", } response = urllib.urlopen(url, urllib.urlencode(params)) print(response.read())
require 'net/http' require 'json' uri = URI.parse("https://pay.toss.im/api/v1/billing-key/status") params = { "apiKey" => "sk_test_w5lNQylNqa5lNQe013Nq", // "displayId" => "TEST_SERVICE_1", "userId" => "TOSS-TEST-1", } http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Post.new(uri.path) request.set_form_data(params) response = http.request(request) p JSON.parse(response.body)
// payMethod 가 CARD 일때
{
"code": 0,
"userId": "TEST=2023-07-03T14:29:00.201Z",
"displayId": "테스트777",
"billingKey": "8JZBi0gmKZlfxaV4Zm4762",
"status": "ACTIVE",
"payMethod": "CARD",
"cardMethodType": "CREDIT",
"cardUserType": "PERSONAL",
"cardCompanyNo": 7,
"cardCompanyName": "우리",
"cardNum4Print": "410*",
"cardNumber": "531764******410*",
"cardBinNumber": "531764"
}
// payMethod 가 TOSS_MONEY(계좌) 일때
{
"code": 0,
"userId": "TEST=2023-07-03T14:29:00.201Z",
"displayId": "테스트777",
"billingKey": "8JZBi0gmKZlfxaV4Zm4762",
"status": "ACTIVE",
"payMethod": "TOSS_MONEY",
"accountBankName": "신한은행",
"accountBankCode": "088",
"accountNumber": "110******676" // 토스머니일 경우 "accountNumber":"토스머니"
}
가맹점은 주체적으로 생성된 빌링키를 삭제할 수 있습니다.
빌링키 삭제 API spec 은 다음과 같습니다.
POST https://pay.toss.im/api/v1/billing-key/remove
curl https://pay.toss.im/api/v1/billing-key/remove \ -H "Content-Type: application/json" \ -d '{ "apiKey": "sk_test_w5lNQylNqa5lNQe013Nq", "billingKey": "example-billingKey" }'
import java.nio.charset.StandardCharsets; URL url = null; URLConnection connection = null; StringBuilder responseBody = new StringBuilder(); try { url = new URL("https://pay.toss.im/api/v1/billing-key/remove"); connection = url.openConnection(); connection.addRequestProperty("Content-Type", "application/json"); connection.setDoOutput(true); connection.setDoInput(true); org.json.simple.JSONObject jsonBody = new JSONObject(); jsonBody.put("apiKey", "sk_test_w5lNQylNqa5lNQe013Nq"); jsonBody.put("billingKey", "example-billingKey"); BufferedOutputStream bos = new BufferedOutputStream(connection.getOutputStream()); bos.write(jsonBody.toJSONString().getBytes(StandardCharsets.UTF_8)); bos.flush(); bos.close(); BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)); String line = null; while ((line = br.readLine()) != null) { responseBody.append(line); } br.close(); } catch (Exception e) { responseBody.append(e); } System.out.println(responseBody.toString());
$arrayBody = array(); $arrayBody["apiKey"] = "sk_test_w5lNQylNqa5lNQe013Nq"; $arrayBody["billingKey"] = "example-billingKey"; $jsonBody = json_encode($arrayBody); $ch = curl_init('https://pay.toss.im/api/v1/billing-key/remove'); curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonBody); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($jsonBody)) ); $result = curl_exec($ch); curl_close($ch); echo "Response: ".$result;
Dim data, httpRequest, postResponse data = "apiKey=sk_test_w5lNQylNqa5lNQe013Nq" data = data & "&billingKey=example-billingKey" Set httpRequest = Server.CreateObject("MSXML2.ServerXMLHTTP") httpRequest.Open "POST", "https://pay.toss.im/api/v1/billing-key/remove", False httpRequest.SetRequestHeader "Content-Type", "application/json" httpRequest.Send data postResponse = httpRequest.ResponseText Response.Write postResponse
import urllib, urllib2 url = "https://pay.toss.im/api/v1/billing-key/remove" params = { "apiKey": "sk_test_w5lNQylNqa5lNQe013Nq", "billingKey": "example-billingKey", } response = urllib.urlopen(url, urllib.urlencode(params)) print(response.read())
require 'net/http' require 'json' uri = URI.parse("https://pay.toss.im/api/v1/billing-key/remove") params = { "apiKey" => "sk_test_w5lNQylNqa5lNQe013Nq", "billingKey" => "example-billingKey", } http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true request = Net::HTTP::Post.new(uri.path) request.set_form_data(params) response = http.request(request) p JSON.parse(response.body)
{
"code": 0
}
https://tossdev.github.io/qna.html#faq-7
토스에서 전달받은 응답 중 code -1 (실패)인 경우에 전달되는 값으로 기본적인 토스 결제 에러코드와 유사하지만, 자동결제에서 발생할 수 있는 에러코드를 정의합니다.
지속적으로 업데이트 및 추가될 수 있으며, 중복되는 에러코드가 있어서 다른 토스결제 에러코드들도 참고가 필요합니다.