# yop-java-sdk
**Repository Path**: yop-platform/yop-java-sdk
## Basic Information
- **Project Name**: yop-java-sdk
- **Description**: No description available
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: develop
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2024-08-30
- **Last Updated**: 2025-07-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 易宝开放平台 Java SDK (yop-java-sdk)
[](https://search.maven.org/artifact/com.yeepay.yop.sdk/yop-java-sdk)
[](https://opensource.org/licenses/MIT)
[Read this document in English](README.md)
**赋能商户,安全高效接入易宝支付全方位服务。**
本 SDK 旨在为 Java 开发者提供一套便捷、安全、可靠的工具集,以快速集成易宝开放平台(YOP)的各项 API 服务。无论您是初次接触还是资深开发者,都能通过本 SDK 轻松实现与易宝支付系统的无缝对接。
---
## ✨ 核心优势
* **🚀 快速集成**: 简洁的 API 设计与清晰的文档指引,助您数小时内完成支付、账户、营销等多种能力的集成。
* **🛡️ 安全可靠**: 内置完善的签名、验签、加密、解密机制,全面支持国密算法(SM2/SM3/SM4)与国际标准加密算法(RSA/AES),保障交易数据的机密性与完整性。
* **🧩 灵活扩展**: 模块化设计,支持多种 HTTP 客户端(Apache HttpClient, OkHttp),并提供丰富的接口供商户自定义凭证管理、加密机对接等高级功能。
* **🇨🇳 国密合规**: 深度集成国密算法支持,满足金融安全合规要求,为您的业务保驾护航。
* **🌍 国际视野**: 同时支持国际通用的加密标准,助力业务全球化拓展。
* **📄 详尽示例**: 提供丰富的调用示例与测试代码,降低学习成本,加速开发进程。
---
## 🏁 快速上手
### 1. 环境要求
* Java Development Kit (JDK) 1.8 或更高版本
* Maven 3.x 或 Gradle
### 2. 添加依赖
**Maven 用户:**
请在您的项目 `pom.xml` 文件中添加以下依赖:
```xml
com.yeepay.yop.sdk
yop-java-sdk
4.4.15
```
**Gradle 用户:**
请在您的 `build.gradle` 文件中添加以下依赖:
```groovy
implementation 'com.yeepay.yop.sdk:yop-java-sdk:4.4.15' // 请替换为最新的稳定版本
```
### 3. 配置您的商户凭证
对于**单商户应用**,SDK 默认会从 `classpath:/config/yop_sdk_config_default.json` 路径加载配置文件。您只需:
1. 复制以下模板文件到您项目的 `src/main/resources/config/` 目录下。
2. 修改该文件中的 `app_key` (您的应用AppKey) 和 `isv_private_key` (您的应用私钥) 等关键参数。
```json
// 示例: yop_sdk_config_default.json
{
"app_key": "YOUR_APP_KEY", // 替换为您的应用AppKey
"isv_private_key": { // 应用私钥配置
"value": "YOUR_PRIVATE_KEY_STRING" // 替换为您的应用私钥字符串
},
"yos_server_root": "https://yos.yeepay.com/yop-center", // YOP服务地址
"preferred_server_roots": [
"https://openapi.yeepay.com/yop-center"
],
"yop_cert_store": {
"enable": false,
"valid_after_expire_period": 1674727773000
},
"yop_report": {
"enable": true,
"enable_success_report": true,
"send_interval_ms": 3000,
"stat_interval_ms": 5000,
"max_queue_size": 500,
"max_fail_count": 10,
"max_fail_count_per_exception": 5,
"max_elapsed_ms": 15000,
"max_packet_size": 50
},
"http_client": {
"connect_timeout": 10000, // 连接超时时间 (毫秒)
"connect_request_timeout": 5000,
"read_timeout": 30000 // 读取超时时间 (毫秒)
}
}
```
**自定义配置文件路径:**
如果您希望从其他位置加载配置文件,可以通过 JVM 参数 `-Dyop.sdk.config.file` 指定:
* **Mac/Linux:** `-Dyop.sdk.config.file=file:///path/to/your/yop_sdk_config.json`
* **Windows:** `-Dyop.sdk.config.file=file:///D:/path/to/your/yop_sdk_config.json`
具体容器(如 Tomcat, Jetty, WebLogic)的 JVM 参数设置方式,请参考原文档或相应容器的官方文档。
### 4. 发起您的第一次 API 调用
```java
import com.yeepay.yop.sdk.auth.credentials.PKICredentialsItem;
import com.yeepay.yop.sdk.auth.credentials.YopPKICredentials;
import com.yeepay.yop.sdk.config.enums.CertStoreType;
import com.yeepay.yop.sdk.base.security.cert.parser.YopCertParserFactory;
import com.yeepay.yop.sdk.security.CertTypeEnum;
import com.yeepay.yop.sdk.security.cert.YopCertCategory;
import com.yeepay.yop.sdk.service.common.YopClient;
import com.yeepay.yop.sdk.service.common.YopClientBuilder;
import com.yeepay.yop.sdk.service.common.request.YopRequest;
import com.yeepay.yop.sdk.service.common.response.YopResponse;
import com.yeepay.yop.sdk.model.yos.YosDownloadResponse;
import com.yeepay.yop.sdk.model.yos.YosDownloadInputStream;
import com.yeepay.yop.sdk.service.common.response.YosUploadResponse;
import com.yeepay.yop.sdk.config.provider.file.YopCertConfig;
import com.yeepay.yop.sdk.utils.JsonUtils;
import com.yeepay.yop.sdk.utils.StreamUtils;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.InputStream;
import java.security.PrivateKey;
import java.util.Map;
import java.util.HashMap;
public class YopApiDemo {
private static final Logger LOGGER = LoggerFactory.getLogger(YopApiDemo.class);
public static void main(String[] args) {
// 示例1: GET 普通请求
getCommonExample();
// 示例2: POST Form表单请求
postFormExample();
// 示例3: POST JSON格式请求
postJsonExample();
// 示例4: 文件上传
fileUploadExample();
// 示例5: 文件下载
fileDownloadExample();
}
/**
* GET 普通请求示例
*/
private static void getCommonExample() {
try {
// 创建请求对象
YopRequest request = new YopRequest("/rest/v1.0/test/product-query/query-for-doc", "GET");
request.addParameter("string0", "dsbzb");
// 设置应用信息
String appKey = "app_10085525305"; // 替换为您的应用AppKey
request.getRequestConfig().setAppKey(appKey);
request.getRequestConfig().setSecurityReq("YOP-RSA2048-SHA256");
// 设置认证信息
// request.getRequestConfig().setCredentials(new YopPKICredentials(
// appKey, new PKICredentialsItem(getPrivateKey(
// "YOUR_PRIVATE_KEY_STRING", // 替换为您的私钥
// CertTypeEnum.RSA2048),
// CertTypeEnum.RSA2048)));
// 发送请求
YopClient yopClient = YopClientBuilder.builder().build();
YopResponse response = yopClient.request(request);
// 处理响应
if (response != null && response.getResult() != null) {
LOGGER.info("API调用成功: {}", response.getResult());
// 根据API文档解析 response.getResult()
} else {
LOGGER.warn("API调用失败: {}", response.getResult());
}
} catch (Exception e) {
LOGGER.error("API调用异常", e);
}
}
/**
* POST Form表单请求示例
*/
private static void postFormExample() {
try {
// 创建请求对象
YopRequest request = new YopRequest("/rest/v1.0/test-wdc/test/http-json", "POST");
// 设置应用信息
String appKey = "app_10085525305"; // 替换为您的应用AppKey
request.getRequestConfig().setAppKey(appKey);
request.getRequestConfig().setSecurityReq("YOP-RSA2048-SHA256");
// 设置认证信息
// request.getRequestConfig().setCredentials(new YopPKICredentials(
// appKey, new PKICredentialsItem(getPrivateKey(
// "YOUR_PRIVATE_KEY_STRING", // 替换为您的私钥
// CertTypeEnum.RSA2048),
// CertTypeEnum.RSA2048)));
// 添加表单参数
request.addParameter("string", "你好");
// 发送请求
YopClient yopClient = YopClientBuilder.builder().build();
YopResponse response = yopClient.request(request);
// 处理响应
if (response != null && response.getResult() != null) {
LOGGER.info("API调用成功: {}", response.getResult());
// 根据API文档解析 response.getResult()
} else {
LOGGER.warn("API调用失败: {}", response.getResult());
}
} catch (Exception e) {
LOGGER.error("API调用异常", e);
}
}
/**
* POST JSON格式请求示例
*/
private static void postJsonExample() {
try {
// 创建请求对象
YopRequest request = new YopRequest("/rest/v1.0/test-wdc/test/http-json", "POST");
// 设置应用信息
String appKey = "app_10085525305"; // 替换为您的应用AppKey
request.getRequestConfig().setAppKey(appKey);
request.getRequestConfig().setSecurityReq("YOP-RSA2048-SHA256");
// 设置认证信息
// request.getRequestConfig().setCredentials(new YopPKICredentials(
// appKey, new PKICredentialsItem(getPrivateKey(
// "YOUR_PRIVATE_KEY_STRING", // 替换为您的私钥
// CertTypeEnum.RSA2048),
// CertTypeEnum.RSA2048)));
// 构建JSON请求体
Map obj = new HashMap<>();
Map arg0 = new HashMap<>();
arg0.put("string", "你好");
obj.put("arg0", arg0);
request.setContent(JsonUtils.toJsonString(obj));
// 发送请求
YopClient yopClient = YopClientBuilder.builder().build();
YopResponse response = yopClient.request(request);
// 处理响应
if (response != null && response.getResult() != null) {
LOGGER.info("API调用成功: {}", response.getResult());
// 根据API文档解析 response.getResult()
} else {
LOGGER.warn("API调用失败: {}", response.getResult());
}
} catch (Exception e) {
LOGGER.error("API调用异常", e);
}
}
/**
* 文件上传示例
*/
private static void fileUploadExample() {
try {
// 创建请求对象
YopRequest request = new YopRequest("/rest/v1.0/file/upload", "POST");
// 设置应用信息
String appKey = "app_10085525305"; // 替换为您的应用AppKey
request.getRequestConfig().setAppKey(appKey);
request.getRequestConfig().setSecurityReq("YOP-RSA2048-SHA256");
// 设置认证信息
// request.getRequestConfig().setCredentials(new YopPKICredentials(
// appKey, new PKICredentialsItem(getPrivateKey(
// "YOUR_PRIVATE_KEY_STRING", // 替换为您的私钥
// CertTypeEnum.RSA2048),
// CertTypeEnum.RSA2048)));
// 添加上传文件
// 这里使用ClassLoader获取资源文件,实际使用时可以是本地文件路径
InputStream fileStream = YopApiDemo.class.getResourceAsStream("/your-file.txt");
request.addMultiPartFile("_file", fileStream);
// 发送请求
YopClient yopClient = YopClientBuilder.builder().build();
YosUploadResponse response = yopClient.upload(request);
// 处理响应
if (response != null && response.getResult() != null) {
LOGGER.info("文件上传成功: {}", response.getResult());
// 根据API文档解析 response.getResult()
} else {
LOGGER.warn("文件上传失败: {}", response.getResult());
}
} catch (Exception e) {
LOGGER.error("文件上传异常", e);
}
}
/**
* 文件下载示例
*/
private static void fileDownloadExample() {
YosDownloadInputStream downloadInputStream = null;
try {
// 创建请求对象
YopRequest request = new YopRequest("/yos/v1.0/test/test/ceph-download", "GET");
request.addParameter("fileName", "example.txt");
// 设置应用信息
String appKey = "app_10085525305"; // 替换为您的应用AppKey
request.getRequestConfig().setAppKey(appKey);
request.getRequestConfig().setSecurityReq("YOP-RSA2048-SHA256");
// 设置认证信息
// request.getRequestConfig().setCredentials(new YopPKICredentials(
// appKey, new PKICredentialsItem(getPrivateKey(
// "YOUR_PRIVATE_KEY_STRING", // 替换为您的私钥
// CertTypeEnum.RSA2048),
// CertTypeEnum.RSA2048)));
// 发送请求
YopClient yopClient = YopClientBuilder.builder().build();
YosDownloadResponse response = yopClient.download(request);
// 处理响应
if (response != null && response.getResult() != null) {
downloadInputStream = response.getResult();
// 读取下载的文件内容
String fileContent = IOUtils.toString(downloadInputStream, "UTF-8");
LOGGER.info("文件下载成功,内容长度: {}", fileContent.length());
// 实际使用时,可以将文件内容保存到本地文件
// Files.write(Paths.get("downloaded-file.txt"), fileContent.getBytes());
} else {
LOGGER.warn("文件下载失败: {}", response.getResult());
}
} catch (Exception e) {
LOGGER.error("文件下载异常", e);
} finally {
// 关闭流
StreamUtils.closeQuietly(downloadInputStream);
}
}
/**
* 获取私钥
*/
private static PrivateKey getPrivateKey(String priKey, CertTypeEnum certType) {
final YopCertConfig yopCertConfig = new YopCertConfig();
yopCertConfig.setCertType(certType);
yopCertConfig.setValue(priKey);
yopCertConfig.setStoreType(CertStoreType.STRING);
return (PrivateKey) YopCertParserFactory.getCertParser(YopCertCategory.PRIVATE, certType).parse(yopCertConfig);
}
}
```
**重要提示**: 上述代码为示意。请务必参考 `yop-java-sdk-test` 模块中的具体示例以及[易宝开放平台官方API文档](https://open.yeepay.com/docs-v2)来构建和发起请求。
---
## 📖 深入了解
### SDK 模块化概览
本 SDK 采用 Maven 构建,并进行了精心的模块化设计,以满足不同商户的定制化需求:
* **`yop-java-sdk` (核心集成包 - 推荐)**
* **功能**: 商户首选依赖。默认集成 Apache HttpClient 作为 HTTP 通信组件,内置加解密、签名验签等核心安全功能。
* **适用**: 大多数商户的通用集成需求。
* **提示**: 等同于 `yop-java-sdk-apache`。
* **`yop-java-sdk-apache` (Apache HttpClient 通信模块)**
* **功能**: 集成 Apache HttpClient 作为 HTTP 通信组件,内置加解密、签名验签等核心安全功能。
* **适用**: 大多数商户的通用集成需求。
* **`yop-java-sdk-okhttp` (OkHttp 通信模块)**
* **功能**: 提供基于 OkHttp 的 HTTP 通信实现。
* **适用**: 对 HTTP 客户端有特定偏好或项目中已广泛使用 OkHttp 的商户。
* **`yop-java-sdk-base` (基础功能模块)**
* **功能**: 封装了请求对象(`YopRequest`)、配置(`YopRequestConfig`)等非加解密相关的核心类,抽象了报文组装与解析逻辑,并提供了基础工具。
* **适用**: 需要深度定制凭证存储、加密器、签名器等高级功能的商户。
* **密码学相关模块**:
* `yop-java-sdk-crypto-api`: 定义了加密器、签名器等密码学操作的基础接口。
* `yop-java-sdk-crypto-gm-base`: 提供国密算法相关的辅助工具类,简化对接加密机时的开发工作。
* `yop-java-sdk-crypto-gm`: 提供国密算法(SM2/SM3/SM4)的软件实现,可作为对接加密机时的参考。
* `yop-java-sdk-crypto-inter`: 提供国际通用加密算法(RSA/AES等)的软件实现,主要供海外业务或有特定需求的商户使用。
* **`yop-java-sdk-test` (测试与示例模块)**
* **功能**: 包含 SDK 自身的功能与性能测试代码,更重要的是,提供了大量可供商户参考的 API 调用示例。
* **强烈建议**: 在集成过程中,仔细查阅此模块下的示例代码。
### 多商户(平台商、服务商)配置方案
对于需要管理多个下游商户凭证的平台型商户,SDK 支持通过自定义凭证提供方(`YopCredentialsProvider`)来动态加载不同商户的 `appKey` 和私钥。您可以继承 `YopCachedCredentialsProvider` 或 `YopFixedCredentialsProvider` 来实现您的逻辑。
---
## 🛠️ 高级特性与定制
* **对接硬件加密机 (HSM)**: SDK 设计充分考虑了与硬件加密机的集成。您可以实现 `com.yeepay.yop.sdk.security.Encrypter` 和 `com.yeepay.yop.sdk.security.Signer` 接口,将加密和签名操作代理到您的 HSM 设备。详细指引请参考官方文档:[基于SDK对接加密机](https://open.yeepay.com/docs/open/platform-doc/sdk_guide-sm/encryptor-support)。
* **自定义 HTTP 客户端**: 如果默认的 Apache HttpClient 或可选的 OkHttp 客户端不满足您的特定需求(例如,需要更细致的连接池管理、代理配置等),您可以实现 `com.yeepay.yop.sdk.http.YopHttpClient` 接口,并配置 SDK 使用您的自定义实现。
---
## 📚 开发者资源
* **官方Java SDK(RSA)使用指南**: [https://open.yeepay.com/docs/platform/sdk_guide/java-sdk-guide](https://open.yeepay.com/docs/platform/sdk_guide/java-sdk-guide)
* **API接口列表与文档**: [https://open.yeepay.com/docs-v2](https://open.yeepay.com/docs/api-list)
* **加密机对接指南**: [https://open.yeepay.com/docs/open/platform-doc/sdk_guide-sm/encryptor-support](https://open.yeepay.com/docs/open/platform-doc/sdk_guide-sm/encryptor-support)
---
## 📜 License
[](https://app.fossa.com/projects/git%2Bgithub.com%2Fyop-platform%2Fyop-java-sdk?ref=badge_large)
本 SDK 遵循 [Apache License 2.0](LICENSE) 开源许可协议。
---
我们致力于提供卓越的开发者体验。如果您在使用过程中遇到任何问题或有任何建议,欢迎通过官方渠道与我们联系。