Java Library (omise-java)
ไลบรารี omise-java ให้อินเทอร์เฟซ Java สมัยใหม่สำหรับ Omise API พร้อมฟีเจอร์ Java 8+ รวมถึง Optional, Stream APIs และการผสานรวม Spring Boot ที่ยอดเยี่ยม
การติดตั้ง
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+ สำหรับการจัดการ dependency
- 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
// Configuration class
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();
}
// Getters and setters
public void setPublicKey(String publicKey) {
this.publicKey = publicKey;
}
public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
}
public void setApiVersion(String apiVersion) {
this.apiVersion = apiVersion;
}
}
ตัวแปรสภาพแวดล้อม
# Development/Testing
OMISE_SECRET_KEY=skey_test_123456789
OMISE_PUBLIC_KEY=pkey_test_123456789
# Production
# 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("Order #1234")
.metadata(metadata);
Charge charge = client.charges().create(request);
if (charge.isPaid()) {
System.out.println("Charge successful: " + charge.getId());
} else {
System.out.println("Charge failed: " + 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 Secure
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("Amount: " + charge.getAmount());
System.out.println("Currency: " + charge.getCurrency());
System.out.println("Status: " + charge.getStatus());
System.out.println("Paid: " + 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 created: " + 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("Card saved: " + 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() + " ending in " + card.getLastDigits()
);
System.out.println(
"Expires: " + card.getExpirationMonth() + "/" + card.getExpirationYear()
);
}
}