Skip to content

Commit 1697535

Browse files
🆕 #4051 【微信支付】增加商家转账免确认收款授权相关接口
1 parent 9a97006 commit 1697535

10 files changed

Lines changed: 1355 additions & 0 deletions
Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
package com.github.binarywang.wxpay.bean.transfer;
2+
3+
import com.github.binarywang.wxpay.v3.SpecEncrypt;
4+
import com.google.gson.annotations.SerializedName;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Builder;
7+
import lombok.Data;
8+
import lombok.NoArgsConstructor;
9+
10+
import java.io.Serializable;
11+
import java.util.List;
12+
13+
/**
14+
* 发起转账并完成免确认收款授权请求参数.
15+
*
16+
* <p>该接口和普通 {@link TransferBillsRequest} 一样会创建商家转账单,但额外携带
17+
* {@code authorization_info},用于在用户确认收款时同时引导用户完成免确认收款授权。</p>
18+
*
19+
* @see <a href="https://pay.weixin.qq.com/doc/v3/merchant/4014399293">发起转账并完成免确认收款授权</a>
20+
*/
21+
@Data
22+
@Builder(builderMethodName = "newBuilder")
23+
@NoArgsConstructor
24+
@AllArgsConstructor
25+
public class PreTransferWithAuthorizationRequest implements Serializable {
26+
private static final long serialVersionUID = 1L;
27+
28+
/**
29+
* 商户 AppID.
30+
*/
31+
@SerializedName("appid")
32+
private String appid;
33+
34+
/**
35+
* 商户系统内部的商家单号.
36+
*/
37+
@SerializedName("out_bill_no")
38+
private String outBillNo;
39+
40+
/**
41+
* 转账场景 ID.
42+
*/
43+
@SerializedName("transfer_scene_id")
44+
private String transferSceneId;
45+
46+
/**
47+
* 收款用户 OpenID.
48+
*/
49+
@SerializedName("openid")
50+
private String openid;
51+
52+
/**
53+
* 收款用户姓名.
54+
*
55+
* <p>该字段为敏感信息,提交前需要使用微信支付公钥或平台证书公钥加密。</p>
56+
*/
57+
@SpecEncrypt
58+
@SerializedName("user_name")
59+
private String userName;
60+
61+
/**
62+
* 转账金额,单位为分.
63+
*/
64+
@SerializedName("transfer_amount")
65+
private Integer transferAmount;
66+
67+
/**
68+
* 转账备注,用户确认收款时可见.
69+
*/
70+
@SerializedName("transfer_remark")
71+
private String transferRemark;
72+
73+
/**
74+
* 转账结果通知地址.
75+
*/
76+
@SerializedName("notify_url")
77+
private String notifyUrl;
78+
79+
/**
80+
* 用户收款感知.
81+
*/
82+
@SerializedName("user_recv_perception")
83+
private String userRecvPerception;
84+
85+
/**
86+
* 转账场景报备信息.
87+
*/
88+
@SerializedName("transfer_scene_report_infos")
89+
private List<TransferSceneReportInfo> transferSceneReportInfos;
90+
91+
/**
92+
* 免确认收款授权信息.
93+
*/
94+
@SerializedName("authorization_info")
95+
private AuthorizationInfo authorizationInfo;
96+
97+
/**
98+
* 出资商户号.
99+
*/
100+
@SerializedName("sponsor_mchid")
101+
private String sponsorMchid;
102+
103+
/**
104+
* 转账场景报备信息.
105+
*/
106+
@Data
107+
@Builder(builderMethodName = "newBuilder")
108+
@NoArgsConstructor
109+
@AllArgsConstructor
110+
public static class TransferSceneReportInfo implements Serializable {
111+
private static final long serialVersionUID = 1L;
112+
113+
/**
114+
* 信息类型.
115+
*/
116+
@SerializedName("info_type")
117+
private String infoType;
118+
119+
/**
120+
* 信息内容.
121+
*/
122+
@SerializedName("info_content")
123+
private String infoContent;
124+
}
125+
126+
/**
127+
* 免确认收款授权信息.
128+
*/
129+
@Data
130+
@Builder(builderMethodName = "newBuilder")
131+
@NoArgsConstructor
132+
@AllArgsConstructor
133+
public static class AuthorizationInfo implements Serializable {
134+
private static final long serialVersionUID = 1L;
135+
136+
/**
137+
* 用户展示名称,用于在授权详情中区分用户在商户侧的账号.
138+
*/
139+
@SerializedName("user_display_name")
140+
private String userDisplayName;
141+
142+
/**
143+
* 商户侧授权单号.
144+
*/
145+
@SerializedName("out_authorization_no")
146+
private String outAuthorizationNo;
147+
148+
/**
149+
* 免确认收款授权结果通知地址.
150+
*/
151+
@SerializedName("authorization_notify_url")
152+
private String authorizationNotifyUrl;
153+
}
154+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package com.github.binarywang.wxpay.bean.transfer;
2+
3+
import com.github.binarywang.wxpay.constant.WxPayConstants;
4+
import com.google.gson.annotations.SerializedName;
5+
import lombok.Data;
6+
import lombok.NoArgsConstructor;
7+
8+
import java.io.Serializable;
9+
10+
/**
11+
* 发起转账并完成免确认收款授权响应结果.
12+
*
13+
* @see <a href="https://pay.weixin.qq.com/doc/v3/merchant/4014399293">发起转账并完成免确认收款授权</a>
14+
*/
15+
@Data
16+
@NoArgsConstructor
17+
public class PreTransferWithAuthorizationResult implements Serializable {
18+
private static final long serialVersionUID = 1L;
19+
20+
/**
21+
* 商户单号.
22+
*/
23+
@SerializedName("out_bill_no")
24+
private String outBillNo;
25+
26+
/**
27+
* 微信转账单号.
28+
*/
29+
@SerializedName("transfer_bill_no")
30+
private String transferBillNo;
31+
32+
/**
33+
* 单据创建时间.
34+
*/
35+
@SerializedName("create_time")
36+
private String createTime;
37+
38+
/**
39+
* 单据状态.
40+
*
41+
* @see WxPayConstants.TransformBillState
42+
*/
43+
@SerializedName("state")
44+
private String state;
45+
46+
/**
47+
* 跳转领取页面的 package 信息.
48+
*/
49+
@SerializedName("package_info")
50+
private String packageInfo;
51+
52+
/**
53+
* 用户展示名称.
54+
*/
55+
@SerializedName("user_display_name")
56+
private String userDisplayName;
57+
58+
/**
59+
* 商户侧授权单号.
60+
*/
61+
@SerializedName("out_authorization_no")
62+
private String outAuthorizationNo;
63+
}
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
package com.github.binarywang.wxpay.bean.transfer;
2+
3+
import com.github.binarywang.wxpay.v3.SpecEncrypt;
4+
import com.google.gson.annotations.SerializedName;
5+
import lombok.AllArgsConstructor;
6+
import lombok.Builder;
7+
import lombok.Data;
8+
import lombok.NoArgsConstructor;
9+
10+
import java.io.Serializable;
11+
import java.util.List;
12+
13+
/**
14+
* 用户授权后转账请求参数.
15+
*
16+
* <p>该接口用于给已经完成免确认收款授权的用户发起转账。请求中不再传 openid,
17+
* 而是通过微信免确认收款授权单号或商户侧授权单号定位已授权用户。</p>
18+
*
19+
* @see <a href="https://pay.weixin.qq.com/doc/v3/merchant/4014399371">用户授权后转账</a>
20+
*/
21+
@Data
22+
@Builder(builderMethodName = "newBuilder")
23+
@NoArgsConstructor
24+
@AllArgsConstructor
25+
public class TransferBillsAfterAuthorizationRequest implements Serializable {
26+
private static final long serialVersionUID = 1L;
27+
28+
/**
29+
* 商户 AppID.
30+
*/
31+
@SerializedName("appid")
32+
private String appid;
33+
34+
/**
35+
* 商户系统内部的商家转账单号.
36+
*/
37+
@SerializedName("out_bill_no")
38+
private String outBillNo;
39+
40+
/**
41+
* 收款用户姓名.
42+
*
43+
* <p>该字段为敏感信息,提交前需要使用微信支付公钥或平台证书公钥加密。</p>
44+
*/
45+
@SpecEncrypt
46+
@SerializedName("user_name")
47+
private String userName;
48+
49+
/**
50+
* 转账金额,单位为分.
51+
*/
52+
@SerializedName("transfer_amount")
53+
private Integer transferAmount;
54+
55+
/**
56+
* 转账备注.
57+
*/
58+
@SerializedName("transfer_remark")
59+
private String transferRemark;
60+
61+
/**
62+
* 转账结果通知地址.
63+
*/
64+
@SerializedName("notify_url")
65+
private String notifyUrl;
66+
67+
/**
68+
* 用户收款感知.
69+
*/
70+
@SerializedName("user_recv_perception")
71+
private String userRecvPerception;
72+
73+
/**
74+
* 转账场景 ID.
75+
*/
76+
@SerializedName("transfer_scene_id")
77+
private String transferSceneId;
78+
79+
/**
80+
* 转账场景报备信息.
81+
*/
82+
@SerializedName("transfer_scene_report_infos")
83+
private List<TransferSceneReportInfo> transferSceneReportInfos;
84+
85+
/**
86+
* 微信免确认收款授权单号,通常可从授权成功回调或授权查询接口获取.
87+
*/
88+
@SerializedName("authorization_id")
89+
private String authorizationId;
90+
91+
/**
92+
* 出资商户号.
93+
*/
94+
@SerializedName("sponsor_mchid")
95+
private String sponsorMchid;
96+
97+
/**
98+
* 商户侧授权单号,对应发起授权时传入的 out_authorization_no.
99+
*/
100+
@SerializedName("out_authorization_no")
101+
private String outAuthorizationNo;
102+
103+
/**
104+
* 转账场景报备信息.
105+
*/
106+
@Data
107+
@Builder(builderMethodName = "newBuilder")
108+
@NoArgsConstructor
109+
@AllArgsConstructor
110+
public static class TransferSceneReportInfo implements Serializable {
111+
private static final long serialVersionUID = 1L;
112+
113+
/**
114+
* 信息类型.
115+
*/
116+
@SerializedName("info_type")
117+
private String infoType;
118+
119+
/**
120+
* 信息内容.
121+
*/
122+
@SerializedName("info_content")
123+
private String infoContent;
124+
}
125+
}

0 commit comments

Comments
 (0)