Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
IJPay
提交
ed40ef49
I
IJPay
项目概览
int
/
IJPay
大约 1 年 前同步成功
通知
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,发现更多精彩内容 >>
提交
ed40ef49
编写于
3月 12, 2023
作者:
J
Javen205
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
✨
新增微信支付商家转账到零钱示例
上级
396da1bf
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
173 addition
and
0 deletion
+173
-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/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;
import
com.ijpay.wxpay.enums.v3.OtherApiEnum
;
import
com.ijpay.wxpay.enums.v3.PayGiftActivityApiEnum
;
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.BatchTransferModel
;
import
com.ijpay.wxpay.model.v3.Payer
;
import
com.ijpay.wxpay.model.v3.RefundAmount
;
import
com.ijpay.wxpay.model.v3.RefundGoodsDetail
;
import
com.ijpay.wxpay.model.v3.RefundModel
;
import
com.ijpay.wxpay.model.v3.TransferDetailInput
;
import
com.ijpay.wxpay.model.v3.UnifiedOrderModel
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
...
...
@@ -51,6 +54,7 @@ import java.security.PrivateKey;
import
java.security.cert.X509Certificate
;
import
java.util.ArrayList
;
import
java.util.Calendar
;
import
java.util.Collections
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.List
;
...
...
@@ -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"
)
@ResponseBody
...
...
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
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录