From ca451216d24433fb069eae3f6e748b2d80228b31 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 19 Dec 2025 17:17:05 +0000
Subject: [PATCH 1/3] Initial plan
From b5b2151515e8723753b1f2edd72880835c835f0f Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 19 Dec 2025 17:24:52 +0000
Subject: [PATCH 2/3] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B0=8F=E6=B8=B8?=
=?UTF-8?q?=E6=88=8F=E9=81=93=E5=85=B7=E7=9B=B4=E8=B4=AD=EF=BC=88present?=
=?UTF-8?q?=5Fgoods=EF=BC=89API=E6=94=AF=E6=8C=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com>
---
.../wx/miniapp/api/WxMaXPayService.java | 10 +++
.../miniapp/api/impl/WxMaXPayServiceImpl.java | 16 +++++
.../xpay/WxMaXPayPresentGoodsRequest.java | 63 +++++++++++++++++++
.../xpay/WxMaXPayPresentGoodsResponse.java | 34 ++++++++++
.../miniapp/constant/WxMaApiUrlConstants.java | 1 +
5 files changed, 124 insertions(+)
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsRequest.java
create mode 100644 weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsResponse.java
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaXPayService.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaXPayService.java
index a633c93de..68d4dc0c9 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaXPayService.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/WxMaXPayService.java
@@ -71,6 +71,16 @@ public interface WxMaXPayService {
*/
WxMaXPayPresentCurrencyResponse presentCurrency(WxMaXPayPresentCurrencyRequest request, WxMaXPaySigParams sigParams) throws WxErrorException;
+ /**
+ * 道具直购。
+ *
+ * @param request 道具直购请求对象
+ * @param sigParams 签名参数对象
+ * @return 道具直购结果
+ * @throws WxErrorException 直购失败时抛出
+ */
+ WxMaXPayPresentGoodsResponse presentGoods(WxMaXPayPresentGoodsRequest request, WxMaXPaySigParams sigParams) throws WxErrorException;
+
/**
* 下载对账单。
*
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaXPayServiceImpl.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaXPayServiceImpl.java
index 29a7c51a2..37cf5e0d4 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaXPayServiceImpl.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/api/impl/WxMaXPayServiceImpl.java
@@ -108,6 +108,22 @@ public WxMaXPayPresentCurrencyResponse presentCurrency(WxMaXPayPresentCurrencyRe
return getDetailResponse;
}
+ @Override
+ public WxMaXPayPresentGoodsResponse presentGoods(WxMaXPayPresentGoodsRequest request, WxMaXPaySigParams sigParams) throws WxErrorException {
+ final String postBody = request.toJson();
+ final String uri = sigParams.signUriWithPay(PRESENT_GOODS_URL, postBody);
+ String responseContent = this.service.post(uri, postBody);
+ WxMaXPayPresentGoodsResponse getDetailResponse = WxMaGsonBuilder.create()
+ .fromJson(responseContent, WxMaXPayPresentGoodsResponse.class);
+
+ if (getDetailResponse.getErrcode() != 0) {
+ throw new WxErrorException(
+ new WxError(getDetailResponse.getErrcode(), getDetailResponse.getErrmsg()));
+ }
+
+ return getDetailResponse;
+ }
+
@Override
public WxMaXPayDownloadBillResponse downloadBill(WxMaXPayDownloadBillRequest request, WxMaXPaySigParams sigParams) throws WxErrorException {
final String postBody = request.toJson();
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsRequest.java
new file mode 100644
index 000000000..deb328c29
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsRequest.java
@@ -0,0 +1,63 @@
+package cn.binarywang.wx.miniapp.bean.xpay;
+
+import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 小游戏道具直购请求.
+ *
+ * @author Binary Wang
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class WxMaXPayPresentGoodsRequest implements Serializable {
+ private static final long serialVersionUID = 7495157056049312109L;
+
+ /**
+ * 用户的openid.
+ */
+ @SerializedName("openid")
+ private String openid;
+
+ /**
+ * 环境。0-正式环境;1-沙箱环境.
+ */
+ @SerializedName("env")
+ private Integer env;
+
+ /**
+ * 商户订单号.
+ */
+ @SerializedName("order_id")
+ private String orderId;
+
+ /**
+ * 设备类型。0-安卓;1-iOS.
+ */
+ @SerializedName("device_type")
+ private Integer deviceType;
+
+ /**
+ * 道具id.
+ */
+ @SerializedName("goods_id")
+ private String goodsId;
+
+ /**
+ * 道具数量.
+ */
+ @SerializedName("goods_number")
+ private Integer goodsNumber;
+
+ public String toJson() {
+ return WxMaGsonBuilder.create().toJson(this);
+ }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsResponse.java
new file mode 100644
index 000000000..ae23e5ebf
--- /dev/null
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsResponse.java
@@ -0,0 +1,34 @@
+package cn.binarywang.wx.miniapp.bean.xpay;
+
+import cn.binarywang.wx.miniapp.bean.WxMaBaseResponse;
+import cn.binarywang.wx.miniapp.json.WxMaGsonBuilder;
+import com.google.gson.annotations.SerializedName;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * 小游戏道具直购响应.
+ *
+ * @author Binary Wang
+ */
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class WxMaXPayPresentGoodsResponse extends WxMaBaseResponse implements Serializable {
+ private static final long serialVersionUID = 7495157056049312110L;
+
+ /**
+ * 商户订单号.
+ */
+ @SerializedName("order_id")
+ private String orderId;
+
+ public String toJson() {
+ return WxMaGsonBuilder.create().toJson(this);
+ }
+}
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java
index 45e121965..396328639 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/constant/WxMaApiUrlConstants.java
@@ -875,6 +875,7 @@ public interface XPay {
String NOTIFY_PROVIDE_GOODS_URL =
"https://api.weixin.qq.com/xpay/notify_provide_goods?pay_sig=%s";
String PRESENT_CURRENCY_URL = "https://api.weixin.qq.com/xpay/present_currency?pay_sig=%s";
+ String PRESENT_GOODS_URL = "https://api.weixin.qq.com/xpay/present_goods?pay_sig=%s";
String DOWNLOAD_BILL_URL = "https://api.weixin.qq.com/xpay/download_bill?pay_sig=%s";
String REFUND_ORDER_URL = "https://api.weixin.qq.com/xpay/refund_order?pay_sig=%s";
String CREATE_WITHDRAW_ORDER_URL =
From 61df058fe64dfb857e3eb9e01b36a1e0fdc80755 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Fri, 19 Dec 2025 17:27:11 +0000
Subject: [PATCH 3/3] =?UTF-8?q?=E6=94=B9=E8=BF=9B=E9=81=93=E5=85=B7?=
=?UTF-8?q?=E7=9B=B4=E8=B4=ADAPI=E7=9A=84javadoc=E6=B3=A8=E9=87=8A?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: binarywang <1343140+binarywang@users.noreply.github.com>
---
.../wx/miniapp/bean/xpay/WxMaXPayPresentGoodsRequest.java | 2 +-
.../wx/miniapp/bean/xpay/WxMaXPayPresentGoodsResponse.java | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsRequest.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsRequest.java
index deb328c29..ba9d7100d 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsRequest.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsRequest.java
@@ -10,7 +10,7 @@
import java.io.Serializable;
/**
- * 小游戏道具直购请求.
+ * 小游戏道具直购API请求.
*
* @author Binary Wang
*/
diff --git a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsResponse.java b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsResponse.java
index ae23e5ebf..ed3ea8d7f 100644
--- a/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsResponse.java
+++ b/weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/bean/xpay/WxMaXPayPresentGoodsResponse.java
@@ -11,7 +11,7 @@
import java.io.Serializable;
/**
- * 小游戏道具直购响应.
+ * 小游戏道具直购API响应.
*
* @author Binary Wang
*/