alipay.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package alipay
  2. import (
  3. "fmt"
  4. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  5. "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  6. "github.com/pkg/errors"
  7. "github.com/smartwalle/alipay"
  8. )
  9. var aliPayCallbackHandler func(result *alipay.TradeNotification)models.SysReturn = nil
  10. // 注册微信支付回调处理函数
  11. func RegisterAliPayCallbackHandler(handler func(result *alipay.TradeNotification)models.SysReturn){
  12. aliPayCallbackHandler = handler
  13. }
  14. func CallWxPayCallbackHandler(c *entitys.CtrlContext)models.SysReturn{
  15. if aliPayCallbackHandler == nil{
  16. return models.SysReturn{500, "微信支付回调处理函数为空", nil}
  17. }
  18. noti, err := alipayClient.GetTradeNotification(c.Ctx.Request)
  19. if err != nil{
  20. return models.SysReturn{500, err.Error(), nil}
  21. }
  22. ret := aliPayCallbackHandler(noti)
  23. if ret.Code != 200{
  24. fmt.Println("支付宝支付失败", ret.Msg)
  25. }else{
  26. fmt.Println("支付宝支付成功")
  27. }
  28. alipay.AckNotification(c.Ctx.Writer)
  29. return ret
  30. }
  31. // 扫码支付
  32. func PayNavite(param *PayParams)(*alipay.TradePreCreateRsp, error){
  33. p := alipay.TradePreCreate{}
  34. p.NotifyURL=AliPayConfig.AliPayCallback
  35. p.Subject=param.Subject
  36. p.OutTradeNo = param.OutTradeNo
  37. p.TotalAmount = param.TotalAmount
  38. if param.ProductCode == ""{
  39. p.ProductCode = p.ProductCode
  40. }else{
  41. p.ProductCode = "FACE_TO_FACE_PAYMENT"
  42. }
  43. fmt.Println("----------------------->阿里支付TradePreCreate参数-->", p)
  44. resp, err := alipayClient.TradePreCreate(p)
  45. if err != nil{
  46. fmt.Println(err.Error())
  47. return nil, err
  48. }
  49. return resp, nil
  50. }
  51. // 关闭订单
  52. func CloseOrder(outTradeNo string)(*alipay.TradeCloseRsp, error){
  53. tcparam := alipay.TradeClose{}
  54. tcparam.OutTradeNo = outTradeNo
  55. resp, err := alipayClient.TradeClose(tcparam)
  56. if err != nil{
  57. return resp, err
  58. }
  59. if resp.Content.Code != "10000"{
  60. // 10000 处理成功
  61. return resp, nil
  62. }else{
  63. fmt.Println("取消订单失败", resp.Content.Code, resp.Content.Msg)
  64. return resp, errors.New("取消订单失败")
  65. }
  66. }