NAV Navbar
  • Online APIs
  • OverView
  • Payment APIs
  • Merchant provided API or Page
  • Appendix
  • Online APIs

    OverView

    LINE Pay

    LINE Payは、LINEのユーザーがLINE Pay加盟店のサイトで利用できる決済システムです。

    Payment process LINE Payの決済プロセス

    LINE Pay加盟店になれば、世界中のすべてのLINEユーザーを顧客として取り込むことができます。また、LINEを通じて加盟店のマーケティングチャネルを拡大することで、売上増大を期待できます。ユーザーがLINE Payを使って支払いをするには、決済を行うサイトがLINE Pay加盟店である必要があります。

    LINE Pay加盟店登録の流れ

    LINE Pay加盟店に登録すれば、連携のための「Channel Id」と「Channel SecretKey」がSandbox用、Production用でそれぞれ発行されます。加盟店登録の流れは以下のとおりです。

    Ja register merchant

    加盟店登録の流れ

    1. 申し込みページ(https://pay.line.me)にアクセスする。
    2. 基本情報を記入し、必須書類を提出する。
    3. 加盟店登録の審査が行われる。
    4. 手数料および精算周期に同意し、本人確認PINコードを入力する。
    5. 加盟店登録が完了する。
    6. 登録完了メールが届く。

    一般決済

    一般決済では、LINE PayのユーザーはLINE Pay決済画面にて決済手段(残高、チャージ&ペイ、LINEポイント)を選択し、決済情報をパスコードまたはFaceIDで認証します。"Request API"で受け取った加盟店の"confirmUrl"に画面遷移すれば、加盟店サーバー側では"Confirm API"を使用して決済を完了します。
    ※一部加盟店(LINEグループ内サービス)のみ、決済手段にクレジットカード、銀行口座の選択が可能です。

    PCの場合

    Pc payment reserve complete

    PCの決済画面ー決済完了

    1. LINE Payユーザーは、LINEアプリの決済画面にて決済手段を選択し、パスワードを入力する。
    2. LINE Payサーバーでは決済手段の情報を保存し、決済ステータスを決済可能状態に変更する。
    3. LINE Payユーザーは、LINEアプリにて決済情報を確認する。
    4. PCの決済待ち画面では決済ステータスを定期的にチェックする。決済可能状態になれば、決済要求時に受け取った"confirmUrl"に遷移する。
    5. 加盟店では、LINE Payサーバーに対してConfirm APIを呼び出し、決済を完了する。

    スマートフォンの場合

    Mobile payment reserve complete

    スマートフォンの決済画面ー決済完了

    1. LINE Payユーザーは、LINEアプリの決済画面にて決済手段を選択し、パスワードを入力する。
    2. LINE Payサーバーでは決済手段の情報を保存し、決済ステータスを決済可能状態に変更する。
    3. LINE Payユーザーは、LINEアプリにて決済情報を確認し、画面下部の確認ボタンをタップして決済要求時に受け取った"confirmUrl"に遷移する。
    4. 加盟店サーバーは、LINE Payサーバーに対してConfirm APIを呼び出し、決済を完了する。

    オーソリと売上確定の分離

    一般決済と同じですが、Confirm APIを使用して決済を確定すれば、決済ステータスが売上確定待ち状態のまま完了します。LINE Payはオーソリ満了日まで売上確定待ち状態を維持し、加盟店はオーソリ満了日の前に"売上確定(Capture API)"によって決済ステータスを売上確定状態に変更します。

    confirmUrlのServer-to-Server

    一般決済におけるconfirmUrlは、加盟店にユーザーの決済承認完了を通知し、ユーザーに決済完了画面に遷移する機能を提供するページです。ユーザーに決済完了画面を表示する必要がない場合は、redirectUrls.confirmUrlTypeを"SERVER"に設定し、画面遷移せずにLINE Payサーバー側でconfirmUrlを呼び出して決済承認を通知します。ユーザーが決済を承認した後、加盟店サーバーからLINE PayサーバーにConfirm APIを呼び出して決済を完了します。

    連携の流れは以下のとおりです。

    Send confirm url server to server

    confirmUrlをServer-to-Serverで送信

    1. 加盟店は、Request APIのredirectUrls.confirmUrlTypeを"SERVER"に設定する。
    2. LINE Payユーザーは、LINE Pay決済画面に入って決済手段を選択し、パスワードを入力する。
    3. LINE Payサーバーでは決済情報を保存し、決済要求時に加盟店から受け取ったconfirmUrlを呼び出す。
    4. 加盟店サーバーは、Confirm APIを呼び出して決済を完了する。confirmUrlに対するレスポンスが正常に返ってこなかった場合は、Confirm APIを呼び出すことができない。

    [Merchant API] confirmUrl

    関連API

    Checkout (Only Japan)

    LINE Payで提供する多様な決済手段(残高、クレジットカード、銀行口座、LINEポイント)とLINEのユーザー情報を利用することで、決済と注文を簡単に行うことができます。

    Checkoutの流れ

    Ja checkout flow

    Checkoutの流れ

    1. 加盟店は、Request APIを呼び出してLINE Pay側に決済をリクエストする。このとき、Checkoutサービスを有効にするために"shipping.type"をSHIPPINGに設定する。また、配送方法と送料を照会できるInquiry ShippingMethods APIを実装し、API Urlを"shipping.feeInquiryUrl"に入力してLINE Pay側に提供する。
    2. Request APIのレスポンスとして返されたpaymentUrlを利用して、ユーザーはLINE Pay決済画面に遷移できる。
    3. ユーザーは、LINEアプリの決済画面にて商品と決済情報を確認し、配送先を入力する。LINE Payでは、その配送先と注文情報(orderId、transactionId)を基に加盟店の利用可能な配送方法を照会し、ユーザーに表示する。
    4. ユーザーは、配送方法と決済手段を選択し、LINE Payユーザー認証を利用して安全かつ簡単に決済要求を承認する。
    5. 決済要求が承認されれば、決済要求時に加盟店から受け取ったconfirmUrlに配送方法と送料の情報が追加され、ユーザーの画面は"confirmUrl"に遷移する。
    6. 承認済みの決済要求については、confirmUrlを使用して決済完了可能であることを加盟店に渡す。加盟店は、confirmUrlが呼び出された決済要求に対してConfirm APIを呼び出し、決済を完了する。

    Checkoutのタイプ

    LINE Payでは、"shipping.type"オプションを利用してCheckout機能と一般決済機能を提供しています。ユーザーにCheckout機能を提供するにはSHIPPINGに、一般決済機能を提供するにはNO_SHIPPINGに設定してください。デフォルトではNO_SHIPPINGに設定されています。

    Checkout機能を利用する場合は、加盟店 My Pageの以下メニューより設定が必要です。 基本情報の管理 > その他の情報 >LINE Checkout

    Highly Recommended

    配送方法

    LINE Payユーザーが配送先を入力すれば、それに対して配送可能な配送業者や送料、予定配送期間のリストを提供する必要があります。提供すべきAPIの詳細については、Inquiry ShippingMethods APIをご参照ください。

    Checkout画面でユーザーが配送先を選択すれば、LINE Pay側はその地域に関する配送情報を加盟店にリクエストします。選択された配送手段と送料は、confirmUrlのクエリ文字列で渡されます。詳細は、confirmUrl Specをご参照ください。

    一般的なCheckoutでは、"shipping.feeInquiryType"としてCONDITIONを使用し、配送先によって変わる送料と配送情報を提供します。送料が固定または無料の場合は、FIXEDを選択します。FIXEDを選択すれば、配送先が変更されても、LINE Payは加盟店に配送方法と送料の情報をリクエストしません。

    Highly Recommended

    配送受取人

    Only Japan

    受取人情報のfirstName, lastNameには漢字の名前を、firstNameOptional, lastNameOptionalにはカタカナの名前を使用します。

    関連API

    自動決済

    自動決済は、決済が必要なタイミングにLINE Payユーザーの追加承認を行わずに、加盟店サーバーとLINE Payサーバー間でPreapproved Pay APIを呼び出して決済を行う機能です。LINE Payユーザーが初回決済プロセス(一般決済プロセスと同じ)を踏むと、加盟店に"RegKey"(自動決済キー)が発行されます。加盟店では"Confirm API"で渡されたRegKeyを保存・管理することで、次回の決済からはLINE Payでユーザー承認プロセスを経ずに"Preapproved Pay API"を使って決済を完了できます。

    1. 初回決済およびRegKey(自動決済キー)の発行
      1. 加盟店サーバーからRequest APIを呼び出す。このとき、"options.payment.payType"を"PREAPPROVED"に設定する。
      2. LINE Pay決済画面にて決済手段とパスワードを確認し、redirectUrls.confirmUrl(Request APIのパラメータ)に遷移する。
      3. 加盟店サーバーから"Confirm API"のレスポンスとして発行された"RegKey"を管理する。
      4. 決済が完了する。
    1. 自動決済
      1. RegKeyでPreapproved Pay APIを呼び出す。
      2. 決済が完了する。

    Preapproved payment

    自動決済

    1. 自動決済を停止するためのregKey満了リクエスト
      1. Expire RegKey APIを呼び出して満了させたいRegKeyを渡す。
      2. 自動決済キー(RegKey)が満了する。

    関連API

    Payment APIs

    Infra and Tech Support

    技術支援の問合せ先

    導入方法についての質問、または、内部エラーが発生した場合は、以下の各国の問い合わせ先までメールをお送りください。

    担当 問い合わせ先 対象の国
    LINE Pay Japan dl_tech_support_jp@linecorp.com 日本
    LINE Pay Thailand dl_tech_support_th@linecorp.com タイ
    LINE Pay Taiwan dl_tech_support_tw@linecorp.com 台湾
    LINE Pay Global dl_tech_support_global@linecorp.com その他

    API接続エンドポイント

    Environment URL Description
    Sandbox https://sandbox-api-pay.line.me インテグレーション用のテスト環境です。SandboxシミュレーターでLINE Payでの決済を行うことができます。
    Production https://api-pay.line.me 本番環境、および、テスト加盟店環境です。

    API Authentication

    LINE Pay Payment APIのユーザー認証(Authentication)方法について説明します。認証に必要な"Channel ID"と"Channel SecretKey"は、加盟店審査が完了した後に加盟店 My Page(https://pay.line.me)にて確認できます。LINE Payでは、連携を準備するためのSandbox環境を提供しています。Sandboxで使用できるテストチャネル情報(id、secretKey)とProduction環境で使用する実際のチャネル情報(id、secretKey)は、いずれも加盟店 My Pageにて確認できます。

    HMAC Signature

    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 Requirement Description
    Content-Type String Y application/json
    X-LINE-ChannelId String Y Payment Integration Information - Channel ID
    X-LINE-MerchantDeviceProfileId String N Offline Support - Device Type
    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作成

    
        String nonce = UUID.randomUUID().toString();
    
    

    Sample

    HMACのサンプルコード

    import java.util.UUID;
    
    import org.apache.commons.codec.binary.Base64;
    import org.apache.commons.codec.digest.HmacUtils;
    
    public final class HmacSignature {
    
        private HmacSignature(){}
    
        public static String encrypt(final String keys, final String data) {
            return toBase64String(HmacUtils.getHmacSha256(keys.getBytes()).doFinal(data.getBytes()));
        }
    
        public static String toBase64String(byte[] bytes) {
            byte[] byteArray = Base64.encodeBase64(bytes);
            return new String(byteArray);
        }
    
        public static void main(String[] args) {
            CheckoutPaymentRequestForm form = new CheckoutPaymentRequestForm();
    
    
            form.setAmount(new BigDecimal("100"));
            form.setCurrency("JPY");
            form.setOrderId("merchant_order_id");
    
            ProductPackageForm productPackageForm = new ProductPackageForm();
            productPackageForm.setId("package_id");
            productPackageForm.setName("shop_name");
            productPackageForm.setAmount(new BigDecimal("100"));
    
            ProductForm productForm = new ProductForm();
            productForm.setId("product_id");
            productForm.setName("product_name");
            productForm.setImageUrl("");
            productForm.setQuantity(new BigDecimal("10"));
            productForm.setPrice(new BigDecimal("10"));
            productPackageForm.setProducts(Lists.newArrayList(productForm));
    
            form.setPackages(Lists.newArrayList(productPackageForm));
            RedirectUrls redirectUrls = new RedirectUrls();
            redirectUrls.setAppPackageName("");
            redirectUrls.setConfirmUrl("");
            form.setRedirectUrls(redirectUrls);
    
            String ChannelSecret = "a917ab6a2367b536f8e5a6e2977e06f4";
            String requestUri = "/v3/payments/request";
            String nonce = UUID.randomUUID().toString();
            String signature = encrypt(ChannelSecret, ChannelSecret + requestUri + toJson(form) + nonce);
        }
    }
    

    Request API

    LINE Pay決済をリクエストします。このとき、ユーザーの注文情報と決済手段を設定できます。リクエストに成功するとLINE Pay取引番号が発行されます。この取引番号を利用して、決済完了・返金を行うことができます。

    API Spec

    POST /v3/payments/request

    Request

    Request Body

    Item Data type Length Requirement Description
    amount Number Y 決済金額
    = sum(packages[].amount) + sum(packages[].userFee) + options.shipping.feeAmount
    currency String 3 Y 決済通貨(ISO 4217)
  • 対応通貨 : USD、JPY、TWD、THB
  • orderId String 100 Y 加盟店の注文番号
  • 加盟店が管理するユニークなID
  • packages[].id String 50 Y パッケージリストのユニークなID
    packages[].amount Number Y パッケージ内の商品金額合計
    =sum(products[].quantity * products[].price)
    packages[].userFee Number N ユーザー手数料 : 決済金額の中に手数料項目が含まれている場合に返す。
    packages[].name String 100 N パッケージの名前(または、加盟店内の出店業者の名前)
    packages[].products[].id String 50 N 加盟店の販売商品のID
    packages[].products[].name String 4000 Y 販売商品の名前
    packages[].products[].imageUrl String 500 N 販売商品の画像URL
    packages[].products[].quantity Number Y 商品数
    packages[].products[].price Number Y 各商品の決済金額
    packages[].products[].originalPrice Number N 各商品の元の金額
    redirectUrls.appPackageName String 4000 N Androidでのアプリ間遷移時にフィッシングを防止するための情報
    redirectUrls.confirmUrl String 500 Y ユーザーが決済要求を承認した後に遷移する加盟店のURL
    redirectUrls.confirmUrlType String N ユーザーが決済要求を承認した後のconfirmUrlのオプション
  • CLIENT
  • SERVER
  • NONE
  • 「LINE Checkout」を使用する場合には「CLIENT」の場合のみ有効となる。
    redirectUrls.cancelUrl String 500 Y LINEアプリの決済画面でLINE Payユーザーが決済を取り消した場合に遷移するURL
    options.payment.capture Boolean N 自動売上確定の有無
  • true : Confirm APIでオーソリ/売上確定を同時に処理
  • false : Confirm APIでオーソリ、Capture APIで売上確定を処理する必要がある。
  • options.payment.payType String N 決済タイプ
  • NORMAL
  • PREAPPROVED
  • options.display.locale String N 決済待ち画面の言語コード。デフォルトは英語(en)。
  • 対応言語: en、ja、ko、th, zh_TW、zh_CN
  • options.display.checkConfirmUrlBrowser Boolean N confirmUrlへの遷移時に使われるブラウザ(Webビュー含む)の確認有無
  • true : 決済要求したブラウザ(Webビュー含む)とconfirmUrlに遷移するブラウザが異なる場合、LINE Pay決済要求時に使用したブラウザに切り替えるように案内する。
  • false : ブラウザ(Webビュー含む)を確認せずにconfirmUrlに遷移する。
  • options.shipping.type String N 配送先オプション
  • NO_SHIPPING
  • FIXED_ADDRESS
  • SHIPPING
  • options.shipping.feeAmount Number N 送料
    options.shipping.feeInquiryUrl String 500 N 配送方法を照会するURL
    options.shipping.feeInquiryType String N 送料照会タイプ
  • CONDITION : 配送先を変更すると配送方法(送料)を照会する。
  • FIXED : 固定値。配送先を変更しても配送方法を照会しない。
  • options.shipping.address.country String 2 N 配送先の国
    options.shipping.address.postalCode String 10 N 配送先の郵便番号
    options.shipping.address.state String 100 N 配送先の都道府県
    options.shipping.address.city String 100 N 配送先の市町村
    options.shipping.address.detail String 1000 N 配送先の番地
    options.shipping.address.optional String 1000 N 配送先の追加情報
    options.shipping.address.recipient.firstName String 200 N 受取人の名前(名)
    options.shipping.address.recipient.lastName String 200 N 受取人の名前(姓)
    options.shipping.address.recipient.firstNameOptional String 200 N 受取人のカナ名(名)
    options.shipping.address.recipient.lastNameOptional String 200 N 受取人のカナ名(姓)
    options.shipping.address.recipient.email String 100 N 受取人のメールアドレス
    options.shipping.address.recipient.phoneNo String 100 N 受取人の電話番号
    options.extra.branchName String 200 N 決済を要求した店舗名(100文字まで表示)
    options.extra.branchId String 32 N ブランチID 決済がリクエストされた場所を識別するために利用します。
    英字、数字、記号を利用できます。

    Response Body

    Item Data type Length Description
    returnCode String 4 結果コード
    returnMessage String 300 結果メッセージ
    info.transactionId Number 19 取引番号
    info.paymentAccessToken String 12 LINE PayでScannerを利用する代わりにコードを入力する場合、そのコード値
    info.paymentUrl.app String 300 決済画面に遷移するアプリのURL
  • アプリで決済要求した場合に使用する。
  • 加盟店アプリからLINEアプリに遷移するためのURLである。
  • info.paymentUrl.web String 300 決済画面に遷移するWeb URL
  • Webで決済要求した場合に使用する。
  • LINE Pay決済待ち画面に遷移するためのURLである。
  • 別途のパラメータ追加せずに、返されたURLにそのまま遷移する。
  • デスクトップでポップアップを開く場合、サイズは次のとおりである。Width: 700px、Height : 546px
  • Return Codes

    Code Description
    0000 成功
    1104 加盟店が存在しません。
    1105 加盟店がLINE Payを利用できない状態です。
    1106 ヘッダー情報エラー
    1124 金額情報エラー(scale)
    1145 決済中です。
    1172 同じ注文番号(orderId)で取引された履歴があります。
    1178 加盟店がサポートしていない通貨です。
    1183 決済金額は0より大きい必要があります。
    1194 自動決済を利用できない加盟店です。
    2101 パラメータエラー
    2102 JSONデータフォーマットエラー
    9000 内部エラー

    Request Details

    Product

    注文(決済)情報は、パッケージと商品別に豊富な内容で構成することができます。パッケージは配送単位のことで、一つのパッケージの中に複数の商品を入れることができます。

    RedirectUrls.confirmUrl

    ユーザーが決済要求を承認した後、confirmUrlを自動的に呼び出します。confirmUrlは、ユーザー承認が完了しており、Confirm APIを使用して決済完了できるということを加盟店に通知します。また、決済承認後にまだ決済完了していないユーザーに決済進行状態を案内する画面を含める必要があります。

    RedirectUrls.cancelUrl

    LINE Pay決済画面でユーザーが決済を途中で取り消せば、Request APIで受け取ったcancelUrlを利用して決済取り消し画面に遷移します。この際も、transactionIdとorderIdが追加された返されます。

    confirmUrlType

    ユーザーが決済要求を承認した後のconfirmUrlのオプション

    Options

    Optionsのフィールドを設定することで、LINE Payが提供する多様な決済手段とLINEファミリーサービスの機能を利用できます。

    Payment

    決済タイプを設定します。

    payType

    一般決済

    自動決済

    Display

    ユーザーの決済画面と決済フローを設定できます。

    locale

    ユーザーの決済待ち画面の言語

    Sample

    一般決済

    
    {
        "amount" : 100,
        "currency" : "JPY",
        "orderId" : "MKSI_S_20180904_1000001",
        "packages" : [
            {
                "id" : "1",
                "amount": 100,
                "products" : [
                    {
                        "id" : "PEN-B-001",
                        "name" : "Pen Brown",
                        "imageUrl" : "https://pay-store.line.com/images/pen_brown.jpg",
                        "quantity" : 2,
                        "price" : 50
                    }
                ]
            }
        ],
        "redirectUrls" : {
            "confirmUrl" : "https://pay-store.line.com/order/payment/authorize",
            "cancelUrl" : "https://pay-store.line.com/order/payment/cancel"
        },
        "options" : {
            "extra" : {
                "branchName" : "BRANCH_NAME",
                "branchId" : "BRANCH_ID"
            }
        }
    }
    
    
    

    Checkout決済

    
    {
        "amount" : 1000,
        "currency" : "JPY",
        "orderId" : "MKSI_M_20180904_1000001",
        "packages" : [
            {
                "id" : "1",
                "amount" : 1000,
                "products" : [
                    {
                        "id" : "PEN-B-001",
                        "name" : "Pen Brown",
                        "imageUrl" : "http://pay-store.line.com/static/img/brown-head.jpg",
                        "quantity" : 2,
                        "price" : 50
                    },
                    {
                        "id" : "NT-W-001",
                        "name" : "White Note",
                        "imageUrl" : "http://pay-store.line.com/static/img/white-head.jpg",
                        "quantity" : 1,
                        "price" : 300
                    },
                    {
                        "id" : "NT-P-001",
                        "name" : "Gun mksi-edition",
                        "imageUrl" : "http://pay-store.line.com/static/img/mksi-shot.jpg",
                        "quantity" : 2,
                        "price" : 300
                    }
                ]
            }
        ],
        "redirectUrls" : {
            "confirmUrl" : "http://pay-store.line.com/payment/redirect?type=confirm",
            "cancelUrl" : "http://pay-store.line.com/payment/redirect?type=cancel"
        },
        "options" : {
            "shipping" : {
                "type" : "SHIPPING",
                "feeInquiryUrl" : "https://pay-store.line.com/order/shipping/method",
                "feeInquiryType" : "CONDITION"
            }
        }
    }
    
    
    

    自動決済

    
    {
        "amount" : 0,
        "currency" : "JPY",
        "orderId" : "MKSI_P_20181231_1000001",
        "packages" : [
            {
                "id" : "1",
                "amount": 0,
                "products" : [
                    {
                        "id" : "1",
                        "name" : "Prime MemberShip",
                        "imageUrl" : "https://pay-store.line.com/images/pen_brown.jpg",
                        "quantity" : 1,
                        "price" : 0
                    }
                ]
            }
        ],
        "redirectUrls" : {
            "confirmUrl" : "https://pay-store.line.com/order/payment/authorize",
            "cancelUrl" : "https://pay-store.line.com/order/payment/cancel"
        },
        "options" : {
            "payment" : {
                "payType" : "PREAPPROVED"
            }
        }
    }
    
    
    

    Confirm API

    confirmUrlまたはCheck Payment Status APIによってユーザーが決済要求を承認した後、加盟店側で決済を完了させるためのAPIです。Request APIの"options.payment.capture"をfalseに設定するとオーソリと売上確定が分離された決済になり、決済を完了させても決済ステータスは売上確定待ち(オーソリ)状態のままとなります。売上を確定するには、Capture APIを呼び出して売上確定を行う必要があります。

    API Spec

    POST /v3/payments/{transactionId}/confirm

    Request Body

    Item Data type Length Requirement Description
    amount number Y 決済金額
    currency String 3 Y 決済通貨(ISO 4217)
    対応通貨は以下のとおりである。
    • USD
    • JPY
    • TWD
    • THB

    Response Body

    Item Data type Length Description
    returnCode String 4 結果コード
    returnMessage String 300 結果メッセージ
    info.orderId String 100 決済要求時に受け取った加盟店のユニークな注文番号
    info.transactionId Number 決済要求の結果として受け取った取引番号(19桁)
    info.authorizationExpireDate String 30 オーソリ満了日(ISO 8601)
    • オーソリ(capture=false)のみ行った決済の場合に返す。
    info.regKey String 15 自動決済キー(15桁)
    info.payInfo[].method String 20 決済時に使用された決済手段
    • CREDIT_CARD
    • BALANCE
    • DISCOUNT
    • POINT(利用されたLINEポイントを区別して受け取りたい場合に設定されます。)
    • LINK(利用されたLINK支払いを区別して受け取りたい場合に設定されます。)
    info.payInfo[].amount Number 決済金額
    info.payInfo[].creditCardNickname String 100 自動決済時のクレジットカードのニックネーム
    • LINE Payで管理するクレジットカードの名前。登録時に設定した名前である。
    • LINE Payユーザーがニックネームを設定しなかった場合、空の文字列が返される。
    • ニックネームは、ユーザーが要求すればLINE Pay側で変更でき、その変更された内容は加盟店側には共有されない。
    info.payInfo[].creditCardBrand String 20 自動決済時のクレジットカードのブランド
    • VISA
    • MASTER
    • AMEX
    • DINERS
    • JCB
    info.payInfo[].maskedCreditCardNumber String 17 マスキングされたクレジットカード番号(台湾加盟店に限る。加盟店 My Pageの管理者にリクエストすれば機能を使用できる)
  • Format: **** **** **** 1234
  • info.packages[].id String 50 パッケージリストのユニークなID
    info.packages[].name String 4000 パッケージリストの商品名
    info.packages[].amount Number パッケージ内の商品金額合計
    =sum(products[].quantity * products[].price)
    info.packages[].userFeeAmount Number ユーザー手数料 : 決済金額の中に手数料項目が含まれている場合に返す。
    info.shipping.methodId String 50 ユーザーが選択した配送方法のID
    info.shipping.feeAmount Number 送料
    info.shipping.address.country String 2 配送先の国
    info.shipping.address.postalCode String 10 配送先の郵便番号
    info.shipping.address.state String 100 配送先の都道府県
    info.shipping.address.city String 100 配送先の市町村
    info.shipping.address.detail String 1000 配送先の番地
    info.shipping.address.optional String 1000 配送先の追加情報
    info.shipping.address.recipient.firstName String 200 受取人の名前(名)
    info.shipping.address.recipient.lastName String 200 受取人の名前(姓)
    info.shipping.address.recipient.firstNameOptional String 200 受取人のカナ名(名)
    info.shipping.address.recipient.lastNameOptional String 200 受取人のカナ名(姓)
    info.shipping.address.recipient.email String 100 受取人のメールアドレス
    info.shipping.address.recipient.phoneNo String 50 受取人の電話番号

    Return Codes

    Code Description
    0000 成功
    1101 LINE Payのユーザーではありません。
    1102 ユーザーが取引できない状態です。
    1104 加盟店が存在しません。
    1105 加盟店がLINE Payを利用できない状態です。
    1106 ヘッダー情報エラー
    1110 使用できないクレジットカードです。
    1124 金額情報エラー(scale)
    1141 支払い口座エラー
    1142 残高が不足しています。
    1150 取引履歴がありません。
    1152 同じtransactionIdで取引された履歴があります。
    1153 決済要求した金額と実際の決済金額が異なります。
    1159 決済要求情報が存在しません。
    1169 LINE Payで決済手段の選択とパスワード認証を行う必要があります。
    1170 ユーザーの口座の残高が変更されました。
    1172 同じ注文番号(orderId)で取引された履歴があります。
    1180 決済の有効期限が切れました。
    1198 APIが二重に呼び出されました。
    1199 内部要求エラー
    1280 クレジットカード決済の一時的なエラー
    1281 クレジットカード決済エラー
    1282 クレジットカード承認エラー
    1283 不正利用が疑われるため、決済が拒否されました。
    1284 クレジットカード決済が一時的に中断されました。
    1285 クレジットカードの決済情報が漏れています。
    1286 クレジットカードの決済情報が正しくありません。
    1287 クレジットカードの有効期限が切れています。
    1288 クレジットカードの支払い口座の残高が不足しています。
    1289 クレジットカードの利用限度額を超えています。
    1290 クレジットカードの一回当たりの利用限度額を超えています。
    1291 盗難報告されたクレジットカードです。
    1292 利用停止になったクレジットカードです。
    1293 CVN入力エラー
    1294 ブラックリストに登録されたクレジットカードです。
    1295 クレジットカード番号が正しくありません。
    1296 処理できない金額です。
    1298 クレジットカードの使用が拒否されました。
    9000 内部エラー

    Sample

    Confirm APIのリクエスト例

    
    curl -X POST \
        -H "Content-Type: application/json" \
        -H "X-LINE-ChannelId: {your channelId}" \
        -H "X-LINE-Authorization-Nonce: 44453d45-768e-40e8-8349-748e797c450f" \
        -H "X-LINE-Authorization: {Hmac signature}" \
        -H "X-LINE-MerchantDeviceProfileId: {your device profile id}" \
        -d '{ "amount": 1000, "currency":"JPY" }' \
        https://sandbox-api-pay.line.me/v3/payments/2018082512345678910/confirm
    
    

    Response

    決済タイプ(payType)がNORMAL(一般決済)の場合の残高決済

    
     {
         "returnCode": "0000",
         "returnMessage": "OK",
         "info": {
             "orderId": "MKSI_M_20180904_1000001",
             "transactionId": 2018082512345678910,
             "payInfo": [{
                 "method": "BALANCE",
                 "amount": 900
             }, {
                 "method": "DISCOUNT",
                 "amount": 100
             }],
         }
     }
    
    

    決済タイプ(payType)がPREAPPROVED(自動決済)の残高決済

    
    {
        "returnCode": "0000",
        "returnMessage": "Success.",
        "info": {
            "orderId": "MKSI_M_20180904_1000001",
            "transactionId": 2018082512345678800,
            "payInfo": [{
                    "method": "BALANCE",
                    "amount": 200
                },  {
                    "method": "DISCOUNT",
                    "amount": 100
                }],
            "regKey": "RK****************",
            "packages": {
                "id": "1",
                "amount": 300,
                "userFeeAmount": 0,
                "products": [{
                        "id": "PEN-B-001",
                        "name": "Pen Brown",
                        "imageUrl": "https://***.com/img.img",
                        "quantity": 2,
                        "price": 150
                    }]
            }
        }
    }
    
    

    Capture API

    Request APIを使って決済をリクエストする際に"options.payment.capture"をfalseに設定した場合、Confirm APIで決済を完了させると決済ステータスは売上確定待ち状態になります。決済を完全に確定するためには、Capture APIを呼び出して売上確定を行う必要があります。

    API Spec

    POST /v3/payments/authorizations/{transactionId}/capture

    Request Body

    Item Data type Requirement Description
    amount number Y 決済金額
    currency String(3byte) Y 決済通貨(ISO 4217)
    対応通貨は以下のとおりである。
    • USD
    • JPY
    • TWD
    • THB

    Response Body

    Item Data type Description
    returnCode String(4byte) 結果コード
    returnMessage String 結果メッセージまたは失敗理由。例えば、以下のような場合がある。
    • 決済できない加盟店
    • 加盟店認証情報エラー
    info.orderId String 決済要求時に加盟店から受け取った注文番号
    info.transactionId number 決済要求の結果として受け取った取引番号(19桁)
    info[].payInfo[].method String 決済時に使われた決済手段
    • CREDIT_CARD
    • BALANCE
    • DISCOUNT
    • POINT(利用されたLINEポイントを区別して受け取りたい場合に設定されます。)
    • LINK(利用されたLINK支払いを区別して受け取りたい場合に設定されます。)
    info.payInfo[].amount number 決済金額

    Return Codes

    Code Description
    0000 成功
    1104 加盟店が存在しません。
    1105 加盟店がLINE Payを利用できない状態です。
    1106 ヘッダー情報エラー
    1150 取引履歴がありません。
    1155 取引番号は正しくありません。
    1170 ユーザーの口座の残高が変更されました。
    1172 同じ注文番号(orderId)で取引された履歴があります。
    1179 処理できない状態です。
    1183 決済金額は0より大きい必要があります。
    1184 決済金額が要求時の金額を超えています。
    1198 APIが二重に呼び出されたか、オーソリ状態の取引を更新する途中でCapture APIが呼び出されました(数分後にもう一度お試しください)。
    1199 内部要求エラー
    1280 クレジットカード決済の一時的なエラー
    1281 クレジットカード決済エラー
    1282 クレジットカード承認エラー
    1283 不正利用が疑われるため、決済が拒否されました。
    1284 クレジットカード決済が一時的に中断されました。
    1285 クレジットカードの決済情報が漏れています。
    1286 クレジットカードの決済情報が正しくありません。
    1287 クレジットカードの有効期限が切れています。
    1288 クレジットカードの支払い口座の残高が不足しています。
    1289 クレジットカードの利用限度額を超えています。
    1290 クレジットカードの一回当たりの利用限度額を超えています。
    1291 盗難報告されたクレジットカードです。
    1292 利用停止になったクレジットカードです。
    1293 CVN入力エラー
    1294 ブラックリストに登録されたクレジットカードです。
    1295 クレジットカード番号が正しくありません。
    1296 処理できない金額です。
    1298 クレジットカードの使用が拒否されました。
    9000 内部エラー

    Sample

    リクエスト

    
    curl -X POST \
        -H "Content-Type: application/json" \
        -H "X-LINE-ChannelId: {your channelId}" \
        -H "X-LINE-Authorization-Nonce: c3b3c9e5-701b-4df8-bcbc-e3ee86a1cef3" \
        -H "X-LINE-Authorization: {Hmac signature}" \
        -H "X-LINE-MerchantDeviceProfileId: {your device profile id}" \
        -d '{ "amount": 1000, "currency": "JPY" }' https://sandbox-api-pay.line.me/v3/payments/authorizations/2018082512345678910/capture
    
    

    レスポンス

    
    {
        "returnCode": "0000",
        "returnMessage": "OK",
        "info": {
            "transactionId": 20140101123123123,
            "orderId": "order_210124213",
            "payInfo": [{
                "method": "BALANCE",
                "amount": 10
            }, {
                "method": "DISCOUNT",
                "amount": 10
            }]
        }
    }
    
    

    Void API

    決済ステータスがオーソリ状態である決済データを無効化するAPIです。Confirm APIを呼び出して決済完了したオーソリ状態の取引を取り消すことができます。取り消しできるのはオーソリ状態の取引だけであり、売上確定済みの取引はRefund APIを使用して返金します。

    API Spec

    POST /v3/payments/authorizations/{transactionId}/void

    Response Body

    Item Data type Length Description
    returnCode String 4 結果コード
    returnMessage String 300 結果メッセージまたは失敗理由。例えば、以下のような場合である。
    • 決済できない加盟店
    • 加盟店認証情報得エラー
    info.refundTransactionId number 返金の取引番号(新規発行ー19桁)
    info.refundTransactionDate String 30 返金日(ISO 8601)

    Return Codes

    Code Description
    0000 成功
    1101 LINE Payのユーザーではありません。
    1102 ユーザーが取引できない状態です。
    1104 加盟店が存在しません。
    1105 加盟店がLINE Payを利用できない状態です。
    1106 ヘッダー情報エラー
    1150 取引履歴がありません。
    1155 取引番号が正しくありません。
    1165 すでに無効化されている取引です。
    1170 ユーザーの口座の残高が変更されました。
    1198 APIが二重に呼び出されました。
    1199 内部要求エラー
    1900 一時的なエラーです。しばらくしてからもう一度お試しください。
    1902 一時的なエラーです。しばらくしてからもう一度お試しください。
    1999 以前の要求情報と異なります。
    9000 内部エラー

    Sample

    リクエスト

    
    curl -X POST \
    -H "Content-Type: application/json" \
    -H "X-LINE-ChannelId: {your channelId}" \
    -H "X-LINE-Authorization-Nonce: 8335ce37-1386-4b0b-bd65-90d65abaedd6" \
    -H "X-LINE-Authorization: {signature}" \
    -H "X-LINE-MerchantDeviceProfileId: {your device profile id}" \
    https://sandbox-api-pay.line.me/v3/payments/authorizations/2018082512345678910/void
    
    

    レスポンス

    
    {
        "returnCode": "0000",
        "returnMessage": "OK",
        "info": {
            "refundTransactionId": 2018082512345678911,
            "refundTransactionDate": "2018-08-25T09:15:01Z"
        }
    }
    
    

    Refund API

    決済完了(売上確定済み)された取引を返金します。返金時は、LINE Payユーザーの決済取引番号を必ず渡す必要があります。一部返金も可能です。

    API Spec

    POST /v3/payments/{transactionId}/refund

    Request Body

    Item Data type Requirement Description
    refundAmount number N 返金金額
    • 値がない場合は全額返金

    Response Body

    Item Data type Length Description
    returnCode String 4 結果コード
    returnMessage String 300 結果メッセージまたは失敗理由
    info.refundTransactionId number 返金の取引番号(新規発行ー19桁)
    info.refundTransactionDate String 30 返金日(ISO 8601)

    Return Codes

    Code Description
    0000 成功
    1101 LINE Payのユーザーではありません。
    1102 ユーザーが取引できない状態です。
    1104 加盟店が存在しません。
    1105 加盟店がLINE Payを利用できない状態です。
    1106 ヘッダー情報エラー
    1124 金額情報エラー(scale)
    1150 取引履歴がありません。
    1155 返金できないタイプの取引番号です。
    1163 返金可能期間が過ぎたため、返金できません。
    1164 返金可能金額を超えています。
    1165 すでに返金が完了しています。
    1179 処理できない状態です。
    1198 APIが二重に呼び出されました。
    1199 内部要求エラー
    9000 内部エラー

    Sample

    リクエスト

    
    curl -X POST -H "Content-Type: application/json" \
        -H "X-LINE-ChannelId: {your channelId}"\
        -H "X-LINE-Authorization-Nonce: 57d03ebc-0c79-404c-82e5-bb8b3b30fe56" \
        -H "X-LINE-Authorization: {Hmac signature}" \
        -H "X-LINE-MerchantDeviceProfileId: {your device profile id}"\
        -d '{ "refundAmount": 1000 }'\
        https://sandbox-api-pay.line.me/v3/payments/2018082512345678910/refund
    
    

    レスポンス

    
    {
        "returnCode": "0000",
        "returnMessage": "success",
        "info": {
            "refundTransactionId": 2018082512345678911,
            "refundTransactionDate": "2018-08-25T09:15:01Z"
        }
    }
    
    

    Payment Details API

    LINE Payの取引履歴を照会するAPIです。オーソリと売上確定の取引を照会できます。"fields"を設定することで、取引情報または注文情報を選択的に照会することができます。

    API Spec

    GET /v3/payments

    Request Parameter

    Item Data type Requirement Description
    transactionId[] number N LINE Payが発行した、決済または返金の取引番号
    orderId[] String N 加盟店の注文番号
    fields String N 照会対象を選択できる。
  • TRANSACTION
  • ORDER
    デフォルトは全件
  • Response

    Response Body

    共通情報

    Item Data type Length Description
    returnCode String 4 結果コード
    returnMessage String 100 結果メッセージまたは失敗理由

    Transactionタイプで照会した場合

    Item Data type Length Description
    info[].transactionId number 取引番号(19桁)
    info[].transactionDate String 20 取引日(ISO-8601)
    info[].transactionType String 取引タイプ
    • PAYMENT: 決済
    • PAYMENT_REFUND: 返金
    • PARTIAL_REFUND: 一部返金
    info[].payStatus String 20 決済ステータス
    • AUTHORIZATION: オーソリ
    • VOIDED_AUTHORIZATION: オーソリ無効("Void API"を呼び出した状態)
    • EXPIRED_AUTHORIZATION: オーソリ満了(LINE Pay側が加盟店に許可したオーソリ有効期限が切れた場合)
    • CAPTURE: 売上済
    info[].productName String 4000 商品名
    info[].merchantName String 加盟店名
    info[].currency String 3 通貨(ISO 4217)
    info[].authorizationExpireDate String 20 オーソリ満了日(ISO-8601)
    info[].payInfo[].method String 決済時に使われた決済手段
    • CREDIT_CARD
    • BALANCE
    • DISCOUNT
    • POINT(利用されたLINEポイントを区別して受け取りたい場合に設定されます。)
    • LINK(利用されたLINK支払いを区別して受け取りたい場合に設定されます。)
    info[].payInfo[].amount number 取引金額(取引番号の発行時に取引された金額)
    原取引を照会した際に最終取引金額を求める計算式は、以下のとおりである。
    sum(info[].payInfo[].amount) 窶錀 sum(refundList[].refundAmount)

    Transactionタイプで照会した場合ー原取引(返金取引有り)

    Item Data type Description
    info[].refundList[].refundTransactionId number 返金の取引番号(19桁)
    info[].refundList[].transactionType String 取引タイプ
    • PAYMENT_REFUND: 返金
    • PARTIAL_REFUND: 一部返金
    info[].refundList[].refundAmount number 返金金額
    info[].refundList[].refundTransactionDate String 返金日(ISO-8601)

    Transactionタイプで照会した場合ー返金取引

    Item Data type Description
    info[].originalTransactionId number 原取引の取引番号(19桁)

    Orderタイプで照会した場合

    Item Data type Length Description
    info[].packages[].id String 50 パッケージリストのユニークなID
    info[].packages[].amount Number パッケージ内の商品金額合計
    =sum(products[].quantity * products[].price)
    info[].packages[].userFeeAmount Number ユーザー手数料 : 決済金額の中に手数料項目が含まれている場合に返す。
    info[].packages[].name String 100 パッケージの名前(または、加盟店内の出店業者の名前)
    info[].packages[].products[].id String 50 加盟店の販売商品のID
    info[].packages[].products[].name String 4000 販売商品の名前
    info[].packages[].products[].imageUrl String 500 販売商品の画像URL
    info[].packages[].products[].quantity Number 商品数
    info[].packages[].products[].price Number 各商品の決済金額
    info[].packages[].products[].originalPrice Number 各商品の元の金額
    info[].shipping.methodId String 50 ユーザーが選択した配送方法のID
    info[].shipping.feeAmount Number 送料
    info[].shipping.address.country String 2 配送先の国
    info[].shipping.address.postalCode String 10 配送先の郵便番号
    info[].shipping.address.state String 100 配送先の都道府県
    info[].shipping.address.city String 100 配送先の市町村
    info[].shipping.address.detail String 1000 配送先の番地
    info[].shipping.address.optional String 1000 配送先の追加情報
    info[].shipping.address.recipient.firstName String 200 受取人の名前(名)
    info[].shipping.address.recipient.lastName String 200 受取人の名前(姓)
    info[].shipping.address.recipient.firstNameOptional String 200 受取人のカナ名(名)
    info[].shipping.address.recipient.lastNameOptional String 200 受取人のカナ名(姓)
    info[].shipping.address.recipient.email String 100 受取人のメールアドレス
    info[].shipping.address.recipient.phoneNo String 50 受取人の電話番号

    Return Codes

    Code Description
    0000 成功
    1104 加盟店が存在しません。
    1105 加盟店がLINE Payを利用できない状態です。
    1106 ヘッダー情報エラー
    1150 取引履歴がありません。
    1177 照会できる最大取引件数を超えています(100件)。
    9000 内部エラー

    Sample

    リクエスト

    
    curl -X GET \
    -H "Content-Type: application/json" \
    -H "X-LINE-ChannelId: {your channelId}" \
    -H "X-LINE-Authorization-Nonce: ef6934b8-b42f-48db-87b7-e18e1fb1832e" \
    -H "X-LINE-Authorization: {Hmac signature}" \
    -H "X-LINE-MerchantDeviceProfileId: {your device profile id}" \
    https://sandbox-api-pay.line.me/v3/payments?transactionId=20140101123123123&orderId=1002045572
    
    

    レスポンス

    決済取引を照会した場合

    
    
    {
        "returnCode":"0000",
        "returnMessage":"success",
        "info":[{
           "transactionId":2019060112345678910,
           "transactionDate":"2019-06-01T09:00:00Z",
           "transactionType":"PAYMENT",
           "payInfo": [
               {"method":"BALANCE", "amount":100},
               {"method":"DISCOUNT", "amount":10}
             ],
           "productName":"tes production",
           "currency":"JPY",
           "orderId":"20190601ORD45678910",
           "refundList":[
              {
                 "refundTransactionId":"2019060112345678911",
                 "transactionType":"PARTIAL_REFUND",
                 "refundAmount":-1,
                 "refundTransactionDate":"2019-06-06T09:00:00Z"
              },
              {
                 "refundTransactionId":"2019060112345678911",
                 "transactionType":"PARTIAL_REFUND",
                 "refundAmount":-1,
                 "refundTransactionDate ":"2019-06-06T10:00:00Z"
              },
              {
                 "refundTransactionId":"2019060112345678911",
                 "transactionType":"PARTIAL_REFUND",
                 "refundAmount":-1,
                 "refundTransactionDate ":"2019-06-06T11:00:00Z"
              }
             ],
             "packages": [
                 {
                     "id": "1",
                     "amount": 85,
                     "userFeeAmount":0
                 },
                 {
                     "id": "3",
                     "amount": 5,
                     "userFeeAmount":0
                 }
             ],
             "shipping": {
                 "methodId": "FB-001",
                 "feeAmount": 20,
                 "address": {
                     "country": "JP",
                     "postalCode": "1600022",
                     "state": "東京都",
                     "city": " 渋谷区渋谷",
                     "detail": "(〒)150-8510 東京都 渋谷区渋谷",
                     "optional": "123",
                     "recipient": {
                         "firstName":"絵里",
                         "lastName":"松澤",
                         "firstNameOptional": "エリ",
                         "lastNameOptional": "マツザワ",
                         "phoneNo": "01999991234",
                         "email": "mksi@test.linecorp.com"
                     }
                 }
             }
        }]
     }
    
    

    返金取引を照会した場合

    
    {
        "returnCode":"0000",
        "returnMessage":"success",
        "info":[{
          "transactionId":2019060112345678912,
          "transactionDate":"2019-06-01T09:48:43Z",
          "transactionType":"PARTIAL_REFUND",
          "amount":-5,
          "productName":"Brown",
          "currency":"JPY",
          "orderId":"20190101123123123",
          "originalTransactionId":2019060112345678910
        }]
    }
    
    

    Check Payment Status API

    LINE Pay決済要求のステータスを照会します。confirmUrlを使用せずに加盟店側で決済ステータスを定期的にチェックし、決済完了可能かどうかを判断します。

    API Spec

    GET /v3/payments/requests/{transactionId}/check

    Response

    Response Body

    Item Data type Length Description
    returnCode String 4 結果コード
    returnMessage String 100 結果メッセージまたは失敗理由
    info.shipping.methodId String 50 ユーザーが選択した配送方法のID
    info.shipping.feeAmount Number 送料

    Return Code

    Code Description
    0000 未オーソリ
    0110 オーソリ完了ー"Confirm API"を呼び出すことができます。
    0121 ユーザーによる決済取り消しまたはタイムアウト(20分)による決済取り消しーterminated状態
    0122 決済失敗ーterminated状態
    0123 決済完了ーterminated状態
    1104 加盟店が存在しません。
    1105 加盟店がLINE Payを利用できない状態です。
    9000 内部エラー

    Sample

    リクエスト

    
    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}" \
    -H "X-LINE-MerchantDeviceProfileId: {your device profile id}" \
    https://sandbox-api-pay.line.me/v3/payments/requests/2018110112345678910/check
    
    

    レスポンス(一般決済)

    
    {
       "returnCode":"0000",
       "returnMessage":"success"
    }
    
    

    レスポンス(Checkout決済)

    
    {
       "returnCode":"0000",
       "returnMessage":"success",
       "info": {
           "shipping": {
                "methodId": "FB-001",
                "feeAmount": 20
            }
       }
    }
    
    

    Check RegKey API

    発行されたRegKeyのステータスを照会します。

    API Spec

    GET /v3/payments/preapprovedPay/{regKey}/check

    Parameter

    Item Data type Requirement Description
    creditCardAuth Boolean N RegKeyを発行したクレジットカードの有効性チェックの有無
    • true : LINE Pay検証とともに、小額を試しに決済してクレジットカードの有効性チェックを行い、RegKeyのステータスを照会する。ただ、LINE Pay管理者による検証が必要である。
    • false : LINE Pay検証によってRegKeyのステータスを照会する。

    Response Body

    Item Data type Length Description
    returnCode String 4 結果コード
    returnMessage String 300 結果メッセージ

    Return Codes

    Code Description
    0000 成功
    1101 LINE Payのユーザーではありません。
    1102 ユーザーが取引できない状態です。
    1104 加盟店が存在しません。
    1105 加盟店がLINE Payを利用できない状態です。
    1106 ヘッダー情報エラー
    1141 支払い口座エラー
    1154 自動決済に指定した決済手段を利用できない状態です。
    1190 RegKeyが存在しません。
    1193 RegKeyが期限切れになっています。

    Sample

    Pay Preapproved APIのリクエスト例

    
    curl -X GET \
        -H "Content-Type: application/json" \
        -H "X-LINE-ChannelId: {your channelId}" \
        -H "X-LINE-Authorization-Nonce: df9c7e0e-e6c4-4d24-9847-b8f3cbe9bf58" \
        -H "X-LINE-Authorization: {Hmac signature}" \
        -H "X-LINE-MerchantDeviceProfileId: {your device profile id}" \
        https://sandbox-api-pay.line.me/v3/payments/preapprovedPay/RK123asd213/check
    
    

    レスポンス

    
     {
        "returnCode": "0000",
        "returnMessage": "OK",
    }
    
    

    Pay Preapproved API

    Request APIConfirm APIを使用して予め自動決済を登録しておけば、Confirm APIで渡されたRegKeyを利用して、ユーザー承認プロセスを経ずに決済を行うことができます。

    API Spec

    POST /v3/payments/preapprovedPay/{regKey}/payment

    Request Body

    Item Data type Length Requirement Description
    productName String 4000 Y 商品名
    amount number Y 決済金額
    currency String 3 Y 決済通貨(ISO 4217)
    対応通貨は以下のとおりである。
    • USD
    • JPY
    • TWD
    • THB
    orderId String 100 Y 加盟店のユニークな注文番号
    capture Boolean N 売上確定の有無
    • true : オーソリ/売上確定
    • false : オーソリ。Capture APIで売上確定を行う必要がある。

    Response Body

    Item Data type Length Description
    returnCode String 4 結果コード
    returnMessage String 300 結果メッセージ
    info.transactionId Number 決済要求の結果として受け取った取引番号(19桁)
    info.transactionDate String 30 取引日(ISO 8601)
    info.authorizationExpireDate String 30 オーソリ満了日(ISO 8601)

    Return Codes

    Code Description
    0000 成功
    1101 LINE Payのユーザーではありません。
    1102 ユーザーが取引できない状態です。
    1104 加盟店が存在しません。
    1105 加盟店がLINE Payを利用できない状態です。
    1106 ヘッダー情報エラー
    1110 使用できないクレジットカードです。
    1124 金額情報エラー(scale)
    1141 支払い口座エラー
    1142 残高が不足しています。
    1150 取引履歴がありません。
    1152 同じtransactionIdで取引された履歴があります。
    1153 決済要求した金額と実際の決済金額が異なります。
    1159 決済要求情報が存在しません。
    1169 LINE Payで決済手段の選択とパスワード認証を行う必要があります。
    1170 ユーザーの口座の残高が変更されました。
    1172 同じ注文番号(orderId)で取引された履歴があります。
    1180 決済の有効期限が切れました。
    1190 RegKeyが存在しません。
    1193 RegKeyが有効期限になっています。
    1194 自動決済を利用できない加盟店です。
    1197 RegKeyで決済中です。
    1198 APIが二重に呼び出されました。
    1199 内部要求エラー
    1280 クレジットカード決済の一時的なエラー
    1281 クレジットカード決済エラー
    1282 クレジットカード承認エラー
    1283 不正利用が疑われるため、決済が拒否されました。
    1284 クレジットカード決済が一時的に中断されました。
    1285 クレジットカードの決済情報が漏れています。
    1286 クレジットカードの決済情報が正しくありません。
    1287 クレジットカードの有効期限が切れています。
    1288 クレジットカードの支払い口座の残高が不足しています。
    1289 クレジットカードの利用限度額を超えています。
    1290 クレジットカードの一回当たりの利用限度額を超えています。
    1291 盗難報告されたクレジットカードです。
    1292 利用停止になったクレジットカードです。
    1293 CVN入力エラー
    1294 ブラックリストに登録されたクレジットカードです。
    1295 クレジットカード番号が正しくありません。
    1296 処理できない金額です。
    1298 クレジットカードの使用が拒否されました。
    9000 内部エラー

    Sample

    Pay Preapproved APIのリクエスト例

    curl -X POST \
        -H "Content-Type: application/json" \
        -H "X-LINE-ChannelId: {your channelId}" \
        -H "X-LINE-Authorize-Nonce: 6120489b-53f3-4c51-9d6f-b80be93e509a"\
        -H "X-LINE-Authorization: {hmac signature}" \
        -H "X-LINE-MerchantDeviceProfileId: {your device profile id}" \
        -d '{ "productName":"Brown pen", "amount": 1000, "currency":"JPY", "orderId":"Ord2018123100000001" }' \
        https://sandbox-api-pay.line.me/v3/payments/preapprovedPay/RK123asd213/payment
    
    

    レスポンス

    capture : true のレスポンス例

    
     {
        "returnCode": "0000",
        "returnMessage": "OK",
        "info": {
            "transactionId": 2018123112345678910,
            "transactionDate": "2018-12-31T09:00:31Z"   
        }
    }
    
    

    capture : false のレスポンス例

    
     {
        "returnCode": "0000",
        "returnMessage": "OK",
        "info": {
            "transactionId": 2018123112345678910,
            "transactionDate": "2018-12-31T09:00:31Z",
            "authorizationExpireDate": "2019-01-31T09:00:31Z",
        }
    }
    
    

    Expire RegKey API

    発行されたRegKeyを満了させます。

    API Spec

    POST /v3/payments/preapprovedPay/{regKey}/expire

    Response Body

    Item Data type Length Description
    returnCode String 4 結果コード
    returnMessage String 300 結果メッセージ

    Return Codes

    Code Description
    0000 成功
    1104 加盟店が存在しません。
    1105 加盟店がLINE Payを利用できない状態です。
    1106 ヘッダー情報エラー
    1190 RegKeyが存在しません。
    1193 RegKeyが期限切れになっています。

    Sample

    Pay Preapproved APIのリクエスト例

    curl -X POST \
        -H "Content-Type: application/json" \
        -H "X-LINE-ChannelId: {your channelId}" \
        -H "X-LINE-Authorization-Nonce: 5c75efcc-9c5e-4a32-9fe3-5d55ce67b598" \
        -H "X-LINE-Authorization: {Hmac signature}" \
        -H "X-LINE-MerchantDeviceProfileId: {your device profile id}" \
        https://sandbox-api-pay.line.me/v3/payments/preapprovedPay/RK123asd213/expire
    
    44453d45-768e-40e8-8349-748e797c450f
    

    レスポンス

    
     {
        "returnCode": "0000",
        "returnMessage": "OK",
    }
    
    

    Merchant provided API or Page

    Merchant provided API or Page

    加盟店からLINE Pay側に提供すべきAPI(またはページURL)について記述します。本番環境では、必ず信頼できる証明書とHTTPSプロトコルを使用してください。また、セキュリティ上、証明書はTLS 1.2以上のバージョンを使用します。

    Access Control List

    加盟店が提供するAPIがIPアドレスによるアクセス制御を使用している場合は、以下の各環境ごとにLINE Pay Server IPを登録してください。

    confirmUrl Spec

    加盟店は、confirmUrlTypeによって画面またはAPIの形でconfirmUrlを提供する必要があります。LINE Payでユーザーが決済を承認すれば、その旨を加盟店に通知し、confirmUrlを利用して加盟店の決済進行画面をユーザーに表示します。また、confirmUrlは、Confirm APIを呼び出して決済を完了して後、決済完了画面に遷移する機能も提供します。ただ、ユーザーに画面を表示する必要がない特別なケース(オフライン決済など)は、HTTPステータスコード200を返してください。

    API明細

    Item Description
    Protocol HTTP
    Method GET
    Request timeout Connection: 5秒
    Read: 20秒

    Request Parameters

    Parameter Requirement Description
    orderId Y 決済要求時に加盟店から受け取った注文番号
    transactionId Y 決済要求の結果として受け取った取引番号
    shippingFeeAmount N Checkoutの送料
    shippingMethodId N 加盟店の配送方法の中で選択された配送方法のID

    加盟店からはレスポンスとして別途の情報を返さず、LINE Pay側はHTTPステータスコードで成功かどうかを判断します。成功(200 OK)以外のHTTPステータスコードが返された場合は、ユーザーに決済が正常に完了されなかったことを通知します。

    Response

    Sample

    リクエスト 加盟店から受け取ったconfirmUrlが'http://testmall.com/pay/result'と仮定した場合

    
    curl -X GET \ 
        http://testmall.com/pay/result?orderId=2018xxx1232132&trasactionId=201810281234567890&shippingFeeAmount=2100&shippingMethodId=1
    
    

    成功時のレスポンス

    
    HTTP/1.1 200 OK
    Accept-Charset: utf-8
    Content-Type: text/html
    Content-Length: 2
    Date: Sat, 11 Oct 2018 02:45:48 GMT
    
    

    失敗時のレスポンス

    
    HTTP/1.1 404 NOT_FOUND
    Accept-Charset:utf-8
    Content-Type:text/html
    Content-Length:4
    Date:Sat, 11 Oct 2018 02:45:48 GMT
    
    

    cancelUrl

    ユーザーがLINE Pay決済画面で決済を途中で取り消せば、Request APIで受け取ったcancelUrlを利用して加盟店の決済取り消し画面に遷移します。cancelUrlのクエリ文字列にtransactionIdorderIdが含まれていない場合は、自動的に追加されて返されます。

    Inquiry ShippingMethods API

    Checkoutを利用する加盟店は、Inquiry ShippingMethods APIを実装し、Request APIを使用してLINE Pay側に提供する必要があります。ユーザーが配送先を選択すると、同APIを呼び出して、Postal Code(ZipCode)を基に配送可否と配送可能方法、送料を照会します。ユーザーが選択した配送方法と送料は、confirmUrlを利用して加盟店側に提供されます。

    API明細

    Item Description
    Protocol HTTP
    Method POST
    Request timeout Connection: 5秒
    Read: 20秒

    Request

    Key Value Description
    Content-Type application/json
    Parameter Data type Length Requirement Description
    currency String 3 Y 送料の通貨
    orderId String 100 Y 決済要求時に加盟店から受け取った注文番号
    transactionId Number Y 決済要求の結果として受け取った取引番号
    shippingAddress.country String 2 N 配送先の国
    shippingAddress.postalCode String 10 N 配送先の郵便番号
    shippingAddress.state String 100 N 配送先の都道府県
    shippingAddress.city String 300 N 配送先の市町村

    Response Body

    Parameter Data type Length Requirement Description
    returnCode String 3 Y 結果コード
    returnMessage String 100 N 結果メッセージ
    info.shippingMethods[].id String Y 加盟店の配送方法のID
    info.shippingMethods[].name String 100 Y 配送方法の名前
    info.shippingMethods[].amount Number Y 送料
    info.shippingMethods[].toDeliveryYmd String 8 N 配送予定日(YYYYMMDD)
    info.shippingMethods[].fromDeliveryHm String 4 N 配送予定期間の開始時間(HHmm)
    info.shippingMethods[].toDeliveryHm String 4 N 配送予定期間の終了時間(HHmm)

    Return Codes

    Code Description
    0000 成功
    4001 配送できない地域です。
    4002 配送先が正しくありません。
    5001 内部サーバーエラー(不明なエラー)
    9999 システムメンテナンス中

    Sample

    レスポンス

    配送時刻が指定されていない場合(配送予定日のみ存在)

    {
        "returnCode": "0000",
        "returnMessage": "OK",
        "info": {
            "shippingMethods":[
                {
                    "id": "1",
                    "name": "FAST POST",
                    "amount": 500,
                    "toDeliveryYmd": "20181030"
                }
            ]
        }
    }
    

    ユーザーメッセージの例

    
    FAST POST - 500
    2018/10/30 時間の指定なし
    
    

    配送予定日と配送予定期間の開始時間・終了時間がすべて存在する場合

    {
        "returnCode": "0000",
        "returnMessage": "OK",
        "info": {
            "shippingMethods":[
                {
                    "id": "1",
                    "name": "FAST POST",
                    "amount": 500,
                    "toDeliveryYmd": "20181030",
                    "fromDeliveryHm": "1000",
                    "toDeliveryHm": "1200",
                }
            ]
        }
    }
    

    ユーザーメッセージの例

    
    FAST POST - 500
    2018/10/30 10:00 ~ 12:00
    
    

    Appendix

    LINE Payのエラーコード

    LINE Payで発生するエラーコードを定義します。エラーコードとともに英語のエラーメッセージを表示し、既定のメッセージがない場合はハイフン(‐)を返します。

    Code Description
    1101 LINE Payのユーザーではありません。
    1102 ユーザーが取引できない状態です。
    1104 加盟店が存在しません。
    1105 加盟店がLINE Payを利用できない状態です。
    1106 ヘッダー情報エラー
    1110 使用できないクレジットカードです。
    1124 金額情報エラー(scale)
    1141 支払い口座エラー
    1142 残高が不足しています。
    1145 決済中です。
    1150 取引履歴がありません。
    1152 同じtransactionIdで取引された履歴があります。
    1153 決済要求した金額と実際の決済金額が異なります。
    1154 自動決済に指定した決済手段を利用できない状態です。
    1155 返金できないタイプの取引番号です。
    1159 決済要求情報が存在しません。
    1163 返金可能期間が過ぎたため、返金できません。
    1164 返金可能金額を超えています。
    1165 すでに返金が完了しています。
    1169 決済承認のための情報にエラーがあります(LINE Payで決済手段の選択とパスワード認証を行う必要があります)。
    1170 ユーザーの口座の残高が変更されました。
    1172 同じ注文番号(orderId)で取引された履歴があります。
    1177 照会できる最大取引件数を超えています(100件)。
    1178 加盟店がサポートしていない通貨です。
    1179 処理できない状態です。
    1180 決済の有効期限が切れました。
    1183 決済金額は0より大きい必要があります。
    1184 決済金額が要求時の金額を超えています。
    1190 RegKeyが存在しません。
    1193 RegKeyが期限切れになっています。
    1194 自動決済を利用できない加盟店です。
    1197 RegKeyで決済中です。
    1198 リクエスト処理中です。
    1199 内部要求エラー
    1279 クレジットカード決済の一時的なエラー
    1280 クレジットカード決済の一時的なエラー
    1281 クレジットカード決済エラー
    1282 クレジットカード承認エラー
    1283 不正利用が疑われるため、決済が拒否されました。
    1284 クレジットカード決済が一時的に中断されました。
    1285 クレジットカードの決済情報が漏れています。
    1286 クレジットカードの決済情報が正しくありません。
    1287 クレジットカードの有効期限が切れています。
    1288 クレジットカードの支払い口座の残高が不足しています。
    1289 クレジットカードの利用限度額を超えています。
    1290 クレジットカードの一回当たりの利用限度額を超えています。
    1291 盗難報告されたクレジットカードです。
    1292 利用停止になったクレジットカードです。
    1293 CVN入力エラー
    1294 ブラックリストに登録されたクレジットカードです。
    1295 クレジットカード番号が正しくありません。
    1296 処理できない金額です。
    1298 クレジットカードの使用が拒否されました。
    2101 パラメータエラー
    2102 JSONデータフォーマットエラー
    9000 内部エラー
    9001 内部エラー

    LINE App Transition Guide

    このガイドは、LINE Pay加盟店にて商品等の販売をおこなうサイトやアプリなどからLINEアプリに遷移する挙動を記載したものです。

    Android Sample

    以下のサンプルコードを利用して、LINEアプリのインストール有無と使用できるLINE Payのバージョンを確認できます。LINEアプリがインストールされており、使用可能なLINE Payのバージョンが確認されたら、LINE Payの決済画面に遷移します。

    Android

        int linePaySupportedVersion = 230;
        String paymentUrl = "..."; // This is "paymentUrl.app" URL String.
        Context context = getActivity();
        try {
            PackageManager pm = context.getPackageManager();
            PackageInfo packageInfo = pm.getPackageInfo("jp.naver.line.android", 0);
            int versionCode = packageInfo.versionCode;
            if (linePaySupportedVersion <= versionCode) {
            launchUri(paymentUrl);
            } else {
            confirmLineInstall(context);
            }
        } catch (NameNotFoundException e) {
            confirmLineInstall(context);
        }
        private void confirmLineInstall(Context context) {
            new AlertDialog.Builder(context)
            .setTitle("LINE Pay")
            .setMessage(getString(R.String.linepay_confirm))
            .setCancelable(false)
            .setPositiveButton(getString(R.String.linepay_install), new
        DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            launchUri("market://details?id=jp.naver.line.android");
            }
            })
            .setNegativeButton(getString(R.String.linepay_cancel), new
        DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
            })
            .show();
        }
        private void launchUri(String uriString) {
            Uri uri = Uri.parse(uriString);
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            startActivity(intent);
        }
    

    File : res/values/Strings.xml

    
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
     ...
     <String name="linepay_confirm">Supported by Android/iPhone LINE versions 4.8.0
    or higher.</String>
     <String name="linepay_install">Get it now</String>
     <String name="linepay_cancel">cancel</String>
     ...
    </resources>
    

    iPhone Sample

    以下のサンプルコードを利用して、LINEアプリのインストール有無を確認できます。LINEアプリがインストールされていれば、LINE Payの決済画面に遷移します。

    iOS

    
        NSString* lineScheme = @"line://";
        BOOL installed = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:lineScheme]];
        if (installed) {    
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"LINE Pay"
        message:NSLocalizedString(@"linepay.confirm", nil)
                delegate:self
        cancelButtonTitle:NSLocalizedString(@"linepay.ok", nil) otherButtonTitles:nil];
                alert.tag = 1;
                [alert show];
        } else {
                UIAlertView *alert =
                [[UIAlertView alloc] initWithTitle:@"LINE Pay"
        message:NSLocalizedString(@"linepay.confirm", nil)
                delegate:self
        cancelButtonTitle:NSLocalizedString(@"linepay.cancel", nil)
                otherButtonTitles:NSLocalizedString(@"linepay.install",
        nil), nil];
                alert.tag = 2;
                [alert show];
        }
        - (void)alertView:(UIAlertView*)alertView
        clickedButtonAtIndex:(NSInteger)buttonIndex {
                if (alertView.tag == 1 && buttonIndex == 0) {
                NSString *paymentUrl = ...; // This is "paymentUrl.app" URL String.
                [self launchUrl:paymentUrl];
                } else if (alertView.tag == 2 && buttonIndex == 1) {
                [self launchUrl:@"itmsapps://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=443904275&mt=8"];
                }
        }
        - (void)launchUrl:(NSString*)urlString {
                NSURL *url = [NSURL URLWithString:urlString];
                [[UIApplication sharedApplication] openURL:url];
        }
    
    

    File : en.lproj/Localized.Strings

    
    "linepay.confirm" = "Supported by Android/iPhone LINE versions 4.8.0 or higher.";
    "linepay.ok" = "OK";
    "linepay.cancel" = "Cancel";
    "linepay.install" = "Get it now";
    
    

    Sandbox

    Sandboxの使用

    LINE Payでは、Sandbox環境を提供しています。Sandboxでテストを行う場合、この連携ガイドが提供するAPI明細に記載されたSandbox用EndPointを利用して決済してください。confirmUrlInquiry ShippingMethods APIを加盟店側で用意する必要があります。 Sandbox環境で決済を行えば、以下のように処理されます。

    Sandbox PC Payment

    Sandbox pc payment process

    Sandbox Mobile Payment

    Sandbox mobile payment process

    特記事項

    Sandbox環境では、PC・スマートフォンともにチャネルログインが求められます(ただ、スマートフォンを利用して本番環境で連携するとLINEアプリに直接遷移されるので、チャネルログインは不要です)。

    Migration API V3

    Payment API v2からv3への移行により、API認証がHMAC署名検証に変わり、Request APIがv3にアップデートされます。

    Authentication

    Payment API v2ではIDとパスワードによる認証方法を使用していましたが、v3ではHMACを利用して認証とメッセージ検証を行う方法に変わります。

    v2でパスワードとして渡していたX-LINE-ChannelSecretは、加盟店側で保存してください。HMAC署名を作成するときは、SecretKeyを使用します。

    X-LINE-Authorization-Nonceにランダムで生成される値を指定することで、署名のセキュリティを強化できます。

    詳細は、API Authenticationをご参照ください。

    HTTP Request Headers

    Header Version 2 Version 3 Description
    X-LINE-ChannelId O O 変更なし
    X-LINE-ChannelSecret O X 削除
    X-LINE-MerchantDeviceProfileId O O 変更なし
    X-LINE-Authorization-Nonce X O 新規
    X-LINE-Authorization X O 新規

    Request API

    Request API v3の一番大きな変更点は、豊富な商品と注文情報をユーザーに提供するとともに、LINEユーザー情報を利用して簡単かつ便利にCheckout機能を提供できるという点です。 v2では単一商品に定義されていたproductNameproductImageUrlを、v3ではpackage[]構造に切り替えます。これにより、ユーザーに各商品の詳細な決済情報を提供することができます。 options.shippingは、Checkout用として定義されたものです。 詳細は、Request APIをご参照ください。

    Request Body Mapping

    Version 2 Version 3 Description
    amount amount 変更なし
    currency currency 変更なし
    orderId orderId 変更なし
    packages[].id 新規
    packages[].amount 新規
    packages[].userFee 新規
    packages[].name 新規
    packages[].products[].id 単一商品 → 複数商品
    productName packages[].products[].name 単一商品 → 複数商品
    productImageUrl packages[].products[].imageUrl 単一商品 → 複数商品
    packages[].products[].quantity 新規
    packages[].products[].price 新規
    packages[].products[].originalPrice 新規
    packageName redirectUrls.appPackageName 名称変更
    confirmUrl redirectUrls.confirmUrl
    confirmUrlType redirectUrls.confirmUrlType
    cancelUrl redirectUrls.cancelUrl
    capture options.payment.capture
    payType options.payment.payType
    langCd options.display.locale 名称変更
    checkConfirmUrlBrowser options.display.checkConfirmUrlBrowser
    extras.addFriends[].type options.familyService.addFriends[].type
    extras.addFriends[].idList[] options.familyService.addFriends[].idList[]
    options.shipping.* 新規