package alipay import ( "fmt" "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys" "git.qianqiusoft.com/qianqiusoft/light-apiengine/models" "errors" "github.com/smartwalle/alipay" ) var aliPayCallbackHandler func(result *alipay.TradeNotification)models.SysReturn = nil // 注册微信支付回调处理函数 func RegisterAliPayCallbackHandler(handler func(result *alipay.TradeNotification)models.SysReturn){ aliPayCallbackHandler = handler } func CallWxPayCallbackHandler(c *entitys.CtrlContext)models.SysReturn{ if aliPayCallbackHandler == nil{ return models.SysReturn{500, "微信支付回调处理函数为空", nil} } noti, err := alipayClient.GetTradeNotification(c.Ctx.Request) if err != nil{ return models.SysReturn{500, err.Error(), nil} } ret := aliPayCallbackHandler(noti) if ret.Code != 200{ fmt.Println("支付宝支付失败", ret.Msg) }else{ fmt.Println("支付宝支付成功") } alipay.AckNotification(c.Ctx.Writer) return ret } // 扫码支付 func PayNavite(param *PayParams)(*alipay.TradePreCreateRsp, error){ p := alipay.TradePreCreate{} p.NotifyURL=AliPayConfig.AliPayCallback p.Subject=param.Subject p.OutTradeNo = param.OutTradeNo p.TotalAmount = param.TotalAmount if param.ProductCode == ""{ p.ProductCode = p.ProductCode }else{ p.ProductCode = "FACE_TO_FACE_PAYMENT" } fmt.Println("----------------------->阿里支付TradePreCreate参数-->", p) resp, err := alipayClient.TradePreCreate(p) if err != nil{ fmt.Println(err.Error()) return nil, err } return resp, nil } // 关闭订单 // APP支付、手机网站支付和电脑网站支付产生的交易,可调用 alipay.trade.close(统一收单交易关闭接口)直接将未付款的交易进行关闭 func CloseOrder(outTradeNo string)(*alipay.TradeCloseRsp, error){ tcparam := alipay.TradeClose{} tcparam.OutTradeNo = outTradeNo resp, err := alipayClient.TradeClose(tcparam) if err != nil{ return resp, err } if resp.Content.Code == "10000"{ // 10000 处理成功 return resp, nil }else{ fmt.Println("关闭订单失败", resp.Content.Code, resp.Content.Msg) return resp, errors.New("关闭订单失败") } } // 取消订单 // 当面付产生的交易,支付交易返回失败或支付系统超时 func CancelOrder(outTradeNo string)(*alipay.TradeCancelRsp, error){ tcparam := alipay.TradeCancel{} tcparam.OutTradeNo = outTradeNo resp, err := alipayClient.TradeCancel(tcparam) if err != nil{ return resp, err } if resp.Content.Code == "10000"{ // 10000 处理成功 return resp, nil }else{ fmt.Println("取消订单失败", resp.Content.Code, resp.Content.Msg) return resp, errors.New("取消订单失败") } }