2021-06-30 02:12:05 +00:00
|
|
|
|
package controller
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"crypto/sha1"
|
|
|
|
|
"encoding/hex"
|
2022-08-31 07:25:45 +00:00
|
|
|
|
"encoding/xml"
|
2021-06-30 02:12:05 +00:00
|
|
|
|
"fmt"
|
2022-08-31 07:25:45 +00:00
|
|
|
|
"github.com/codinl/go-logger"
|
2021-06-30 02:12:05 +00:00
|
|
|
|
"github.com/gin-gonic/gin"
|
2022-08-31 07:25:45 +00:00
|
|
|
|
"io/ioutil"
|
|
|
|
|
"mh-server/model"
|
2021-06-30 02:12:05 +00:00
|
|
|
|
"sort"
|
2022-08-31 07:25:45 +00:00
|
|
|
|
"strings"
|
2021-06-30 02:12:05 +00:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
TOKEN = "QoI6tG856JFGLZaWy2ljffJlkBOYeU"
|
|
|
|
|
ENCODINGAESKEY = "QoI6tG856JFGLZaWy2ljffJlkBOYeU6GSfGuzpt18Pu"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
//func checkout(response http.ResponseWriter, request *http.Request) {
|
|
|
|
|
func WxMsg(c *gin.Context) {
|
|
|
|
|
// 获取参数
|
|
|
|
|
signature := c.PostForm("signature")
|
|
|
|
|
timestamp := c.PostForm("timestamp")
|
|
|
|
|
nonce := c.PostForm("nonce")
|
|
|
|
|
echostr := c.PostForm("echostr")
|
|
|
|
|
|
|
|
|
|
//timestamp := request.FormValue("echostr")
|
|
|
|
|
//nonce := request.FormValue("nonce")
|
|
|
|
|
//echostr := request.FormValue("echostr")
|
|
|
|
|
|
|
|
|
|
//将token、timestamp、nonce三个参数进行字典序排序
|
|
|
|
|
var tempArray = []string{TOKEN, timestamp, nonce}
|
|
|
|
|
sort.Strings(tempArray)
|
|
|
|
|
|
|
|
|
|
//将三个参数字符串拼接成一个字符串进行sha1加密
|
|
|
|
|
var sha1String string = ""
|
|
|
|
|
for _, v := range tempArray {
|
|
|
|
|
sha1String += v
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
h := sha1.New()
|
|
|
|
|
h.Write([]byte(sha1String))
|
|
|
|
|
sha1String = hex.EncodeToString(h.Sum([]byte("")))
|
|
|
|
|
|
|
|
|
|
//获得加密后的字符串可与signature对比
|
|
|
|
|
if sha1String == signature {
|
|
|
|
|
_, err := c.Writer.Write([]byte(echostr))
|
|
|
|
|
if err != nil {
|
|
|
|
|
fmt.Println("响应失败。。。")
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
fmt.Println("验证失败")
|
|
|
|
|
}
|
|
|
|
|
}
|
2022-08-31 07:25:45 +00:00
|
|
|
|
|
|
|
|
|
var focusPublicContent = `欢迎关注go2game
|
|
|
|
|
|
|
|
|
|
我们主要提供switch游戏卡带租赁及回收,开通会员后你可享受:
|
|
|
|
|
|
|
|
|
|
“0”元租卡,次数不限
|
|
|
|
|
游戏任选,支持邮寄
|
|
|
|
|
|
|
|
|
|
<a data-miniprogram-appid="wx806c079463b5b56c" data-miniprogram-path="pages/index/index" href="www.baidu.com" data-miniprogram-type="text">立即免费租卡带</a>
|
|
|
|
|
|
|
|
|
|
<a data-miniprogram-appid="wx806c079463b5b56c" data-miniprogram-path="package-recycle/pages/recycle/recycle" href="www.baidu.com" data-miniprogram-type="text">卡带回收点这里</a>
|
|
|
|
|
|
|
|
|
|
` + fmt.Sprintf("回复“领券”获取优惠券兑换码(使用:小程序个人中心→优惠券→兑换优惠券)")
|
|
|
|
|
|
|
|
|
|
var concernedPublicContent = `欢迎关注go2game
|
|
|
|
|
|
|
|
|
|
我们主要提供switch游戏卡带租赁及回收,开通会员后你可享受:
|
|
|
|
|
|
|
|
|
|
“0”元租卡,次数不限
|
|
|
|
|
游戏任选,支持邮寄
|
|
|
|
|
|
|
|
|
|
<a data-miniprogram-appid="wx806c079463b5b56c" data-miniprogram-path="pages/index/index" href="www.baidu.com" data-miniprogram-type="text">立即免费租卡带</a>
|
|
|
|
|
|
|
|
|
|
<a data-miniprogram-appid="wx806c079463b5b56c" data-miniprogram-path="package-recycle/pages/recycle/recycle" href="www.baidu.com" data-miniprogram-type="text">卡带回收点这里</a>
|
|
|
|
|
|
|
|
|
|
`
|
|
|
|
|
|
|
|
|
|
func AutoReplyFocusMsg(c *gin.Context) {
|
|
|
|
|
body, err := ioutil.ReadAll(c.Request.Body)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Error(err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//fmt.Println("接收消息:", string(body))
|
|
|
|
|
receiveMsg := new(model.WxReplyTextReceiveMsg)
|
|
|
|
|
err = xml.Unmarshal(body, receiveMsg)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Error("receive msg unmarshal err:", err)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
receiveMsg.ToUserName = model.WipeStringSpace(receiveMsg.ToUserName)
|
|
|
|
|
receiveMsg.FromUserName = model.WipeStringSpace(receiveMsg.FromUserName)
|
|
|
|
|
msg := &model.WxReplyTextMsg{
|
|
|
|
|
ToUserName: receiveMsg.FromUserName,
|
|
|
|
|
FromUserName: receiveMsg.ToUserName,
|
|
|
|
|
CreateTime: receiveMsg.CreateTime,
|
|
|
|
|
//MsgType: receiveMsg.MsgType,
|
|
|
|
|
MsgType: "text",
|
|
|
|
|
Content: "",
|
|
|
|
|
}
|
|
|
|
|
//fmt.Println("receiveMsg.MsgType:", receiveMsg.MsgType)
|
|
|
|
|
//fmt.Println("receiveMsg.Event:", receiveMsg.Event)
|
|
|
|
|
//if receiveMsg.MsgType == "event" && receiveMsg.Event == "subscribe" {
|
|
|
|
|
if receiveMsg.MsgType == "event" && receiveMsg.Event == "subscribe" {
|
|
|
|
|
exist, err := model.QueryRecordExist(fmt.Sprintf("SELECT * FROM public_record WHERE open_id='%s'", receiveMsg.FromUserName))
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Error("exist err:", err)
|
|
|
|
|
}
|
|
|
|
|
if exist {
|
|
|
|
|
//fmt.Println("已领取券")
|
|
|
|
|
msg.Content = concernedPublicContent
|
|
|
|
|
} else {
|
|
|
|
|
msg.Content = focusPublicContent
|
|
|
|
|
record := &model.PublicRecord{
|
|
|
|
|
OpenId: receiveMsg.FromUserName,
|
|
|
|
|
FocusState: 1,
|
|
|
|
|
RedeemCodeState: 1,
|
|
|
|
|
}
|
|
|
|
|
err := model.DB.Create(record).Error
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Error("create public record err:", err)
|
|
|
|
|
}
|
|
|
|
|
//fmt.Println("关注记录")
|
|
|
|
|
}
|
|
|
|
|
//msg.Content = concernedPublicContent
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//if receiveMsg.MsgType == "text" && receiveMsg.Content == "关注" {
|
|
|
|
|
// exist, err := model.QueryRecordExist(fmt.Sprintf("SELECT * FROM public_record WHERE open_id='%s'", receiveMsg.FromUserName))
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// logger.Error("exist err:", err)
|
|
|
|
|
// }
|
|
|
|
|
// if exist {
|
|
|
|
|
// msg.Content = concernedPublicContent
|
|
|
|
|
// } else {
|
|
|
|
|
// msg.Content = focusPublicContent
|
|
|
|
|
//
|
|
|
|
|
// record := &model.PublicRecord{
|
|
|
|
|
// OpenId: receiveMsg.FromUserName,
|
|
|
|
|
// FocusState: 1,
|
|
|
|
|
// RedeemCodeState: 1,
|
|
|
|
|
// }
|
|
|
|
|
// err := model.DB.Create(record).Error
|
|
|
|
|
// if err != nil {
|
|
|
|
|
// logger.Error("create public record err:", err)
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
if receiveMsg.MsgType == "text" && receiveMsg.Content == "领券" {
|
|
|
|
|
//model.PublicRecord{}
|
|
|
|
|
var publicRecord model.PublicRecord
|
|
|
|
|
err = model.NewPublicRecordQuerySet(model.DB).OpenIdEq(receiveMsg.FromUserName).One(&publicRecord)
|
|
|
|
|
if err != nil && err != model.RecordNotFound {
|
|
|
|
|
logger.Error("public record err:", err)
|
|
|
|
|
}
|
|
|
|
|
if err == model.RecordNotFound {
|
|
|
|
|
msg.Content = "你还没有关注公众号,兄弟!"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
if publicRecord.RedeemCodeState == 1 {
|
|
|
|
|
//fmt.Println("关注领券")
|
|
|
|
|
var redeemCode model.RedeemCode
|
|
|
|
|
err = model.NewRedeemCodeQuerySet(model.DB).StatusEq(model.RedeemCodeStatusStock).
|
|
|
|
|
CodeTypeEq(model.CodeTypeDeductionCoupon5).OrderAscByID().Limit(1).One(&redeemCode)
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Error("redeem code err:", err)
|
|
|
|
|
}
|
|
|
|
|
msg.Content = redeemCode.SerialCode
|
|
|
|
|
|
|
|
|
|
err = model.NewRedeemCodeQuerySet(model.DB).IDEq(redeemCode.ID).GetUpdater().SetStatus(model.RedeemCodeStatusHold).Update()
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Error("update redeem code err:", err)
|
|
|
|
|
}
|
|
|
|
|
err = model.NewPublicRecordQuerySet(model.DB).IDEq(publicRecord.ID).GetUpdater().SetRedeemCodeId(redeemCode.ID).
|
|
|
|
|
SetSerialCode(redeemCode.SerialCode).SetRedeemCodeState(2).Update()
|
|
|
|
|
if err != nil {
|
|
|
|
|
logger.Error("update public record err:", err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if publicRecord.RedeemCodeState == 2 {
|
|
|
|
|
//fmt.Println("已关注领券")
|
|
|
|
|
msg.Content = publicRecord.SerialCode
|
|
|
|
|
}
|
|
|
|
|
if publicRecord.RedeemCodeState == 3 {
|
|
|
|
|
msg.Content = "你已领取兑换码,兄嘚!"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if msg.Content == "" {
|
|
|
|
|
fmt.Println("无数据")
|
|
|
|
|
msg.Content = concernedPublicContent
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
RespBodyXML(c, msg)
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const (
|
|
|
|
|
CS_TOKEN = "QoI6tG856JFGLZaWy2ljeUdTpOJAesYw"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func CustomerServiceMessageCheck(c *gin.Context) {
|
|
|
|
|
Signature := c.Query("signature")
|
|
|
|
|
Timestamp := c.Query("timestamp")
|
|
|
|
|
Nonce := c.Query("nonce")
|
|
|
|
|
Echostr := c.Query("echostr")
|
|
|
|
|
|
|
|
|
|
//logger.Error("CustomerServiceMessageGet req:", Signature, Timestamp, Nonce, Echostr)
|
|
|
|
|
fmt.Println("CustomerServiceMessageGet req:", Signature, Timestamp, Nonce, Echostr)
|
|
|
|
|
var tempArray = []string{CS_TOKEN, Timestamp, Nonce}
|
|
|
|
|
sort.Strings(tempArray)
|
|
|
|
|
|
|
|
|
|
var sha1String = ""
|
|
|
|
|
sha1String = strings.Join(tempArray, "")
|
|
|
|
|
|
|
|
|
|
h := sha1.New()
|
|
|
|
|
h.Write([]byte(sha1String))
|
|
|
|
|
sha1String = hex.EncodeToString(h.Sum([]byte("")))
|
|
|
|
|
|
|
|
|
|
if sha1String == Signature {
|
|
|
|
|
_, err := c.Writer.Write([]byte(Echostr))
|
|
|
|
|
if err != nil {
|
|
|
|
|
fmt.Println("响应失败")
|
|
|
|
|
logger.Error("Signature 响应失败", err)
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
fmt.Println("验证失败")
|
|
|
|
|
logger.Error("Signature 验证失败")
|
|
|
|
|
}
|
|
|
|
|
}
|