浏览代码

购买,付款

k.zhang 3 月之前
父节点
当前提交
a65a19ebb5

+ 4 - 0
apis/common/post.go

@@ -31,6 +31,10 @@ func Post(inputObj []byte, url string) ([]byte, error) {
 		return nil, err
 	}
 
+	defer resp.Body.Close()
+
+	//fmt.Println("respBytes:", string(respBytes))
+
 	return respBytes, nil
 
 }

+ 3 - 1
apis/shanghu/base.go

@@ -89,7 +89,9 @@ func InitShangHuRouter(engine *gin.RouterGroup) {
 		activeV1.POST("/active/qr", GetClientActiveQR)                    //获取二维码
 		activeV1.POST("/active/unified/order", GroupByUnifiedOrder)       //拼团购买
 		activeV1.POST("/active/pay/callback", ActivePayCallBack)          //支付回调
-		//邀请次数
+		activeV1.POST("/active/draw/num", InvitedDrawNum)                 //邀请次数
+		activeV1.POST("/client/user/set", ActiveOpenIdSet)                //活动 创建用户
+
 		//待核销金额
 		//
 

+ 70 - 1
apis/shanghu/client.active.draw.num.go

@@ -1,7 +1,76 @@
 package shanghu
 
-import "github.com/gin-gonic/gin"
+import (
+	"duoduo/apis/shanghu/models"
+	"duoduo/models/shanghu"
+	"duoduo/tools/app"
+	"github.com/gin-gonic/gin"
+	"time"
+)
 
+// 邀请次数
 func InvitedDrawNum(c *gin.Context) {
+	var inData models.InvitedDrawNumRequest
+	var sqlData shanghu.ClientActiveDrawNum
+	var clientSql shanghu.MerchantClientUser
+	var activeSql shanghu.MerchantActiveConfig
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	if inData.InvitedCode == "yuanshima" {
+		app.OK(c, nil, app.Success)
+		return
+	}
+
+	//查询活动没有抽奖跳过
+	activeSql.ID = inData.ActiveConfigId
+	activeConfigInfo, err := activeSql.GetConfigInfoById()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	if activeConfigInfo.DrawMode == 0 { //不抽奖
+		app.OK(c, nil, app.Success)
+		return
+	}
+
+	clientSql.Code = inData.InvitedCode
+	clientInfo, err := clientSql.GetUserInfoByCode()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	sqlData.ClientOpenID = clientInfo.ClientOpenID
+	sqlData.ActiveConfigID = inData.ActiveConfigId
+	sqlData.ClientOpenIDInvited = inData.OpenId
+	sqlData.CreatedAt = time.Now()
+	sqlData.UpdatedAt = time.Now()
+
+	//校验是否重复打开 同一个用户id 邀请同一个id 同一个活动id
+	count, err := sqlData.GetClientDrawNum()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	//已被邀请过
+	if count > 0 {
+		app.OK(c, nil, app.Success)
+		return
+	}
+
+	_, err = sqlData.Create()
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	app.OK(c, nil, app.Success)
 
 }

+ 28 - 7
apis/shanghu/merchant.active.config.go

@@ -614,7 +614,7 @@ func subStockAddLog(drawProductInfo shanghu.MerchantActiveDrawProduct, clientOpe
 
 func GetClientActiveQR(c *gin.Context) {
 	var inData models.ClientActiveQRRequest
-	//var sqlData shanghu.MerchantClientCard
+	var sqlData shanghu.ActiveUser
 	var outData models.ClientCardQRReply
 	var qr models.QRRequest
 	var getQR models.GetQRRequest
@@ -626,12 +626,14 @@ func GetClientActiveQR(c *gin.Context) {
 	}
 	//	sqlData.ID = inData.ActiveConfigId
 
-	val, err := pdd.DuoDuoGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx8595c589dd736486&secret=668f87d2bc24199688e53ee8a88434b8")
+	val, err := pdd.DuoDuoGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx43e320d3ffaa4d7b&secret=97d811cde197515ed03b7c7a6e24d4e8")
 	if err != nil {
 		app.Error(c, 500, err, err.Error())
 		return
 	}
 
+	//fmt.Println("val:", val)
+
 	err = tools.JsonUnmarshal(val, &outData)
 	if err != nil {
 		app.Error(c, 500, err, err.Error())
@@ -641,12 +643,26 @@ func GetClientActiveQR(c *gin.Context) {
 		app.Error(c, 500, err, "token error")
 		return
 	}
+
+	code := ""
+	if inData.Code == "yuanshima" {
+		code = "yuanshima"
+	} else { //根据openid查code
+		sqlData.OpenID = inData.OpenId
+		userInfo, err := sqlData.GetUserInfo()
+		if err != nil {
+			app.Error(c, 500, err, err.Error())
+			return
+		}
+		code = userInfo.Code
+	}
+
 	url := "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + outData.AccessToken
 
-	qr.CheckPath = true
+	qr.CheckPath = false
 	qr.Page = "pages/home/home"
-	qr.EnvVersion = "release"
-	qr.Scene = strconv.FormatInt(inData.ActiveConfigId, 10)
+	qr.EnvVersion = "develop"
+	qr.Scene = "id-" + strconv.FormatInt(inData.ActiveConfigId, 10) + "-c-" + code
 
 	data, err := json.Marshal(&qr)
 	if err != nil {
@@ -747,13 +763,18 @@ func GroupByUnifiedOrder(c *gin.Context) {
 	bm.Set("out_trade_no", sqlData.OutTradeNo)
 	bm.Set("total_fee", inData.Amount.Mul(decimal.NewFromInt(100)).IntPart())
 	bm.Set("spbill_create_ip", "127.0.0.1")
-	bm.Set("notify_url", "https://tao1024.com/v1/client/pay/callback")
+	bm.Set("notify_url", "https://tao1024.com/v1/active/pay/callback")
 	bm.Set("device_info", "WEB")
 	bm.Set("trade_type", "JSAPI")
 	bm.Set("sign_type", wechat.SignType_MD5)
 	bm.Set("openid", inData.ClientOpenId)
 
-	client := NewWechatService()
+	appid := "wx43e320d3ffaa4d7b"
+	mchId := "1670841410"
+	apiKey := "33c424fAa69942086f82A003e283E9C8"
+
+	client := NewWechatServiceTwo(appid, mchId, apiKey)
+	//client := NewWechatService()
 	//请求支付下单,成功后得到结果
 	wxResp, err := client.UnifiedOrder(c, bm)
 	if err != nil {

+ 56 - 0
apis/shanghu/merchant.user.go

@@ -124,6 +124,62 @@ func ClientOpenIdSet(c *gin.Context) {
 
 }
 
+// 注册用户
+func ActiveOpenIdSet(c *gin.Context) {
+	var inData models.OpenIdSetRequest
+	var outData models.OpenIdSetResponse
+	var sqlData shanghu.ActiveUser
+	//var sql1 bizhi.User
+
+	err := c.ShouldBindJSON(&inData)
+	if err != nil {
+		app.Error(c, 400, err, err.Error())
+		return
+	}
+
+	url := fmt.Sprintf("https://api.weixin.qq.com/sns/jscode2session?appid=wx43e320d3ffaa4d7b&secret=97d811cde197515ed03b7c7a6e24d4e8&js_code=%s&grant_type=authorization_code", inData.Code)
+
+	val, err := pdd.DuoDuoGet(url)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+
+	err = tools.JsonUnmarshal(val, &outData)
+	if err != nil {
+		app.Error(c, 500, err, err.Error())
+		return
+	}
+	if outData.Errcode != 0 {
+		app.Error(c, outData.Errcode, err, outData.Errmsg)
+		return
+	}
+	//查询数据
+	sqlData.OpenID = outData.OpenId
+	num := sqlData.GetNum()
+	if num == 0 {
+		//创建用户
+		sqlData.CreatedAt = time.Now()
+		sqlData.UpdatedAt = time.Now()
+		//校验唯一性
+		for _, v := range common.Example(6, 10) {
+			sqlData.Code = v
+			if sqlData.GetCodeNum() <= 0 {
+				break
+			}
+		}
+
+		_, err = sqlData.Create()
+		if err != nil {
+			app.Error(c, 500, err, err.Error())
+			return
+		}
+	}
+
+	app.OK(c, outData, app.Success)
+
+}
+
 func GetUserInfo(c *gin.Context) {
 	var inData models.GetUserInfoRequest
 	var sqlData shanghu.MerchantUser

+ 3 - 1
apis/shanghu/models/active.config.go

@@ -111,7 +111,9 @@ type ActiveConfigWHXYRequest struct {
 }
 
 type ClientActiveQRRequest struct {
-	ActiveConfigId int64 `json:"active_config_id"` //
+	ActiveConfigId int64  `json:"active_config_id"` //
+	Code           string `json:"code"`             //邀请code
+	OpenId         string `json:"open_id"`
 }
 
 type GroupBuyUnifiedOrderRequest struct {

+ 3 - 3
apis/shanghu/models/client.active.draw.num.go

@@ -1,7 +1,7 @@
 package models
 
 type InvitedDrawNumRequest struct {
-	OpenId         string `json:"open_id"`
-	InvitedCode    string `json:"invited_code"`
-	ActiveConfigId int64  `json:"active_config_id"`
+	OpenId         string `json:"open_id"`          //被邀请人
+	InvitedCode    string `json:"invited_code"`     //邀请码
+	ActiveConfigId int64  `json:"active_config_id"` //活动id
 }

+ 9 - 0
apis/shanghu/pay.go

@@ -391,6 +391,15 @@ func NewWechatService() *wechat.Client {
 	return client
 }
 
+func NewWechatServiceTwo(appid, mchId, apiKey string) *wechat.Client {
+
+	client := wechat.NewClient(appid, mchId, apiKey, true)
+	//设置国家
+	client.SetCountry(wechat.China)
+
+	return client
+}
+
 func NewWechatServiceAppid(appid string) *wechat.Client {
 
 	client := wechat.NewClient(appid, "1501641641", "1RKRJBVH4vaRrF0XPW9GX2M3ZSImukIz", true)

+ 72 - 0
models/shanghu/active.user.go

@@ -0,0 +1,72 @@
+package shanghu
+
+import (
+	orm "duoduo/database"
+	"time"
+)
+
+// 商户账号
+type ActiveUser struct {
+	ID        int64     `gorm:"column:id;type:bigint(20);primary_key;AUTO_INCREMENT" json:"id"` // 主键
+	Code      string    `gorm:"column:code;type:varchar(255)" json:"code"`
+	OpenID    string    `gorm:"column:open_id;type:varchar(255)" json:"open_id"`                   // open_id 唯一索引
+	Phone     string    `gorm:"column:phone;type:varchar(24)" json:"phone"`                        // 手机号
+	NickName  string    `gorm:"column:nick_name;type:varchar(255)" json:"nick_name"`               // 微信用户名
+	AvatarUrl string    `gorm:"column:avatar_url;type:varchar(255)" json:"avatar_url"`             // 头像url
+	Admin     int       `gorm:"column:admin;type:int(11)" json:"admin"`                            // 1-管理员  2-销售 3-霸王卡商家 4-店员  5-商家充值 6-商家霸王卡+充值 7-充值店员
+	Pid       string    `gorm:"column:pid;type:varchar(10)" json:"pid"`                            // 上级
+	CreateBy  int64     `gorm:"column:create_by;type:bigint(20)" json:"create_by"`                 // 创建者
+	UpdateBy  int64     `gorm:"column:update_by;type:bigint(20)" json:"update_by"`                 // 更新者
+	CreatedAt time.Time `gorm:"column:created_at;type:datetime(3)" json:"created_at"`              // 创建时间
+	UpdatedAt time.Time `gorm:"column:updated_at;type:datetime(3)" json:"updated_at"`              // 最后更新时间
+	DeletedAt time.Time `gorm:"column:deleted_at;type:datetime(3);default:null" json:"deleted_at"` // 删除时间
+}
+
+func (m *ActiveUser) TableName() string {
+	return "active_user"
+}
+
+func (u *ActiveUser) Create() (ActiveUser, error) {
+	var doc ActiveUser
+	var err error
+
+	doc = *u
+	err = orm.ShMysql.Table(u.TableName()).Create(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}
+
+func (m *ActiveUser) GetNum() int {
+	var count int
+
+	tableCount := orm.ShMysql.Table(m.TableName()).Where("open_id = ? ", m.OpenID)
+	tableCount.Count(&count)
+	return count
+
+}
+
+func (m *ActiveUser) GetCodeNum() int {
+	var count int
+
+	tableCount := orm.ShMysql.Table(m.TableName()).Where("code = ? ", m.Code)
+	tableCount.Count(&count)
+	return count
+
+}
+
+func (m *ActiveUser) GetUserInfo() (ActiveUser, error) {
+	var doc ActiveUser
+
+	table := orm.ShMysql.Table(m.TableName())
+	table = table.Where("open_id = ?  ", m.OpenID)
+
+	if err := table.Select("*").First(&doc).Error; err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+
+}

+ 23 - 0
models/shanghu/client.active.draw.num.go

@@ -31,3 +31,26 @@ func (m *ClientActiveDrawNum) GetDrawNum() (int, error) {
 	table.Count(&count)
 	return count, nil
 }
+
+func (u *ClientActiveDrawNum) Create() (ClientActiveDrawNum, error) {
+	var doc ClientActiveDrawNum
+	var err error
+
+	doc = *u
+	err = orm.ShMysql.Table(u.TableName()).Create(&doc).Error
+	if err != nil {
+		return doc, err
+	}
+
+	return doc, nil
+}
+
+func (m *ClientActiveDrawNum) GetClientDrawNum() (int, error) {
+
+	table := orm.ShMysql.Table(m.TableName())
+
+	table = table.Where("client_open_id = ? and active_config_id = ? and client_open_id_invited = ? ", m.ClientOpenID, m.ActiveConfigID, m.ClientOpenIDInvited)
+	var count int
+	table.Count(&count)
+	return count, nil
+}

+ 1 - 1
models/shanghu/client.active.pay.trans.go

@@ -15,7 +15,7 @@ type ClientActivePayTrans struct {
 	Status         int             `gorm:"column:status;type:int(11)" json:"status"`                          // 1-未支付 2-支付成功 3-取消支付 4-退款
 	ThirdTradeNo   string          `gorm:"column:third_trade_no;type:varchar(255)" json:"third_trade_no"`     // 微信交易id
 	AccountStatus  int             `gorm:"column:account_status;type:int(11)" json:"account_status"`          // 分账状态 99-分账成功 2-分账失败 1-未分账 3-分账中
-	PayTime        time.Time       `gorm:"column:pay_time;type:datetime(3)" json:"pay_time"`                  // 支付时间
+	PayTime        time.Time       `gorm:"column:pay_time;type:datetime(3);default:null" json:"pay_time"`     // 支付时间
 	InvitationCode string          `gorm:"column:invitation_code;type:varchar(25)" json:"invitation_code"`    // 邀请码
 	Amount         decimal.Decimal `gorm:"column:amount;type:decimal(10,2)" json:"amount"`                    // 交易金额
 	AccountErrLog  string          `gorm:"column:account_err_log;type:varchar(255)" json:"account_err_log"`   // 分账err日志