240 lines
7.2 KiB
Go
240 lines
7.2 KiB
Go
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 验证失败")
|
||
}
|
||
}
|