This commit is contained in:
邹宗楠
2023-04-06 18:25:24 +08:00
parent 18572ce050
commit 88e7b96fec
10 changed files with 457 additions and 18 deletions

View File

@@ -1,6 +1,7 @@
package kuaishou_mini
import (
"encoding/json"
"errors"
"fmt"
"git.rosy.net.cn/baseapi/utils"
@@ -31,6 +32,127 @@ func (a *API) PreCreateOrder(param *PreCreateOrderReq) (string, error) {
return order.OrderInfo, nil
}
// GetOrderDetail 订单详情查询接口
func (a *API) GetOrderDetail(outOrderNo string) (*PaymentInfo, error) {
data, err := a.AccessAPI1(KuaiShouGetOrderDetail, map[string]interface{}{"out_order_no": outOrderNo})
if err != nil {
return nil, err
}
orderDetail := &GetOrderDetailRes{}
if err := utils.Map2StructByJson(data, orderDetail, false); err != nil {
return nil, err
}
if orderDetail.Result != 1 {
return nil, err
}
if orderDetail.PaymentInfo == "" {
return nil, errors.New("快手支付订单详情返回值为空")
}
paymentInfo := &PaymentInfo{}
if err := json.Unmarshal([]byte(orderDetail.PaymentInfo), paymentInfo); err != nil {
return nil, err
}
return paymentInfo, err
}
// RefundOrder 支付请求退款接口
// 在途资金中的所有货款均是与订单关联的,只有当该订单在途资金中剩余金额超过退款金额时,才可以进行在途资金的退款。
// 当可提现金额也不足退款金额时,会退款失败,为了避免出现订单无法退款的情况出现,请根据业务情况自行保留一部分可提现金额在系统中
func (a *API) RefundOrder(param *RefundParam) (refundNo string, err error) {
data, err := a.AccessAPI1(KuaiShouRefundOrder, utils.Struct2MapByJson(param))
if err != nil {
return "", err
}
var result *RefundRes
if err := utils.Map2StructByJson(data, &result, false); err != nil {
return "", err
}
if result.Result != 1 {
return "", errors.New(result.ErrorMsg)
}
return result.RefundNo, nil
}
// RefundOrderDetail 查询退款订单详情
func (a *API) RefundOrderDetail(outRefundNo string) (*RefundInfo, error) {
data, err := a.AccessAPI1(KuaiShouRefundOrderDetail, map[string]interface{}{"out_refund_no": outRefundNo})
if err != nil {
return nil, err
}
var refundOrderDetail *RefundOrderDetail
if err := utils.Map2StructByJson(data, &refundOrderDetail, false); err != nil {
return nil, err
}
if refundOrderDetail.Result != 1 {
return nil, errors.New(refundOrderDetail.ErrorMsg)
}
var refundInfo *RefundInfo
if err := json.Unmarshal([]byte(refundOrderDetail.RefundInfo), &refundInfo); err != nil {
return nil, err
}
return refundInfo, nil
}
// PaySettleAccounts 结算用于确认一笔在途资金,将其转化为可提现资金。
// 结算规则
// 1、订单履约完成后发起结算结算周期为 订单到达核销状态订单状态为11或15满3天后可发起结算。核销状态通过订单同步接口 (opens new window)进行同步。
// 2、需要主动调用结算接口后才能进行后续资金的提现。
// 3、结算时小程序平台会收取整笔交易的平台服务费。若结算后发生退款则平台服务费不作退还。
func (a *API) PaySettleAccounts4Order(param *OrderSettleAccountParam) (string, error) {
data, err := a.AccessAPI1(KuaiShouGetSettleOrder, utils.Struct2MapByJson(param))
if err != nil {
return "", err
}
var settle *OrderSettleAccountRes
if err := utils.Map2StructByJson(data, &settle, false); err != nil {
return "", err
}
if settle.Result != 1 {
return "", err
}
return settle.SettleNo, nil
}
// QuerySettleInfo 查询结算信息
func (a *API) QuerySettleInfo(outSettleNo string) (*SettleInfo, error) {
data, err := a.AccessAPI1(KuaiShouQuerySettleOrder, map[string]interface{}{"out_settle_no": outSettleNo})
if err != nil {
return nil, err
}
var settle *QuerySettleInfoRes
if err := utils.Map2StructByJson(data, &settle, false); err != nil {
return nil, err
}
if settle.Result != 1 {
return nil, errors.New(settle.ErrorMsg)
}
if settle.SettleInfo == "" {
return nil, errors.New("数据查询为空")
}
var result *SettleInfo
if err := json.Unmarshal([]byte(settle.SettleInfo), result); err != nil {
return nil, err
}
return result, err
}
func (a *API) FullUrl(bashUrl string) string {
if a.accessToken == "" || a.expiresIn < time.Now().Unix() {
a.GetToken()