...
 
Commits (19)
    https://gitcode.net/int/IJPay/-/commit/db5cf25c9f67a5abcee714c28e06d8ed98b2f544 同步 IJPay-Demo-Springboot 的优化示例 2023-02-01T12:32:59+08:00 noear noear@live.cn https://gitcode.net/int/IJPay/-/commit/2e755b58279b9af99f823794913a5b74f6540030 IJPay-Demo-Solon: 升级 Solon 为:2.0.0 2023-02-01T12:34:41+08:00 noear noear@live.cn https://gitcode.net/int/IJPay/-/commit/de9555be36216a11f392c3bd5e60a7feed8463f0 :bookmark: release 2.9.6 :) 2023-02-01T12:35:24+08:00 noear noear@live.cn https://gitcode.net/int/IJPay/-/commit/a458e3a98a4dacb01955cdf70c00007f49887544 :bookmark: release 2.9.6 :) 2023-02-01T14:54:28+00:00 Javen javendev@126.com <gl-emoji title="bookmark" data-name="bookmark" data-unicode-version="6.0">🔖</gl-emoji> release 2.9.6 :) https://gitcode.net/int/IJPay/-/commit/9397a54e43e8b319b5b354993643e7e5267c562c :zap: README 添加 for solon demo 地址 2023-02-03T07:59:53+08:00 noear noear@live.cn https://gitcode.net/int/IJPay/-/commit/ef87f50c58cd82e735a5fb3222f1c1edce3d2090 :sparkles: 添加 for solon demo 地址 2023-02-05T07:59:18+00:00 Javen javendev@126.com <gl-emoji title="sparkles" data-name="sparkles" data-unicode-version="6.0">✨</gl-emoji> 添加 for solon demo 地址 https://gitcode.net/int/IJPay/-/commit/328711d61ddbee3c1d592403e27280d65e199461 升级fastjson版本到1.2.83,1.2.83版本之前存在代码执行漏洞风险,CVE-2022-25845 2023-02-28T03:36:38+00:00 lingkkkk 12523864+lingkkkk@user.noreply.gitee.com 升级fastjson版本到1.2.83,1.2.83版本之前存在代码执行漏洞风险,CVE-2022-25845 Signed-off-by: <span data-trailer="Signed-off-by:"><a href="mailto:12523864+lingkkkk@user.noreply.gitee.com" title="12523864+lingkkkk@user.noreply.gitee.com"></a><a href="javascript:void(0)" class="avatar s16 avatar-inline identicon bg6" style="text-decoration: none">N</a><a href="mailto:12523864+lingkkkk@user.noreply.gitee.com" title="12523864+lingkkkk@user.noreply.gitee.com">lingkkkk</a> &lt;<a href="mailto:12523864+lingkkkk@user.noreply.gitee.com" title="12523864+lingkkkk@user.noreply.gitee.com">12523864+lingkkkk@user.noreply.gitee.com</a>&gt;</span> https://gitcode.net/int/IJPay/-/commit/7e99a13b972e7f2b9abd85215d5e7a6d7ba9227d :arrow_up: 依赖升级 2023-03-08T12:55:37+00:00 Javen javendev@126.com <gl-emoji title="upwards black arrow" data-name="arrow_up" data-unicode-version="4.0">⬆</gl-emoji> 依赖升级 https://gitcode.net/int/IJPay/-/commit/396da1bf84241414eb27498a424f35d0fbd7ddc4 :sparkles: 微信支付支持教培续费通 2023-03-12T15:37:31+08:00 Javen205 javendev@126.com https://gitcode.net/int/IJPay/-/commit/ed40ef498235aa1eb80d9a0e33feba8b567f2419 :sparkles: 新增微信支付商家转账到零钱示例 2023-03-12T15:38:24+08:00 Javen205 javendev@126.com https://gitcode.net/int/IJPay/-/commit/2e4ac763146c4bb66e4a686f618c478330a6e8cb :sparkles: 新增获取文件真实路径静态方法 2023-03-27T20:51:24+08:00 Javen205 javendev@126.com https://gitcode.net/int/IJPay/-/commit/981b05d95e1f8dad6477de204e9edbb78617aaa8 :arrow_up: 依赖升级 2023-03-27T21:01:01+08:00 Javen205 javendev@126.com https://gitcode.net/int/IJPay/-/commit/3ca7b5bf8997a84d8c231cfd290f05954509a3d0 :bookmark: release 2.9.7 :) 2023-03-27T21:26:14+08:00 Javen205 javendev@126.com https://gitcode.net/int/IJPay/-/commit/140f4a2a2059f01fe0bd9cadcc0a76f071897cef :bug: 修复 github 反馈的bug #63 2023-04-01T17:49:14+08:00 Javen205 javendev@126.com https://gitcode.net/int/IJPay/-/commit/9d6a3ca75c5a93291f216223aa3ddaaddf9eb391 :bug: 修复 github 反馈的bug #65 2023-04-01T17:49:48+08:00 Javen205 javendev@126.com https://gitcode.net/int/IJPay/-/commit/72d20a90bacf38f7153ee44d218698f6bc04f432 :bug: 修复 github 反馈的bug #64 2023-04-01T17:51:57+08:00 Javen205 javendev@126.com https://gitcode.net/int/IJPay/-/commit/e0c396bd81ed405a4e3aa9e3868f5bedee6cb393 :building_construction: 调整微信支付 v3 接口授权认证类型为枚举 2023-04-01T17:59:15+08:00 Javen205 javendev@126.com https://gitcode.net/int/IJPay/-/commit/4475ccd8ffb6617191b9aa4354c78e2161a09654 :sparkles: 微信支付新增示例 2023-04-02T09:33:50+08:00 Javen205 javendev@126.com https://gitcode.net/int/IJPay/-/commit/7788c868ab79418aef1cca075855e5ab7f64929d :sparkles: 调整开源协议 2023-04-05T14:31:33+08:00 Javen205 javendev@126.com
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>IJPay</artifactId> <artifactId>IJPay</artifactId>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<version>2.9.6</version> <version>2.9.7</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>
......
...@@ -451,8 +451,8 @@ public class AliPayApi { ...@@ -451,8 +451,8 @@ public class AliPayApi {
* *
* @param response {@link HttpServletResponse} * @param response {@link HttpServletResponse}
* @param model {@link AlipayTradeWapPayModel} * @param model {@link AlipayTradeWapPayModel}
* @param returnUrl 步通知URL * @param returnUrl 步通知URL
* @param notifyUrl 步通知URL * @param notifyUrl 步通知URL
* @throws AlipayApiException 支付宝 Api 异常 * @throws AlipayApiException 支付宝 Api 异常
* @throws IOException IO 异常 * @throws IOException IO 异常
*/ */
......
...@@ -33,7 +33,8 @@ public class AliPayApiConfigKit { ...@@ -33,7 +33,8 @@ public class AliPayApiConfigKit {
if (CFG_MAP.size() == 0) { if (CFG_MAP.size() == 0) {
CFG_MAP.put(DEFAULT_CFG_KEY, aliPayApiConfig); CFG_MAP.put(DEFAULT_CFG_KEY, aliPayApiConfig);
} }
return CFG_MAP.put(aliPayApiConfig.getAppId(), aliPayApiConfig); CFG_MAP.put(aliPayApiConfig.getAppId(), aliPayApiConfig);
return aliPayApiConfig;
} }
/** /**
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>IJPay</artifactId> <artifactId>IJPay</artifactId>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<version>2.9.6</version> <version>2.9.7</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>IJPay</artifactId> <artifactId>IJPay</artifactId>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<version>2.9.6</version> <version>2.9.7</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>
......
package com.ijpay.core.enums;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付等常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* <p>微信支付 v3 接口授权认证类型枚举</p>
*
* @author Javen
*/
public enum AuthTypeEnum {
/**
* 国密
*/
SM("WECHATPAY2-SM2-WITH-SM3", "国密算法"),
/**
* RSA
*/
RSA("WECHATPAY2-SHA256-RSA2048", "RSA算法"),
;
private final String url;
private final String desc;
AuthTypeEnum(String url, String desc) {
this.url = url;
this.desc = desc;
}
/**
* 获取枚举URL
*
* @return 枚举编码
*/
public String getUrl() {
return url;
}
/**
* 获取详细的描述信息
*
* @return 描述信息
*/
public String getDesc() {
return desc;
}
}
...@@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil; ...@@ -4,6 +4,7 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.ijpay.core.IJPayHttpResponse; import com.ijpay.core.IJPayHttpResponse;
import com.ijpay.core.enums.AuthTypeEnum;
import com.ijpay.core.enums.RequestMethodEnum; import com.ijpay.core.enums.RequestMethodEnum;
import com.ijpay.core.enums.SignType; import com.ijpay.core.enums.SignType;
...@@ -578,7 +579,7 @@ public class WxPayKit { ...@@ -578,7 +579,7 @@ public class WxPayKit {
String serialNo, String keyPath, String body) throws Exception { String serialNo, String keyPath, String body) throws Exception {
long timestamp = System.currentTimeMillis() / 1000; long timestamp = System.currentTimeMillis() / 1000;
String authType = "WECHATPAY2-SHA256-RSA2048"; String authType = AuthTypeEnum.RSA.getUrl();
String nonceStr = PayKit.generateStr(); String nonceStr = PayKit.generateStr();
return buildAuthorization(method, urlSuffix, mchId, serialNo, keyPath, body, nonceStr, timestamp, authType); return buildAuthorization(method, urlSuffix, mchId, serialNo, keyPath, body, nonceStr, timestamp, authType);
...@@ -600,7 +601,7 @@ public class WxPayKit { ...@@ -600,7 +601,7 @@ public class WxPayKit {
String serialNo, PrivateKey privateKey, String body) throws Exception { String serialNo, PrivateKey privateKey, String body) throws Exception {
long timestamp = System.currentTimeMillis() / 1000; long timestamp = System.currentTimeMillis() / 1000;
String authType = "WECHATPAY2-SHA256-RSA2048"; String authType = AuthTypeEnum.RSA.getUrl();
String nonceStr = PayKit.generateStr(); String nonceStr = PayKit.generateStr();
return buildAuthorization(method, urlSuffix, mchId, serialNo, privateKey, body, nonceStr, timestamp, authType); return buildAuthorization(method, urlSuffix, mchId, serialNo, privateKey, body, nonceStr, timestamp, authType);
...@@ -741,7 +742,6 @@ public class WxPayKit { ...@@ -741,7 +742,6 @@ public class WxPayKit {
// 获取平台证书序列号 // 获取平台证书序列号
X509Certificate certificate = PayKit.getCertificate(certInputStream); X509Certificate certificate = PayKit.getCertificate(certInputStream);
String serialNumber = certificate.getSerialNumber().toString(16).toUpperCase(); String serialNumber = certificate.getSerialNumber().toString(16).toUpperCase();
System.out.println(serialNumber);
// 验证证书序列号 // 验证证书序列号
if (serialNumber.equals(serialNo)) { if (serialNumber.equals(serialNo)) {
boolean verifySignature = WxPayKit.verifySignature(signature, body, nonce, timestamp, boolean verifySignature = WxPayKit.verifySignature(signature, body, nonce, timestamp,
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<groupId>org.noear</groupId> <groupId>org.noear</groupId>
<artifactId>solon-parent</artifactId> <artifactId>solon-parent</artifactId>
<version>1.12.2</version> <version>2.0.0</version>
<relativePath/> <!-- lookup parent from repository --> <relativePath/> <!-- lookup parent from repository -->
</parent> </parent>
<groupId>com.ijpay.demo</groupId> <groupId>com.ijpay.demo</groupId>
...@@ -19,9 +19,7 @@ ...@@ -19,9 +19,7 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version> <java.version>1.8</java.version>
<ijapy.version>2.9.3</ijapy.version> <ijapy.version>2.9.6</ijapy.version>
<enjoy.version>4.3</enjoy.version>
<fastjson.version>1.2.75</fastjson.version>
</properties> </properties>
<dependencies> <dependencies>
......
...@@ -82,10 +82,12 @@ public class WxPayV3Controller { ...@@ -82,10 +82,12 @@ public class WxPayV3Controller {
public String index() { public String index() {
log.info(wxPayV3Bean.toString()); log.info(wxPayV3Bean.toString());
try { try {
String classPath = "classpath:/dev/apiclient_cert.p12"; String classPath = "classpath:/dev/apiclient_key.pem";
String v3 = "classpath:/dev/wxpay_v3.properties"; String v3 = "classpath:/dev/wxpay_v3.properties";
String absolutePath = PayKit.getAbsolutePath(classPath); String absolutePath = PayKit.getAbsolutePath(classPath);
log.info("absolutePath:{}", absolutePath); log.info("absolutePath:{}", absolutePath);
String certFileContent = PayKit.getCertFileContent(classPath);
log.info("classPath content:{}", certFileContent);
InputStream inputStream = PayKit.getCertFileInputStream(v3); InputStream inputStream = PayKit.getCertFileInputStream(v3);
if (null != inputStream) { if (null != inputStream) {
ByteArrayOutputStream result = new ByteArrayOutputStream(); ByteArrayOutputStream result = new ByteArrayOutputStream();
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
<ijapy.version>2.9.6</ijapy.version> <ijapy.version>2.9.6</ijapy.version>
<enjoy.version>4.3</enjoy.version> <enjoy.version>4.3</enjoy.version>
<fastjson.version>1.2.75</fastjson.version> <fastjson.version>1.2.83</fastjson.version>
</properties> </properties>
<dependencies> <dependencies>
......
...@@ -26,11 +26,14 @@ import com.ijpay.wxpay.enums.v3.ComplaintsApiEnum; ...@@ -26,11 +26,14 @@ import com.ijpay.wxpay.enums.v3.ComplaintsApiEnum;
import com.ijpay.wxpay.enums.v3.OtherApiEnum; import com.ijpay.wxpay.enums.v3.OtherApiEnum;
import com.ijpay.wxpay.enums.v3.PayGiftActivityApiEnum; import com.ijpay.wxpay.enums.v3.PayGiftActivityApiEnum;
import com.ijpay.wxpay.enums.v3.PayScoreApiEnum; import com.ijpay.wxpay.enums.v3.PayScoreApiEnum;
import com.ijpay.wxpay.enums.v3.TransferApiEnum;
import com.ijpay.wxpay.model.v3.Amount; import com.ijpay.wxpay.model.v3.Amount;
import com.ijpay.wxpay.model.v3.BatchTransferModel;
import com.ijpay.wxpay.model.v3.Payer; import com.ijpay.wxpay.model.v3.Payer;
import com.ijpay.wxpay.model.v3.RefundAmount; import com.ijpay.wxpay.model.v3.RefundAmount;
import com.ijpay.wxpay.model.v3.RefundGoodsDetail; import com.ijpay.wxpay.model.v3.RefundGoodsDetail;
import com.ijpay.wxpay.model.v3.RefundModel; import com.ijpay.wxpay.model.v3.RefundModel;
import com.ijpay.wxpay.model.v3.TransferDetailInput;
import com.ijpay.wxpay.model.v3.UnifiedOrderModel; import com.ijpay.wxpay.model.v3.UnifiedOrderModel;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -51,6 +54,7 @@ import java.security.PrivateKey; ...@@ -51,6 +54,7 @@ import java.security.PrivateKey;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar; import java.util.Calendar;
import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -282,6 +286,85 @@ public class WxPayV3Controller { ...@@ -282,6 +286,85 @@ public class WxPayV3Controller {
} }
} }
@RequestMapping("/appPay")
@ResponseBody
public String appPay() {
try {
String timeExpire = DateTimeZoneUtil.dateToTimeZone(System.currentTimeMillis() + 1000 * 60 * 3);
UnifiedOrderModel unifiedOrderModel = new UnifiedOrderModel()
.setAppid(wxPayV3Bean.getAppId())
.setMchid(wxPayV3Bean.getMchId())
.setDescription("IJPay 让支付触手可及")
.setOut_trade_no(PayKit.generateStr())
.setTime_expire(timeExpire)
.setAttach("微信系开发脚手架 https://gitee.com/javen205/TNWX")
.setNotify_url(wxPayV3Bean.getDomain().concat("/v3/payNotify"))
.setAmount(new Amount().setTotal(1));
log.info("统一下单参数 {}", JSONUtil.toJsonStr(unifiedOrderModel));
IJPayHttpResponse response = WxPayApi.v3(
RequestMethodEnum.POST,
WxDomainEnum.CHINA.toString(),
BasePayApiEnum.APP_PAY.toString(),
wxPayV3Bean.getMchId(),
getSerialNumber(),
null,
wxPayV3Bean.getKeyPath(),
JSONUtil.toJsonStr(unifiedOrderModel)
);
log.info("统一下单响应 {}", response);
// 根据证书序列号查询对应的证书来验证签名结果
boolean verifySignature = WxPayKit.verifySignature(response, wxPayV3Bean.getPlatformCertPath());
log.info("verifySignature: {}", verifySignature);
if (response.getStatus() == OK && verifySignature) {
String body = response.getBody();
JSONObject jsonObject = JSONUtil.parseObj(body);
String prepayId = jsonObject.getStr("prepay_id");
Map<String, String> map = WxPayKit.appCreateSign(wxPayV3Bean.getAppId(), wxPayV3Bean.getMchId(), prepayId, wxPayV3Bean.getKeyPath());
log.info("唤起支付参数:{}", map);
return JSONUtil.toJsonStr(map);
}
return JSONUtil.toJsonStr(response);
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}
@RequestMapping("/query")
@ResponseBody
public String query(@RequestParam String outTradeNo) {
try {
Map<String, String> params = new HashMap<>(16);
params.put("mchid", wxPayV3Bean.getMchId());
log.info("统一下单参数 {}", JSONUtil.toJsonStr(params));
IJPayHttpResponse response = WxPayApi.v3(
RequestMethodEnum.GET,
WxDomainEnum.CHINA.toString(),
String.format(BasePayApiEnum.ORDER_QUERY_BY_OUT_TRADE_NO.toString(), outTradeNo),
wxPayV3Bean.getMchId(),
getSerialNumber(),
null,
wxPayV3Bean.getKeyPath(),
params
);
log.info("查询响应 {}", response);
if (response.getStatus() == OK) {
// 根据证书序列号查询对应的证书来验证签名结果
boolean verifySignature = WxPayKit.verifySignature(response, wxPayV3Bean.getPlatformCertPath());
log.info("verifySignature: {}", verifySignature);
return response.getBody();
}
return JSONUtil.toJsonStr(response);
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}
@RequestMapping("/jsApiPay") @RequestMapping("/jsApiPay")
@ResponseBody @ResponseBody
public String jsApiPay(@RequestParam(value = "openId", required = false, defaultValue = "o-_-itxuXeGW3O1cxJ7FXNmq8Wf8") String openId) { public String jsApiPay(@RequestParam(value = "openId", required = false, defaultValue = "o-_-itxuXeGW3O1cxJ7FXNmq8Wf8") String openId) {
...@@ -328,6 +411,49 @@ public class WxPayV3Controller { ...@@ -328,6 +411,49 @@ public class WxPayV3Controller {
} }
} }
@RequestMapping("/batchTransfer")
@ResponseBody
public String batchTransfer(@RequestParam(value = "openId", required = false, defaultValue = "o-_-itxuXeGW3O1cxJ7FXNmq8Wf8") String openId) {
try {
BatchTransferModel batchTransferModel = new BatchTransferModel()
.setAppid(wxPayV3Bean.getAppId())
.setOut_batch_no(PayKit.generateStr())
.setBatch_name("IJPay 测试微信转账到零钱")
.setBatch_remark("IJPay 测试微信转账到零钱")
.setTotal_amount(1)
.setTotal_num(1)
.setTransfer_detail_list(Collections.singletonList(
new TransferDetailInput()
.setOut_detail_no(PayKit.generateStr())
.setTransfer_amount(1)
.setTransfer_remark("IJPay 测试微信转账到零钱")
.setOpenid(openId)));
log.info("发起商家转账请求参数 {}", JSONUtil.toJsonStr(batchTransferModel));
IJPayHttpResponse response = WxPayApi.v3(
RequestMethodEnum.POST,
WxDomainEnum.CHINA.toString(),
TransferApiEnum.TRANSFER_BATCHES.toString(),
wxPayV3Bean.getMchId(),
getSerialNumber(),
null,
wxPayV3Bean.getKeyPath(),
JSONUtil.toJsonStr(batchTransferModel)
);
log.info("发起商家转账响应 {}", response);
// 根据证书序列号查询对应的证书来验证签名结果
boolean verifySignature = WxPayKit.verifySignature(response, wxPayV3Bean.getPlatformCertPath());
log.info("verifySignature: {}", verifySignature);
if (response.getStatus() == OK && verifySignature) {
return response.getBody();
}
return JSONUtil.toJsonStr(response);
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}
@RequestMapping("/put") @RequestMapping("/put")
@ResponseBody @ResponseBody
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>IJPay</artifactId> <artifactId>IJPay</artifactId>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<version>2.9.6</version> <version>2.9.7</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.24</version> <version>1.18.26</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>IJPay</artifactId> <artifactId>IJPay</artifactId>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<version>2.9.6</version> <version>2.9.7</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.24</version> <version>1.18.26</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>IJPay-Plugin</artifactId> <artifactId>IJPay-Plugin</artifactId>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<version>2.9.6</version> <version>2.9.7</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>IJPay-Plugin</artifactId> <artifactId>IJPay-Plugin</artifactId>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<version>2.9.6</version> <version>2.9.7</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
<parent> <parent>
<artifactId>IJPay</artifactId> <artifactId>IJPay</artifactId>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<version>2.9.6</version> <version>2.9.7</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<properties> <properties>
<spring.boot.version>2.7.5</spring.boot.version> <spring.boot.version>2.7.5</spring.boot.version>
<lombok.version>1.18.24</lombok.version> <lombok.version>1.18.26</lombok.version>
<slf4j.api.version>2.0.6</slf4j.api.version> <slf4j.api.version>2.0.6</slf4j.api.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>IJPay</artifactId> <artifactId>IJPay</artifactId>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<version>2.9.6</version> <version>2.9.7</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.24</version> <version>1.18.26</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>IJPay</artifactId> <artifactId>IJPay</artifactId>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<version>2.9.6</version> <version>2.9.7</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.24</version> <version>1.18.26</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
......
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>IJPay</artifactId> <artifactId>IJPay</artifactId>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<version>2.9.6</version> <version>2.9.7</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging> <packaging>jar</packaging>
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.24</version> <version>1.18.26</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
......
...@@ -20,6 +20,7 @@ import com.ijpay.wxpay.enums.v2.PayApiEnum; ...@@ -20,6 +20,7 @@ import com.ijpay.wxpay.enums.v2.PayApiEnum;
import com.ijpay.wxpay.enums.v2.ProfitSharingApiEnum; import com.ijpay.wxpay.enums.v2.ProfitSharingApiEnum;
import com.ijpay.wxpay.enums.v2.RedPackApiEnum; import com.ijpay.wxpay.enums.v2.RedPackApiEnum;
import com.ijpay.wxpay.enums.v2.TransferApiEnum; import com.ijpay.wxpay.enums.v2.TransferApiEnum;
import com.ijpay.core.enums.AuthTypeEnum;
import java.io.File; import java.io.File;
import java.io.InputStream; import java.io.InputStream;
...@@ -255,9 +256,9 @@ public class WxPayApi { ...@@ -255,9 +256,9 @@ public class WxPayApi {
* @throws Exception 接口执行异常 * @throws Exception 接口执行异常
*/ */
public static IJPayHttpResponse v3(RequestMethodEnum method, String urlPrefix, String urlSuffix, public static IJPayHttpResponse v3(RequestMethodEnum method, String urlPrefix, String urlSuffix,
String mchId, String serialNo, String platSerialNo, String keyPath, String mchId, String serialNo, String platSerialNo, String keyPath,
String body, String nonceStr, long timestamp, String authType, String body, String nonceStr, long timestamp, String authType,
File file) throws Exception { File file) throws Exception {
// 构建 Authorization // 构建 Authorization
String authorization = WxPayKit.buildAuthorization(method, urlSuffix, mchId, serialNo, String authorization = WxPayKit.buildAuthorization(method, urlSuffix, mchId, serialNo,
keyPath, body, nonceStr, timestamp, authType); keyPath, body, nonceStr, timestamp, authType);
...@@ -299,9 +300,9 @@ public class WxPayApi { ...@@ -299,9 +300,9 @@ public class WxPayApi {
* @throws Exception 接口执行异常 * @throws Exception 接口执行异常
*/ */
public static IJPayHttpResponse v3(RequestMethodEnum method, String urlPrefix, String urlSuffix, public static IJPayHttpResponse v3(RequestMethodEnum method, String urlPrefix, String urlSuffix,
String mchId, String serialNo, String platSerialNo, PrivateKey privateKey, String mchId, String serialNo, String platSerialNo, PrivateKey privateKey,
String body, String nonceStr, long timestamp, String authType, String body, String nonceStr, long timestamp, String authType,
File file) throws Exception { File file) throws Exception {
// 构建 Authorization // 构建 Authorization
String authorization = WxPayKit.buildAuthorization(method, urlSuffix, mchId, serialNo, String authorization = WxPayKit.buildAuthorization(method, urlSuffix, mchId, serialNo,
privateKey, body, nonceStr, timestamp, authType); privateKey, body, nonceStr, timestamp, authType);
...@@ -339,9 +340,9 @@ public class WxPayApi { ...@@ -339,9 +340,9 @@ public class WxPayApi {
* @throws Exception 接口执行异常 * @throws Exception 接口执行异常
*/ */
public static IJPayHttpResponse v3(RequestMethodEnum method, String urlPrefix, String urlSuffix, String mchId, public static IJPayHttpResponse v3(RequestMethodEnum method, String urlPrefix, String urlSuffix, String mchId,
String serialNo, String platSerialNo, String keyPath, String body) throws Exception { String serialNo, String platSerialNo, String keyPath, String body) throws Exception {
long timestamp = System.currentTimeMillis() / 1000; long timestamp = System.currentTimeMillis() / 1000;
String authType = "WECHATPAY2-SHA256-RSA2048"; String authType = AuthTypeEnum.RSA.getUrl();
String nonceStr = WxPayKit.generateStr(); String nonceStr = WxPayKit.generateStr();
return v3(method, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, keyPath, body, nonceStr, timestamp, authType, null); return v3(method, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, keyPath, body, nonceStr, timestamp, authType, null);
} }
...@@ -361,9 +362,9 @@ public class WxPayApi { ...@@ -361,9 +362,9 @@ public class WxPayApi {
* @throws Exception 接口执行异常 * @throws Exception 接口执行异常
*/ */
public static IJPayHttpResponse v3(RequestMethodEnum method, String urlPrefix, String urlSuffix, String mchId, public static IJPayHttpResponse v3(RequestMethodEnum method, String urlPrefix, String urlSuffix, String mchId,
String serialNo, String platSerialNo, PrivateKey privateKey, String body) throws Exception { String serialNo, String platSerialNo, PrivateKey privateKey, String body) throws Exception {
long timestamp = System.currentTimeMillis() / 1000; long timestamp = System.currentTimeMillis() / 1000;
String authType = "WECHATPAY2-SHA256-RSA2048"; String authType = AuthTypeEnum.RSA.getUrl();
String nonceStr = WxPayKit.generateStr(); String nonceStr = WxPayKit.generateStr();
return v3(method, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, privateKey, body, nonceStr, timestamp, authType, null); return v3(method, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, privateKey, body, nonceStr, timestamp, authType, null);
} }
...@@ -383,10 +384,10 @@ public class WxPayApi { ...@@ -383,10 +384,10 @@ public class WxPayApi {
* @throws Exception 接口执行异常 * @throws Exception 接口执行异常
*/ */
public static IJPayHttpResponse v3(RequestMethodEnum method, String urlPrefix, String urlSuffix, public static IJPayHttpResponse v3(RequestMethodEnum method, String urlPrefix, String urlSuffix,
String mchId, String serialNo, String platSerialNo, String keyPath, String mchId, String serialNo, String platSerialNo, String keyPath,
Map<String, String> params) throws Exception { Map<String, String> params) throws Exception {
long timestamp = System.currentTimeMillis() / 1000; long timestamp = System.currentTimeMillis() / 1000;
String authType = "WECHATPAY2-SHA256-RSA2048"; String authType = AuthTypeEnum.RSA.getUrl();
String nonceStr = WxPayKit.generateStr(); String nonceStr = WxPayKit.generateStr();
if (null != params && !params.keySet().isEmpty()) { if (null != params && !params.keySet().isEmpty()) {
urlSuffix = urlSuffix.concat("?").concat(PayKit.createLinkString(params, true)); urlSuffix = urlSuffix.concat("?").concat(PayKit.createLinkString(params, true));
...@@ -409,10 +410,10 @@ public class WxPayApi { ...@@ -409,10 +410,10 @@ public class WxPayApi {
* @throws Exception 接口执行异常 * @throws Exception 接口执行异常
*/ */
public static IJPayHttpResponse v3(RequestMethodEnum method, String urlPrefix, String urlSuffix, public static IJPayHttpResponse v3(RequestMethodEnum method, String urlPrefix, String urlSuffix,
String mchId, String serialNo, String platSerialNo, PrivateKey privateKey, String mchId, String serialNo, String platSerialNo, PrivateKey privateKey,
Map<String, String> params) throws Exception { Map<String, String> params) throws Exception {
long timestamp = System.currentTimeMillis() / 1000; long timestamp = System.currentTimeMillis() / 1000;
String authType = "WECHATPAY2-SHA256-RSA2048"; String authType = AuthTypeEnum.RSA.getUrl();
String nonceStr = WxPayKit.generateStr(); String nonceStr = WxPayKit.generateStr();
if (null != params && !params.keySet().isEmpty()) { if (null != params && !params.keySet().isEmpty()) {
urlSuffix = urlSuffix.concat("?").concat(PayKit.createLinkString(params, true)); urlSuffix = urlSuffix.concat("?").concat(PayKit.createLinkString(params, true));
...@@ -436,7 +437,7 @@ public class WxPayApi { ...@@ -436,7 +437,7 @@ public class WxPayApi {
*/ */
public static IJPayHttpResponse v3(String urlPrefix, String urlSuffix, String mchId, String serialNo, String platSerialNo, String keyPath, String body, File file) throws Exception { public static IJPayHttpResponse v3(String urlPrefix, String urlSuffix, String mchId, String serialNo, String platSerialNo, String keyPath, String body, File file) throws Exception {
long timestamp = System.currentTimeMillis() / 1000; long timestamp = System.currentTimeMillis() / 1000;
String authType = "WECHATPAY2-SHA256-RSA2048"; String authType = AuthTypeEnum.RSA.getUrl();
String nonceStr = WxPayKit.generateStr(); String nonceStr = WxPayKit.generateStr();
return v3(RequestMethodEnum.UPLOAD, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, keyPath, body, nonceStr, timestamp, authType, file); return v3(RequestMethodEnum.UPLOAD, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, keyPath, body, nonceStr, timestamp, authType, file);
} }
...@@ -458,7 +459,7 @@ public class WxPayApi { ...@@ -458,7 +459,7 @@ public class WxPayApi {
public static IJPayHttpResponse v3(String urlPrefix, String urlSuffix, String mchId, String serialNo, public static IJPayHttpResponse v3(String urlPrefix, String urlSuffix, String mchId, String serialNo,
String platSerialNo, PrivateKey privateKey, String body, File file) throws Exception { String platSerialNo, PrivateKey privateKey, String body, File file) throws Exception {
long timestamp = System.currentTimeMillis() / 1000; long timestamp = System.currentTimeMillis() / 1000;
String authType = "WECHATPAY2-SHA256-RSA2048"; String authType = AuthTypeEnum.RSA.getUrl();
String nonceStr = WxPayKit.generateStr(); String nonceStr = WxPayKit.generateStr();
return v3(RequestMethodEnum.UPLOAD, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, privateKey, body, nonceStr, timestamp, authType, file); return v3(RequestMethodEnum.UPLOAD, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, privateKey, body, nonceStr, timestamp, authType, file);
} }
...@@ -483,9 +484,9 @@ public class WxPayApi { ...@@ -483,9 +484,9 @@ public class WxPayApi {
*/ */
@Deprecated @Deprecated
public static Map<String, Object> v3Execution(RequestMethodEnum method, String urlPrefix, String urlSuffix, public static Map<String, Object> v3Execution(RequestMethodEnum method, String urlPrefix, String urlSuffix,
String mchId, String serialNo, String platSerialNo, String keyPath, String mchId, String serialNo, String platSerialNo, String keyPath,
String body, String nonceStr, long timestamp, String authType, String body, String nonceStr, long timestamp, String authType,
File file) throws Exception { File file) throws Exception {
IJPayHttpResponse response = v3(method, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, keyPath, body, nonceStr, timestamp, authType, file); IJPayHttpResponse response = v3(method, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, keyPath, body, nonceStr, timestamp, authType, file);
return buildResMap(response); return buildResMap(response);
} }
...@@ -505,7 +506,7 @@ public class WxPayApi { ...@@ -505,7 +506,7 @@ public class WxPayApi {
*/ */
@Deprecated @Deprecated
public static Map<String, Object> v3Execution(RequestMethodEnum method, String urlPrefix, String urlSuffix, String mchId, public static Map<String, Object> v3Execution(RequestMethodEnum method, String urlPrefix, String urlSuffix, String mchId,
String serialNo, String keyPath, String body) throws Exception { String serialNo, String keyPath, String body) throws Exception {
IJPayHttpResponse response = v3(method, urlPrefix, urlSuffix, mchId, serialNo, null, keyPath, body); IJPayHttpResponse response = v3(method, urlPrefix, urlSuffix, mchId, serialNo, null, keyPath, body);
return buildResMap(response); return buildResMap(response);
} }
...@@ -526,7 +527,7 @@ public class WxPayApi { ...@@ -526,7 +527,7 @@ public class WxPayApi {
*/ */
@Deprecated @Deprecated
public static Map<String, Object> v3Execution(RequestMethodEnum method, String urlPrefix, String urlSuffix, String mchId, public static Map<String, Object> v3Execution(RequestMethodEnum method, String urlPrefix, String urlSuffix, String mchId,
String serialNo, String platSerialNo, String keyPath, String body) throws Exception { String serialNo, String platSerialNo, String keyPath, String body) throws Exception {
IJPayHttpResponse response = v3(method, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, keyPath, body); IJPayHttpResponse response = v3(method, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, keyPath, body);
return buildResMap(response); return buildResMap(response);
} }
...@@ -547,8 +548,8 @@ public class WxPayApi { ...@@ -547,8 +548,8 @@ public class WxPayApi {
*/ */
@Deprecated @Deprecated
public static Map<String, Object> v3Execution(RequestMethodEnum method, String urlPrefix, String urlSuffix, public static Map<String, Object> v3Execution(RequestMethodEnum method, String urlPrefix, String urlSuffix,
String mchId, String serialNo, String platSerialNo, String keyPath, String mchId, String serialNo, String platSerialNo, String keyPath,
Map<String, String> params) throws Exception { Map<String, String> params) throws Exception {
IJPayHttpResponse response = v3(method, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, keyPath, params); IJPayHttpResponse response = v3(method, urlPrefix, urlSuffix, mchId, serialNo, platSerialNo, keyPath, params);
return buildResMap(response); return buildResMap(response);
} }
...@@ -568,8 +569,8 @@ public class WxPayApi { ...@@ -568,8 +569,8 @@ public class WxPayApi {
*/ */
@Deprecated @Deprecated
public static Map<String, Object> v3Execution(RequestMethodEnum method, String urlPrefix, String urlSuffix, public static Map<String, Object> v3Execution(RequestMethodEnum method, String urlPrefix, String urlSuffix,
String mchId, String serialNo, String keyPath, String mchId, String serialNo, String keyPath,
Map<String, String> params) throws Exception { Map<String, String> params) throws Exception {
IJPayHttpResponse response = v3(method, urlPrefix, urlSuffix, mchId, serialNo, null, keyPath, params); IJPayHttpResponse response = v3(method, urlPrefix, urlSuffix, mchId, serialNo, null, keyPath, params);
return buildResMap(response); return buildResMap(response);
} }
......
package com.ijpay.wxpay.enums.v3;
import com.ijpay.wxpay.enums.WxApiEnum;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* <p>微信支付 v3 接口-教培续费通相关接口枚举</p>
*
* @author Javen
*/
public enum EduPaPayEnum implements WxApiEnum {
/**
* 通过协议号查询签约
*/
QUERY_CONTRACTS_BY_ID("/v3/edu-papay/contracts/id/%s", "通过协议号查询签约"),
/**
* 预签约
*/
PRE_SIGN("/v3/edu-papay/contracts/presign", "预签约"),
/**
* 解约
*/
DELETE_CONTRACTS("/v3/edu-papay/contracts/%s", "解约"),
/**
* 通过用户标识查询签约
*/
QUERY_CONTRACTS_BY_USER("/v3/edu-papay/user/%s/contracts", "通过用户标识查询签约"),
/**
* 受理扣款
*/
TRANSACTIONS("/v3/edu-papay/transactions", "受理扣款"),
/**
* 通过微信订单号查询订单
*/
QUERY_TRANSACTIONS_BY_TRANSACTION_ID("/v3/edu-papay/transactions/id/%s", "通过微信订单号查询订单"),
/**
* 通过商户订单号查询订单
*/
QUERY_TRANSACTIONS_BY_OUT_TRADE_NO("/v3/edu-papay/transactions/out-trade-no/%s", "通过商户订单号查询订单"),
/**
* 发送扣款预通知
*/
SEND_NOTIFICATION("/v3/edu-papay/user-notifications/%s/send", "发送扣款预通知"),
;
/**
* 接口URL
*/
private final String url;
/**
* 接口描述
*/
private final String desc;
EduPaPayEnum(String url, String desc) {
this.url = url;
this.desc = desc;
}
/**
* 获取枚举URL
*
* @return 枚举编码
*/
@Override
public String getUrl() {
return url;
}
/**
* 获取详细的描述信息
*
* @return 描述信息
*/
@Override
public String getDesc() {
return desc;
}
}
package com.ijpay.wxpay.model.v3;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付等常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* <p>发起商家转账 Model</p>
*
* @author Javen
*/
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class BatchTransferModel {
/**
* 申请商户号的appid或商户号绑定的appid(企业号corpid即为此appid)
*/
private String appid;
/**
* 商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一
*/
private String out_batch_no;
/**
* 该笔批量转账的名称
*/
private String batch_name;
/**
* 转账说明,UTF8编码,最多允许32个字符
*/
private String batch_remark;
/**
* 转账金额单位为“分”。转账总金额必须与批次内所有明细转账金额之和保持一致,否则无法发起转账操作
*/
private Integer total_amount;
/**
* 一个转账批次单最多发起一千笔转账。转账总笔数必须与批次内所有明细之和保持一致,否则无法发起转账操作
*/
private Integer total_num;
/**
* 发起批量转账的明细列表,最多一千笔
*/
private List<TransferDetailInput> transfer_detail_list;
/**
* 指定该笔转账使用的转账场景ID
*/
private String transfer_scene_id;
}
package com.ijpay.wxpay.model.v3;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付等常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* <p>发起批量转账的明细列表</p>
*
* @author Javen
*/
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class TransferDetailInput {
/**
* 商户系统内部区分转账批次单下不同转账明细单的唯一标识,要求此参数只能由数字、大小写字母组成
*/
private String out_detail_no;
/**
* 转账金额单位为“分”
*/
private Integer transfer_amount;
/**
* 单条转账备注(微信用户会收到该备注),UTF8编码,最多允许32个字符
*/
private String transfer_remark;
/**
* 商户appid下,某用户的openid
*/
private String openid;
/**
* 收款方真实姓名。支持标准RSA算法和国密算法,公钥由微信侧提供
* 明细转账金额<0.3元时,不允许填写收款用户姓名
* 明细转账金额 >= 2,000元时,该笔明细必须填写收款用户姓名
* 同一批次转账明细中的姓名字段传入规则需保持一致,也即全部填写、或全部不填写
* 若商户传入收款用户姓名,微信支付会校验用户openID与姓名是否一致,并提供电子回单
*/
private String user_name;
/**
* 收款方身份证号,可不用填(采用标准RSA算法,公钥由微信侧提供)
* 当填入收款方身份证号时,姓名字段必须填入。
*/
private String user_id_card;
}
...@@ -5,7 +5,7 @@ ...@@ -5,7 +5,7 @@
<parent> <parent>
<artifactId>IJPay</artifactId> <artifactId>IJPay</artifactId>
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<version>2.9.6</version> <version>2.9.7</version>
</parent> </parent>
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.24</version> <version>1.18.26</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency> <dependency>
......
此差异已折叠。
...@@ -96,6 +96,10 @@ JavaDoc 文档:[https://apidoc.gitee.com/javen205/IJPay](https://apidoc.gitee. ...@@ -96,6 +96,10 @@ JavaDoc 文档:[https://apidoc.gitee.com/javen205/IJPay](https://apidoc.gitee.
[Gitee-JFinal-Demo](https://gitee.com/javen205/IJPay/tree/master/IJPay-Demo-JFinal) [GitHub-JFinal-Demo](https://github.com/javen205/IJPay/tree/master/IJPay-Demo-JFinal) [Gitee-JFinal-Demo](https://gitee.com/javen205/IJPay/tree/master/IJPay-Demo-JFinal) [GitHub-JFinal-Demo](https://github.com/javen205/IJPay/tree/master/IJPay-Demo-JFinal)
[Gitee-Solon-Demo](https://gitee.com/javen205/IJPay/tree/master/IJPay-Demo-Solon) [GitHub-Solon-Demo](https://github.com/javen205/IJPay/tree/master/IJPay-Demo-Solon)
[Gitee-SpringBoot-Demo](https://gitee.com/javen205/IJPay/tree/master/IJPay-Demo-SpringBoot) [GitHub-SpringBoot-Demo](https://github.com/javen205/IJPay/tree/master/IJPay-Demo-SpringBoot) [Gitee-SpringBoot-Demo](https://gitee.com/javen205/IJPay/tree/master/IJPay-Demo-SpringBoot) [GitHub-SpringBoot-Demo](https://github.com/javen205/IJPay/tree/master/IJPay-Demo-SpringBoot)
### 联系方式 ### 联系方式
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
<groupId>com.github.javen205</groupId> <groupId>com.github.javen205</groupId>
<artifactId>IJPay</artifactId> <artifactId>IJPay</artifactId>
<version>2.9.6</version> <version>2.9.7</version>
<name>IJPay</name> <name>IJPay</name>
<description>IJPay 让支付触手可及(Easy Pay Library)</description> <description>IJPay 让支付触手可及(Easy Pay Library)</description>
<url>https://github.com/Javen205/IJPay</url> <url>https://github.com/Javen205/IJPay</url>
...@@ -55,7 +55,7 @@ ...@@ -55,7 +55,7 @@
<properties> <properties>
<jdk.version>1.8</jdk.version> <jdk.version>1.8</jdk.version>
<junit.version>4.13.2</junit.version> <junit.version>4.13.2</junit.version>
<hutool.version>5.8.11</hutool.version> <hutool.version>5.8.16</hutool.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
......