劲创营---任务项目
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

3 тижднів тому
3 дні тому
3 тижднів тому
3 дні тому
3 тижднів тому
3 дні тому
3 тижднів тому
2 тижднів тому
3 тижднів тому
3 дні тому
3 тижднів тому
3 дні тому
3 тижднів тому
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. package svc
  2. import (
  3. "applet/app/cfg"
  4. "applet/app/comm/db"
  5. "applet/app/comm/e"
  6. "applet/app/comm/svc"
  7. "applet/app/comm/utils"
  8. "applet/app/comm/utils/logx"
  9. "applet/app/store/md"
  10. "code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay"
  11. "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/models"
  12. "encoding/json"
  13. "fmt"
  14. "github.com/gin-gonic/gin"
  15. "github.com/iGoogle-ink/gopay/alipay"
  16. "io/ioutil"
  17. "net/url"
  18. "time"
  19. )
  20. func CallBack(c *gin.Context, OrderType string) {
  21. orderId, err := AlipayCallback(c)
  22. fmt.Println("callback orderId is ", orderId)
  23. if err != nil || orderId == "" {
  24. _ = logx.Warn(err)
  25. return
  26. }
  27. if OrderType == "money" {
  28. err = CommMoneyCallback(c, orderId)
  29. }
  30. if err != nil {
  31. _ = logx.Error(err)
  32. c.String(200, "fail")
  33. return
  34. }
  35. c.String(200, "success")
  36. return
  37. }
  38. func CommMoneyCallback(c *gin.Context, oid string) error {
  39. sess := svc.MasterDb(c).NewSession()
  40. defer sess.Close()
  41. sess.Begin()
  42. var data models.CampTaskStoreUserAmountOrder
  43. sess.Where("oid=?", oid).Get(&data)
  44. if data.Id == 0 {
  45. sess.Rollback()
  46. return e.NewErr(400, "订单不存在")
  47. }
  48. if data.State == 1 {
  49. sess.Rollback()
  50. return nil
  51. }
  52. data.State = 1
  53. _, err := sess.Where("oid=?", data.Oid).Update(&data)
  54. if err != nil {
  55. sess.Rollback()
  56. return e.NewErr(400, "修改失败")
  57. }
  58. var amountData models.CampTaskStoreUserAmount
  59. sess.Where("store_id=?", data.StoreId).Get(&amountData)
  60. if amountData.Id == 0 {
  61. amountData = models.CampTaskStoreUserAmount{
  62. StoreId: data.StoreId,
  63. Amount: "0",
  64. }
  65. _, err := sess.Insert(&amountData)
  66. if err != nil {
  67. sess.Rollback()
  68. return err
  69. }
  70. }
  71. amountData.Amount = utils.Float64ToStr(utils.StrToFloat64(amountData.Amount) + utils.StrToFloat64(data.Money))
  72. var flow = models.CampTaskDeductMoneyList{
  73. Type: 0,
  74. CreateTime: time.Now(),
  75. Money: data.Money,
  76. AfterMoney: amountData.Amount,
  77. StoreId: data.StoreId,
  78. Title: "预存款充值",
  79. OrdType: "buy",
  80. }
  81. _, err = sess.Insert(&flow)
  82. if err != nil {
  83. sess.Rollback()
  84. return e.NewErr(400, "修改失败")
  85. }
  86. _, err = svc.MasterDb(c).Where("id=?", amountData.Id).Update(&amountData)
  87. if err != nil {
  88. sess.Rollback()
  89. return e.NewErr(400, "修改失败")
  90. }
  91. sess.Commit()
  92. return nil
  93. }
  94. func AlipayCallback(c *gin.Context) (string, error) {
  95. data, ok := c.Get("callback")
  96. if data == nil || !ok {
  97. return "", e.NewErrCode(e.ERR_INVALID_ARGS)
  98. }
  99. args := data.(*md.AliPayCallback)
  100. c.Set("mid", args.MasterID)
  101. // 回调交易状态失败
  102. if args.TradeStatus != "TRADE_SUCCESS" {
  103. return "", logx.Warn("Alipay Failed : trade status failed")
  104. }
  105. return args.OutTradeNo, nil
  106. }
  107. func CheckAllCallbackParams(c *gin.Context) (interface{}, string, string) {
  108. body, _ := ioutil.ReadAll(c.Request.Body)
  109. fmt.Println(body)
  110. utils.FilePutContents("CheckAllCallbackParams", string(body))
  111. dataAlipay, _ := GetAlipayCallbackParams(body)
  112. if dataAlipay != nil {
  113. return dataAlipay, dataAlipay.OrderType, dataAlipay.PayMethod
  114. }
  115. return nil, "", ""
  116. }
  117. func GetAlipayCallbackParams(body []byte) (*md.AliPayCallback, error) {
  118. decodeArgs, err := url.QueryUnescape(string(body))
  119. if err != nil {
  120. _ = logx.Warn(err)
  121. return nil, logx.Warn("回调参数解码错误")
  122. }
  123. data, err := url.ParseQuery(decodeArgs)
  124. if err != nil {
  125. return nil, err
  126. }
  127. dataMap := make(map[string]interface{})
  128. for k := range data {
  129. dataMap[k] = data.Get(k)
  130. }
  131. callbackStr := utils.Serialize(dataMap)
  132. fmt.Println("支付宝回调数据", string(callbackStr))
  133. var args md.AliPayCallback
  134. if err := json.Unmarshal(callbackStr, &args); err != nil {
  135. return nil, logx.Warn(err)
  136. }
  137. return &args, nil
  138. }
  139. func AlipayPc(c *gin.Context, p *md.AliPayPayParams) (string, error) {
  140. req, err := CommAlipayConfig(c, p)
  141. if err != nil {
  142. return "", err
  143. }
  144. param, err := pay.AlipayPc(req)
  145. return utils.AnyToString(param), nil
  146. }
  147. func CommAlipayConfig(c *gin.Context, p *md.AliPayPayParams) (map[string]string, error) {
  148. //获取支付配置
  149. req := map[string]string{
  150. "pay_ali_use_type": db.SysCfgGet(c, "pay_ali_use_type"),
  151. "private_key": db.SysCfgGet(c, "pay_ali_private_key"),
  152. "app_id": db.SysCfgGet(c, "pay_ali_app_id"),
  153. "rsa": db.SysCfgGet(c, "pay_ali_key_len_type"),
  154. "pkcs": db.SysCfgGet(c, "pay_ali_key_format_type"),
  155. }
  156. if req["private_key"] == "" || req["app_id"] == "" {
  157. return req, e.NewErr(400, "请在后台正确配置支付宝")
  158. }
  159. if req["pay_ali_use_type"] == "1" {
  160. req["private_key"] = db.SysCfgGet(c, "pay_ali_new_private_key")
  161. req["app_id"] = db.SysCfgGet(c, "pay_ali_new_app_id")
  162. appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + db.SysCfgGet(c, "pay_app_cert_sn"))
  163. if err != nil {
  164. fmt.Println(err)
  165. return nil, err
  166. }
  167. if appCertSN == "" {
  168. fmt.Println(err)
  169. return nil, err
  170. }
  171. req["pay_app_cert_sn"] = appCertSN
  172. aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + db.SysCfgGet(c, "pay_alipayrsa_public_key"))
  173. if err != nil {
  174. fmt.Println(err)
  175. return nil, err
  176. }
  177. if aliPayPublicCertSN == "" {
  178. fmt.Println(err)
  179. return nil, err
  180. }
  181. req["pay_alipayrsa_public_key"] = aliPayPublicCertSN
  182. }
  183. req["ord_id"] = p.OrdId
  184. req["amount"] = p.Amount
  185. req["subject"] = p.Subject
  186. req["order_type"] = p.OrderType
  187. host := c.Request.Host
  188. if cfg.Prd == false {
  189. host = "https://n40j680693.goho.co"
  190. }
  191. req["notify_url"] = fmt.Sprintf("%s/api/v1/campTask/store/alipay/pay/callback?master_id=%s&order_type=%s", host, c.GetString("mid"), p.OrderType)
  192. req["platform"] = "pc"
  193. req["page_url"] = c.GetString("page_url")
  194. fmt.Println(req)
  195. return req, nil
  196. }