附近小店
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
преди 10 месеца
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. package svc
  2. import (
  3. "applet/app/cfg"
  4. "applet/app/db"
  5. "applet/app/e"
  6. "applet/app/md"
  7. "applet/app/utils"
  8. "applet/app/utils/logx"
  9. "code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay"
  10. "errors"
  11. "fmt"
  12. "github.com/gin-gonic/gin"
  13. "github.com/iGoogle-ink/gopay/alipay"
  14. "github.com/tidwall/gjson"
  15. )
  16. // 支付宝回调处理
  17. func AlipayCallback(c *gin.Context) (string, error) {
  18. data, ok := c.Get("callback")
  19. if data == nil || !ok {
  20. return "", e.NewErrCode(e.ERR_INVALID_ARGS)
  21. }
  22. args := data.(*md.AliPayCallback)
  23. _, ok = db.DBs[args.MasterID]
  24. if !ok {
  25. return "", logx.Warn("Alipay Failed : master_id not found")
  26. }
  27. c.Set("mid", args.MasterID)
  28. // 回调交易状态失败
  29. if args.TradeStatus != "TRADE_SUCCESS" {
  30. return "", logx.Warn("Alipay Failed : trade status failed")
  31. }
  32. return args.OutTradeNo, nil
  33. }
  34. func PrepareAlipayCode(c *gin.Context, p *md.AliPayPayParams) (interface{}, error) {
  35. req, err := CommAlipayConfig(c, p)
  36. if err != nil {
  37. return "", err
  38. }
  39. var param interface{}
  40. switch req["platform"] {
  41. case md.PLATFORM_ALIPAY_APPLET:
  42. param, err = pay.AlipayApplet(req)
  43. case md.PLATFORM_WAP:
  44. param, err = pay.AlipayWap(req)
  45. case md.PLATFORM_ANDROID, md.PLATFORM_IOS:
  46. param, err = pay.AlipayApp(req)
  47. default:
  48. return "", e.NewErrCode(e.ERR_PLATFORM)
  49. }
  50. if err != nil {
  51. fmt.Println("支付宝错误日志")
  52. fmt.Println(param)
  53. fmt.Println(err)
  54. return "", e.NewErrCode(e.ERR_ALIPAY_ORDER_ERR)
  55. }
  56. return utils.AnyToString(param), nil
  57. }
  58. func CommAlipayConfig(c *gin.Context, p *md.AliPayPayParams) (map[string]string, error) {
  59. //获取支付配置
  60. req := map[string]string{
  61. "pay_ali_use_type": SysCfgGet(c, "pay_ali_use_type"),
  62. "private_key": SysCfgGet(c, "pay_ali_private_key"),
  63. "app_id": SysCfgGet(c, "pay_ali_app_id"),
  64. "rsa": SysCfgGet(c, "pay_ali_key_len_type"),
  65. "pkcs": SysCfgGet(c, "pay_ali_key_format_type"),
  66. }
  67. payAliNewPrivateKey := SysCfgGet(c, "pay_ali_new_private_key")
  68. payAliNewAppId := SysCfgGet(c, "pay_ali_new_app_id")
  69. payAppCertSn := SysCfgGet(c, "pay_app_cert_sn")
  70. payAlipayrsaPublicKey := SysCfgGet(c, "pay_alipayrsa_public_key")
  71. if p.AgentId > 0 {
  72. user, _ := db.UserThirdPartyFindByID(MasterDb(c), p.AgentId)
  73. if user.AlipayPayInfo == "" {
  74. return nil, errors.New("支付失败")
  75. }
  76. req["pay_ali_use_type"] = gjson.Get(user.AlipayPayInfo, "pay_ali_use_type").String()
  77. req["private_key"] = gjson.Get(user.AlipayPayInfo, "pay_ali_private_key").String()
  78. req["app_id"] = gjson.Get(user.AlipayPayInfo, "pay_ali_app_id").String()
  79. req["rsa"] = gjson.Get(user.AlipayPayInfo, "pay_ali_key_len_type").String()
  80. req["pkcs"] = gjson.Get(user.AlipayPayInfo, "pay_ali_key_format_type").String()
  81. payAliNewPrivateKey = gjson.Get(user.AlipayPayInfo, "pay_ali_new_private_key").String()
  82. payAliNewAppId = gjson.Get(user.AlipayPayInfo, "pay_ali_new_app_id").String()
  83. payAppCertSn = gjson.Get(user.AlipayPayInfo, "pay_app_cert_sn").String()
  84. payAlipayrsaPublicKey = gjson.Get(user.AlipayPayInfo, "pay_alipayrsa_public_key").String()
  85. }
  86. if req["pay_ali_use_type"] == "1" {
  87. req["private_key"] = payAliNewPrivateKey
  88. req["app_id"] = payAliNewAppId
  89. appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + payAppCertSn)
  90. if err != nil {
  91. fmt.Println(err)
  92. return nil, err
  93. }
  94. if appCertSN == "" {
  95. fmt.Println(err)
  96. return nil, err
  97. }
  98. req["pay_app_cert_sn"] = appCertSN
  99. aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + payAlipayrsaPublicKey)
  100. if err != nil {
  101. fmt.Println(err)
  102. return nil, err
  103. }
  104. if aliPayPublicCertSN == "" {
  105. fmt.Println(err)
  106. return nil, err
  107. }
  108. req["pay_alipayrsa_public_key"] = aliPayPublicCertSN
  109. }
  110. if req["private_key"] == "" || req["app_id"] == "" {
  111. return req, e.NewErr(400, "请在后台正确配置支付宝")
  112. }
  113. req["ord_id"] = p.OrdId
  114. req["amount"] = p.Amount
  115. req["subject"] = p.Subject
  116. req["order_type"] = p.OrderType
  117. req["notify_url"] = fmt.Sprintf(md.CALLBACK_URL, c.Request.Host, c.GetString("mid"), p.OrderType, md.ALIPAY)
  118. req["platform"] = c.GetHeader("Platform")
  119. req["page_url"] = c.Query("page_url")
  120. utils.FilePutContents(c.GetString("mid")+"alipay", utils.SerializeStr(req))
  121. return req, nil
  122. }