-
Notifications
You must be signed in to change notification settings - Fork 149
/
Copy pathapi_transfer_batch.go
230 lines (201 loc) · 12.2 KB
/
api_transfer_batch.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
// Copyright 2021 Tencent Inc. All rights reserved.
//
// 服务商批量转账API
//
// No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
//
// API version: 0.0.2
// Code generated by WechatPay APIv3 Generator based on [OpenAPI Generator](https://openapi-generator.tech); DO NOT EDIT.
package partnertransferbatch
import (
"context"
"fmt"
nethttp "net/http"
neturl "net/url"
"strings"
"github.com/wechatpay-apiv3/wechatpay-go/core"
"github.com/wechatpay-apiv3/wechatpay-go/core/consts"
"github.com/wechatpay-apiv3/wechatpay-go/services"
)
type TransferBatchApiService services.Service
// GetTransferBatchByNo 微信支付批次单号查询批次单
//
// ## 查询接口说明
// 微信支付批次单号查单接口。转账处理后延迟一段时间(异步进行转账),服务商可以通过该接口查询转账批次单以及指定状态的转账明细单。返回消息中包含微信支付批次单号、批次状态、批次类型、转账总金额、转账总笔数、成功金额、失败金额等信息。
//
// 接口限频:
// 单个服务商(查询转账批次单)50QPS,如果超过频率限制,会报错FREQUENCY_LIMITED,请降低频率请求。
//
// 注意事项:
// - API只支持查询最近30天内的转账批次单,30天之前的转账批次单请登录商户平台查询。
// - 转账明细单只会在批次单完成的情况下返回,如果需要在批次处理过程中查询转账明细单,请通过转账明细单查询接口来查询。
// - 转账批次单和明细单中涉及金额的字段单位为“分”。
// - 如果查询单号对应的数据不存在,那么数据不存在的原因可能是:(1)批次还在受理中;(2)批次受理失败导致转账批次单没有落地。在上述情况下,服务商首先需要检查该微信支付批次单号是否确实是自己发起的,如果服务商确认是自己发起的,则请服务商不要直接当做受理失败处理,请服务商隔几分钟再尝试查询(请勿转账和查询并发处理),或者服务商可以通过相同的商家批次单号再次发起转账。如果服务商误把还在受理中的批次单直接当受理失败处理,服务商应当自行承担因此产生的所有损失和责任。
// - 如果遇到回包返回新的错误码,请务必不要换单重试,请联系客服确认转账情况。如果有新的错误码,会更新到此API文档中。
// - 错误码描述字段message只供人工定位问题时做参考,系统实现时请不要依赖这个字段来做自动化处理。
func (a *TransferBatchApiService) GetTransferBatchByNo(ctx context.Context, req GetTransferBatchByNoRequest) (resp *TransferBatchEntity, result *core.APIResult, err error) {
var (
localVarHTTPMethod = nethttp.MethodGet
localVarPostBody interface{}
localVarQueryParams neturl.Values
localVarHeaderParams = nethttp.Header{}
)
// Make sure Path Params are properly set
if req.BatchId == nil {
return nil, nil, fmt.Errorf("field `BatchId` is required and must be specified in GetTransferBatchByNoRequest")
}
localVarPath := consts.WechatPayAPIServer + "/v3/partner-transfer/batches/batch-id/{batch_id}"
// Build Path with Path Params
localVarPath = strings.Replace(localVarPath, "{"+"batch_id"+"}", neturl.PathEscape(core.ParameterToString(*req.BatchId, "")), -1)
// Make sure All Required Params are properly set
if req.NeedQueryDetail == nil {
return nil, nil, fmt.Errorf("field `NeedQueryDetail` is required and must be specified in GetTransferBatchByNoRequest")
}
// Setup Query Params
localVarQueryParams = neturl.Values{}
localVarQueryParams.Add("need_query_detail", core.ParameterToString(*req.NeedQueryDetail, ""))
if req.Offset != nil {
localVarQueryParams.Add("offset", core.ParameterToString(*req.Offset, ""))
}
if req.Limit != nil {
localVarQueryParams.Add("limit", core.ParameterToString(*req.Limit, ""))
}
if req.DetailStatus != nil {
localVarQueryParams.Add("detail_status", core.ParameterToString(*req.DetailStatus, ""))
}
// Determine the Content-Type Header
localVarHTTPContentTypes := []string{}
// Setup Content-Type
localVarHTTPContentType := core.SelectHeaderContentType(localVarHTTPContentTypes)
// Perform Http Request
result, err = a.Client.Request(ctx, localVarHTTPMethod, localVarPath, localVarHeaderParams, localVarQueryParams, localVarPostBody, localVarHTTPContentType)
if err != nil {
return nil, result, err
}
// Extract TransferBatchEntity from Http Response
resp = new(TransferBatchEntity)
err = core.UnMarshalResponse(result.Response, resp)
if err != nil {
return nil, result, err
}
return resp, result, nil
}
// GetTransferBatchByOutNo 商家批次单号查询批次单
//
// ## 查询接口说明
// 商家批次单号查单接口。转账处理后延迟一段时间(异步进行转账),服务商可以通过该接口查询转账批次单以及指定状态的转账明细单。返回消息中包含微信支付批次单号、批次状态、批次类型、转账总金额、转账总笔数、成功金额、失败金额等信息。
//
// 接口限频:
// 单个服务商(查询转账批次单)50QPS,如果超过频率限制,会报错FREQUENCY_LIMITED,请降低频率请求。
//
// 注意事项:
// - API只支持查询最近30天内的转账批次单,30天之前的转账批次单请登录商户平台查询。
// - 转账明细单只会在批次单完成的情况下返回,如果需要在批次处理过程中查询转账明细单,请通过转账明细单查询接口来查询。
// - 转账批次单和明细单中涉及金额的字段单位为“分”。
// - 如果查询单号对应的数据不存在,那么数据不存在的原因可能是:(1)批次还在受理中;(2)批次受理失败导致转账批次单没有落地。在上述情况下,服务商首先需要检查该商家批次单号是否确实是自己发起的,如果服务商确认是自己发起的,则请服务商不要直接当做受理失败处理,请服务商隔几分钟再尝试查询(请勿转账和查询并发处理),或者服务商可以通过相同的商家批次单号再次发起转账。如果服务商误把还在受理中的批次单直接当受理失败处理,服务商应当自行承担因此产生的所有损失和责任。
// - 如果遇到回包返回新的错误码,请务必不要换单重试,请联系客服确认转账情况。如果有新的错误码,会更新到此API文档中。
// - 错误码描述字段message只供人工定位问题时做参考,系统实现时请不要依赖这个字段来做自动化处理。
func (a *TransferBatchApiService) GetTransferBatchByOutNo(ctx context.Context, req GetTransferBatchByOutNoRequest) (resp *TransferBatchEntity, result *core.APIResult, err error) {
var (
localVarHTTPMethod = nethttp.MethodGet
localVarPostBody interface{}
localVarQueryParams neturl.Values
localVarHeaderParams = nethttp.Header{}
)
// Make sure Path Params are properly set
if req.OutBatchNo == nil {
return nil, nil, fmt.Errorf("field `OutBatchNo` is required and must be specified in GetTransferBatchByOutNoRequest")
}
localVarPath := consts.WechatPayAPIServer + "/v3/partner-transfer/batches/out-batch-no/{out_batch_no}"
// Build Path with Path Params
localVarPath = strings.Replace(localVarPath, "{"+"out_batch_no"+"}", neturl.PathEscape(core.ParameterToString(*req.OutBatchNo, "")), -1)
// Make sure All Required Params are properly set
if req.NeedQueryDetail == nil {
return nil, nil, fmt.Errorf("field `NeedQueryDetail` is required and must be specified in GetTransferBatchByOutNoRequest")
}
// Setup Query Params
localVarQueryParams = neturl.Values{}
localVarQueryParams.Add("need_query_detail", core.ParameterToString(*req.NeedQueryDetail, ""))
if req.Offset != nil {
localVarQueryParams.Add("offset", core.ParameterToString(*req.Offset, ""))
}
if req.Limit != nil {
localVarQueryParams.Add("limit", core.ParameterToString(*req.Limit, ""))
}
if req.DetailStatus != nil {
localVarQueryParams.Add("detail_status", core.ParameterToString(*req.DetailStatus, ""))
}
// Determine the Content-Type Header
localVarHTTPContentTypes := []string{}
// Setup Content-Type
localVarHTTPContentType := core.SelectHeaderContentType(localVarHTTPContentTypes)
// Perform Http Request
result, err = a.Client.Request(ctx, localVarHTTPMethod, localVarPath, localVarHeaderParams, localVarQueryParams, localVarPostBody, localVarHTTPContentType)
if err != nil {
return nil, result, err
}
// Extract TransferBatchEntity from Http Response
resp = new(TransferBatchEntity)
err = core.UnMarshalResponse(result.Response, resp)
if err != nil {
return nil, result, err
}
return resp, result, nil
}
// InitiateTransferBatch 发起批量转账
//
// ## 发起批量转账
// 服务商可以通过该接口,批量向用户零钱进行转账操作。请求消息中应包含特约商户号、特约商户授权的appid、授权类型、商家批次单号、转账名称、转账总金额、转账总笔数、转账openid、收款用户姓名、服务商appid、转账用途等信息
// 1、当特约商户授权类型为INFORMATION_AUTHORIZATION_TYPE(特约商户信息授权),需要填特约商户的公众号appid,特约商户公众号appid的用户的openid
// 2、当特约商户授权类型为FUND_AUTHORIZATION_TYPE(特约商户资金授权),需要填服务商的公众号appid,服务商公众号appid的用户的openid
//
// 接口限频:
// 单个服务商(发起批量转账接口)50QPS,如果超过频率限制,会报错FREQUENCY_LIMITED,请降低频率请求。
//
// 注意事项:
// - 因服务商自身系统设置存在问题导致的资金损失,由服务商自行承担。
// - 批量转账一旦发起后,不允许撤销。
// - 转账批次单和明细单中涉及金额的字段单位为“分”。
// - 微信支付视任何不同“发起的服务商商户号+商家批次单号(out_batch_no)”的请求为一个全新的批次。在未查询到明确的转账批次单处理结果之前,请勿修改商家批次单号重新提交!如有发生,服务商应当自行承担因此产生的所有损失和责任。
// - 当返回错误时,请不要更换商家批次单号,一定要使用原商家批次单号重试,否则可能造成重复转账等资金风险。
// - 如果遇到回包返回新的错误码,请务必不要换单重试,请联系客服确认转账情况。如果有新的错误码,会更新到此API文档中。
// - 错误码描述字段message只供人工定位问题时做参考,系统实现时请不要依赖这个字段来做自动化处理。
// - 请服务商在自身的系统中合理设置转账频次并做好并发控制,防范错付风险。
func (a *TransferBatchApiService) InitiateTransferBatch(ctx context.Context, req InitiateTransferBatchRequest) (resp *InitiateTransferBatchResponse, result *core.APIResult, err error) {
var (
localVarHTTPMethod = nethttp.MethodPost
localVarPostBody interface{}
localVarQueryParams neturl.Values
localVarHeaderParams = nethttp.Header{}
)
// 对请求中敏感字段进行加密
encReq := req.Clone()
encryptCertificate, err := a.Client.EncryptRequest(ctx, encReq)
if err != nil {
return nil, nil, fmt.Errorf("encrypt request failed: %v", err)
}
if encryptCertificate != "" {
localVarHeaderParams.Set(consts.WechatPaySerial, encryptCertificate)
}
req = *encReq
localVarPath := consts.WechatPayAPIServer + "/v3/partner-transfer/batches"
// Make sure All Required Params are properly set
// Setup Body Params
localVarPostBody = req
// Determine the Content-Type Header
localVarHTTPContentTypes := []string{"application/json"}
// Setup Content-Type
localVarHTTPContentType := core.SelectHeaderContentType(localVarHTTPContentTypes)
// Perform Http Request
result, err = a.Client.Request(ctx, localVarHTTPMethod, localVarPath, localVarHeaderParams, localVarQueryParams, localVarPostBody, localVarHTTPContentType)
if err != nil {
return nil, result, err
}
// Extract InitiateTransferBatchResponse from Http Response
resp = new(InitiateTransferBatchResponse)
err = core.UnMarshalResponse(result.Response, resp)
if err != nil {
return nil, result, err
}
return resp, result, nil
}