mh_server/controller/wx_msg.go

240 lines
7.2 KiB
Go
Raw Normal View History

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 验证失败")
}
}