github.com/chanxuehong/wechat@v0.0.0-20230222024006-36f0325263cd/mp/jssdk/sign_test.go (about) 1 package jssdk 2 3 import ( 4 "bufio" 5 "crypto/sha1" 6 "encoding/hex" 7 "strings" 8 "testing" 9 ) 10 11 func TestWXConfigSign(t *testing.T) { 12 jsapiTicket := "sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg" 13 nonceStr := "Wm3WZYTPz0wzccnW" 14 timestamp := "1414587457" 15 url := "http://mp.weixin.qq.com?params=value#xxxx" 16 17 wantSignature := "0f9de62fce790f9a083d5c99e95740ceb90c27ed" 18 19 haveSignature := WXConfigSign(jsapiTicket, nonceStr, timestamp, url) 20 if haveSignature != wantSignature { 21 t.Errorf("test WXConfigSign failed,\nhave: %s\nwant: %s\n", haveSignature, wantSignature) 22 return 23 } 24 25 haveSignature2 := WXConfigSign2(jsapiTicket, nonceStr, timestamp, url) 26 if haveSignature2 != wantSignature { 27 t.Errorf("test WXConfigSign2 failed,\nhave: %s\nwant: %s\n", haveSignature2, wantSignature) 28 return 29 } 30 31 haveSignature3 := WXConfigSign3(jsapiTicket, nonceStr, timestamp, url) 32 if haveSignature3 != wantSignature { 33 t.Errorf("test WXConfigSign3 failed,\nhave: %s\nwant: %s\n", haveSignature3, wantSignature) 34 return 35 } 36 } 37 38 func TestCardSign(t *testing.T) { 39 api_ticket := "aaaa" 40 timestamp := "bbbb" 41 nonce_str := "cccc" 42 card_id := "dddd" 43 code := "eeee" 44 open_id := "ffff" 45 46 wantSignature := "89a0e60888a9471f75dc5eb0ee86431ddbec1fd9" 47 48 haveSignature := CardSign([]string{open_id, code, timestamp, card_id, api_ticket, nonce_str}) 49 if haveSignature != wantSignature { 50 t.Errorf("tests CardSign failed,\nhave: %s\nwant: %s\n", haveSignature, wantSignature) 51 return 52 } 53 } 54 55 func BenchmarkWXConfigSign(b *testing.B) { 56 jsapiTicket := "sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg" 57 nonceStr := "Wm3WZYTPz0wzccnW" 58 timestamp := "1414587457" 59 url := "http://mp.weixin.qq.com?params=value" 60 61 b.ReportAllocs() 62 b.ResetTimer() 63 for i := 0; i < b.N; i++ { 64 WXConfigSign(jsapiTicket, nonceStr, timestamp, url) 65 } 66 } 67 68 func BenchmarkWXConfigSign2(b *testing.B) { 69 jsapiTicket := "sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg" 70 nonceStr := "Wm3WZYTPz0wzccnW" 71 timestamp := "1414587457" 72 url := "http://mp.weixin.qq.com?params=value" 73 74 b.ReportAllocs() 75 b.ResetTimer() 76 for i := 0; i < b.N; i++ { 77 WXConfigSign2(jsapiTicket, nonceStr, timestamp, url) 78 } 79 } 80 81 func BenchmarkWXConfigSign3(b *testing.B) { 82 jsapiTicket := "sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg" 83 nonceStr := "Wm3WZYTPz0wzccnW" 84 timestamp := "1414587457" 85 url := "http://mp.weixin.qq.com?params=value" 86 87 b.ReportAllocs() 88 b.ResetTimer() 89 for i := 0; i < b.N; i++ { 90 WXConfigSign3(jsapiTicket, nonceStr, timestamp, url) 91 } 92 } 93 94 func WXConfigSign2(jsapiTicket, nonceStr, timestamp, url string) (signature string) { 95 if i := strings.IndexByte(url, '#'); i >= 0 { 96 url = url[:i] 97 } 98 h := sha1.New() 99 100 bufw := bufio.NewWriterSize(h, 128) 101 bufw.WriteString("jsapi_ticket=") 102 bufw.WriteString(jsapiTicket) 103 bufw.WriteString("&noncestr=") 104 bufw.WriteString(nonceStr) 105 bufw.WriteString("×tamp=") 106 bufw.WriteString(timestamp) 107 bufw.WriteString("&url=") 108 bufw.WriteString(url) 109 bufw.Flush() 110 111 hashsum := h.Sum(nil) 112 return hex.EncodeToString(hashsum) 113 } 114 115 var ( 116 jsapiTicketKey = []byte("jsapi_ticket=") 117 nonceStrKey = []byte("&noncestr=") 118 timestampKey = []byte("×tamp=") 119 urlKey = []byte("&url=") 120 ) 121 122 func WXConfigSign3(jsapiTicket, nonceStr, timestamp, url string) (signature string) { 123 if i := strings.IndexByte(url, '#'); i >= 0 { 124 url = url[:i] 125 } 126 h := sha1.New() 127 128 h.Write(jsapiTicketKey) 129 h.Write([]byte(jsapiTicket)) 130 h.Write(nonceStrKey) 131 h.Write([]byte(nonceStr)) 132 h.Write(timestampKey) 133 h.Write([]byte(timestamp)) 134 h.Write(urlKey) 135 h.Write([]byte(url)) 136 137 hashsum := h.Sum(nil) 138 return hex.EncodeToString(hashsum) 139 }