From 9cc960158fc83811af5dc2e26587c0e305c4d6fc Mon Sep 17 00:00:00 2001 From: quyixiao <2621048238@qq.com> Date: Thu, 6 Nov 2025 17:49:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/heyu/api/jsapi/JsapiPrepay.java | 88 ++++++++++++++++- .../test/java/com/api/test/Test2JSAPI.java | 96 +++++++++++++++++++ .../src/test/java/com/api/test/TestJSAPI.java | 2 +- 3 files changed, 182 insertions(+), 4 deletions(-) create mode 100644 api-web/api-interface/src/test/java/com/api/test/Test2JSAPI.java diff --git a/api-third/src/main/java/com/heyu/api/jsapi/JsapiPrepay.java b/api-third/src/main/java/com/heyu/api/jsapi/JsapiPrepay.java index 2b63c20..a682006 100644 --- a/api-third/src/main/java/com/heyu/api/jsapi/JsapiPrepay.java +++ b/api-third/src/main/java/com/heyu/api/jsapi/JsapiPrepay.java @@ -2,8 +2,7 @@ package com.heyu.api.jsapi; // 引用微信支付工具库,参考:https://pay.weixin.qq.com/doc/v3/merchant/4014931831 -import com.heyu.api.jsapi.dto.DirectAPIv3JsapiPrepayRequest; -import com.heyu.api.jsapi.dto.DirectAPIv3JsapiPrepayResponse; +import com.heyu.api.jsapi.dto.*; import lombok.extern.slf4j.Slf4j; import okhttp3.*; import org.springframework.stereotype.Component; @@ -12,6 +11,8 @@ import java.io.IOException; import java.io.UncheckedIOException; import java.security.PrivateKey; import java.security.PublicKey; +import java.util.ArrayList; +import java.util.List; /** @@ -45,7 +46,88 @@ public class JsapiPrepay { } - public DirectAPIv3JsapiPrepayResponse rePay(DirectAPIv3JsapiPrepayRequest request) { + + + + public DirectAPIv3JsapiPrepayResponse prePay(){ + + + + + + + + DirectAPIv3JsapiPrepayRequest request = new DirectAPIv3JsapiPrepayRequest(); + request.setAppid("wx75fa59c097bd3dfd"); + request.setMchid("1731491745"); + request.setNotifyUrl("https://api.1024api.com/api-interface/app/weixin/payNotify"); + + + + request.setDescription("Image形象店-深圳腾大-QQ公仔"); + request.setOutTradeNo("121775250"); + request.setTimeExpire(WXPayUtility.generateExpireTime()); // 2025-11-05T21:02:16+08:00 + request.setAttach("自定义数据说明"); + + request.setGoodsTag("WXG"); + request.setSupportFapiao(false); + + + CommonAmountInfo commonAmountInfo = new CommonAmountInfo(); + commonAmountInfo.setTotal(5L); + commonAmountInfo.setCurrency("CNY"); + request.setAmount(commonAmountInfo); + + JsapiReqPayerInfo payer = new JsapiReqPayerInfo(); + payer.setOpenid("o6t1512tT-JuBeT6rIu6RhF Gf3BQ"); + request.setPayer(payer); + + CouponInfo couponInfo = new CouponInfo(); + + couponInfo.setCostPrice(0L); + couponInfo.setInvoiceId(""); + request.setDetail(couponInfo); + List goodsDetails = new ArrayList<>(); + + GoodsDetail goodsDetailItem = new GoodsDetail(); + goodsDetailItem.setMerchantGoodsId("1246464644"); + goodsDetailItem.setWechatpayGoodsId("1001"); + goodsDetailItem.setGoodsName("iPhoneX 256G"); + goodsDetailItem.setQuantity(1L); + goodsDetailItem.setUnitPrice(528800L); + goodsDetails.add(goodsDetailItem); + couponInfo.setGoodsDetail(goodsDetails); + + CommonSceneInfo sceneInfo = new CommonSceneInfo(); + sceneInfo.setPayerClientIp("14.23.150.211"); + sceneInfo.setDeviceId("013467007045764"); + + StoreInfo setstoreInfo = new StoreInfo(); + setstoreInfo.setId("0001"); + setstoreInfo.setName("腾讯大厦分店"); + setstoreInfo.setAreaCode("440305"); + setstoreInfo.setAddress("广东省深圳市南山区科技中一道10000号"); + + SettleInfo settleInfo = new SettleInfo(); + settleInfo.setProfitSharing(false); + + request.setSceneInfo(sceneInfo); + sceneInfo.setStoreInfo(setstoreInfo); + request.setSettleInfo(settleInfo); + + + + + return null; + + + + } + + + + + public DirectAPIv3JsapiPrepayResponse doPay(DirectAPIv3JsapiPrepayRequest request) { String uri = PATH; String reqBody = WXPayUtility.toJson(request); diff --git a/api-web/api-interface/src/test/java/com/api/test/Test2JSAPI.java b/api-web/api-interface/src/test/java/com/api/test/Test2JSAPI.java new file mode 100644 index 0000000..f1e2cea --- /dev/null +++ b/api-web/api-interface/src/test/java/com/api/test/Test2JSAPI.java @@ -0,0 +1,96 @@ +package com.api.test; + +import com.alibaba.fastjson.JSON; +import com.heyu.api.jsapi.JsapiPrepay; +import com.heyu.api.jsapi.WXPayUtility; +import com.heyu.api.jsapi.dto.*; + +import java.util.ArrayList; +import java.util.List; + +public class Test2JSAPI { + + + + public static void main(String[] args) { + // TODO: 请准备商户开发必要参数,参考:https://pay.weixin.qq.com/doc/v3/merchant/4013070756 + JsapiPrepay client = new JsapiPrepay( + "1731491745", // 商户号,是由微信支付系统生成并分配给每个商户的唯一标识符,商户号获取方式参考 https://pay.weixin.qq.com/doc/v3/merchant/4013070756 + "793D48CCEB62C6B227E0A4F46AD90279B149A7BE", // 商户API证书序列号,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013053053 + "/Users/quyixiao/Desktop/weixincert/apiclient_key.pem", // 商户API证书私钥文件路径,本地文件路径 + "PUB_KEY_ID_0117314917452025110400382304001401", // 微信支付公钥ID,如何获取请参考 https://pay.weixin.qq.com/doc/v3/merchant/4013038816 + "/Users/quyixiao/Desktop/weixincert/wxp_pub.pem" // 微信支付公钥文件路径,本地文件路径 + ); + + DirectAPIv3JsapiPrepayRequest request = new DirectAPIv3JsapiPrepayRequest(); + request.setAppid("wx75fa59c097bd3dfd"); + request.setMchid("1731491745"); + request.setNotifyUrl("https://api.1024api.com/api-interface/app/weixin/payNotify"); + + + + request.setDescription("Image形象店-深圳腾大-QQ公仔"); + request.setOutTradeNo("121775250"); + request.setTimeExpire(WXPayUtility.generateExpireTime()); // 2025-11-05T21:02:16+08:00 + request.setAttach("自定义数据说明"); + + request.setGoodsTag("WXG"); + request.setSupportFapiao(false); + + + CommonAmountInfo commonAmountInfo = new CommonAmountInfo(); + commonAmountInfo.setTotal(5L); + commonAmountInfo.setCurrency("CNY"); + request.setAmount(commonAmountInfo); + + JsapiReqPayerInfo payer = new JsapiReqPayerInfo(); + payer.setOpenid("o6t1512tT-JuBeT6rIu6RhF Gf3BQ"); + request.setPayer(payer); + + CouponInfo couponInfo = new CouponInfo(); + + couponInfo.setCostPrice(608800L); + couponInfo.setInvoiceId("微信123"); + request.setDetail(couponInfo); + List goodsDetails = new ArrayList<>(); + + GoodsDetail goodsDetailItem = new GoodsDetail(); + goodsDetailItem.setMerchantGoodsId("1246464644"); + goodsDetailItem.setWechatpayGoodsId("1001"); + goodsDetailItem.setGoodsName("iPhoneX 256G"); + goodsDetailItem.setQuantity(1L); + goodsDetailItem.setUnitPrice(528800L); + goodsDetails.add(goodsDetailItem); + couponInfo.setGoodsDetail(goodsDetails); + + CommonSceneInfo sceneInfo = new CommonSceneInfo(); + sceneInfo.setPayerClientIp("14.23.150.211"); + sceneInfo.setDeviceId("013467007045764"); + + StoreInfo setstoreInfo = new StoreInfo(); + setstoreInfo.setId("0001"); + setstoreInfo.setName("腾讯大厦分店"); + setstoreInfo.setAreaCode("440305"); + setstoreInfo.setAddress("广东省深圳市南山区科技中一道10000号"); + + SettleInfo settleInfo = new SettleInfo(); + settleInfo.setProfitSharing(false); + + request.setSceneInfo(sceneInfo); + sceneInfo.setStoreInfo(setstoreInfo); + request.setSettleInfo(settleInfo); + + + try { + DirectAPIv3JsapiPrepayResponse response = client.doPay(request); + System.out.println(JSON.toJSONString(response)); + // TODO: 请求成功,继续业务逻辑 + System.out.println(response); + } catch (Exception e) { + // TODO: 请求失败,根据状态码执行不同的逻辑 + e.printStackTrace(); + } + } + + +} diff --git a/api-web/api-interface/src/test/java/com/api/test/TestJSAPI.java b/api-web/api-interface/src/test/java/com/api/test/TestJSAPI.java index beda110..c9b7e49 100644 --- a/api-web/api-interface/src/test/java/com/api/test/TestJSAPI.java +++ b/api-web/api-interface/src/test/java/com/api/test/TestJSAPI.java @@ -82,7 +82,7 @@ public class TestJSAPI { try { - DirectAPIv3JsapiPrepayResponse response = client.rePay(request); + DirectAPIv3JsapiPrepayResponse response = client.doPay(request); System.out.println(JSON.toJSONString(response)); // TODO: 请求成功,继续业务逻辑 System.out.println(response);