Javaライブラリ(omise-java)
omise-javaライブラリは、Optional、Stream APIなどのJava 8+機能と優れたSpring Boot統合を備えた、Omise APIへの最新のJavaインターフェースを提供しま す。
インストール
Maven
pom.xmlに追加:
<dependency>
<groupId>co.omise</groupId>
<artifactId>omise-java</artifactId>
<version>4.4.0</version>
</dependency>
Gradle
build.gradleに追加:
dependencies {
implementation 'co.omise:omise-java:4.4.0'
}
Gradle(Kotlin DSL)
dependencies {
implementation("co.omise:omise-java:4.4.0")
}
要件
- Java 8以上(Java 17+を含む)
- 依存関係管理にMaven 3+またはGradle 6+
- Spring Boot 2.xまたは3.x(オプション、Springアプリケーション用)
クイックスタート
基本的な構成
import co.omise.Client;
import co.omise.models.Charge;
public class OmiseExample {
public static void main(String[] args) throws Exception {
Client client = new Client.Builder()
.publicKey("pkey_test_123456789")
.secretKey("skey_test_123456789")
.build();
}
}
Spring Boot構成
// application.properties
omise.public-key=pkey_test_123456789
omise.secret-key=skey_test_123456789
omise.api-version=2019-05-29
// 構成クラス
import co.omise.Client;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@ConfigurationProperties(prefix = "omise")
public class OmiseConfig {
private String publicKey;
private String secretKey;
private String apiVersion;
@Bean
public Client omiseClient() {
return new Client.Builder()
.publicKey(publicKey)
.secretKey(secretKey)
.apiVersion(apiVersion)
.build();
}
// ゲッターとセッター
public void setPublicKey(String publicKey) {
this.publicKey = publicKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public void setApiVersion(String apiVersion) {
this.apiVersion = apiVersion;
}
}
環境変数
# 開発/テスト
OMISE_SECRET_KEY=skey_test_123456789
OMISE_PUBLIC_KEY=pkey_test_123456789
# 本番環境
# OMISE_SECRET_KEY=skey_live_123456789
# OMISE_PUBLIC_KEY=pkey_live_123456789
一般的な操作
チャージの作成
import co.omise.Client;
import co.omise.models.Charge;
import co.omise.requests.ChargeCreateRequest;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class ChargeExample {
private final Client client;
public ChargeExample(Client client) {
this.client = client;
}
public Charge createCharge(String token, long amount) throws IOException {
Map<String, Object> metadata = new HashMap<>();
metadata.put("order_id", "1234");
metadata.put("customer_name", "John Doe");
ChargeCreateRequest request = new ChargeCreateRequest()
.amount(amount) // 1,000.00 THB = 100000 satang
.currency("THB")
.card(token)
.description("注文 #1234")
.metadata(metadata);
Charge charge = client.charges().create(request);
if (charge.isPaid()) {
System.out.println("チャージ成功: " + charge.getId());
} else {
System.out.println("チャージ失敗: " + charge.getFailureMessage());
}
return charge;
}
}
Optionalを使用(Java 8+)
import java.util.Optional;
public class ChargeService {
private final Client client;
public Optional<Charge> createChargeOptional(
String token,
long amount,
Map<String, Object> metadata
) {
try {
ChargeCreateRequest request = new ChargeCreateRequest()
.amount(amount)
.currency("THB")
.card(token)
.metadata(metadata);
Charge charge = client.charges().create(request);
return charge.isPaid() ? Optional.of(charge) : Optional.empty();
} catch (IOException e) {
return Optional.empty();
}
}
}
3Dセキュアで
public class SecureChargeService {
private final Client client;
public ChargeResult createSecureCharge(
String token,
long amount,
String returnUri
) throws IOException {
ChargeCreateRequest request = new ChargeCreateRequest()
.amount(amount)
.currency("THB")
.card(token)
.returnUri(returnUri);
Charge charge = client.charges().create(request);
if (charge.isAuthorized()) {
if (charge.getAuthorizeUri() != null) {
return new ChargeResult(charge.getAuthorizeUri());
} else {
return new ChargeResult(charge);
}
}
throw new RuntimeException(charge.getFailureMessage());
}
}
class ChargeResult {
private final Charge charge;
private final String redirectUri;
public ChargeResult(Charge charge) {
this.charge = charge;
this.redirectUri = null;
}
public ChargeResult(String redirectUri) {
this.charge = null;
this.redirectUri = redirectUri;
}
public boolean needsRedirect() {
return redirectUri != null;
}
public String getRedirectUri() {
return redirectUri;
}
public Charge getCharge() {
return charge;
}
}
チャージの取得
import co.omise.models.Charge;
public Charge getCharge(String chargeId) throws IOException {
Charge charge = client.charges().get(chargeId);
System.out.println("金額: " + charge.getAmount());
System.out.println("通貨: " + charge.getCurrency());
System.out.println("ステータス: " + charge.getStatus());
System.out.println("支払い済み: " + charge.isPaid());
return charge;
}
Stream APIを使用したチャージのリスト表示
import co.omise.models.ScopedList;
import co.omise.models.Charge;
import co.omise.requests.ChargeListRequest;
import java.util.List;
import java.util.stream.Collectors;
public List<Charge> listPaidCharges() throws IOException {
ChargeListRequest request = new ChargeListRequest()
.limit(100)
.offset(0)
.order(ScopedList.Ordering.ReverseChronological);
ScopedList<Charge> charges = client.charges().list(request);
return charges.getData().stream()
.filter(Charge::isPaid)
.collect(Collectors.toList());
}
// 日付フィルタリングを使用
public List<Charge> listRecentCharges() throws IOException {
LocalDate weekAgo = LocalDate.now().minusDays(7);
LocalDate today = LocalDate.now();
ChargeListRequest request = new ChargeListRequest()
.from(weekAgo)
.to(today);
ScopedList<Charge> charges = client.charges().list(request);
return charges.getData();
}
顧客の作成
import co.omise.models.Customer;
import co.omise.requests.CustomerCreateRequest;
import java.util.HashMap;
import java.util.Map;
public Customer createCustomer(String email, String description) throws IOException {
Map<String, Object> metadata = new HashMap<>();
metadata.put("user_id", "12345");
metadata.put("account_type", "premium");
CustomerCreateRequest request = new CustomerCreateRequest()
.email(email)
.description(description)
.metadata(metadata);
Customer customer = client.customers().create(request);
System.out.println("顧客作成: " + customer.getId());
return customer;
}
顧客へのカード保存
import co.omise.models.Customer;
import co.omise.requests.CustomerUpdateRequest;
public Customer addCardToCustomer(String customerId, String token) throws IOException {
CustomerUpdateRequest request = new CustomerUpdateRequest()
.card(token);
Customer customer = client.customers().update(customerId, request);
System.out.println("カード保存: " + customer.getDefaultCard());
return customer;
}
// カード付きで顧客を作成
public Customer createCustomerWithCard(String email, String token) throws IOException {
CustomerCreateRequest request = new CustomerCreateRequest()
.email(email)
.card(token);
return client.customers().create(request);
}
顧客カードのリスト表示
import co.omise.models.Customer;
import co.omise.models.Card;
public void listCustomerCards(String customerId) throws IOException {
Customer customer = client.customers().get(customerId);
for (Card card : customer.getCards().getData()) {
System.out.println(
card.getBrand() + " 末尾 " + card.getLastDigits()
);
System.out.println(
"有効期限: " + card.getExpirationMonth() + "/" + card.getExpirationYear()
);
}
}
払い戻しの作成
import co.omise.models.Refund;
import co.omise.requests.RefundCreateRequest;
// 全額返金
public Refund refundCharge(String chargeId) throws IOException {
return client.charges().refund(chargeId);
}
// 部分払い戻し
public Refund partialRefund(String chargeId, long amount) throws IOException {
Map<String, Object> metadata = new HashMap<>();
metadata.put("reason", "customer_request");
metadata.put("ticket_id", "TICKET-123");
RefundCreateRequest request = new RefundCreateRequest()
.amount(amount)
.metadata(metadata);
Refund refund = client.charges().refund(chargeId, request);
System.out.println("払い戻し " + refund.getId() + ": " + refund.getAmount());
return refund;
}
転送の作成
import co.omise.models.Transfer;
import co.omise.requests.TransferCreateRequest;
public Transfer createTransfer(long amount, String recipientId) throws IOException {
Map<String, Object> metadata = new HashMap<>();
metadata.put("payout_id", "PAYOUT-456");
TransferCreateRequest request = new TransferCreateRequest()
.amount(amount)
.recipient(recipientId)
.metadata(metadata);
Transfer transfer = client.transfers().create(request);
System.out.println("転送 " + transfer.getId() + ": " + transfer.getAmount());
return transfer;
}