Skip to content

Commit f312c67

Browse files
littlerokiedaneng
and
daneng
authored
feat:增加查询订单待分账金额 查询最大分账比例 (#385)
Co-authored-by: daneng <[email protected]>
1 parent 7524426 commit f312c67

File tree

4 files changed

+113
-36
lines changed

4 files changed

+113
-36
lines changed

Diff for: doc/wechat_v2.md

+2
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,8 @@ return c.String(http.StatusOK, rsp.ToXmlString())
245245
* 请求单次分账(正式):`client.ProfitSharing()`
246246
* 请求多次分账(正式):`client.MultiProfitSharing()`
247247
* 查询分账结果(正式):`client.ProfitSharingQuery()`
248+
* 查询订单待分账金额 (正式):`client.ProfitSharingOrderAmountQuery()`
249+
* 查询最大分账比例 (正式):`client.ProfitSharingMerchantRatioQuery()`
248250
* 添加分账接收方(正式):`client.ProfitSharingAddReceiver()`
249251
* 删除分账接收方(正式):`client.ProfitSharingRemoveReceiver()`
250252
* 完结分账(正式):`client.ProfitSharingFinish()`

Diff for: wechat/constant.go

+38-36
Original file line numberDiff line numberDiff line change
@@ -14,42 +14,44 @@ const (
1414
baseUrlUs = "https://apius.mch.weixin.qq.com" // 其他
1515

1616
// 正式
17-
microPay = "/pay/micropay" // 提交付款码支付
18-
unifiedOrder = "/pay/unifiedorder" // 统一下单
19-
orderQuery = "/pay/orderquery" // 查询订单
20-
closeOrder = "/pay/closeorder" // 关闭订单
21-
refund = "/secapi/pay/refund" // 申请退款
22-
reverse = "/secapi/pay/reverse" // 撤销订单
23-
refundQuery = "/pay/refundquery" // 查询退款
24-
downloadBill = "/pay/downloadbill" // 下载对账单
25-
downloadFundFlow = "/pay/downloadfundflow" // 下载资金账单
26-
report = "/payitil/report" // 交易保障
27-
batchQueryComment = "/billcommentsp/batchquerycomment" // 拉取订单评价数据
28-
transfers = "/mmpaymkttransfers/promotion/transfers" // 企业付款(企业向微信用户个人付款)
29-
getTransferInfo = "/mmpaymkttransfers/gettransferinfo" // 查询企业付款
30-
sendCashRed = "/mmpaymkttransfers/sendredpack" // 发放现金红包
31-
sendAppletRed = "/mmpaymkttransfers/sendminiprogramhb" // 发放小程序红包
32-
sendGroupCashRed = "/mmpaymkttransfers/sendgroupredpack" // 发放裂变红包
33-
getRedRecord = "/mmpaymkttransfers/gethbinfo" // 查询红包记录
34-
authCodeToOpenid = "/tools/authcodetoopenid" // 授权码查询openid
35-
entrustPublic = "/papay/entrustweb" // 公众号纯签约
36-
entrustApp = "/papay/preentrustweb" // APP纯签约
37-
entrustH5 = "/papay/h5entrustweb" // H5纯签约
38-
entrustPaying = "/pay/contractorder" // 支付中签约
39-
entrustQuery = "/papay/querycontract" // 查询签约关系
40-
entrustApplyPay = "/pay/pappayapply" // 申请扣款
41-
entrustDelete = "/papay/deletecontract" // 申请解约
42-
profitSharing = "/secapi/pay/profitsharing" // 请求单次分账
43-
multiProfitSharing = "/secapi/pay/multiprofitsharing" // 请求多次分账
44-
profitSharingQuery = "/pay/profitsharingquery" // 查询分账结果
45-
profitSharingAddReceiver = "/pay/profitsharingaddreceiver" // 添加分账接收方
46-
profitSharingRemoveReceiver = "/pay/profitsharingremovereceiver" // 删除分账接收方
47-
profitSharingFinish = "/secapi/pay/profitsharingfinish" // 完结分账
48-
profitSharingReturn = "/secapi/pay/profitsharingreturn" // 分账退回
49-
profitSharingReturnQuery = "/pay/profitsharingreturnquery" // 分账回退结果查询
50-
payBank = "/mmpaysptrans/pay_bank" // 企业付款到银行卡API
51-
queryBank = "/mmpaysptrans/query_bank" // 查询企业付款到银行卡API
52-
getPublicKey = "https://fraud.mch.weixin.qq.com/risk/getpublickey" // 获取RSA加密公钥API
17+
microPay = "/pay/micropay" // 提交付款码支付
18+
unifiedOrder = "/pay/unifiedorder" // 统一下单
19+
orderQuery = "/pay/orderquery" // 查询订单
20+
closeOrder = "/pay/closeorder" // 关闭订单
21+
refund = "/secapi/pay/refund" // 申请退款
22+
reverse = "/secapi/pay/reverse" // 撤销订单
23+
refundQuery = "/pay/refundquery" // 查询退款
24+
downloadBill = "/pay/downloadbill" // 下载对账单
25+
downloadFundFlow = "/pay/downloadfundflow" // 下载资金账单
26+
report = "/payitil/report" // 交易保障
27+
batchQueryComment = "/billcommentsp/batchquerycomment" // 拉取订单评价数据
28+
transfers = "/mmpaymkttransfers/promotion/transfers" // 企业付款(企业向微信用户个人付款)
29+
getTransferInfo = "/mmpaymkttransfers/gettransferinfo" // 查询企业付款
30+
sendCashRed = "/mmpaymkttransfers/sendredpack" // 发放现金红包
31+
sendAppletRed = "/mmpaymkttransfers/sendminiprogramhb" // 发放小程序红包
32+
sendGroupCashRed = "/mmpaymkttransfers/sendgroupredpack" // 发放裂变红包
33+
getRedRecord = "/mmpaymkttransfers/gethbinfo" // 查询红包记录
34+
authCodeToOpenid = "/tools/authcodetoopenid" // 授权码查询openid
35+
entrustPublic = "/papay/entrustweb" // 公众号纯签约
36+
entrustApp = "/papay/preentrustweb" // APP纯签约
37+
entrustH5 = "/papay/h5entrustweb" // H5纯签约
38+
entrustPaying = "/pay/contractorder" // 支付中签约
39+
entrustQuery = "/papay/querycontract" // 查询签约关系
40+
entrustApplyPay = "/pay/pappayapply" // 申请扣款
41+
entrustDelete = "/papay/deletecontract" // 申请解约
42+
profitSharing = "/secapi/pay/profitsharing" // 请求单次分账
43+
multiProfitSharing = "/secapi/pay/multiprofitsharing" // 请求多次分账
44+
profitSharingQuery = "/pay/profitsharingquery" // 查询分账结果
45+
profitSharingAddReceiver = "/pay/profitsharingaddreceiver" // 添加分账接收方
46+
profitSharingRemoveReceiver = "/pay/profitsharingremovereceiver" // 删除分账接收方
47+
profitSharingFinish = "/secapi/pay/profitsharingfinish" // 完结分账
48+
profitSharingOrderAmountQuery = "/pay/profitsharingorderamountquery" // 查询订单待分账金额
49+
profitSharingMerchantRatioQuery = "/pay/profitsharingmerchantratioquery" // 查询最大分账比例
50+
profitSharingReturn = "/secapi/pay/profitsharingreturn" // 分账退回
51+
profitSharingReturnQuery = "/pay/profitsharingreturnquery" // 分账回退结果查询
52+
payBank = "/mmpaysptrans/pay_bank" // 企业付款到银行卡API
53+
queryBank = "/mmpaysptrans/query_bank" // 查询企业付款到银行卡API
54+
getPublicKey = "https://fraud.mch.weixin.qq.com/risk/getpublickey" // 获取RSA加密公钥API
5355

5456
// 海关自助清关
5557
customsDeclareOrder = "/cgi-bin/mch/customs/customdeclareorder" // 订单附加信息提交

Diff for: wechat/merchant.go

+46
Original file line numberDiff line numberDiff line change
@@ -341,6 +341,52 @@ func (w *Client) ProfitSharingFinish(ctx context.Context, bm gopay.BodyMap) (wxR
341341
return wxRsp, nil
342342
}
343343

344+
// 服务商可通过调用此接口查询订单剩余待分金额
345+
// 接口频率:30QPS
346+
// 微信文档:https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_10&index=7
347+
func (w *Client) ProfitSharingOrderAmountQuery(ctx context.Context, bm gopay.BodyMap) (wxRsp *ProfitSharingOrderAmountQueryResponse, err error) {
348+
err = bm.CheckEmptyError("mch_id", "transaction_id", "nonce_str")
349+
if err != nil {
350+
return nil, err
351+
}
352+
353+
// 设置签名类型,官方文档此接口只支持 HMAC_SHA256
354+
bm.Set("sign_type", SignType_HMAC_SHA256)
355+
bs, err := w.doProdPostTLS(ctx, bm, profitSharingOrderAmountQuery)
356+
if err != nil {
357+
return nil, err
358+
}
359+
wxRsp = new(ProfitSharingOrderAmountQueryResponse)
360+
if err = xml.Unmarshal(bs, wxRsp); err != nil {
361+
return nil, fmt.Errorf("[%w]: %v, bytes: %s", gopay.UnmarshalErr, err, string(bs))
362+
}
363+
return wxRsp, nil
364+
}
365+
366+
// 服务商可以查询子商户设置的允许服务商分账的最大比例
367+
// 接口频率:30QPS
368+
// 微信文档:https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_10&index=7
369+
func (w *Client) ProfitSharingMerchantRatioQuery(ctx context.Context, bm gopay.BodyMap) (wxRsp *ProfitSharingMerchanTratioQuery, err error) {
370+
err = bm.CheckEmptyError("mch_id", "nonce_str")
371+
if err != nil {
372+
return nil, err
373+
}
374+
if (bm.GetString("sub_mch_id") == gopay.NULL) && (bm.GetString("brand_mch_id") == gopay.NULL) {
375+
return nil, errors.New("param sub_mch_id and brand_mch_id can not be null at the same time")
376+
}
377+
// 设置签名类型,官方文档此接口只支持 HMAC_SHA256
378+
bm.Set("sign_type", SignType_HMAC_SHA256)
379+
bs, err := w.doProdPostTLS(ctx, bm, profitSharingMerchantRatioQuery)
380+
if err != nil {
381+
return nil, err
382+
}
383+
wxRsp = new(ProfitSharingMerchanTratioQuery)
384+
if err = xml.Unmarshal(bs, wxRsp); err != nil {
385+
return nil, fmt.Errorf("[%w]: %v, bytes: %s", gopay.UnmarshalErr, err, string(bs))
386+
}
387+
return wxRsp, nil
388+
}
389+
344390
// 分账回退
345391
// 对订单进行退款时,如果订单已经分账,可以先调用此接口将指定的金额从分账接收方(仅限商户类型的分账接收方)回退给本商户,然后再退款。
346392
// 回退以原分账请求为依据,可以对分给分账接收方的金额进行多次回退,只要满足累计回退不超过该请求中分给接收方的金额。

Diff for: wechat/model.go

+27
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,33 @@ type ProfitSharingReturnResponse struct {
685685
FinishTime string `xml:"finish_time,omitempty" json:"finish_time,omitempty"` // 完成时间
686686
}
687687

688+
// ProfitSharingOrderAmountQueryResponse 查询订单待分账金额响应结果
689+
type ProfitSharingOrderAmountQueryResponse struct {
690+
ReturnCode string `xml:"return_code,omitempty" json:"return_code,omitempty"` // 返回状态码 SUCCESS/FAIL 此字段是通信标识,非交易标识
691+
ErrCode string `xml:"err_code,omitempty" json:"err_code,omitempty"` // 错误代码
692+
ErrorMsg string `xml:"error_msg,omitempty" json:"error_msg,omitempty"` // 返回信息 如果返回状态码为FAIL,则本字段存在,且为失败的错误信息
693+
ErrCodeDes string `xml:"err_code_des,omitempty" json:"err_code_des,omitempty"` // 错误代码描述
694+
MchId string `xml:"mch_id,omitempty" json:"mch_id,omitempty"` //调用接口时提供的服务商户号
695+
TransactionId string `xml:"transaction_id,omitempty" json:"transaction_id,omitempty"` //微信支付订单号
696+
UnsplitAmount int `xml:"unsplit_amount,omitempty" json:"unsplit_amount,omitempty"` //订单剩余待分金额,整数,单位为分
697+
NonceStr string `xml:"nonce_str,omitempty" json:"nonce_str,omitempty"` //微信返回的随机字符串
698+
Sign string `xml:"sign,omitempty" json:"sign,omitempty"` //微信返回的签名
699+
}
700+
701+
// ProfitSharingReturnResponse 分账退回响应结果
702+
type ProfitSharingMerchanTratioQuery struct {
703+
ReturnCode string `xml:"return_code,omitempty" json:"return_code,omitempty"` // 返回状态码 SUCCESS/FAIL 此字段是通信标识,非交易标识
704+
ErrCode string `xml:"err_code,omitempty" json:"err_code,omitempty"` // 错误代码
705+
ErrorMsg string `xml:"error_msg,omitempty" json:"error_msg,omitempty"` // 返回信息 如果返回状态码为FAIL,则本字段存在,且为失败的错误信息
706+
ErrCodeDes string `xml:"err_code_des,omitempty" json:"err_code_des,omitempty"` // 错误代码描述
707+
MchId string `xml:"mch_id,omitempty" json:"mch_id,omitempty"` //调用接口时提供的服务商户号
708+
SubMchId string `xml:"sub_mch_id,omitempty" json:"sub_mch_id,omitempty"` //微信支付分配的子商户号,即分账的出资商户号。查询子商户号的设置的最大分账比例(普通分账)时返回此字段
709+
BrandMchId string `xml:"brand_mch_id,omitempty" json:"brand_mch_id,omitempty"` //调用接口时提供的品牌主商户号。查询品牌主商户设置的全局分账比例(品牌分账)时返回此字段。
710+
MaxRatio int `xml:"max_ratio,omitempty" json:"max_ratio,omitempty"` //子商户允许服务商分账的最大比例,单位万分比,比如2000表示20%
711+
NonceStr string `xml:"nonce_str,omitempty" json:"nonce_str,omitempty"` //微信返回的随机字符串
712+
Sign string `xml:"sign,omitempty" json:"sign,omitempty"` //微信返回的签名
713+
}
714+
688715
type PayBankResponse struct {
689716
ReturnCode string `xml:"return_code,omitempty" json:"return_code,omitempty"`
690717
ReturnMsg string `xml:"return_msg,omitempty" json:"return_msg,omitempty"`

0 commit comments

Comments
 (0)