Current section

Files

Jump to
line_pay lib line_pay.ex
Raw

lib/line_pay.ex

defmodule LinePay do
alias LinePay.Environment
@doc """
オーソリ内訳照会API
"""
def authorization(transaction_id, order_id) do
"#{endpoint()}/authorizations?transactionId=#{transaction_id}&orderId=#{order_id}"
|> HTTPoison.get(headers())
|> decode()
end
@doc """
決済内訳照会API
"""
def payment(transaction_id, order_id) do
"#{endpoint()}?transactionId=#{transaction_id}&orderId=#{order_id}"
|> HTTPoison.get(headers())
|> decode()
end
@doc """
決済予約API、成功時19桁の取引番号(TransactionId)が発行される
"""
def reserve(product_name, amount, order_id, capture, client_type) do
body = %{
productName: product_name,
amount: amount,
currency: "JPY",
confirmUrl: confirm_url(client_type, order_id),
cancelUrl: cancel_url(client_type, order_id),
orderId: order_id,
capture: capture
}
"#{endpoint()}/request"
|> HTTPoison.post(Poison.encode!(body), headers())
|> decode()
end
# コールバックURL
defp confirm_url("browser", order_id), do: "#{Environment.confirm_url_browser()}/#{order_id}"
defp confirm_url("ios", order_id), do: "#{Environment.confirm_url_ios()}/#{order_id}"
defp confirm_url("android", order_id), do: "#{Environment.confirm_url_android()}/#{order_id}"
# キャンセルURL
defp cancel_url("browser", _), do: ""
defp cancel_url("ios", order_id), do: "#{Environment.cancel_url_ios()}/#{order_id}"
defp cancel_url("android", order_id), do: "#{Environment.cancel_url_android()}/#{order_id}"
@doc """
capture: true -> 決済完了状態に更新
capture: false -> オーソリ状態に更新
"""
def confirm(transaction_id, amount) do
body = %{
amount: amount,
currency: "JPY"
}
"#{endpoint()}/#{transaction_id}/confirm"
|> HTTPoison.post(Poison.encode!(body), headers())
|> decode()
end
@doc """
オーソリ状態 → 決済完了状態に更新
"""
def capture(transaction_id, amount) do
body = %{
amount: amount,
currency: "JPY"
}
"#{endpoint()}/authorizations/#{transaction_id}/capture"
|> HTTPoison.post(Poison.encode!(body), headers())
|> decode()
end
@doc """
オーソリ状態 -> 無効状態に更新
"""
def void(transaction_id) do
"#{endpoint()}/authorizations/#{transaction_id}/void"
|> HTTPoison.post("", headers())
|> decode()
end
@doc """
決済完了状態 -> 払い戻し状態に更新
"""
def refund(transaction_id) do
"#{endpoint()}/#{transaction_id}/refund"
|> HTTPoison.post("", headers())
|> decode()
end
def endpoint do
case Environment.sandbox() do
true -> "https://sandbox-api-pay.line.me/v2/payments"
false -> "https://api-pay.line.me/v2/payments"
end
end
defp headers do
[
{"Content-Type", "application/json"},
{"X-LINE-ChannelId", Environment.channel_id()},
{"X-LINE-ChannelSecret", Environment.channel_secret()}
]
end
defp decode(response) do
case response do
{:error, %HTTPoison.Error{reason: reason}} -> {:error, reason}
{:ok, %HTTPoison.Response{body: body}} -> {:ok, Poison.decode!(body)}
end
end
end