Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
IJPay
比较版本
7e99a13b972e7f2b9abd85215d5e7a6d7ba9227d...ed40ef498235aa1eb80d9a0e33feba8b567f2419
I
IJPay
项目概览
int
/
IJPay
8 个月 前同步成功
通知
4
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
I
IJPay
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
源分支
ed40ef498235aa1eb80d9a0e33feba8b567f2419
选择Git版本
...
目标分支
7e99a13b972e7f2b9abd85215d5e7a6d7ba9227d
选择Git版本
比较
Commits (2)
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
隐藏空白更改
内联
并排
Showing
4 changed file
with
267 addition
and
0 deletion
+267
-0
IJPay-Demo-SpringBoot/src/main/java/com/ijpay/demo/controller/wxpay/WxPayV3Controller.java
...va/com/ijpay/demo/controller/wxpay/WxPayV3Controller.java
+47
-0
IJPay-WxPay/src/main/java/com/ijpay/wxpay/enums/v3/EduPaPayEnum.java
.../src/main/java/com/ijpay/wxpay/enums/v3/EduPaPayEnum.java
+94
-0
IJPay-WxPay/src/main/java/com/ijpay/wxpay/model/v3/BatchTransferModel.java
...ain/java/com/ijpay/wxpay/model/v3/BatchTransferModel.java
+67
-0
IJPay-WxPay/src/main/java/com/ijpay/wxpay/model/v3/TransferDetailInput.java
...in/java/com/ijpay/wxpay/model/v3/TransferDetailInput.java
+59
-0
未找到文件。
IJPay-Demo-SpringBoot/src/main/java/com/ijpay/demo/controller/wxpay/WxPayV3Controller.java
浏览文件 @
ed40ef49
...
@@ -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
;
...
@@ -328,6 +332,49 @@ public class WxPayV3Controller {
...
@@ -328,6 +332,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
...
...
IJPay-WxPay/src/main/java/com/ijpay/wxpay/enums/v3/EduPaPayEnum.java
0 → 100644
浏览文件 @
ed40ef49
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
;
}
}
IJPay-WxPay/src/main/java/com/ijpay/wxpay/model/v3/BatchTransferModel.java
0 → 100644
浏览文件 @
ed40ef49
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
;
}
IJPay-WxPay/src/main/java/com/ijpay/wxpay/model/v3/TransferDetailInput.java
0 → 100644
浏览文件 @
ed40ef49
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
;
}