LINE Pay Deposit APIs Reference
Infra and Tech Support
技術支援の問合せ先
導入方法についての質問、または、内部エラーが発生した場合は、弊社までメールをお送りください。
担当 | 問い合わせ先 | 対象の国 |
---|---|---|
LINE Pay Japan | dl_tech_support_jp@linecorp.com | 日本 |
API接続エンドポイント
Environment | URL | Description |
---|---|---|
Sandbox | https://sandbox-api-pay.line.me | インテグレーション用のテスト環境です。お申込み前にSandboxを利用したい場合は、当社担当部署にご連絡ください。ご利用手順をご案内いたします。加盟店審査の完了後に発行された加盟店IDでSandboxを利用する場合は、事前のご連絡は不要となります。LINE Pay 加盟店 My Pageから確認ください。 またテストの際、以下リンク先のテスト用のLINE Pay ナンバー(Reference No.)をご使用ください。 https://sandbox-web-pay.line.me/web/sandbox/deposit/reference-numbers |
Production | https://api-pay.line.me | 本番環境です。かんたん送金サービスお申込後、送金資金残高に入金次第、ご利用いただけます。(送金資金残高の入金方法詳細は以下リンク先の通り) https://pay.line.me/portal/jp/business/support/manual/410#01 |
Overview
LINE Pay かんたん送金サービス
LINE Pay かんたん送金は、企業からお客様にLINE Pay残高を付与(送金)する機能を提供するサービスです。本API Referenceでは、企業からお客様に対してLINE Pay残高を送金するためのAPI仕様を記載しています。
このAPIは日本国内に存在する利用法人のみ利用できます。
日本国内の電話番号でLINE登録したLINE Payユーザーにのみ送金できます。
LINE Pay ナンバー
LINE Pay ナンバーとは、LINE Payユーザーを識別するための番号であり、API仕様書の項目ではrefrenceNoになります。お客様がLINEアプリまたはLINE Payアプリから確認できます。
送金資金残高
送金資金残高(Remain Amount)は、利用企業がLINE Payユーザーに送金することが可能な金額の残高です。(送金資金残高の入金方法詳細は以下リンク先の通り)
https://pay.line.me/portal/jp/business/support/manual/410#01
一度に送金可能な最大額
送金上限金額(Each Maximum Amount Limit)は、一回の送金限度額です。利用企業に送金資金残高が残っていても、この金額を超えてLINE Payユーザーに送金することができません。
Deposit APIs
API Authentication
API連携に必要な"Channel ID"と"Channel Secret Key"は、かんたん送金の利用企業審査が完了した後にLINE Pay 加盟店 My Pageにて確認できます。
Hmac Signature
- Algorithm : HMAC-SHA256
- HMAC-SHA256(Key, Data)
- Key : Channel Secret (LINE Pay加盟店 My Pageで"Channel Id"と"Channel SecretKey"を提供)
- HTTP Method
- GET : Channel Secret + URI + Query String + nonce
- POST : Channel Secret + URI + Request Body + nonce
HTTP Method : GET
Signature = Base64(HMAC-SHA256(Your ChannelSecret, (Your ChannelSecret + URL Path + Query String + nonce)))
Query String : ?
を除いたクエリ文字列(例 : Name1=Value1&Name2=Value2...)
HTTP Method : POST
Signature = Base64(HMAC-SHA256(Your ChannelSecret, (Your ChannelSecret + URL Path + RequestBody + nonce)))
Common Http Request Header
LINE Pay APIs認証の共通ヘッダーについて詳しく説明します。認証のためのHTTPヘッダーの情報は、下表のとおりです。"Channel Id"はX-LINE-ChannelIdに、"Channel SecretKey"で作成した署名の情報はX-LINE-Authorizationに指定します。X-LINE-Authorization-Nonceには、同じ署名が使われることを防止するために、1回限りのランダムな値を生成して指定してください。
Key | Data Type | Required | Description |
---|---|---|---|
Content-Type | String | Y | application/json |
X-LINE-ChannelId | String | Y | Integration Information - Channel ID |
X-LINE-Authorization-Nonce | String | Y | UUID or Request timestamp |
X-LINE-Authorization | String | Y | HMAC Base64 Signature |
X-LINE-Authorization-Nonce
HMAC署名を作成する際に使い捨て乱数であるnonceを利用することで、同じ署名の作成を遮断し、悪意のある目的で同じリクエストを送り続けることを防ぐことができます。使い捨てnonceとしては、UUID 1 or 4またはタイムスタンプを利用できます。
Nonce Generation
String nonce = UUID.randomUUID().toString();
Sample
HMAC Sample Code
import java.math.BigDecimal;
import java.util.UUID;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.HmacUtils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.core.JsonProcessingException;
public final class HmacSignature {
public void exampleForGet() {
String requestUri = "/v1/partner-deposits/limit";
String ChannelSecret = "a917ab6a2367b536f8e5a6e2977e06f4";
String nonce = UUID.randomUUID().toString();
String signature = makeSignature(ChannelSecret, ChannelSecret + requestUri + nonce);
}
public void exampleForPost() {
DepositForm form = new DepositForm();
form.setOrderId("20190118002934873800");
form.setReferenceNo("11512574225");
form.setAuthCd("1274");
form.setCurrency("JPY");
form.setAmount(new BigDecimal(100));
form.setMemo("reward test");
String requestUri = "/v1/partner-deposits";
String ChannelSecret = "a917ab6a2367b536f8e5a6e2977e06f4";
String nonce = UUID.randomUUID().toString();
String signature = makeSignature(ChannelSecret, ChannelSecret + requestUri + toJson(form) + nonce);
}
private String makeSignature(final String key, final String data) {
return toBase64String(HmacUtils.getHmacSha256(key.getBytes()).doFinal(data.getBytes()));
}
private String toBase64String(byte[] bytes) {
byte[] byteArray = Base64.encodeBase64(bytes);
return new String(byteArray);
}
private String toJson(Object form) {
try {
return (new ObjectMapper()).writeValueAsString(form);
} catch (JsonProcessingException e) {
// TODO: error handling
throw new RuntimeException(e);
}
}
@Getter
@Setter
private class DepositForm {
private String referenceNo;
private BigDecimal amount;
private String currency;
private String orderId;
private String authCd;
private String memo;
}
}
Check Limit API
このAPIは、現在の送金資金残高を確認できます。現在の送金資金残高と一度に残高付与できる限度額を確認することができます。
API Spec
GET /v1/partner-deposits/limit
- Connection Timeout : 5秒
- Read Timeout : 10秒
Response
Response Body
Item | Data type | Length | Description |
---|---|---|---|
returnCode | String | 4 | 結果コード |
returnMessage | String | 300 | 結果メッセージまたは失敗理由 |
info.creditAmount | Number | 保証金(旧かんたん送金サービスで利用されます。現在は利用されません。) | |
info.remainAmount | Number | 送金資金残高 | |
info.eachMaxAmount | Number | 一度に残高付与できる限度額 |
Return Code
Code | Description |
---|---|
0000 | 成功 |
1104 | API認証に失敗しました。 |
1105 | 実行権限がすでに停止、もしくは解約されています。 |
1106 | ヘッダー情報エラー |
1192 | APIのPathが間違っています。 |
9000 | 内部エラー |
Sample
Request
curl -X GET \
-H "Content-Type: application/json" \
-H "X-LINE-ChannelId: {your channelId}" \
-H "X-LINE-Authorization-Nonce: e51779e1-5788-4884-9c3a-52f7bf8cb0fa" \
-H "X-LINE-Authorization: {Hmac signature}" \
https://sandbox-api-pay.line.me/v1/partner-deposits/limit
Response
{
"returnCode":"0000",
"returnMessage":"success",
"info": {
"creditAmount":1500000,
"remainAmount":74000,
"eachMaxAmount":10000
}
}
Deposit API
このAPIは、利用企業からLINE Payユーザーへ残高を付与します。
API Spec
POST /v1/partner-deposits
- Connection Timeout : 5秒
- Read Timeout : 10秒
Request Body
Item | Data type | Length | Requirement | Description |
---|---|---|---|---|
referenceNo | String | 11 | Y | LINE Pay ナンバー |
amount | Number | Y | 残高付与額 | |
currency | String | 3 | Y | 通貨コード(ISO-4217) 現在はJPYのみ送金可能です。 |
orderId | String | 100 | Y | 利用企業によってユニークに生成された注文番号 |
authCd | String | 4 | N | 追加認証キー: LINEアプリに登録されている携帯番号の下4桁 必須項目ではありませんが、誤送金防止のためこの値を利用することを強く推奨します。 |
brandName | String | 100 | N | かんたん送金を要求したブランド名を指定することができる。指定しなかった場合、利用企業のブランド名が表示される。 |
Response Body
Item | Data type | Length | Description |
---|---|---|---|
returnCode | String | 4 | 結果コード |
returnMessage | String | 300 | 結果メッセージまたは失敗理由 |
info.transactionId | Number | 19 | LINE Payによってユニークに生成された取引番号 |
info.transactionDate | String | 20 | 取引日時(ISO8601 UTC) ex) 2019-01-18T23:19:52Z |
Return Codes
Code | Description |
---|---|
0000 | 成功 |
1101 | LINE Pay ナンバー(または追加認証キー)が間違っています。 |
1102 | LINE Pay ナンバーに紐づくLINE Payのアカウントが有効ではありません。 |
1104 | API認証に失敗しました。 |
1105 | 実行権限がすでに停止、もしくは解約されています。 |
1106 | ヘッダー情報エラー |
1108 | ユーザーステータスなどによりLINE Payユーザーに残高付与できませんでした。 |
1124 | 金額情報エラー 日本円を指定した場合に123.4など小数点以下の数値で残高付与要求した場合に、このエラーが発生します。 |
1136 | 追加認証キー(電話番号)が間違っています。 |
1142 | 付与できる送金資金残高が不足しています。 |
1162 | LINE Payのアカウントタイプごとに保持可能な残高は上限があり、その上限を超える場合は送金できません。 |
1170 | 送金実施中に、ユーザーが決済や残高のチャージを行い残高が変更されました。 |
1172 | この取引は他の注文番号と同じです。 |
1178 | この通貨は利用企業ではご利用いただけません。 |
1183 | 残高付与額は事前に設定された最小金額より大きくある必要があります。 |
1184 | 残高付与は事前に設定された最大金額より小さくある必要があります。 |
1198 | 同時にリクエスト処理が実行されている場合に、このエラーが発生します。 |
1192 | APIのPathが間違っています。 |
1199 | 内部リクエストエラー |
2101 | パラメータエラー |
2102 | JSONデータフォーマットエラー |
9000 | 内部エラー |
Sample
Request
curl -X POST \
-H "Content-Type: application/json" \
-H "X-LINE-ChannelId: {your channelId}" \
-H "X-LINE-Authorization-Nonce: e51779e1-5788-4884-9c3a-52f7bf8cb0fa" \
-H "X-LINE-Authorization: {Hmac signature}" \
-d '{ "referenceNo":"11512574225", "amount": 1000, "currency":"JPY", "orderId":"Ord2018123100000001", "authCd":"1266" }' \
https://sandbox-api-pay.line.me/v1/partner-deposits
Response
{
"returnCode":"0000",
"returnMessage":"success",
"info": {
"transactionId":2019011804956338240,
"transactionDate":"2019-01-18T23:19:52Z"
}
}
Merchant balance history API
このAPIは、利用企業の送金資金残高への入金履歴と送金成功履歴を提供します。取引日時は発生日の降順で返されます。
API Spec
GET /v1/partner-deposits
- Connection Timeout : 5秒
- Read Timeout : 10秒
Query Parameters
Item | Data type | Length | Required | Description |
---|---|---|---|---|
transactionType | String | 20 | Y | トランザクションタイプの検索条件 (ALL / TRANSFER / CHARGE) |
orderId | String | 100 | N | 利用企業によってユニークに生成された注文番号 |
startDate | Date | 10 | N(*) | 検索用の開始日付 (orderIdを指定しない場合は必須) 形式: YYYY-MM-DD |
endDate | Date | 10 | N(*) | 検索用の終了日付 (orderIdを指定しない場合は必須) 形式: YYYY-MM-DD |
page | Number | N | 履歴リストの開始ページ番号 (デフォルト: 1) | |
size | Number | N | 履歴リスト1ページあたりの件数 (デフォルト: 10) |
Response Body
field | data type | length | description |
---|---|---|---|
returnCode | String | 4 | 結果コード |
returnMessage | String | 300 | 結果メッセージまたは失敗理由 |
info[].transactionId | Number | 19 | LINE Payによってユニークに生成された取引番号 |
info[].orderId | String | 100 | 利用企業によってユニークに生成された注文番号 |
info[].transactionDate | String | 20 | LINE Payによって処理された取引日付(ISO-8601形式) 例) 2019-01-18T23:19:52Z |
info[].transactionType | String | 20 | 取引種別: TRANSFER: 利用企業からユーザーに送金された取引 CHARGE: 仮想口座に利用企業残高がチャージされた取引 |
info[].transactionAmount | Number | 送金、もしくは、チャージ金額 | |
info[].referenceNo | String | 11 | LINE Payナンバー (transactionTypeがTRANSFERの場合のみ有効) |
Return Codes
Code | Description |
---|---|
0000 | 成功 |
1104 | API認証に失敗しました。 |
1105 | 実行権限がすでに停止、もしくは解約されています。 |
1106 | ヘッダー情報エラー |
1140 | パラメータ設定エラー。必須項目のorderIdまたはstartDate、endDateが指定されていません。 |
1192 | APIのPathが間違っています。 |
2101 | パラメータエラー |
2102 | JSONフォーマットエラー |
9000 | 内部エラー |
Sample
Request
curl -X GET \
-H "Content-Type: application/json" \
-H "X-LINE-ChannelId: {your channelId}" \
-H "X-LINE-Authorization-Nonce: e51779e1-5788-4884-9c3a-52f7bf8cb0fa" \
-H "X-LINE-Authorization: {Hmac signature}" \
https://sandbox-api-pay.line.me/v1/partner-deposits?transactionType=ALL&startDate=2020-06-01&endDate=2020-06-30
Response
{
"returnCode":"0000",
"returnMessage":"success",
"info": [{
"transactionId": 2020060911435878020,
"orderId": "1234567891249",
"transactionDate": "2020-06-09T04:30:18Z",
"transactionType": "TRANSFER",
"transactionAmount": 2,
"referenceNo": "11030001082"
}]
}
Request
curl -X GET \
-H "Content-Type: application/json" \
-H "X-LINE-ChannelId: {your channelId}" \
-H "X-LINE-Authorization-Nonce: e51779e1-5788-4884-9c3a-52f7bf8cb0fa" \
-H "X-LINE-Authorization: {Hmac signature}" \
https://sandbox-api-pay.line.me/v1/partner-deposits?transactionType=ALL&orderId=1234567891249
Response
{
"returnCode":"0000",
"returnMessage":"success",
"info": [{
"transactionId": 2020060911435878020,
"orderId": "1234567891249",
"transactionDate": "2020-06-09T04:30:18Z",
"transactionType": "TRANSFER",
"transactionAmount": 2,
"referenceNo": "11030001082"
}]
}
Appendix
LINE Payのエラーコード
LINE Payで発生するエラーコードを定義します。エラーコードとともに英語のエラーメッセージを表示し、既定のメッセージがない場合はハイフン(‐)を返します。
Code | Description |
---|---|
1101 | LINE Pay ナンバー(または追加認証キー)が間違っています。 |
1102 | LINE Pay ナンバーに紐づくLINE Payのアカウントが有効ではありません。 |
1104 | API認証に失敗しました。 |
1105 | 実行権限がすでに停止、もしくは解約されています。 |
1106 | ヘッダー情報エラー |
1108 | ユーザーステータスなどによりLINE Payユーザーに残高付与できませんでした。 |
1124 | 金額情報エラー 日本円を指定した場合に123.4など小数点以下の数値で残高付与要求した場合に、このエラーが発生します。 |
1136 | 追加認証キー(電話番号)が間違っています。 |
1140 | パラメータ設定エラー。必須項目のorderIdまたはstartDate、endDateが指定されていません。 |
1142 | 付与できる送金資金残高が不足しています。 |
1162 | LINE Payのアカウントタイプごとに保持可能な残高は上限があり、その上限を超える場合は送金できません。 |
1170 | 送金実施中に、ユーザーが決済や残高のチャージを行い残高が変更されました。 |
1172 | この取引は他の注文番号と同じです。 |
1178 | この通貨は利用企業ではご利用いただけません。 |
1183 | 残高付与額は事前に設定された最小金額より大きくある必要があります。 |
1184 | 残高付与は事前に設定された最大金額より小さくある必要があります。 |
1198 | 同時にリクエスト処理が実行されている場合に、このエラーが発生します。 |
1192 | APIのPathが間違っています。 |
1199 | 内部リクエストエラー |
2101 | パラメータエラー |
2102 | JSONデータフォーマットエラー |
9000 | 内部エラー |
Sandbox テストページ
LINE Pay かんたん送金の利用企業は、以下のSandboxページ内にてテストユーザーのLINE Pay ナンバーの一覧を確認でき、LINE Pay 残高を確認することができます。