1️⃣【依赖包】封装SDK
2025年10月29日大约 2 分钟
一. 引入依赖包
1. 创建一个项目,并引入依赖包SDK。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.open4play</groupId>
<artifactId>op-platform-starters</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>op-lazada-spring-boot-starter</artifactId>
<version>1.0.0-SNAPSHOT</version>
<properties>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.querydsl</groupId>
<artifactId>querydsl-core</artifactId>
<version>${querydsl.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>io.vavr</groupId>
<artifactId>vavr</artifactId>
<version>${vavr.version}</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.19.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.lazop</groupId>
<artifactId>lazop-api-sdk</artifactId>
<version>1.2.2</version>
</dependency>
</dependencies>
</project>二. 创建实体类主要介绍几个类
1. LazopProperties.class 创建一个实体类,用于存储 lazop 的配置信息。
@Configuration
@ConfigurationProperties(prefix = "lazop")
public class LazopProperties {
/**
* app-key
*/
public String appKey;
/**
* app-secret
*/
public String appSecret;
/**
* 回调地址
*/
public String redirectUri;
/**
* 连接超时时间
*/
protected int connectTimeout = 15000;
/**
* 读取超时
*/
protected int readTimeout = 30000;
public String getAppKey() {
return appKey;
}
public void setAppKey(String appKey) {
this.appKey = appKey;
}
public String getAppSecret() {
return appSecret;
}
public void setAppSecret(String appSecret) {
this.appSecret = appSecret;
}
public String getRedirectUri() {
return redirectUri;
}
public void setRedirectUri(String redirectUri) {
this.redirectUri = redirectUri;
}
public int getConnectTimeout() {
return connectTimeout;
}
public void setConnectTimeout(int connectTimeout) {
this.connectTimeout = connectTimeout;
}
public int getReadTimeout() {
return readTimeout;
}
public void setReadTimeout(int readTimeout) {
this.readTimeout = readTimeout;
}
}2. application.yml
lazop:
app-key: {your appKey}
app-secret: {your appSecret}
redirect-uri: https://29009pr144.picp.vip/openapi/lazada/callback3. LazopFactory.class 创建一个工厂类,用于创建 lazop 的请求对象。
public class LazopFactory {
private final LazopProperties lazopProperties;
private static final ConcurrentHashMap<String, LazopClient> clientMap = new ConcurrentHashMap<>();
public LazopFactory(LazopProperties lazopProperties) {
this.lazopProperties = lazopProperties;
}
public LazopClient createClient(String country) {
return createClient(country, lazopProperties.getConnectTimeout(),
lazopProperties.getReadTimeout());
}
/**
* LZD API客户端
*
* @param country 站点大写
* @param connectTimeout 连接超时
* @param readTimeout 读取超时
* @return {@link LazopClient}
*/
public LazopClient createClient(String country, int connectTimeout, int readTimeout) {
Assert.notNull(country, "country must not be null");
// 使用缓存避免重复创建客户端
return clientMap.computeIfAbsent(country.toUpperCase(),
key -> lazopClient(country, connectTimeout, readTimeout));
}
private LazopClient lazopClient(String country, int connectTimeout, int readTimeout) {
switch (country.toUpperCase()) {
case LazopConstants.VN:
return new LazopClient(UrlConstants.API_GATEWAY_URL_VN, lazopProperties.getAppKey(),
lazopProperties.getAppSecret(), connectTimeout, readTimeout);
case LazopConstants.SG:
return new LazopClient(UrlConstants.API_GATEWAY_URL_SG, lazopProperties.getAppKey(),
lazopProperties.getAppSecret(), connectTimeout, readTimeout);
case LazopConstants.PH:
return new LazopClient(UrlConstants.API_GATEWAY_URL_PH, lazopProperties.getAppKey(),
lazopProperties.getAppSecret(), connectTimeout, readTimeout);
case LazopConstants.MY:
return new LazopClient(UrlConstants.API_GATEWAY_URL_MY, lazopProperties.getAppKey(),
lazopProperties.getAppSecret(), connectTimeout, readTimeout);
case LazopConstants.ID:
return new LazopClient(UrlConstants.API_GATEWAY_URL_ID, lazopProperties.getAppKey(),
lazopProperties.getAppSecret(), connectTimeout, readTimeout);
case LazopConstants.TH:
return new LazopClient(UrlConstants.API_GATEWAY_URL_TH, lazopProperties.getAppKey(),
lazopProperties.getAppSecret(), connectTimeout, readTimeout);
case LazopConstants.TOKEN:
return new LazopClient(UrlConstants.API_AUTHORIZATION_URL, lazopProperties.getAppKey(),
lazopProperties.getAppSecret(), connectTimeout, readTimeout);
default:
throw new IllegalArgumentException("Unsupported site: " + country);
}
}
}4. LazopConfig.class 创建一个自动装配类,。
@Configuration
@ConditionalOnClass({ILazopClient.class, LazopClient.class})
@EnableConfigurationProperties(LazopProperties.class)
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)
public class LazopConfig {
@Bean
@ConditionalOnMissingBean
@ConditionalOnProperty(prefix = "lazop", name = "enabled", havingValue = "true", matchIfMissing = true)
public LazopFactory lazopFactory(LazopProperties lazopProperties) {
return new LazopFactory(lazopProperties);
}
@Bean
@ConditionalOnBean(LazopFactory.class)
public ApplicationRunner operationsInitializer(LazopFactory lazopFactory) {
return args -> LazadaOperations.init(lazopFactory);
}
}注意:resource中/META-INF/spring.factories配置:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.open4play.lazada.config.LazopConfig