diff --git a/unify/pay.go b/unify/pay.go index b854753..55ed809 100644 --- a/unify/pay.go +++ b/unify/pay.go @@ -4,8 +4,10 @@ import ( "encoding/json" "errors" "fmt" - "git.u8t.cn/open/gosdk/util" "net/url" + + "git.u8t.cn/open/gosdk/util" + "git.u8t.cn/open/goutil" ) var ( @@ -219,3 +221,27 @@ func (p *Pay) RefundPartnerOrder(req *RefundOrderReq) error { return nil } + +func (p *Pay) Transfer(req *TransferReq) error { + if err := req.Check(); err != nil { + return err + } + + reqUrl := fmt.Sprintf("%s/api/pay/transfer?", p.address) + result, err := util.HttpPostJson(reqUrl, map[string]string{ + "x-token": p.token, + }, []byte(goutil.EncodeJSON(req))) + + if err != nil { + return err + } + var rsp CommonResponse + if err := json.Unmarshal([]byte(result), &rsp); err != nil { + return err + } + if rsp.Code != 0 { + return fmt.Errorf("%d:%s", rsp.Code, rsp.Message) + } + + return nil +} diff --git a/unify/pay_type.go b/unify/pay_type.go index dbf43b2..5f6ead2 100644 --- a/unify/pay_type.go +++ b/unify/pay_type.go @@ -1,5 +1,7 @@ package unify +import "errors" + type OrderUser struct { UserId string `json:"userId"` UserName string `json:"userName"` @@ -51,8 +53,35 @@ type RefundOrderReq struct { RefundFee int64 `json:"refundFee,omitempty"` } +type TransferReq struct { + PayAmount int64 `json:"payAmount"` + PayType string `json:"payType"` + PayTitle string `json:"payTitle"` + PayChannel string `json:"payChannel"` + UserId string `json:"userId"` +} + type CommonResponse struct { Code int `json:"code"` Message string `json:"message"` Data map[string]interface{} `json:"data"` } + +func (r *TransferReq) Check() error { + if r.PayTitle == "" { + return errors.New("PayTitle is nil") + } + if r.PayChannel == "" { + return errors.New("PayChannel is nil") + } + if r.PayType == "" { + return errors.New("PayType is nil") + } + if r.UserId == "" { + return errors.New("UserId is nil") + } + if r.PayAmount < 0 { + return errors.New("PayAmount is nil") + } + return nil +}