From 546ffb91557cb58092b9a0cb0ad44bd067c75793 Mon Sep 17 00:00:00 2001 From: zuomang Date: Thu, 1 Nov 2018 14:47:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BB=9F=E4=B8=80=E4=B8=8B?= =?UTF-8?q?=E5=8D=95=E6=8E=A5=E5=8F=A3=E7=9A=84=E8=BF=94=E5=9B=9E=EF=BC=8C?= =?UTF-8?q?=E6=8F=90=E4=BE=9B=E5=85=A8=E9=83=A8=E8=BF=94=E5=9B=9E=EF=BC=8C?= =?UTF-8?q?=E4=B8=8D=E4=BB=85=E4=BB=85=E6=98=AF=20prepay=20order?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pay/pay.go | 41 ++++++++++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/pay/pay.go b/pay/pay.go index 6a8eec7..0b2c601 100644 --- a/pay/pay.go +++ b/pay/pay.go @@ -35,8 +35,8 @@ type Config struct { Sign string } -// payResult 是 unifie order 接口的返回 -type payResult struct { +// PreOrder 是 unifie order 接口的返回 +type PreOrder struct { ReturnCode string `xml:"return_code"` ReturnMsg string `xml:"return_msg"` AppID string `xml:"appid,omitempty"` @@ -83,8 +83,8 @@ func NewPay(ctx *context.Context) *Pay { return &pay } -// PrePayID will request wechat merchant api and request for a pre payment order id -func (pcf *Pay) PrePayID(p *Params) (prePayID string, err error) { +// PrePayOrder return data for invoke wechat payment +func (pcf *Pay) PrePayOrder(p *Params) (payOrder PreOrder, err error) { nonceStr := util.RandomStr(32) tradeType := "JSAPI" template := "appid=%s&body=%s&mch_id=%s&nonce_str=%s¬ify_url=%s&openid=%s&out_trade_no=%s&spbill_create_ip=%s&total_fee=%s&trade_type=%s&key=%s" @@ -105,19 +105,34 @@ func (pcf *Pay) PrePayID(p *Params) (prePayID string, err error) { } rawRet, err := util.PostXML(payGateway, request) if err != nil { - return "", errors.New(err.Error() + " parameters : " + str) + return } - payRet := payResult{} - err = xml.Unmarshal(rawRet, &payRet) + err = xml.Unmarshal(rawRet, &payOrder) if err != nil { - return "", errors.New(err.Error()) + return } - if payRet.ReturnCode == "SUCCESS" { + if payOrder.ReturnCode == "SUCCESS" { //pay success - if payRet.ResultCode == "SUCCESS" { - return payRet.PrePayID, nil + if payOrder.ResultCode == "SUCCESS" { + err = nil + return } - return "", errors.New(payRet.ErrCode + payRet.ErrCodeDes) + err = errors.New(payOrder.ErrCode + payOrder.ErrCodeDes) + return } - return "", errors.New("[msg : xmlUnmarshalError] [rawReturn : " + string(rawRet) + "] [params : " + str + "] [sign : " + sign + "]") + err = errors.New("[msg : xmlUnmarshalError] [rawReturn : " + string(rawRet) + "] [params : " + str + "] [sign : " + sign + "]") + return +} + +// PrePayID will request wechat merchant api and request for a pre payment order id +func (pcf *Pay) PrePayID(p *Params) (prePayID string, err error) { + order, err := pcf.PrePayOrder(p) + if err != nil { + return + } + if order.PrePayID == "" { + err = errors.New("empty prepayid") + } + prePayID = order.PrePayID + return }