42 lines
887 B
Go
42 lines
887 B
Go
package weixinapi
|
|
|
|
import (
|
|
"crypto/sha1"
|
|
"fmt"
|
|
"sort"
|
|
"strings"
|
|
|
|
"git.rosy.net.cn/baseapi"
|
|
)
|
|
|
|
func (a *API) SetMsgTokenAndKey(msgToken, msgKey string) {
|
|
a.locker.Lock()
|
|
defer a.locker.Unlock()
|
|
|
|
a.msgToken = msgToken
|
|
a.msgKey = msgKey
|
|
}
|
|
|
|
func (a *API) GetMsgTokenAndKey() (msgToken, msgKey string) {
|
|
a.locker.RLock()
|
|
defer a.locker.RUnlock()
|
|
|
|
return a.msgToken, a.msgKey
|
|
}
|
|
|
|
func (a *API) ValidateWXCallbackURL(signature, timestamp, nonce string) (isValid bool) {
|
|
msgToken, _ := a.GetMsgTokenAndKey()
|
|
if msgToken == "" {
|
|
panic("you must call SetMsgTokenAndKey first")
|
|
}
|
|
strList := []string{
|
|
msgToken,
|
|
timestamp,
|
|
nonce,
|
|
}
|
|
sort.Sort(sort.StringSlice(strList))
|
|
sha1Str := fmt.Sprintf("%x", sha1.Sum([]byte(strings.Join(strList, ""))))
|
|
baseapi.SugarLogger.Debugf("ValidateWXCallbackURL sha1Str:%s, signature:%s", sha1Str, signature)
|
|
return sha1Str == signature
|
|
}
|