api_transfer_batch.go 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. // Copyright 2021 Tencent Inc. All rights reserved.
  2. //
  3. // 微工卡接口文档
  4. //
  5. // 服务商通过本API文档提供的接口,查询商户和微工卡的授权关系、生成预授权的token口令、核身预下单、核身结果的查询等。
  6. //
  7. // API version: 1.5.2
  8. // Code generated by WechatPay APIv3 Generator based on [OpenAPI Generator](https://openapi-generator.tech); DO NOT EDIT.
  9. package payrollcard
  10. import (
  11. "context"
  12. "fmt"
  13. nethttp "net/http"
  14. neturl "net/url"
  15. "github.com/wechatpay-apiv3/wechatpay-go/core"
  16. "github.com/wechatpay-apiv3/wechatpay-go/core/consts"
  17. "github.com/wechatpay-apiv3/wechatpay-go/services"
  18. )
  19. type TransferBatchApiService services.Service
  20. // CreateTransferBatch 发起批量转账
  21. //
  22. // ## 发起批量转账
  23. //
  24. // 服务商可以通过该接口,批量向用户零钱进行转账操作。请求消息中应包含特约商户号、特约商户授权的AppID、授权类型、商家批次单号、转账名称、转账总金额、转账总笔数、转账OpenID、收款用户姓名、服务商AppID、转账用途等信息
  25. // 1、当特约商户授权类型为INFORMATION\_AUTHORIZATION\_TYPE(特约商户信息授权),需要填特约商户的公众号AppID,特约商户公众号AppID的用户的OpenID
  26. // 2、当特约商户授权类型为FUND\_AUTHORIZATION\_TYPE(特约商户资金授权),需要填服务商的公众号AppID,服务商公众号AppID的用户的OpenID
  27. //
  28. // 接口限频:
  29. // 单个服务商(发起批量转账接口)50QPS,如果超过频率限制,会报错FREQUENCY\_LIMITED,请降低频率请求。
  30. //
  31. // 注意事项:
  32. //
  33. // * 因服务商自身系统设置存在问题导致的资金损失,由服务商自行承担。
  34. // * 批量转账一旦发起后,不允许撤销。
  35. // * 转账批次单和明细单中涉及金额的字段单位为“分”。
  36. // * 微信支付视任何不同“发起的服务商商户号+商家批次单号(out\_batch\_no)”的请求为一个全新的批次。在未查询到明确的转账批次单处理结果之前,请勿修改商家批次单号重新提交!如有发生,服务商应当自行承担因此产生的所有损失和责任。
  37. // * 当返回错误时,请不要更换商家批次单号,一定要使用原商家批次单号重试,否则可能造成重复转账等资金风险。
  38. // * 如果遇到回包返回新的错误码,请务必不要换单重试,请联系客服确认转账情况。如果有新的错误码,会更新到此API文档中。
  39. // * 错误码描述字段message只供人工定位问题时做参考,系统实现时请不要依赖这个字段来做自动化处理。
  40. // * 请服务商在自身的系统中合理设置转账频次并做好并发控制,防范错付风险。
  41. func (a *TransferBatchApiService) CreateTransferBatch(ctx context.Context, req CreateTransferBatchRequest) (resp *TransferBatchEntity, result *core.APIResult, err error) {
  42. var (
  43. localVarHTTPMethod = nethttp.MethodPost
  44. localVarPostBody interface{}
  45. localVarQueryParams neturl.Values
  46. localVarHeaderParams = nethttp.Header{}
  47. )
  48. // 对请求中敏感字段进行加密
  49. encReq := req.Clone()
  50. encryptCertificate, err := a.Client.EncryptRequest(ctx, encReq)
  51. if err != nil {
  52. return nil, nil, fmt.Errorf("encrypt request failed: %v", err)
  53. }
  54. if encryptCertificate != "" {
  55. localVarHeaderParams.Set(consts.WechatPaySerial, encryptCertificate)
  56. }
  57. req = *encReq
  58. localVarPath := consts.WechatPayAPIServer + "/v3/payroll-card/transfer-batches"
  59. // Make sure All Required Params are properly set
  60. // Setup Body Params
  61. localVarPostBody = req
  62. // Determine the Content-Type Header
  63. localVarHTTPContentTypes := []string{"application/json"}
  64. // Setup Content-Type
  65. localVarHTTPContentType := core.SelectHeaderContentType(localVarHTTPContentTypes)
  66. // Perform Http Request
  67. result, err = a.Client.Request(ctx, localVarHTTPMethod, localVarPath, localVarHeaderParams, localVarQueryParams, localVarPostBody, localVarHTTPContentType)
  68. if err != nil {
  69. return nil, result, err
  70. }
  71. // Extract TransferBatchEntity from Http Response
  72. resp = new(TransferBatchEntity)
  73. err = core.UnMarshalResponse(result.Response, resp)
  74. if err != nil {
  75. return nil, result, err
  76. }
  77. return resp, result, nil
  78. }