提交修改

This commit is contained in:
quyixiao 2025-11-06 09:00:14 +08:00
parent 0b68fe0c9e
commit 0a0859cc0e
10 changed files with 109 additions and 81 deletions

View File

@ -3,6 +3,7 @@ package com.heyu.api.jsapi;
// 引用微信支付工具库参考https://pay.weixin.qq.com/doc/v3/merchant/4014931831 // 引用微信支付工具库参考https://pay.weixin.qq.com/doc/v3/merchant/4014931831
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.heyu.api.jsapi.dto.*;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import okhttp3.*; import okhttp3.*;
@ -11,6 +12,7 @@ import java.io.UncheckedIOException;
import java.security.PrivateKey; import java.security.PrivateKey;
import java.security.PublicKey; import java.security.PublicKey;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
/** /**
@ -50,48 +52,60 @@ public class JsapiPrepay {
); );
DirectAPIv3JsapiPrepayRequest request = new DirectAPIv3JsapiPrepayRequest(); DirectAPIv3JsapiPrepayRequest request = new DirectAPIv3JsapiPrepayRequest();
request.setAppid("wx75fa59c097bd3dfd");
request.setMchid("1731491745");
request.setDescription("Image形象店-深圳腾大-QQ公仔");
request.setOutTradeNo("121775250");
request.setTimeExpire(WXPayUtility.generateExpireTime()); // 2025-11-05T21:02:16+08:00
request.setAttach("自定义数据说明");
request.setNotifyUrl("https://api.1024api.com/api-interface/app/weixin/payNotify");
request.setGoodsTag("WXG");
request.setSupportFapiao(false);
request.appid = "wx75fa59c097bd3dfd";
request.mchid = "1731491745";
request.description = "Image形象店-深圳腾大-QQ公仔";
request.outTradeNo = "121775250";
request.timeExpire = WXPayUtility.generateExpireTime(); // 2025-11-05T21:02:16+08:00 CommonAmountInfo commonAmountInfo = new CommonAmountInfo();
request.attach = "自定义数据说明"; commonAmountInfo.setTotal(5L);
request.notifyUrl = "https://api.1024api.com/api-interface/app/weixin/payNotify"; commonAmountInfo.setCurrency("CNY");
request.goodsTag = "WXG"; request.setAmount(commonAmountInfo);
request.supportFapiao = false;
request.amount = new CommonAmountInfo(); JsapiReqPayerInfo payer = new JsapiReqPayerInfo();
request.amount.total = 5L; payer.setOpenid("o6t1512tT-JuBeT6rIu6RhF Gf3BQ");
request.amount.currency = "CNY"; request.setPayer(payer);
request.payer = new JsapiReqPayerInfo();
CouponInfo couponInfo = new CouponInfo();
couponInfo.setCostPrice(608800L);
couponInfo.setInvoiceId("微信123");
request.setDetail(couponInfo);
List<GoodsDetail> 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);
request.payer.openid = "o6t1512tT-JuBeT6rIu6RhFGf3BQ";
request.detail = new CouponInfo();
request.detail.costPrice = 608800L;
request.detail.invoiceId = "微信123";
request.detail.goodsDetail = new ArrayList<>();
{
GoodsDetail goodsDetailItem = new GoodsDetail();
goodsDetailItem.merchantGoodsId = "1246464644";
goodsDetailItem.wechatpayGoodsId = "1001";
goodsDetailItem.goodsName = "iPhoneX 256G";
goodsDetailItem.quantity = 1L;
goodsDetailItem.unitPrice = 528800L;
request.detail.goodsDetail.add(goodsDetailItem);
}
;
request.sceneInfo = new CommonSceneInfo();
request.sceneInfo.payerClientIp = "14.23.150.211";
request.sceneInfo.deviceId = "013467007045764";
request.sceneInfo.storeInfo = new StoreInfo();
request.sceneInfo.storeInfo.id = "0001";
request.sceneInfo.storeInfo.name = "腾讯大厦分店";
request.sceneInfo.storeInfo.areaCode = "440305";
request.sceneInfo.storeInfo.address = "广东省深圳市南山区科技中一道10000号";
request.settleInfo = new SettleInfo();
request.settleInfo.profitSharing = false;
try { try {
DirectAPIv3JsapiPrepayResponse response = client.rePay(request); DirectAPIv3JsapiPrepayResponse response = client.rePay(request);
System.out.println(JSON.toJSONString(response)); System.out.println(JSON.toJSONString(response));
@ -103,6 +117,9 @@ public class JsapiPrepay {
} }
} }
public DirectAPIv3JsapiPrepayResponse rePay(DirectAPIv3JsapiPrepayRequest request) { public DirectAPIv3JsapiPrepayResponse rePay(DirectAPIv3JsapiPrepayRequest request) {
String uri = PATH; String uri = PATH;
String reqBody = WXPayUtility.toJson(request); String reqBody = WXPayUtility.toJson(request);

View File

@ -1,11 +1,14 @@
package com.heyu.api.jsapi; package com.heyu.api.jsapi.dto;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data;
@Data
public class CommonAmountInfo { public class CommonAmountInfo {
@SerializedName("total") @SerializedName("total")
public Long total; private Long total;
@SerializedName("currency") @SerializedName("currency")
public String currency; private String currency;
} }

View File

@ -1,4 +1,4 @@
package com.heyu.api.jsapi; package com.heyu.api.jsapi.dto;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data; import lombok.Data;
@ -6,11 +6,11 @@ import lombok.Data;
@Data @Data
public class CommonSceneInfo { public class CommonSceneInfo {
@SerializedName("payer_client_ip") @SerializedName("payer_client_ip")
public String payerClientIp; private String payerClientIp;
@SerializedName("device_id") @SerializedName("device_id")
public String deviceId; private String deviceId;
@SerializedName("store_info") @SerializedName("store_info")
public StoreInfo storeInfo; private StoreInfo storeInfo;
} }

View File

@ -1,4 +1,4 @@
package com.heyu.api.jsapi; package com.heyu.api.jsapi.dto;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data; import lombok.Data;
@ -8,12 +8,12 @@ import java.util.List;
@Data @Data
public class CouponInfo { public class CouponInfo {
@SerializedName("cost_price") @SerializedName("cost_price")
public Long costPrice; private Long costPrice;
@SerializedName("invoice_id") @SerializedName("invoice_id")
public String invoiceId; private String invoiceId;
@SerializedName("goods_detail") @SerializedName("goods_detail")
public List<GoodsDetail> goodsDetail; private List<GoodsDetail> goodsDetail;
} }

View File

@ -1,4 +1,4 @@
package com.heyu.api.jsapi; package com.heyu.api.jsapi.dto;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data; import lombok.Data;
@ -6,44 +6,45 @@ import lombok.Data;
@Data @Data
public class DirectAPIv3JsapiPrepayRequest { public class DirectAPIv3JsapiPrepayRequest {
@SerializedName("appid") @SerializedName("appid")
public String appid; private String appid;
@SerializedName("mchid") @SerializedName("mchid")
public String mchid; private String mchid;
@SerializedName("description") @SerializedName("description")
public String description; private String description;
@SerializedName("out_trade_no") @SerializedName("out_trade_no")
public String outTradeNo; private String outTradeNo;
@SerializedName("time_expire") @SerializedName("time_expire")
public String timeExpire; private String timeExpire;
@SerializedName("attach") @SerializedName("attach")
public String attach; private String attach;
@SerializedName("notify_url") @SerializedName("notify_url")
public String notifyUrl; private String notifyUrl;
@SerializedName("goods_tag") @SerializedName("goods_tag")
public String goodsTag; private String goodsTag;
@SerializedName("support_fapiao") @SerializedName("support_fapiao")
public Boolean supportFapiao; private Boolean supportFapiao;
@SerializedName("amount") @SerializedName("amount")
public CommonAmountInfo amount; private CommonAmountInfo amount;
@SerializedName("payer") @SerializedName("payer")
public JsapiReqPayerInfo payer; private JsapiReqPayerInfo payer;
@SerializedName("detail") @SerializedName("detail")
public CouponInfo detail; private CouponInfo detail;
@SerializedName("scene_info") @SerializedName("scene_info")
public CommonSceneInfo sceneInfo; private CommonSceneInfo sceneInfo;
@SerializedName("settle_info") @SerializedName("settle_info")
public SettleInfo settleInfo; private SettleInfo settleInfo;
} }

View File

@ -1,4 +1,4 @@
package com.heyu.api.jsapi; package com.heyu.api.jsapi.dto;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data; import lombok.Data;
@ -6,5 +6,5 @@ import lombok.Data;
@Data @Data
public class DirectAPIv3JsapiPrepayResponse { public class DirectAPIv3JsapiPrepayResponse {
@SerializedName("prepay_id") @SerializedName("prepay_id")
public String prepayId; private String prepayId;
} }

View File

@ -1,4 +1,4 @@
package com.heyu.api.jsapi; package com.heyu.api.jsapi.dto;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data; import lombok.Data;
@ -6,17 +6,17 @@ import lombok.Data;
@Data @Data
public class GoodsDetail { public class GoodsDetail {
@SerializedName("merchant_goods_id") @SerializedName("merchant_goods_id")
public String merchantGoodsId; private String merchantGoodsId;
@SerializedName("wechatpay_goods_id") @SerializedName("wechatpay_goods_id")
public String wechatpayGoodsId; private String wechatpayGoodsId;
@SerializedName("goods_name") @SerializedName("goods_name")
public String goodsName; private String goodsName;
@SerializedName("quantity") @SerializedName("quantity")
public Long quantity; private Long quantity;
@SerializedName("unit_price") @SerializedName("unit_price")
public Long unitPrice; private Long unitPrice;
} }

View File

@ -1,8 +1,10 @@
package com.heyu.api.jsapi; package com.heyu.api.jsapi.dto;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data;
@Data
public class JsapiReqPayerInfo { public class JsapiReqPayerInfo {
@SerializedName("openid") @SerializedName("openid")
public String openid; private String openid;
} }

View File

@ -1,8 +1,10 @@
package com.heyu.api.jsapi; package com.heyu.api.jsapi.dto;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data;
@Data
public class SettleInfo { public class SettleInfo {
@SerializedName("profit_sharing") @SerializedName("profit_sharing")
public Boolean profitSharing; private Boolean profitSharing;
} }

View File

@ -1,17 +1,20 @@
package com.heyu.api.jsapi; package com.heyu.api.jsapi.dto;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import lombok.Data;
@Data
public class StoreInfo { public class StoreInfo {
@SerializedName("id") @SerializedName("id")
public String id; private String id;
@SerializedName("name") @SerializedName("name")
public String name; private String name;
@SerializedName("area_code") @SerializedName("area_code")
public String areaCode; private String areaCode;
@SerializedName("address") @SerializedName("address")
public String address; private String address;
} }