api_orders.go 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. // Copyright 2021 Tencent Inc. All rights reserved.
  2. //
  3. // 微信支付分账API
  4. //
  5. // 微信支付分账API
  6. //
  7. // API version: 0.0.3
  8. // Code generated by WechatPay APIv3 Generator based on [OpenAPI Generator](https://openapi-generator.tech); DO NOT EDIT.
  9. package profitsharing
  10. import (
  11. "context"
  12. "fmt"
  13. nethttp "net/http"
  14. neturl "net/url"
  15. "strings"
  16. "github.com/wechatpay-apiv3/wechatpay-go/core"
  17. "github.com/wechatpay-apiv3/wechatpay-go/core/consts"
  18. "github.com/wechatpay-apiv3/wechatpay-go/services"
  19. )
  20. type OrdersApiService services.Service
  21. // CreateOrder 请求分账API
  22. //
  23. // 微信订单支付成功后,商户发起分账请求,将结算后的资金分到分账接收方
  24. // 注意:
  25. // - 对同一笔订单最多能发起20次分账请求,每次请求最多分给50个接收方
  26. // - 此接口采用异步处理模式,即在接收到商户请求后,会先受理请求再异步处理,最终的分账结果可以通过查询分账接口获取
  27. //
  28. // 错误码列表
  29. // |名称|状态码|描述示例|原因|解决方案
  30. // |-|-|-|-|-|
  31. // |SYSTEM_ERROR|500|系统错误|系统超时|系统异常,请使用相同参数稍后重新调用|
  32. // |PARAM_ERROR|400|订单号格式不正确|请求参数不符合参数格式|请使用正确的参数重新调用|
  33. // |INVALID_REQUEST|400|非分账订单不支持分账|请求参数符合参数格式,但不符合业务规则|请根据返回的错误信息确认违反的业务规则|
  34. // |RATELIMIT_EXCEED|429|对同笔订单分账频率过高|接口有频率限制|请降低频率后重试|
  35. // |NOT_ENOUGH|403|分账金额不足|传入的分账金额超过了当前订单的剩余可分金额|调整分账金额|
  36. // |NO_AUTH|403|商户无权限|未开通分账权限|请开通商户号分账权限|
  37. func (a *OrdersApiService) CreateOrder(ctx context.Context, req CreateOrderRequest) (resp *OrdersEntity, result *core.APIResult, err error) {
  38. var (
  39. localVarHTTPMethod = nethttp.MethodPost
  40. localVarPostBody interface{}
  41. localVarQueryParams neturl.Values
  42. localVarHeaderParams = nethttp.Header{}
  43. )
  44. // 对请求中敏感字段进行加密
  45. encReq := req.Clone()
  46. encryptCertificate, err := a.Client.EncryptRequest(ctx, encReq)
  47. if err != nil {
  48. return nil, nil, fmt.Errorf("encrypt request failed: %v", err)
  49. }
  50. if encryptCertificate != "" {
  51. localVarHeaderParams.Set(consts.WechatPaySerial, encryptCertificate)
  52. }
  53. req = *encReq
  54. localVarPath := consts.WechatPayAPIServer + "/v3/profitsharing/orders"
  55. // Make sure All Required Params are properly set
  56. // Setup Body Params
  57. localVarPostBody = req
  58. // Determine the Content-Type Header
  59. localVarHTTPContentTypes := []string{"application/json"}
  60. // Setup Content-Type
  61. localVarHTTPContentType := core.SelectHeaderContentType(localVarHTTPContentTypes)
  62. // Perform Http Request
  63. result, err = a.Client.Request(ctx, localVarHTTPMethod, localVarPath, localVarHeaderParams, localVarQueryParams, localVarPostBody, localVarHTTPContentType)
  64. if err != nil {
  65. return nil, result, err
  66. }
  67. // Extract OrdersEntity from Http Response
  68. resp = new(OrdersEntity)
  69. err = core.UnMarshalResponse(result.Response, resp)
  70. if err != nil {
  71. return nil, result, err
  72. }
  73. return resp, result, nil
  74. }
  75. // QueryOrder 查询分账结果API
  76. //
  77. // 发起分账请求后,可调用此接口查询分账结果
  78. // 注意:
  79. // - 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果
  80. //
  81. // 错误码列表
  82. // |名称|状态码|描述示例|原因|解决方案
  83. // |-|-|-|-|-|
  84. // |SYSTEM_ERROR|500|系统错误|系统超时|系统异常,请使用相同参数稍后重新调用|
  85. // |PARAM_ERROR|400|商户号未设置|请求参数不符合参数格式|请使用正确的参数重新调用|
  86. // |RATELIMIT_EXCEED|429|商户发起分账查询的频率过高|接口有频率限制|请降低频率后重试|
  87. // |RESOURCE_NOT_EXISTS|404|记录不存在|分账单不存在|请检查请求的单号是否正确|
  88. func (a *OrdersApiService) QueryOrder(ctx context.Context, req QueryOrderRequest) (resp *OrdersEntity, result *core.APIResult, err error) {
  89. var (
  90. localVarHTTPMethod = nethttp.MethodGet
  91. localVarPostBody interface{}
  92. localVarQueryParams neturl.Values
  93. localVarHeaderParams = nethttp.Header{}
  94. )
  95. // Make sure Path Params are properly set
  96. if req.OutOrderNo == nil {
  97. return nil, nil, fmt.Errorf("field `OutOrderNo` is required and must be specified in QueryOrderRequest")
  98. }
  99. localVarPath := consts.WechatPayAPIServer + "/v3/profitsharing/orders/{out_order_no}"
  100. // Build Path with Path Params
  101. localVarPath = strings.Replace(localVarPath, "{"+"out_order_no"+"}", neturl.PathEscape(core.ParameterToString(*req.OutOrderNo, "")), -1)
  102. // Make sure All Required Params are properly set
  103. if req.TransactionId == nil {
  104. return nil, nil, fmt.Errorf("field `TransactionId` is required and must be specified in QueryOrderRequest")
  105. }
  106. // Setup Query Params
  107. localVarQueryParams = neturl.Values{}
  108. if req.SubMchid != nil {
  109. localVarQueryParams.Add("sub_mchid", core.ParameterToString(*req.SubMchid, ""))
  110. }
  111. localVarQueryParams.Add("transaction_id", core.ParameterToString(*req.TransactionId, ""))
  112. // Determine the Content-Type Header
  113. localVarHTTPContentTypes := []string{}
  114. // Setup Content-Type
  115. localVarHTTPContentType := core.SelectHeaderContentType(localVarHTTPContentTypes)
  116. // Perform Http Request
  117. result, err = a.Client.Request(ctx, localVarHTTPMethod, localVarPath, localVarHeaderParams, localVarQueryParams, localVarPostBody, localVarHTTPContentType)
  118. if err != nil {
  119. return nil, result, err
  120. }
  121. // Extract OrdersEntity from Http Response
  122. resp = new(OrdersEntity)
  123. err = core.UnMarshalResponse(result.Response, resp)
  124. if err != nil {
  125. return nil, result, err
  126. }
  127. return resp, result, nil
  128. }
  129. // UnfreezeOrder 解冻剩余资金API
  130. //
  131. // 不需要进行分账的订单,可直接调用本接口将订单的金额全部解冻给特约商户
  132. // 注意:
  133. // - 调用分账接口后,需要解冻剩余资金时,调用本接口将剩余的分账金额全部解冻给特约商户
  134. // - 此接口采用异步处理模式,即在接收到商户请求后,会先受理请求再异步处理,最终的分账结果可以通过查询分账接口获取
  135. //
  136. // 错误码列表
  137. // |名称|状态码|描述示例|原因|解决方案
  138. // |-|-|-|-|-|
  139. // |SYSTEM_ERROR|500|系统错误|系统超时|系统异常,请使用相同参数稍后重新调用|
  140. // |PARAM_ERROR|400|订单号格式不正确|请求参数不符合参数格式|请使用正确的参数重新调用|
  141. // |INVALID_REQUEST|400|非分账订单不支持解冻剩余资金|请求参数符合参数格式,但不符合业务规则|请根据返回的错误信息确认违反的业务规则|
  142. // |RATELIMIT_EXCEED|429|对同笔订单分账频率过高|接口有频率限制|请降低频率后重试|
  143. // |NOT_ENOUGH|403|分账金额为0|分账已完成|分账已完成,无需再请求解冻剩余资金|
  144. // |NO_AUTH|403|商户无权限|未开通分账权限|请开通商户号分账权限|
  145. func (a *OrdersApiService) UnfreezeOrder(ctx context.Context, req UnfreezeOrderRequest) (resp *OrdersEntity, result *core.APIResult, err error) {
  146. var (
  147. localVarHTTPMethod = nethttp.MethodPost
  148. localVarPostBody interface{}
  149. localVarQueryParams neturl.Values
  150. localVarHeaderParams = nethttp.Header{}
  151. )
  152. localVarPath := consts.WechatPayAPIServer + "/v3/profitsharing/orders/unfreeze"
  153. // Make sure All Required Params are properly set
  154. // Setup Body Params
  155. localVarPostBody = req
  156. // Determine the Content-Type Header
  157. localVarHTTPContentTypes := []string{"application/json"}
  158. // Setup Content-Type
  159. localVarHTTPContentType := core.SelectHeaderContentType(localVarHTTPContentTypes)
  160. // Perform Http Request
  161. result, err = a.Client.Request(ctx, localVarHTTPMethod, localVarPath, localVarHeaderParams, localVarQueryParams, localVarPostBody, localVarHTTPContentType)
  162. if err != nil {
  163. return nil, result, err
  164. }
  165. // Extract OrdersEntity from Http Response
  166. resp = new(OrdersEntity)
  167. err = core.UnMarshalResponse(result.Response, resp)
  168. if err != nil {
  169. return nil, result, err
  170. }
  171. return resp, result, nil
  172. }