alipay.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package alipay
  2. import (
  3. "fmt"
  4. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  5. "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  6. "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. // APP支付、手机网站支付和电脑网站支付产生的交易,可调用 alipay.trade.close(统一收单交易关闭接口)直接将未付款的交易进行关闭
  53. func CloseOrder(outTradeNo string)(*alipay.TradeCloseRsp, error){
  54. tcparam := alipay.TradeClose{}
  55. tcparam.OutTradeNo = outTradeNo
  56. resp, err := alipayClient.TradeClose(tcparam)
  57. if err != nil{
  58. return resp, err
  59. }
  60. if resp.Content.Code == "10000"{
  61. // 10000 处理成功
  62. return resp, nil
  63. }else{
  64. fmt.Println("关闭订单失败", resp.Content.Code, resp.Content.Msg)
  65. return resp, errors.New("关闭订单失败")
  66. }
  67. }
  68. // 取消订单
  69. // 当面付产生的交易,支付交易返回失败或支付系统超时
  70. func CancelOrder(outTradeNo string)(*alipay.TradeCancelRsp, error){
  71. tcparam := alipay.TradeCancel{}
  72. tcparam.OutTradeNo = outTradeNo
  73. resp, err := alipayClient.TradeCancel(tcparam)
  74. if err != nil{
  75. return resp, err
  76. }
  77. if resp.Content.Code == "10000"{
  78. // 10000 处理成功
  79. return resp, nil
  80. }else{
  81. fmt.Println("取消订单失败", resp.Content.Code, resp.Content.Msg)
  82. return resp, errors.New("取消订单失败")
  83. }
  84. }