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 */