1
3

More than 1 year has passed since last update.

PAY.JPでクレジット決済機能を実装する【Java】

Posted at

概要

PAY.JPという決済代行をしてくれるサービスが提供しているWebAPIを使ってクレジットカード決済機能を実装してみました。
このAPIを使うと、入力したカード情報をトークン化してPAY.JPに送り、その送られてきたトークンをもとにPAY.JPが決済代行をしてくれるそうです。

開発環境はJava/Mavenです。

PAY.JPのアカウント作成

公式サイトにアクセスして「申し込む」をクリックし、アカウントを作成します。
pic1.jpg

登録後、ログインして左の「API」よりAPIキーを確認します。

pic3.jpg

pom.xmlに追加

以下をpom.xmlに追加します。

<dependency>
  <groupId>jp.pay</groupId>
    <artifactId>payjp-java</artifactId>
    <version>0.4.4</version>
</dependency>  

Viewの作成

今回は入力した金額をカードで支払う機能を実装します。

test.html
<!DOCTYPE html>
<html lang="ja" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>支払い</title>
</head>
<body>
<form th:action="@{/pay}" method="post">
支払金額(円)<br>
<input type="text" name="price"><br>
カード情報<br>
<script
    type="text/javascript"
    src="https://checkout.pay.jp/"
    class="payjp-button"
    data-key="pk_test_xxxxxxx"
    data-partial="true"
    data-token-name="card"   
></script>
<br>
<button>支払う</button>
</form>
</body>
</html>

pic4.jpg

scriptタブを挿入するとカード情報を入力するフォームを作成することができます。
data-keyに先ほど確認したAPIキーの公開鍵を入力します。今回はテストキーを使用しています。本番環境を利用するには申請がいるみたいです。

このscriptタブは<input type="hidden" name="card">と同じ役割をしており、入力されたカード情報はトークン化されて送られます。
また今回は、data-token-name="card"によって、name="card"に変更しています。デフォルトの状態は、name="payjp-token"です。
こちらのガイドに入力フォームの詳しいカスタマイズ方法が載っているので、参考にしてみてください。

Controllerの作成

基本は公式で公開されているGitHubに載っているコードのコピペです。pay-jp/GitHub

Payjp.apiKeyに秘密鍵をセットし、chargeMapに支払金額、日本円、カード情報をセットしています。

testController.java
import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import jp.pay.Payjp;
import jp.pay.model.Charge;
import jp.pay.net.RequestOptions;

@Controller
@RequestMapping("")
public class testController {

    @RequestMapping("/")
    public String index() {
        return "test";
    }

    /**pay.jpを通じてクレジット決済をするメソッド
     * @param price 支払金額
     * @param card トークン化されたカード情報
     */
    @RequestMapping("/pay")
    public String creditPay(int price, String card) {

        Payjp.apiKey = "sk_test_xxxxxxxxxxxxx";

        Map<String, Object> chargeMap = new HashMap<String, Object>();
        chargeMap.put("amount", price);//支払金額をセット
        chargeMap.put("currency", "jpy");//日本円をセット
        chargeMap.put("card", card);//カード情報をセット
        try {
            Charge charge = Charge.create(chargeMap);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return "complete";//決済完了画面
    }

}

実行

それでは、実際に動かしてみます。
Videotogif (1).gif

無事に動かすことができました。

今回はテスト環境のため、カード番号はテスト用の番号です。テスト環境ではカード番号のみ有効性チェックを行っています。

また、先ほどの管理者ページを見てみると売上金が反映されています。
pic5.jpg

最後までご覧いただきありがとうございました。
初めての投稿ですので、間違いなどあったらご指摘いただけると幸いです!

参考資料

pay-jp/checkout
pay-jp/GitHub

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3