From 4238f50cc7f2c20a926885f1d8ce9234d2500a1a Mon Sep 17 00:00:00 2001 From: "chengliang.zhang" Date: Thu, 10 Jul 2025 15:00:30 +0800 Subject: [PATCH 01/13] =?UTF-8?q?=E6=96=B0=E5=A2=9E:=E7=AD=BE=E7=BA=A6?= =?UTF-8?q?=E5=AF=B9=E8=B1=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 +++ README.md | 4 +-- VERSION | 2 +- example/build.gradle | 2 +- .../com/pingxx/example/AgreementExample.java | 30 +++++++++++++++++++ .../example/AgreementNotifyExample.java | 2 +- pingpp-sdk/pom.xml | 2 +- .../main/java/com/pingplusplus/Pingpp.java | 2 +- .../com/pingplusplus/model/Agreement.java | 22 ++++++++++++++ .../pingplusplus/model/AgreementNotify.java | 2 +- pom.xml | 2 +- 11 files changed, 65 insertions(+), 9 deletions(-) create mode 100644 example/src/main/java/com/pingxx/example/AgreementExample.java diff --git a/CHANGELOG.md b/CHANGELOG.md index f7823bb..2aeb307 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # ChangeLog +## 2.5.3 + +- 新增: 签约修改接口 + ## 2.5.2 - 修改: 正确 `Map` 以及 `List` 内的元素类型 diff --git a/README.md b/README.md index d49db1a..d36d9a8 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ mavenCentral com.pingxx pingpp-java - 2.5.2 + 2.5.3 jar ``` @@ -56,7 +56,7 @@ repositories { 安装 Ping++ SDK ``` -implementation 'com.pingxx:pingpp-java:2.5.2' +implementation 'com.pingxx:pingpp-java:2.5.3' ``` ## 初始化 diff --git a/VERSION b/VERSION index 21b159d..a4db534 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.5.2 \ No newline at end of file +2.5.3 \ No newline at end of file diff --git a/example/build.gradle b/example/build.gradle index 9cc3666..248b559 100644 --- a/example/build.gradle +++ b/example/build.gradle @@ -7,7 +7,7 @@ dependencies { // 方法 1. 本地文件系统依赖 // implementation fileTree(dir: 'lib', includes: ['*jar']) // 方法 2. 仓库依赖 - // implementation 'com.pingxx:pingpp-java:2.5.2' + // implementation 'com.pingxx:pingpp-java:2.5.3' // 方法 3.模块依赖 implementation project(':pingpp-sdk') } diff --git a/example/src/main/java/com/pingxx/example/AgreementExample.java b/example/src/main/java/com/pingxx/example/AgreementExample.java new file mode 100644 index 0000000..205a51c --- /dev/null +++ b/example/src/main/java/com/pingxx/example/AgreementExample.java @@ -0,0 +1,30 @@ +package com.pingxx.example; + +import com.pingplusplus.exception.PingppException; +import com.pingplusplus.model.Agreement; + +import java.util.HashMap; +import java.util.Map; + +public class AgreementExample { + + private String appId; + + public AgreementExample(String appId) { + this.appId = appId; + } + + public static void runDemos(String appId) throws PingppException { + AgreementExample example = new AgreementExample(appId); + Agreement agrModify = example.modify(); + } + + public Agreement modify() throws PingppException { + String agreementId = "agr_123456"; + Map params = new HashMap<>(); + params.put("deduct_time", "2025-07-10"); + params.put("memo", "扣款失败,需延期扣款时间"); + + return Agreement.modify(agreementId, params); + } +} diff --git a/example/src/main/java/com/pingxx/example/AgreementNotifyExample.java b/example/src/main/java/com/pingxx/example/AgreementNotifyExample.java index 041c4fc..54c9fa5 100644 --- a/example/src/main/java/com/pingxx/example/AgreementNotifyExample.java +++ b/example/src/main/java/com/pingxx/example/AgreementNotifyExample.java @@ -15,7 +15,7 @@ public class AgreementNotifyExample { public static void runDemos(String appId) { AgreementNotifyExample example = new AgreementNotifyExample(appId); - System.out.println("------- 创建 charge -------"); + System.out.println("------- 签约扣款-商户预扣费通知 -------"); example.create("agr_123456"); } diff --git a/pingpp-sdk/pom.xml b/pingpp-sdk/pom.xml index 8c7da2b..645bfa3 100644 --- a/pingpp-sdk/pom.xml +++ b/pingpp-sdk/pom.xml @@ -5,7 +5,7 @@ com.pingxx pingpp-java - 2.5.2 + 2.5.3 jar A Java SDK for Ping++ Payment API. diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/Pingpp.java b/pingpp-sdk/src/main/java/com/pingplusplus/Pingpp.java index affc708..986c5b7 100644 --- a/pingpp-sdk/src/main/java/com/pingplusplus/Pingpp.java +++ b/pingpp-sdk/src/main/java/com/pingplusplus/Pingpp.java @@ -17,7 +17,7 @@ public abstract class Pingpp { /** * version */ - public static final String VERSION = "2.5.2"; + public static final String VERSION = "2.5.3"; /** * api key */ diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/model/Agreement.java b/pingpp-sdk/src/main/java/com/pingplusplus/model/Agreement.java index 3039557..ae64880 100644 --- a/pingpp-sdk/src/main/java/com/pingplusplus/model/Agreement.java +++ b/pingpp-sdk/src/main/java/com/pingplusplus/model/Agreement.java @@ -3,6 +3,7 @@ import com.pingplusplus.exception.PingppException; import com.pingplusplus.net.APIResource; import com.pingplusplus.net.RequestOptions; + import java.util.HashMap; import java.util.Map; @@ -254,5 +255,26 @@ public static Agreement cancel(String id, RequestOptions options) throws PingppE return APIResource.request(RequestMethod.PUT, instanceURL(Agreement.class, id), params, Agreement.class, options); } + /** + * 签约修改 + * @param id + * @param params + * @param options + * @return + * @throws PingppException + */ + public static Agreement modify(String id,Map params, RequestOptions options) throws PingppException { + return APIResource.request(RequestMethod.POST, String.format("%s/%s/modify/", classURL(Agreement.class), id), params, Agreement.class, options); + } + /** + * 签约修改 + * @param id + * @param params + * @return + * @throws PingppException + */ + public static Agreement modify(String id, Map params) throws PingppException { + return modify(id, params, null); + } } diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/model/AgreementNotify.java b/pingpp-sdk/src/main/java/com/pingplusplus/model/AgreementNotify.java index 9f0b326..9fd9970 100644 --- a/pingpp-sdk/src/main/java/com/pingplusplus/model/AgreementNotify.java +++ b/pingpp-sdk/src/main/java/com/pingplusplus/model/AgreementNotify.java @@ -31,7 +31,7 @@ public static AgreementNotify create(String id, Map params) thro } /** - * + * 签约扣款-商户预扣费通知 * @param agreementId * @param params * @param options diff --git a/pom.xml b/pom.xml index 341583e..de90a4f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.pingxx pingpp-sdk - 2.5.2 + 2.5.3 pom A Java SDK for Ping++ Payment API. From 69f76d3f5be1cdadf44ee038f325c0addb80bf44 Mon Sep 17 00:00:00 2001 From: "chengliang.zhang" Date: Thu, 10 Jul 2025 15:02:04 +0800 Subject: [PATCH 02/13] =?UTF-8?q?=E6=9B=BF=E6=8D=A2=20libs=20=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/pingxx/example/Main.java | 3 +++ ...gpp-sdk-2.5.0.jar => pingpp-sdk-2.5.3.jar} | Bin 165175 -> 172027 bytes 2 files changed, 3 insertions(+) rename libs/{pingpp-sdk-2.5.0.jar => pingpp-sdk-2.5.3.jar} (66%) diff --git a/example/src/main/java/com/pingxx/example/Main.java b/example/src/main/java/com/pingxx/example/Main.java index 20750eb..c38f9f2 100644 --- a/example/src/main/java/com/pingxx/example/Main.java +++ b/example/src/main/java/com/pingxx/example/Main.java @@ -86,6 +86,9 @@ public static void main(String[] args) throws Exception { // 报关 // 请使用 live key 调用该接口 CustomsExample.runDemos(appId); + + //签约代扣示例 + AgreementExample.runDemos(appId); } private static final SecureRandom random = new SecureRandom(); diff --git a/libs/pingpp-sdk-2.5.0.jar b/libs/pingpp-sdk-2.5.3.jar similarity index 66% rename from libs/pingpp-sdk-2.5.0.jar rename to libs/pingpp-sdk-2.5.3.jar index a84aa3f051fad145eeba7dfabb2d8e84c53639a3..72f00e6d7a1c197dadc6992a765a635ac0decff1 100644 GIT binary patch delta 40606 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

6AiMs7SR0wcXlWaEWn#wmArL+d1BVp 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 Date: Thu, 10 Jul 2025 18:13:45 +0800 Subject: [PATCH 03/13] Refactor: Migrate to parent POM and Central publishing --- pingpp-sdk/pom.xml | 49 ++++++++++++++++++++-------------------------- pom.xml | 23 +++++++++++----------- 2 files changed, 32 insertions(+), 40 deletions(-) diff --git a/pingpp-sdk/pom.xml b/pingpp-sdk/pom.xml index 645bfa3..46200bf 100644 --- a/pingpp-sdk/pom.xml +++ b/pingpp-sdk/pom.xml @@ -3,12 +3,18 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0 - com.pingxx + + com.pingxx + pingpp-java-parent + 2.5.3 + + pingpp-java - 2.5.3 jar + pingpp-java A Java SDK for Ping++ Payment API. + https://github.com/PingPlusPlus/pingpp-java Apache License 2.0 @@ -54,37 +60,14 @@ - pingpp-java - https://github.com/PingPlusPlus/pingpp-java - - - ossrh - https://s01.oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ - - - - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.7 - true - - ossrh - https://s01.oss.sonatype.org/ - true - - org.apache.maven.plugins maven-source-plugin - 2.2.1 + 3.3.1 attach-sources @@ -97,7 +80,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.9.1 + 3.11.2 attach-javadocs @@ -110,7 +93,7 @@ org.apache.maven.plugins maven-gpg-plugin - 1.5 + 3.2.8 sign-artifacts @@ -129,6 +112,16 @@ + + org.sonatype.central + central-publishing-maven-plugin + 0.8.0 + true + + central + true + + diff --git a/pom.xml b/pom.xml index de90a4f..5157010 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.pingxx - pingpp-sdk + pingpp-java-parent 2.5.3 pom @@ -40,17 +40,16 @@ - - - ossrh - https://s01.oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ - - - + + + org.apache.maven.plugins + maven-deploy-plugin + 2.7 + + true + + + From 7014078842de1e24e5a784c9f5c9e56813ddd2ef Mon Sep 17 00:00:00 2001 From: afon Date: Fri, 11 Jul 2025 11:13:48 +0800 Subject: [PATCH 04/13] fix maven jar dependency --- CHANGELOG.md | 4 ++++ README.md | 4 ++-- VERSION | 2 +- example/build.gradle | 2 +- pingpp-sdk/pom.xml | 8 ++------ pom.xml | 2 +- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2aeb307..364d6e6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # ChangeLog +## 2.5.4 + +- 修正: 修复版本 2.5.3 中存在的 POM 依赖问题。建议用户直接升级到此版本。 + ## 2.5.3 - 新增: 签约修改接口 diff --git a/README.md b/README.md index d36d9a8..6d090fe 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ mavenCentral com.pingxx pingpp-java - 2.5.3 + 2.5.4 jar ``` @@ -56,7 +56,7 @@ repositories { 安装 Ping++ SDK ``` -implementation 'com.pingxx:pingpp-java:2.5.3' +implementation 'com.pingxx:pingpp-java:2.5.4' ``` ## 初始化 diff --git a/VERSION b/VERSION index a4db534..d21aa93 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.5.3 \ No newline at end of file +2.5.4 \ No newline at end of file diff --git a/example/build.gradle b/example/build.gradle index 248b559..d82583f 100644 --- a/example/build.gradle +++ b/example/build.gradle @@ -7,7 +7,7 @@ dependencies { // 方法 1. 本地文件系统依赖 // implementation fileTree(dir: 'lib', includes: ['*jar']) // 方法 2. 仓库依赖 - // implementation 'com.pingxx:pingpp-java:2.5.3' + // implementation 'com.pingxx:pingpp-java:2.5.4' // 方法 3.模块依赖 implementation project(':pingpp-sdk') } diff --git a/pingpp-sdk/pom.xml b/pingpp-sdk/pom.xml index 46200bf..706fa88 100644 --- a/pingpp-sdk/pom.xml +++ b/pingpp-sdk/pom.xml @@ -3,13 +3,9 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0 - - com.pingxx - pingpp-java-parent - 2.5.3 - - + com.pingxx pingpp-java + 2.5.4 jar pingpp-java diff --git a/pom.xml b/pom.xml index 5157010..2881efc 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.pingxx pingpp-java-parent - 2.5.3 + 2.5.4 pom A Java SDK for Ping++ Payment API. From d068a729ca5a0949abdbd281157cd8438812c9fb Mon Sep 17 00:00:00 2001 From: afon Date: Fri, 11 Jul 2025 11:19:47 +0800 Subject: [PATCH 05/13] skip install --- pom.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pom.xml b/pom.xml index 2881efc..62f8f65 100644 --- a/pom.xml +++ b/pom.xml @@ -42,6 +42,14 @@ + + org.apache.maven.plugins + maven-install-plugin + 2.5.2 + + true + + org.apache.maven.plugins maven-deploy-plugin From f36d6cbb9dd9c1028e68cf734b4bfa86b425407f Mon Sep 17 00:00:00 2001 From: "chengliang.zhang" Date: Mon, 19 Jan 2026 17:36:59 +0800 Subject: [PATCH 06/13] Release v2.5.5 --- pingpp-sdk/pom.xml | 2 +- .../src/main/java/com/pingplusplus/model/Refund.java | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pingpp-sdk/pom.xml b/pingpp-sdk/pom.xml index 706fa88..f881d71 100644 --- a/pingpp-sdk/pom.xml +++ b/pingpp-sdk/pom.xml @@ -5,7 +5,7 @@ com.pingxx pingpp-java - 2.5.4 + 2.5.5 jar pingpp-java diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/model/Refund.java b/pingpp-sdk/src/main/java/com/pingplusplus/model/Refund.java index fa94d1d..9120769 100644 --- a/pingpp-sdk/src/main/java/com/pingplusplus/model/Refund.java +++ b/pingpp-sdk/src/main/java/com/pingplusplus/model/Refund.java @@ -8,6 +8,7 @@ public class Refund extends APIResource { String id; + String app; String object; String orderNo; Integer amount; @@ -175,6 +176,14 @@ public String getCurrency() { public void setCurrency(String currency) { this.currency = currency; } + + public String getApp() { + return app; + } + + public void setApp(String app) { + this.app = app; + } /** * 创建 refund * From 9974e441b2c8488f1daa1524e14bda473413ff89 Mon Sep 17 00:00:00 2001 From: "chengliang.zhang" Date: Tue, 13 Jan 2026 15:17:55 +0800 Subject: [PATCH 07/13] =?UTF-8?q?gradle=20distributionUrl=20=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E9=98=BF=E9=87=8C=E4=BA=91=E9=95=9C=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f0ced99..68566cb 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-all.zip +distributionUrl=https\://mirrors.aliyun.com/macports/distfiles/gradle/gradle-8.6-all.zip From dcd8f806ce0de8046ad9b49015390110b7f48988 Mon Sep 17 00:00:00 2001 From: "chengliang.zhang" Date: Mon, 19 Jan 2026 17:27:21 +0800 Subject: [PATCH 08/13] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E9=AA=8C=E7=AD=BE=E5=85=AC=E9=92=A5;refund?= =?UTF-8?q?=20=E5=AF=B9=E8=B1=A1=E6=96=B0=E5=A2=9E=E8=BF=94=E5=9B=9E=20app?= =?UTF-8?q?=20=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 ++++ README.md | 4 ++-- VERSION | 2 +- example/build.gradle | 2 +- example/src/main/resources/pingpp_public_key.pem | 13 +++++-------- pom.xml | 2 +- 6 files changed, 14 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 364d6e6..41bce62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # ChangeLog +## 2.5.5 + +-更新: 退款 refund 新增返回 `app` 参数. + ## 2.5.4 - 修正: 修复版本 2.5.3 中存在的 POM 依赖问题。建议用户直接升级到此版本。 diff --git a/README.md b/README.md index 6d090fe..4157f1a 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ mavenCentral com.pingxx pingpp-java - 2.5.4 + 2.5.5 jar ``` @@ -56,7 +56,7 @@ repositories { 安装 Ping++ SDK ``` -implementation 'com.pingxx:pingpp-java:2.5.4' +implementation 'com.pingxx:pingpp-java:2.5.5' ``` ## 初始化 diff --git a/VERSION b/VERSION index d21aa93..160fe39 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.5.4 \ No newline at end of file +2.5.5 \ No newline at end of file diff --git a/example/build.gradle b/example/build.gradle index d82583f..c42040d 100644 --- a/example/build.gradle +++ b/example/build.gradle @@ -7,7 +7,7 @@ dependencies { // 方法 1. 本地文件系统依赖 // implementation fileTree(dir: 'lib', includes: ['*jar']) // 方法 2. 仓库依赖 - // implementation 'com.pingxx:pingpp-java:2.5.4' + // implementation 'com.pingxx:pingpp-java:2.5.5' // 方法 3.模块依赖 implementation project(':pingpp-sdk') } diff --git a/example/src/main/resources/pingpp_public_key.pem b/example/src/main/resources/pingpp_public_key.pem index 2cf7987..c0f5d19 100644 --- a/example/src/main/resources/pingpp_public_key.pem +++ b/example/src/main/resources/pingpp_public_key.pem @@ -1,9 +1,6 @@ -----BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoXV1qdwYGq6lac+EIVxx -1/wGcjjy5InO08QBvUGDQMKAWjg/UvnNmnTZJvxUu18UVtwoHIls24EHZ96im3k0 -DPn43aSGyR417g9rqUL2N1H/0dCNcT8LY8sZL/sw/IV//IQcZYv/8EO6+7SClw+G -Jpib84QfmDgUPbQC0dhl1R1Q8e8RoE/+70yX6OY22kRr14KjRZiVQ0UMZS5KaPwS -FJ1egyNDCLFoLyhRQMV5vDxMdpIvxZuGW+3aTZkW8v/ISXWmSFpI/dlpxHp0+h6p -sdai2RzXYuyzbeOPyQEZkyGfR6BX2Gv/l80nEFNup7uNmAt/be9IdpSZlxpF4HlI -8wIDAQAB ------END PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDCJqcTaGUab0vBZSkGNE1AaGiY +RcbPd7QdCQuM8EpbEpEQGr9/NjbJHCLd3eaUmYM0vy34Wux+VHnw4ckiDfBuW6/Z +fIo5GBRCI/nZLOnWcOX98ZAXYnn/VVJXuBtHtHL8DWEbYmMp+Gl4k1rFSuQKk52k +YLXeFJZJV8CBV5jA+wIDAQAB +-----END PUBLIC KEY----- \ No newline at end of file diff --git a/pom.xml b/pom.xml index 62f8f65..8dcba5e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.pingxx pingpp-java-parent - 2.5.4 + 2.5.5 pom A Java SDK for Ping++ Payment API. From cf7e423209bdc01a653fe2ce96a2581d70f1b913 Mon Sep 17 00:00:00 2001 From: "chengliang.zhang" Date: Mon, 13 Apr 2026 17:47:25 +0800 Subject: [PATCH 09/13] =?UTF-8?q?=E6=9B=B4=E6=96=B0:=20`RequestOptions`=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E`Ping++`=E9=AA=8C=E7=AD=BE=E5=85=AC=E9=92=A5?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 73 ++++++++++++++++++- example/build.gradle | 2 +- .../main/java/com/pingxx/example/Main.java | 64 ++++++++-------- .../main/java/com/pingplusplus/Pingpp.java | 2 +- .../com/pingplusplus/net/RequestOptions.java | 16 ++++ .../java/com/pingplusplus/PingppTest.java | 2 +- 6 files changed, 121 insertions(+), 38 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41bce62..d36bfe4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # ChangeLog +## 2.5.6 + +- 更新: `RequestOptions` 新增`Ping++`验签公钥设置参数 + ## 2.5.5 -更新: 退款 refund 新增返回 `app` 参数. @@ -34,12 +38,13 @@ > 本次更新有较多与旧版本不兼容的地方。 -- 修改: 支持 JDK 8 及以上; +- 修改: 支持 JDK 8 及以上; - 修改: 异常抛出修改,统一声明为 `PingppException`,实际使用可以再做具体判断; - 废弃: 原接口,支持传 `apiKey` 参数的方法,全部删除,可以用 `RequestOptions` 代替; - 新增: 每个接口最后一个参数支持 `RequestOptions`; - 新增: `PingppException` 增加 `type`、`code`、`statusCode`; -- 新增: 对象增加 `getLastResponse()` 方法,可以用于获取当前这次请求的 `response` 对象,包含 `HTTP Status Code`、`Headers`、`Response Body` 等; +- 新增: 对象增加 `getLastResponse()` 方法,可以用于获取当前这次请求的 `response` 对象,包含 `HTTP Status Code`、`Headers`、 + `Response Body` 等; - 废弃: 取消对 `PKCS1` 格式私钥的支持,请转成 `PKCS8` 再使用; --- @@ -90,25 +95,34 @@ - 移除 `PingppAccount` ## 2.3.8 (2018-05-22) + #### 新增 + - WxLiteOAuth 接口 - Agreement 接口 #### 修改 + - 合并部分内部类 - WxpubOAuth 接口错误时增加异常 ## 2.3.7 (2018-03-16) + #### 新增 + - BalanceSettlement 接口 - CardInfo 接口 ## 2.3.5 (2018-02-27) + #### 修正 + - 部分对象字段从 Integer 改成 Long ## 2.3.4 (2018-01-10) + #### 修改 + - 移除已废弃接口 - 移除 transfer、batch_transfer 取消接口 - 更新示例 @@ -116,137 +130,190 @@ - settle_account 字段更新 ## 2.3.3 (2017-12-27) + #### 修正 + - 修正 javadoc ## 2.3.2 (2017-12-21) + #### 修正 + - 兼容 JDK 1.7 ## 2.3.1 (2017-12-08) + #### 修正 + - Event 解析修正 ## 2.3.0 (2017-12-01) + #### 更改 + - 合并账户系统相关接口 ## 2.2.5 (2017-10-10) + #### 新增 + - 新增重试机制 #### 修改 + - 优化 SDK ## 2.2.4 (2017-06-19) + #### 修改 + - Charge 增加字段 reversed,表示是否已撤销 - 针对渠道 isv_scan, isv_qr_isv_wap 增加撤销方法,`Charge.reverse(CHARGE_ID)` - Refund 增加 extra 字段 ## 2.2.3 (2017-03-27) + #### 修改 + - BatchTransfer 增加字段 ## 2.2.2 (2017-03-21) + #### 修正 + - alipay_pc_direct/alipay_wap 渠道 credential 字段类型的修正 ## 2.2.1 (2017-01-13) + #### 新增 + - 添加 gradle 相关文件 - 添加部分测试文件 - batch_transfer 更新/取消接口 #### 修改 + - 更改签名私钥获取方式 - Charge.list app[id] 参数改为必传 - 红包去除多余的参数 - batch_refund charges 字段格式修改 #### 修正 + - Webhooks 解析对象 batch_refund、batch_transfer、customs 对应事件错误 ## 2.2.0 + #### 新增 + - 添加 BatchRefund、BatchTransfer、Customs #### 修改 + - 签名生成规则变更 - 列表查询接口换成 `list` 方法,代替 `all` 方法 - 退款接口调用方式变更,直接使用 Refund 对象 - Refund 对象添加 charge_order_no, transaction_no 属性 ## 2.1.9 + #### 修改 -- 添加 RateLimitException + +- 添加 RateLimitException - 兼容 http 地址,仅为方便测试 ## 2.1.8 + #### 新增 + - Identification 身份证银行卡接口 ## 2.1.7 + #### 修正 + - RedEnvelope、Transfer 添加字段 ## 2.1.6 + #### 修正 + - 签名内容编码问题 ## 2.1.5 + #### 修改 + - 补充 RedEnvelope、Transfer 缺少字段 ## 2.1.4 + #### 修改 + - 更改 content-type 为 application/json ## 2.1.3 + - 兼容两种微信公众号接入方式 ## 2.1.2 + - 补全确实字段 - 修正 Event 解析 - 修正部分字符 JSON 序列化问题 - 添加请求签名 ## 2.1.1 + - 修正 extra 类型 - 兼容 jdk 1.6 ## 2.1.0 + - 添加应用内快捷支付对应接口 ## 2.0.10 + - 增加 Refund 对象 status 字段 ## 2.0.8 + - 增加 ChannelException ## 2.0.6 + - 增加企业转账、修改红包接口 ## 2.0.5 + - 增加 event sdk ## 2.0.4 + - 更改 sdk 目录格式,修复wx_pub渠道timeStamp 类型问题。 ## 2.0.3 + - 增加 apple pay ,重写 getcredential 方法。 ## 2.0.2 + - 增加微信红包 ## 2.0.1 + #### 更改 + 修改 wx credential 里的 timeStamp 类型为字符串,防止变成科学计数法 ## 2.0.0 + #### 更改 + 添加新渠道支持:百付宝、百付宝WAP、微信公众平台 ## 1.0.4 + #### 更改: + 添加 `Expanding` 机制 diff --git a/example/build.gradle b/example/build.gradle index c42040d..495f667 100644 --- a/example/build.gradle +++ b/example/build.gradle @@ -7,7 +7,7 @@ dependencies { // 方法 1. 本地文件系统依赖 // implementation fileTree(dir: 'lib', includes: ['*jar']) // 方法 2. 仓库依赖 - // implementation 'com.pingxx:pingpp-java:2.5.5' + // implementation 'com.pingxx:pingpp-java:2.5.6' // 方法 3.模块依赖 implementation project(':pingpp-sdk') } diff --git a/example/src/main/java/com/pingxx/example/Main.java b/example/src/main/java/com/pingxx/example/Main.java index c38f9f2..ccb7171 100644 --- a/example/src/main/java/com/pingxx/example/Main.java +++ b/example/src/main/java/com/pingxx/example/Main.java @@ -57,38 +57,38 @@ public static void main(String[] args) throws Exception { // Charge 示例 ChargeExample.runDemos(appId); - - // Refund 示例 - RefundExample.runDemos(); - - // RedEnvelope 示例 - RedEnvelopeExample.runDemos(appId); - - // Transfer 示例 - TransferExample.runDemos(appId); - - // Event 示例 - EventExample.runDemos(); - - // Webhooks 验证示例 - WebhooksVerifyExample.runDemos(); - - // 微信公众号 openid 相关示例 - WxPubOAuthExample.runDemos(appId); - - // 身份证银行卡信息认证接口 - // 请使用 live key 调用该接口 - // IdentificationExample.runDemos(appId); - - // 批量付款示例 - BatchTransferExample.runDemos(appId); - - // 报关 - // 请使用 live key 调用该接口 - CustomsExample.runDemos(appId); - - //签约代扣示例 - AgreementExample.runDemos(appId); +// +// // Refund 示例 +// RefundExample.runDemos(); +// +// // RedEnvelope 示例 +// RedEnvelopeExample.runDemos(appId); +// +// // Transfer 示例 +// TransferExample.runDemos(appId); +// +// // Event 示例 +// EventExample.runDemos(); +// +// // Webhooks 验证示例 +// WebhooksVerifyExample.runDemos(); +// +// // 微信公众号 openid 相关示例 +// WxPubOAuthExample.runDemos(appId); +// +// // 身份证银行卡信息认证接口 +// // 请使用 live key 调用该接口 +// // IdentificationExample.runDemos(appId); +// +// // 批量付款示例 +// BatchTransferExample.runDemos(appId); +// +// // 报关 +// // 请使用 live key 调用该接口 +// CustomsExample.runDemos(appId); +// +// //签约代扣示例 +// AgreementExample.runDemos(appId); } private static final SecureRandom random = new SecureRandom(); diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/Pingpp.java b/pingpp-sdk/src/main/java/com/pingplusplus/Pingpp.java index 986c5b7..444f8b4 100644 --- a/pingpp-sdk/src/main/java/com/pingplusplus/Pingpp.java +++ b/pingpp-sdk/src/main/java/com/pingplusplus/Pingpp.java @@ -17,7 +17,7 @@ public abstract class Pingpp { /** * version */ - public static final String VERSION = "2.5.3"; + public static final String VERSION = "2.5.6"; /** * api key */ diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/net/RequestOptions.java b/pingpp-sdk/src/main/java/com/pingplusplus/net/RequestOptions.java index 91f14bd..7a2b165 100644 --- a/pingpp-sdk/src/main/java/com/pingplusplus/net/RequestOptions.java +++ b/pingpp-sdk/src/main/java/com/pingplusplus/net/RequestOptions.java @@ -88,12 +88,23 @@ public static final class RequestOptionsBuilder { private int readTimeout; private int maxNetworkRetries; private String acceptLanguage; + + public String getVerifyPublicKey() { + return verifyPublicKey; + } + + public RequestOptionsBuilder setVerifyPublicKey(String verifyPublicKey) { + this.verifyPublicKey = normalizePublicVerifyKey(verifyPublicKey); + return this; + } + private String verifyPublicKey; public RequestOptionsBuilder() { this.apiKey = Pingpp.apiKey; this.appId = Pingpp.appId; this.privateKey = Pingpp.privateKey; + this.verifyPublicKey = Pingpp.verifyPublicKey; this.connectTimeout = Pingpp.getConnectTimeout(); this.readTimeout = Pingpp.getReadTimeout(); this.maxNetworkRetries = Pingpp.getMaxNetworkRetries(); @@ -132,6 +143,11 @@ public RequestOptionsBuilder setPrivateKey(String privateKey) { return this; } + public RequestOptionsBuilder clearVerifyPublicKey() { + this.verifyPublicKey = null; + return this; + } + public RequestOptionsBuilder clearAppId() { this.appId = null; return this; diff --git a/pingpp-sdk/src/test/java/com/pingplusplus/PingppTest.java b/pingpp-sdk/src/test/java/com/pingplusplus/PingppTest.java index 949bbac..368100a 100644 --- a/pingpp-sdk/src/test/java/com/pingplusplus/PingppTest.java +++ b/pingpp-sdk/src/test/java/com/pingplusplus/PingppTest.java @@ -74,7 +74,7 @@ public class PingppTest { } @Test public void testVerifyVersions() { - assertEquals("Pingpp.VERSION should match", "2.5.0", Pingpp.VERSION); + assertEquals("Pingpp.VERSION should match", "2.5.6", Pingpp.VERSION); } @Test public void testCreateCharge() { From 98e7945ffd95cef73e7949c5007b7fd0d5d47132 Mon Sep 17 00:00:00 2001 From: "chengliang.zhang" Date: Mon, 13 Apr 2026 17:53:09 +0800 Subject: [PATCH 10/13] uncomment --- .../main/java/com/pingxx/example/Main.java | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/example/src/main/java/com/pingxx/example/Main.java b/example/src/main/java/com/pingxx/example/Main.java index ccb7171..c38f9f2 100644 --- a/example/src/main/java/com/pingxx/example/Main.java +++ b/example/src/main/java/com/pingxx/example/Main.java @@ -57,38 +57,38 @@ public static void main(String[] args) throws Exception { // Charge 示例 ChargeExample.runDemos(appId); -// -// // Refund 示例 -// RefundExample.runDemos(); -// -// // RedEnvelope 示例 -// RedEnvelopeExample.runDemos(appId); -// -// // Transfer 示例 -// TransferExample.runDemos(appId); -// -// // Event 示例 -// EventExample.runDemos(); -// -// // Webhooks 验证示例 -// WebhooksVerifyExample.runDemos(); -// -// // 微信公众号 openid 相关示例 -// WxPubOAuthExample.runDemos(appId); -// -// // 身份证银行卡信息认证接口 -// // 请使用 live key 调用该接口 -// // IdentificationExample.runDemos(appId); -// -// // 批量付款示例 -// BatchTransferExample.runDemos(appId); -// -// // 报关 -// // 请使用 live key 调用该接口 -// CustomsExample.runDemos(appId); -// -// //签约代扣示例 -// AgreementExample.runDemos(appId); + + // Refund 示例 + RefundExample.runDemos(); + + // RedEnvelope 示例 + RedEnvelopeExample.runDemos(appId); + + // Transfer 示例 + TransferExample.runDemos(appId); + + // Event 示例 + EventExample.runDemos(); + + // Webhooks 验证示例 + WebhooksVerifyExample.runDemos(); + + // 微信公众号 openid 相关示例 + WxPubOAuthExample.runDemos(appId); + + // 身份证银行卡信息认证接口 + // 请使用 live key 调用该接口 + // IdentificationExample.runDemos(appId); + + // 批量付款示例 + BatchTransferExample.runDemos(appId); + + // 报关 + // 请使用 live key 调用该接口 + CustomsExample.runDemos(appId); + + //签约代扣示例 + AgreementExample.runDemos(appId); } private static final SecureRandom random = new SecureRandom(); From d313e37d3f396ac0d804ae24b3648024a379884c Mon Sep 17 00:00:00 2001 From: "chengliang.zhang" Date: Mon, 13 Apr 2026 18:38:42 +0800 Subject: [PATCH 11/13] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=E5=88=B02.5.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- VERSION | 2 +- pom.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4157f1a..1a8a82c 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ mavenCentral com.pingxx pingpp-java - 2.5.5 + 2.5.6 jar ``` @@ -56,7 +56,7 @@ repositories { 安装 Ping++ SDK ``` -implementation 'com.pingxx:pingpp-java:2.5.5' +implementation 'com.pingxx:pingpp-java:2.5.6' ``` ## 初始化 diff --git a/VERSION b/VERSION index 160fe39..1b03fe6 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.5.5 \ No newline at end of file +2.5.6 \ No newline at end of file diff --git a/pom.xml b/pom.xml index 8dcba5e..71f3e19 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.pingxx pingpp-java-parent - 2.5.5 + 2.5.6 pom A Java SDK for Ping++ Payment API. From 2461d32cc24f1cbc4b26c89a4fdf357d18bb6886 Mon Sep 17 00:00:00 2001 From: "chengliang.zhang" Date: Mon, 13 Apr 2026 18:40:11 +0800 Subject: [PATCH 12/13] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E5=8F=B7=E5=88=B02.5.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pingpp-sdk/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pingpp-sdk/pom.xml b/pingpp-sdk/pom.xml index f881d71..ab60a11 100644 --- a/pingpp-sdk/pom.xml +++ b/pingpp-sdk/pom.xml @@ -5,7 +5,7 @@ com.pingxx pingpp-java - 2.5.5 + 2.5.6 jar pingpp-java From 1bc039367119b272395efa2ee92181902bb0abca Mon Sep 17 00:00:00 2001 From: michealzh Date: Fri, 11 Sep 2026 11:40:57 +0800 Subject: [PATCH 13/13] =?UTF-8?q?release:=20=E5=8F=91=E5=B8=83=20Ping++=20?= =?UTF-8?q?Java=20SDK=202.5.7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 5 + README.md | 4 +- VERSION | 2 +- docs/update/2.3-to-2.4.md | 4 - example/build.gradle | 2 +- .../com/pingxx/example/ChargeExample.java | 20 +++ pingpp-sdk/pom.xml | 2 +- .../main/java/com/pingplusplus/Pingpp.java | 2 +- .../java/com/pingplusplus/model/Contact.java | 72 ---------- .../java/com/pingplusplus/model/SubBank.java | 80 ----------- .../pingplusplus/model/SubBankCollection.java | 4 - .../com/pingplusplus/model/TradeDetail.java | 134 ++++++++++++++++++ .../java/com/pingplusplus/model/UserPic.java | 108 -------------- .../com/pingplusplus/net/APIResource.java | 6 - .../java/com/pingplusplus/PingppTest.java | 2 +- .../java/com/pingplusplus/SubBankTest.java | 36 ----- .../com/pingplusplus/sub_app/ContactTest.java | 40 ------ .../com/pingplusplus/user/UserPicTest.java | 36 ----- pom.xml | 2 +- 19 files changed, 167 insertions(+), 394 deletions(-) delete mode 100644 pingpp-sdk/src/main/java/com/pingplusplus/model/Contact.java delete mode 100644 pingpp-sdk/src/main/java/com/pingplusplus/model/SubBank.java delete mode 100644 pingpp-sdk/src/main/java/com/pingplusplus/model/SubBankCollection.java create mode 100644 pingpp-sdk/src/main/java/com/pingplusplus/model/TradeDetail.java delete mode 100644 pingpp-sdk/src/main/java/com/pingplusplus/model/UserPic.java delete mode 100644 pingpp-sdk/src/test/java/com/pingplusplus/SubBankTest.java delete mode 100644 pingpp-sdk/src/test/java/com/pingplusplus/sub_app/ContactTest.java delete mode 100644 pingpp-sdk/src/test/java/com/pingplusplus/user/UserPicTest.java diff --git a/CHANGELOG.md b/CHANGELOG.md index d36bfe4..b5b94ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # ChangeLog +## 2.5.7 + +- 新增 TradeDetail 交易详情接口 +- 下线SubBank、Contact、UserPic 接口 + ## 2.5.6 - 更新: `RequestOptions` 新增`Ping++`验签公钥设置参数 diff --git a/README.md b/README.md index 1a8a82c..4efc776 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ mavenCentral com.pingxx pingpp-java - 2.5.6 + 2.5.7 jar ``` @@ -56,7 +56,7 @@ repositories { 安装 Ping++ SDK ``` -implementation 'com.pingxx:pingpp-java:2.5.6' +implementation 'com.pingxx:pingpp-java:2.5.7' ``` ## 初始化 diff --git a/VERSION b/VERSION index 1b03fe6..35d16fb 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.5.6 \ No newline at end of file +2.5.7 diff --git a/docs/update/2.3-to-2.4.md b/docs/update/2.3-to-2.4.md index f8a39b8..6a2ad38 100644 --- a/docs/update/2.3-to-2.4.md +++ b/docs/update/2.3-to-2.4.md @@ -70,7 +70,6 @@ charge.refunds.list(String apiKey, Map params) charge.refunds.retrieve(String id, String apiKey) charge.refunds.create(String apiKey, Map params) -Contact.create(Map params, String apiKey) Customs.create(String apiKey, Map params) Customs.retrieve(String id, String apiKey) @@ -103,14 +102,11 @@ SplitReceiver.retrieve(String id, String apiKey) SplitReceiver.list(Map params, String apiKey) SplitReceiver.delete(String id, String apiKey) -SubBank.query(Map params, String apiKey) - Transfer.create(String apiKey, Map params) Transfer.retrieve(String id, String apiKey) Transfer.retrieve(String id, String apiKey, Map params) Transfer.list(String apiKey, Map params) -UserPic.upload(Map params, String apiKey) ``` #### 替换示例 diff --git a/example/build.gradle b/example/build.gradle index 495f667..6b70aea 100644 --- a/example/build.gradle +++ b/example/build.gradle @@ -7,7 +7,7 @@ dependencies { // 方法 1. 本地文件系统依赖 // implementation fileTree(dir: 'lib', includes: ['*jar']) // 方法 2. 仓库依赖 - // implementation 'com.pingxx:pingpp-java:2.5.6' + // implementation 'com.pingxx:pingpp-java:2.5.7' // 方法 3.模块依赖 implementation project(':pingpp-sdk') } diff --git a/example/src/main/java/com/pingxx/example/ChargeExample.java b/example/src/main/java/com/pingxx/example/ChargeExample.java index 88421e1..653435a 100644 --- a/example/src/main/java/com/pingxx/example/ChargeExample.java +++ b/example/src/main/java/com/pingxx/example/ChargeExample.java @@ -10,6 +10,7 @@ import com.pingplusplus.exception.PingppException; import com.pingplusplus.model.Charge; import com.pingplusplus.model.ChargeCollection; +import com.pingplusplus.model.TradeDetail; import java.util.*; @@ -107,6 +108,25 @@ public Charge retrieve(String id) { return charge; } + /** + * 查询 Charge 的渠道交易明细。 + * 该接口仅适用于已支付成功且支持交易明细查询的 Charge。 + * + * @param chargeId Charge 对象 ID + * @return 渠道交易明细 + */ + public TradeDetail retrieveTradeDetail(String chargeId) { + TradeDetail tradeDetail = null; + try { + tradeDetail = TradeDetail.retrieve(chargeId); + System.out.println(tradeDetail); + } catch (PingppException e) { + e.printStackTrace(); + } + + return tradeDetail; + } + /** * 撤销 Charge * diff --git a/pingpp-sdk/pom.xml b/pingpp-sdk/pom.xml index ab60a11..e5f7400 100644 --- a/pingpp-sdk/pom.xml +++ b/pingpp-sdk/pom.xml @@ -5,7 +5,7 @@ com.pingxx pingpp-java - 2.5.6 + 2.5.7 jar pingpp-java diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/Pingpp.java b/pingpp-sdk/src/main/java/com/pingplusplus/Pingpp.java index 444f8b4..7ab1f3c 100644 --- a/pingpp-sdk/src/main/java/com/pingplusplus/Pingpp.java +++ b/pingpp-sdk/src/main/java/com/pingplusplus/Pingpp.java @@ -17,7 +17,7 @@ public abstract class Pingpp { /** * version */ - public static final String VERSION = "2.5.6"; + public static final String VERSION = "2.5.7"; /** * api key */ diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/model/Contact.java b/pingpp-sdk/src/main/java/com/pingplusplus/model/Contact.java deleted file mode 100644 index caf2b50..0000000 --- a/pingpp-sdk/src/main/java/com/pingplusplus/model/Contact.java +++ /dev/null @@ -1,72 +0,0 @@ -package com.pingplusplus.model; - -import com.pingplusplus.exception.PingppException; -import com.pingplusplus.net.APIResource; -import com.pingplusplus.net.AppBasedResource; -import com.pingplusplus.net.RequestOptions; - -import java.util.Map; - -public class Contact extends AppBasedResource { - String user; - Boolean livemode; - String accNo; - String contactNo; - - public String getUser() { - return user; - } - - public void setUser(String user) { - this.user = user; - } - - public String getAccNo() { - return accNo; - } - - public void setAccNo(String accNo) { - this.accNo = accNo; - } - - public Boolean getLivemode() { - return livemode; - } - - public void setLivemode(Boolean livemode) { - this.livemode = livemode; - } - - public String getContactNo() { - return contactNo; - } - - public void setContactNo(String contactNo) { - this.contactNo = contactNo; - } - - /** - * 新增联系人 - * - * @param params 请求参数 - * @return Contact - * @throws PingppException - */ - public static Contact create(Map params) - throws PingppException { - return create(params, null); - } - - /** - * 新增联系人 - * - * @param params 请求参数 - * @param options the specific options - * @return Contact - * @throws PingppException - */ - public static Contact create(Map params, RequestOptions options) - throws PingppException { - return APIResource.request(APIResource.RequestMethod.POST, singleClassURL(Contact.class), params, Contact.class, options); - } -} diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/model/SubBank.java b/pingpp-sdk/src/main/java/com/pingplusplus/model/SubBank.java deleted file mode 100644 index 1f93941..0000000 --- a/pingpp-sdk/src/main/java/com/pingplusplus/model/SubBank.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.pingplusplus.model; - -import com.pingplusplus.exception.PingppException; -import com.pingplusplus.net.APIResource; -import com.pingplusplus.net.RequestOptions; - -import java.util.Map; - -public class SubBank extends APIResource { - String object; - String subBank; - String subBankCode; - String prov; - String city; - - public String getObject() { - return object; - } - - public void setObject(String object) { - this.object = object; - } - - public String getSubBank() { - return subBank; - } - - public void setSubBank(String subBank) { - this.subBank = subBank; - } - - public String getSubBankCode() { - return subBankCode; - } - - public void setSubBankCode(String subBankCode) { - this.subBankCode = subBankCode; - } - - public String getProv() { - return prov; - } - - public void setProv(String prov) { - this.prov = prov; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - /** - * 银行支行列表查询 - * - * @param params 银行编号和省市信息 - * @return SubBankCollection - * @throws PingppException - */ - public static SubBankCollection query(Map params) - throws PingppException { - return query(params, null); - } - - /** - * 银行支行列表查询 - * - * @param params 银行编号和省市信息 - * @param options the specific options - * @return SubBankCollection - * @throws PingppException - */ - public static SubBankCollection query(Map params, RequestOptions options) - throws PingppException { - return APIResource.request(APIResource.RequestMethod.GET, classURL(SubBank.class), params, SubBankCollection.class, options); - } -} diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/model/SubBankCollection.java b/pingpp-sdk/src/main/java/com/pingplusplus/model/SubBankCollection.java deleted file mode 100644 index dd410ce..0000000 --- a/pingpp-sdk/src/main/java/com/pingplusplus/model/SubBankCollection.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.pingplusplus.model; - -public class SubBankCollection extends PingppCollection { -} diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/model/TradeDetail.java b/pingpp-sdk/src/main/java/com/pingplusplus/model/TradeDetail.java new file mode 100644 index 0000000..ad1cdf4 --- /dev/null +++ b/pingpp-sdk/src/main/java/com/pingplusplus/model/TradeDetail.java @@ -0,0 +1,134 @@ +package com.pingplusplus.model; + +import com.pingplusplus.exception.PingppException; +import com.pingplusplus.net.APIResource; +import com.pingplusplus.net.RequestOptions; + +/** + * Charge 的渠道交易明细。 + */ +public class TradeDetail extends APIResource { + String id; + String app; + String object; + Boolean livemode; + String channel; + String currency; + String orderNo; + String transactionNo; + Integer amount; + Integer fee; + Integer actualAmount; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getApp() { + return app; + } + + public void setApp(String app) { + this.app = app; + } + + public String getObject() { + return object; + } + + public void setObject(String object) { + this.object = object; + } + + public Boolean getLivemode() { + return livemode; + } + + public void setLivemode(Boolean livemode) { + this.livemode = livemode; + } + + public String getChannel() { + return channel; + } + + public void setChannel(String channel) { + this.channel = channel; + } + + public String getCurrency() { + return currency; + } + + public void setCurrency(String currency) { + this.currency = currency; + } + + public String getOrderNo() { + return orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getTransactionNo() { + return transactionNo; + } + + public void setTransactionNo(String transactionNo) { + this.transactionNo = transactionNo; + } + + public Integer getAmount() { + return amount; + } + + public void setAmount(Integer amount) { + this.amount = amount; + } + + public Integer getFee() { + return fee; + } + + public void setFee(Integer fee) { + this.fee = fee; + } + + public Integer getActualAmount() { + return actualAmount; + } + + public void setActualAmount(Integer actualAmount) { + this.actualAmount = actualAmount; + } + + /** + * 查询 Charge 的渠道交易明细。 + * + * @param chargeId Charge 对象 ID + * @return 渠道交易明细 + * @throws PingppException 请求失败时抛出 + */ + public static TradeDetail retrieve(String chargeId) throws PingppException { + return retrieve(chargeId, null); + } + + /** + * 查询 Charge 的渠道交易明细。 + * + * @param chargeId Charge 对象 ID + * @param options 本次请求使用的配置 + * @return 渠道交易明细 + * @throws PingppException 请求失败时抛出 + */ + public static TradeDetail retrieve(String chargeId, RequestOptions options) throws PingppException { + String url = String.format("%s/trade_detail", instanceURL(Charge.class, chargeId)); + return APIResource.request(APIResource.RequestMethod.GET, url, null, TradeDetail.class, options); + } +} diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/model/UserPic.java b/pingpp-sdk/src/main/java/com/pingplusplus/model/UserPic.java deleted file mode 100644 index b1e5ed1..0000000 --- a/pingpp-sdk/src/main/java/com/pingplusplus/model/UserPic.java +++ /dev/null @@ -1,108 +0,0 @@ -package com.pingplusplus.model; - -import com.pingplusplus.exception.PingppException; -import com.pingplusplus.net.APIResource; -import com.pingplusplus.net.AppBasedResource; -import com.pingplusplus.net.RequestOptions; - -import java.util.Map; - -public class UserPic extends AppBasedResource { - String user; - Boolean livemode; - String type; - String operateType; - String picFmt; - String picType; - String accNo; - String picExternalId; - - public String getUser() { - return user; - } - - public void setUser(String user) { - this.user = user; - } - - public Boolean getLivemode() { - return livemode; - } - - public void setLivemode(Boolean livemode) { - this.livemode = livemode; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - public String getOperateType() { - return operateType; - } - - public void setOperateType(String operateType) { - this.operateType = operateType; - } - - public String getPicFmt() { - return picFmt; - } - - public void setPicFmt(String picFmt) { - this.picFmt = picFmt; - } - - public String getPicType() { - return picType; - } - - public void setPicType(String picType) { - this.picType = picType; - } - - public String getAccNo() { - return accNo; - } - - public void setAccNo(String accNo) { - this.accNo = accNo; - } - - public String getPicExternalId() { - return picExternalId; - } - - public void setPicExternalId(String picExternalId) { - this.picExternalId = picExternalId; - } - - /** - * 证件上传 - * - * @param params 请求参数 - * @return UserPic - * @throws PingppException - */ - public static UserPic upload(Map params) - throws PingppException { - return upload(params, null); - } - - /** - * 证件上传 - * - * @param params 请求参数 - * @param options the specific options - * @return UserPic - * @throws PingppException - */ - public static UserPic upload(Map params, RequestOptions options) - throws PingppException { - return APIResource.request(APIResource.RequestMethod.POST, singleClassURL(UserPic.class), params, UserPic.class, options); - } -} diff --git a/pingpp-sdk/src/main/java/com/pingplusplus/net/APIResource.java b/pingpp-sdk/src/main/java/com/pingplusplus/net/APIResource.java index 10bcb6c..1fa85f5 100644 --- a/pingpp-sdk/src/main/java/com/pingplusplus/net/APIResource.java +++ b/pingpp-sdk/src/main/java/com/pingplusplus/net/APIResource.java @@ -105,18 +105,12 @@ protected static String className(Class clazz) { return "royalty_template"; case "balancesettlement": return "balance_settlement"; - case "subbank": - return "sub_bank"; case "splitreceiver": return "split_receiver"; case "splitprofit": return "split_profit"; case "profittransaction": return "profit_transaction"; - case "userpic": - return "users/upload_pic"; - case "contact": - return "sub_apps/contact"; default: return className; } diff --git a/pingpp-sdk/src/test/java/com/pingplusplus/PingppTest.java b/pingpp-sdk/src/test/java/com/pingplusplus/PingppTest.java index 368100a..c5b7676 100644 --- a/pingpp-sdk/src/test/java/com/pingplusplus/PingppTest.java +++ b/pingpp-sdk/src/test/java/com/pingplusplus/PingppTest.java @@ -74,7 +74,7 @@ public class PingppTest { } @Test public void testVerifyVersions() { - assertEquals("Pingpp.VERSION should match", "2.5.6", Pingpp.VERSION); + assertEquals("Pingpp.VERSION should match", "2.5.7", Pingpp.VERSION); } @Test public void testCreateCharge() { diff --git a/pingpp-sdk/src/test/java/com/pingplusplus/SubBankTest.java b/pingpp-sdk/src/test/java/com/pingplusplus/SubBankTest.java deleted file mode 100644 index 1094a0e..0000000 --- a/pingpp-sdk/src/test/java/com/pingplusplus/SubBankTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.pingplusplus; - -import com.pingplusplus.exception.PingppException; -import com.pingplusplus.model.SubBank; -import com.pingplusplus.model.SubBankCollection; -import org.junit.Test; - -import java.util.HashMap; -import java.util.Map; - -import static org.junit.Assert.assertEquals; - -public class SubBankTest extends PingppTestBase { - /** - * 银行支行列表查询 - */ - @Test public void testSubBankQuery() throws PingppException { - Map params = new HashMap<>(); - params.put("app", PingppTestData.getAppID()); - params.put("open_bank_code", "0308"); // 银行开户行编号 - params.put("prov", "浙江省"); // 省份 - params.put("city", "宁波市"); // 城市 - params.put("channel", "chanpay"); // 相关 transfer 渠道 - - SubBankCollection obj = SubBank.query(params); - - System.out.println(obj); - - SubBank subBank = obj.getData().get(0); - - assertEquals("list", obj.getObject()); - assertEquals("sub_bank", subBank.getObject()); - assertEquals("浙江省", subBank.getProv()); - assertEquals("宁波市", subBank.getCity()); - } -} diff --git a/pingpp-sdk/src/test/java/com/pingplusplus/sub_app/ContactTest.java b/pingpp-sdk/src/test/java/com/pingplusplus/sub_app/ContactTest.java deleted file mode 100644 index 174a0a4..0000000 --- a/pingpp-sdk/src/test/java/com/pingplusplus/sub_app/ContactTest.java +++ /dev/null @@ -1,40 +0,0 @@ -package com.pingplusplus.sub_app; - -import com.pingplusplus.PingppTestBase; -import com.pingplusplus.exception.PingppException; -import com.pingplusplus.model.Contact; -import org.junit.Test; - -import java.util.HashMap; -import java.util.Map; - -import static org.junit.Assert.assertEquals; - -/* - * @author Afon, @date 19-07-12 - */ -public class ContactTest extends PingppTestBase { - - /** - * 证件上传 - */ - @Test public void testAddContact() throws PingppException { - Map params = new HashMap<>(); - params.put("user", "test_user_001"); // 用户 ID - params.put("acc_no", "2019057929311601000631"); // 壹账通用户编号。此编号可在证件上传接口的返回获得 - params.put("contact_type", 1); // 联系人类型,1:第一紧急联系人、2:第二紧急联系人、3:第三紧急联系人、4、法人、5、财务人员(4、5必传) - params.put("contact_name", "杨真探"); // 联系人名称 - params.put("contact_cert_type", "01"); // 证件类型:01:身份证、02:企业营业执照、03:护照、04:港澳通行证、05:台湾往来通行证、06:临时身份证 - params.put("contact_cert_no", "310181201402149201"); // 联系人证件号 - params.put("contact_cert_valid_from", "2019-01-01"); // 联系人证件起始日,格式:“2018-12-21” - params.put("contact_cert_valid_until", "2028-12-31"); // 联系人证件截止日,格式:“2019-12-21”,长期填写:“9999-12-31” - params.put("contact_cert_mobile", "13500127654"); // 联系人手机号 - params.put("contact_job_type", 1); // 联系人工作类型,1:企业主 2:个体工商户 3:全职上班 4:兼职 5: 学生 6:退休 7:无固定职业 8:其他 -// params.put("contact_relation_ship", 1); // 联系人与本人关系,1:父母 2:配偶 3:子女 4:兄弟 5:姐妹 6:其他亲属 7:朋友 8:同事 - - Contact obj = Contact.create(params); - - assertEquals("user should be same as param", params.get("user"), obj.getUser()); - assertEquals("acc_no should be same as param", params.get("acc_no"), obj.getAccNo()); - } -} diff --git a/pingpp-sdk/src/test/java/com/pingplusplus/user/UserPicTest.java b/pingpp-sdk/src/test/java/com/pingplusplus/user/UserPicTest.java deleted file mode 100644 index 38ba083..0000000 --- a/pingpp-sdk/src/test/java/com/pingplusplus/user/UserPicTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package com.pingplusplus.user; - -import com.pingplusplus.PingppTestBase; -import com.pingplusplus.exception.PingppException; -import com.pingplusplus.model.UserPic; -import org.junit.Test; - -import java.util.HashMap; -import java.util.Map; - -import static org.junit.Assert.assertEquals; - -/* - * @author Afon, @date 19-07-12 - */ -public class UserPicTest extends PingppTestBase { - - /** - * 证件上传 - */ - @Test public void testUploadPic() throws PingppException { - Map params = new HashMap(); - params.put("user", "test_user_001"); // 用户 ID,首字母必须是英文数字或者 _-@, 必传 - params.put("type", "customer"); // 用户类型,customer: 对私,business: 对公 -// params.put("acc_no", "2019057929311601000631"); // 壹账通用户编号。覆盖的时候使用,新用户不需要该字段 - params.put("operate_type", "00"); // 操作类型,00: 新增,01: 修改,02: 增开户。不传默认为新增 - // 图片内容,base64 编码 - params.put("pic", "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"); - params.put("pic_fmt", "jpg"); // 图片格式。jpg, png - params.put("pic_type", "102"); // 图片类型,101: 个人身份证信息面,102: 个人身份证国徽面,201: 企业证件照片,202: 法人身份证信息面,203: 法人身份证国徽面 - - UserPic obj = UserPic.upload(params); - - assertEquals("user should be same as param", params.get("user"), obj.getUser()); - } -} diff --git a/pom.xml b/pom.xml index 71f3e19..8d6e957 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.pingxx pingpp-java-parent - 2.5.6 + 2.5.7 pom A Java SDK for Ping++ Payment API.