github.com/chanxuehong/wechat@v0.0.0-20230222024006-36f0325263cd/mp/jssdk/sign.go (about) 1 package jssdk 2 3 import ( 4 "bufio" 5 "crypto/sha1" 6 "encoding/hex" 7 "sort" 8 "strings" 9 ) 10 11 // JS-SDK wx.config 的参数签名. 12 func WXConfigSign(jsapiTicket, nonceStr, timestamp, url string) (signature string) { 13 if i := strings.IndexByte(url, '#'); i >= 0 { 14 url = url[:i] 15 } 16 17 n := len("jsapi_ticket=") + len(jsapiTicket) + 18 len("&noncestr=") + len(nonceStr) + 19 len("×tamp=") + len(timestamp) + 20 len("&url=") + len(url) 21 buf := make([]byte, 0, n) 22 23 buf = append(buf, "jsapi_ticket="...) 24 buf = append(buf, jsapiTicket...) 25 buf = append(buf, "&noncestr="...) 26 buf = append(buf, nonceStr...) 27 buf = append(buf, "×tamp="...) 28 buf = append(buf, timestamp...) 29 buf = append(buf, "&url="...) 30 buf = append(buf, url...) 31 32 hashsum := sha1.Sum(buf) 33 return hex.EncodeToString(hashsum[:]) 34 } 35 36 // JS-SDK 卡券 API 参数签名. 37 func CardSign(strs []string) (signature string) { 38 sort.Strings(strs) 39 40 h := sha1.New() 41 42 bufw := bufio.NewWriterSize(h, 128) // sha1.BlockSize 的整数倍 43 for _, str := range strs { 44 bufw.WriteString(str) 45 } 46 bufw.Flush() 47 48 return hex.EncodeToString(h.Sum(nil)) 49 }