|
- package svc
-
- import (
- "applet/app/cfg"
- "applet/app/comm/db"
- "applet/app/comm/e"
- "applet/app/comm/svc"
- "applet/app/comm/utils"
- "applet/app/comm/utils/logx"
- "applet/app/store/md"
- "code.fnuoos.com/go_rely_warehouse/zyos_go_pay.git/pay"
- "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/implement"
- "code.fnuoos.com/go_rely_warehouse/zyos_model.git/src/models"
- "encoding/json"
- "fmt"
- "github.com/gin-gonic/gin"
- "github.com/iGoogle-ink/gopay/alipay"
- "io/ioutil"
- "net/url"
- "time"
- )
-
- func CallBack(c *gin.Context, OrderType string) {
- orderId, err := AlipayCallback(c)
- fmt.Println("callback orderId is ", orderId)
- if err != nil || orderId == "" {
- _ = logx.Warn(err)
- return
- }
- if OrderType == "money" {
- err = CommMoneyCallback(c, orderId)
- }
- if err != nil {
- _ = logx.Error(err)
- c.String(200, "fail")
- return
- }
- c.String(200, "success")
- return
- }
- func CommMoneyCallback(c *gin.Context, oid string) error {
- sess := svc.MasterDb(c).NewSession()
- defer sess.Close()
- sess.Begin()
- var data models.CampTaskStoreUserAmountOrder
- sess.Where("oid=?", oid).Get(&data)
- if data.Id == 0 {
- sess.Rollback()
- return e.NewErr(400, "订单不存在")
- }
- if data.State == 1 {
- sess.Rollback()
-
- return nil
- }
- data.State = 1
- _, err := svc.MasterDb(c).Where("oid=?", data.Oid).Update(&data)
- if err != nil {
- sess.Rollback()
- return e.NewErr(400, "修改失败")
- }
- amountDb := implement.NewCampTaskStoreUserAmountDb(svc.MasterDb(c))
- amountData, _ := amountDb.GetCampTaskAmountByStoreId(utils.IntToStr(data.StoreId))
- if amountData == nil {
- amountData = &models.CampTaskStoreUserAmount{
- StoreId: data.StoreId,
- Amount: "0",
- }
- _, err := sess.Insert(amountData)
- if err != nil {
- sess.Rollback()
- return err
- }
- }
- amountData.Amount = utils.Float64ToStr(utils.StrToFloat64(amountData.Amount) + utils.StrToFloat64(data.Money))
- var flow = models.CampTaskDeductMoneyList{
- Type: 0,
- CreateTime: time.Now(),
- Money: data.Money,
- AfterMoney: amountData.Amount,
- StoreId: data.StoreId,
- Title: "预存款充值",
- OrdType: "buy",
- }
- _, err = svc.MasterDb(c).InsertOne(&flow)
- if err != nil {
- sess.Rollback()
- return e.NewErr(400, "修改失败")
- }
- _, err = svc.MasterDb(c).Where("id=?", amountData.Id).Update(amountData)
- if err != nil {
- sess.Rollback()
- return e.NewErr(400, "修改失败")
- }
- sess.Commit()
- return nil
- }
- func AlipayCallback(c *gin.Context) (string, error) {
- data, ok := c.Get("callback")
- if data == nil || !ok {
- return "", e.NewErrCode(e.ERR_INVALID_ARGS)
- }
- args := data.(*md.AliPayCallback)
- c.Set("mid", args.MasterID)
- // 回调交易状态失败
- if args.TradeStatus != "TRADE_SUCCESS" {
- return "", logx.Warn("Alipay Failed : trade status failed")
- }
- return args.OutTradeNo, nil
- }
-
- func CheckAllCallbackParams(c *gin.Context) (interface{}, string, string) {
- body, _ := ioutil.ReadAll(c.Request.Body)
- fmt.Println(body)
- utils.FilePutContents("CheckAllCallbackParams", string(body))
- dataAlipay, _ := GetAlipayCallbackParams(body)
- if dataAlipay != nil {
- return dataAlipay, dataAlipay.OrderType, dataAlipay.PayMethod
- }
- return nil, "", ""
- }
- func GetAlipayCallbackParams(body []byte) (*md.AliPayCallback, error) {
- decodeArgs, err := url.QueryUnescape(string(body))
- if err != nil {
- _ = logx.Warn(err)
- return nil, logx.Warn("回调参数解码错误")
- }
- data, err := url.ParseQuery(decodeArgs)
- if err != nil {
- return nil, err
- }
- dataMap := make(map[string]interface{})
- for k := range data {
- dataMap[k] = data.Get(k)
- }
- callbackStr := utils.Serialize(dataMap)
- fmt.Println("支付宝回调数据", string(callbackStr))
- var args md.AliPayCallback
- if err := json.Unmarshal(callbackStr, &args); err != nil {
- return nil, logx.Warn(err)
- }
- return &args, nil
- }
-
- func AlipayPc(c *gin.Context, p *md.AliPayPayParams) (string, error) {
- req, err := CommAlipayConfig(c, p)
- if err != nil {
- return "", err
- }
- param, err := pay.AlipayPc(req)
- return utils.AnyToString(param), nil
- }
- func CommAlipayConfig(c *gin.Context, p *md.AliPayPayParams) (map[string]string, error) {
- //获取支付配置
- req := map[string]string{
- "pay_ali_use_type": db.SysCfgGet(c, "pay_ali_use_type"),
- "private_key": db.SysCfgGet(c, "pay_ali_private_key"),
- "app_id": db.SysCfgGet(c, "pay_ali_app_id"),
- "rsa": db.SysCfgGet(c, "pay_ali_key_len_type"),
- "pkcs": db.SysCfgGet(c, "pay_ali_key_format_type"),
- }
- if req["private_key"] == "" || req["app_id"] == "" {
- return req, e.NewErr(400, "请在后台正确配置支付宝")
- }
- if req["pay_ali_use_type"] == "1" {
- req["private_key"] = db.SysCfgGet(c, "pay_ali_new_private_key")
- req["app_id"] = db.SysCfgGet(c, "pay_ali_new_app_id")
- appCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + db.SysCfgGet(c, "pay_app_cert_sn"))
- if err != nil {
- fmt.Println(err)
- return nil, err
- }
- if appCertSN == "" {
- fmt.Println(err)
- return nil, err
- }
- req["pay_app_cert_sn"] = appCertSN
- aliPayPublicCertSN, err := alipay.GetCertSN(cfg.WxappletFilepath.URL + "/" + db.SysCfgGet(c, "pay_alipayrsa_public_key"))
- if err != nil {
- fmt.Println(err)
- return nil, err
- }
- if aliPayPublicCertSN == "" {
- fmt.Println(err)
- return nil, err
- }
- req["pay_alipayrsa_public_key"] = aliPayPublicCertSN
- }
- req["ord_id"] = p.OrdId
- req["amount"] = p.Amount
- req["subject"] = p.Subject
- req["order_type"] = p.OrderType
-
- host := c.Request.Host
- if cfg.Prd == false {
- host = "https://n40j680693.goho.co"
- }
- 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)
- req["platform"] = "pc"
- req["page_url"] = c.GetString("page_url")
- fmt.Println(req)
- return req, nil
- }
|