mh_server/controller/wx_msg.go
2022-08-31 15:25:45 +08:00

240 lines
7.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package controller
import (
"crypto/sha1"
"encoding/hex"
"encoding/xml"
"fmt"
"github.com/codinl/go-logger"
"github.com/gin-gonic/gin"
"io/ioutil"
"mh-server/model"
"sort"
"strings"
)
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("验证失败")
}
}
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 验证失败")
}
}