123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- // Copyright 2021 Tencent Inc. All rights reserved.
- //
- // 境内普通商户退款API
- //
- // 境内普通商户退款功能涉及的API文档
- //
- // API version: 1.1.1
- // Code generated by WechatPay APIv3 Generator based on [OpenAPI Generator](https://openapi-generator.tech); DO NOT EDIT.
- package refunddomestic
- import (
- "context"
- "fmt"
- nethttp "net/http"
- neturl "net/url"
- "strings"
- "git.nanodreamtech.com/sg/wechatpay-go/core"
- "git.nanodreamtech.com/sg/wechatpay-go/core/consts"
- "git.nanodreamtech.com/sg/wechatpay-go/services"
- )
- type RefundsApiService services.Service
- // Create 退款申请
- //
- // # 应用场景
- // 当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,微信支付将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。
- //
- // 注意:
- // 1、交易时间超过一年的订单无法提交退款
- // 2、微信支付退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。申请退款总金额不能超过订单金额。 一笔退款失败后重新提交,请不要更换退款单号,请使用原商户退款单号
- // 3、请求频率限制:150qps,即每秒钟正常的申请退款请求次数不超过150次
- //
- // 错误或无效请求频率限制:6qps,即每秒钟异常或错误的退款申请请求不超过6次
- //
- // 4、每个支付订单的部分退款次数不能超过50次
- // 5、如果同一个用户有多笔退款,建议分不同批次进行退款,避免并发退款导致退款失败
- // 6、申请退款接口的返回仅代表业务的受理情况,具体退款是否成功,需要通过退款查询接口获取结果
- //
- // # 错误码
- // |名称|描述|原因|解决方案|
- // |-|-|-|-|
- // |SYSTEM_ERROR|接口返回错误|系统超时等|请不要更换商户退款单号,请使用相同参数再次调用API。|
- // |USER_ACCOUNT_ABNORMAL|退款请求失败|用户帐号注销|此状态代表退款申请失败,商户可自行处理退款。|
- // |NOT_ENOUGH|余额不足|商户可用退款余额不足|此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。|
- // |PARAM_ERROR|参数错误|请求参数未按指引进行填写|请求参数错误,请重新检查再调用退款申请|
- // |MCH_NOT_EXISTS|MCHID不存在|参数中缺少MCHID|请检查MCHID是否正确|
- // |RESOURCE_NOT_EXISTS|订单号不存在|缺少有效的订单号|请检查你的订单号是否正确且是否已支付,未支付的订单不能发起退款|
- // |SIGN_ERROR|签名错误|参数签名结果不正确|请检查签名参数和方法是否都符合签名算法要求|
- // |FREQUENCY_LIMITED|频率限制|2个月之前的订单申请退款有频率限制|该笔退款未受理,请降低频率后重试|
- // |INVALID_REQUEST|请求参数符合参数格式,但不符合业务规则|不符合业务规则|此状态代表退款申请失败,商户可根据具体的错误提示做相应的处理。|
- // |NO_AUTH|没有退款权限|没有此单的退款权限|此状态代表退款申请失败,请检查是否有退这笔订单的权限|
- func (a *RefundsApiService) Create(ctx context.Context, req CreateRequest) (resp *Refund, result *core.APIResult, err error) {
- var (
- localVarHTTPMethod = nethttp.MethodPost
- localVarPostBody interface{}
- localVarQueryParams neturl.Values
- localVarHeaderParams = nethttp.Header{}
- )
- localVarPath := consts.WechatPayAPIServer + "/v3/refund/domestic/refunds"
- // 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 Refund from Http Response
- resp = new(Refund)
- err = core.UnMarshalResponse(result.Response, resp)
- if err != nil {
- return nil, result, err
- }
- return resp, result, nil
- }
- // QueryByOutRefundNo 查询单笔退款(通过商户退款单号)
- //
- // # 应用场景
- // 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时,建议查询退款状态在提交退款申请后1分钟发起,一般来说零钱支付的退款5分钟内到账,银行卡支付的退款1-3个工作日到账。
- // # 错误码
- // |名称|描述|原因|解决方案|
- // |-|-|-|-|
- // |SYSTEM_ERROR|接口返回错误|系统超时|请尝试再次调用API。|
- // |RESOURCE_NOT_EXISTS|退款单查询失败|退款单号错误或退款单状态不正确|请检查退款单号是否有误以及订单状态是否正确,如:未支付、已支付未退款|
- // |PARAM_ERROR|参数错误|请求参数未按指引进行填写|请求参数错误,请检查参数再调用退款查询|
- // |MCH_NOT_EXISTS|MCHID不存在|参数中缺少MCHID|请检查MCHID是否正确|
- // |SIGN_ERROR|签名错误|参数签名结果不正确|请检查签名参数和方法是否都符合签名算法要求|
- func (a *RefundsApiService) QueryByOutRefundNo(ctx context.Context, req QueryByOutRefundNoRequest) (resp *Refund, 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.OutRefundNo == nil {
- return nil, nil, fmt.Errorf("field `OutRefundNo` is required and must be specified in QueryByOutRefundNoRequest")
- }
- localVarPath := consts.WechatPayAPIServer + "/v3/refund/domestic/refunds/{out_refund_no}"
- // Build Path with Path Params
- localVarPath = strings.Replace(localVarPath, "{"+"out_refund_no"+"}", neturl.PathEscape(core.ParameterToString(*req.OutRefundNo, "")), -1)
- // Make sure All Required Params are properly set
- // Setup Query Params
- localVarQueryParams = neturl.Values{}
- if req.SubMchid != nil {
- localVarQueryParams.Add("sub_mchid", core.ParameterToString(*req.SubMchid, ""))
- }
- // 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 Refund from Http Response
- resp = new(Refund)
- err = core.UnMarshalResponse(result.Response, resp)
- if err != nil {
- return nil, result, err
- }
- return resp, result, nil
- }
|