|
@@ -0,0 +1,120 @@
|
|
1
|
+package service
|
|
2
|
+
|
|
3
|
+import (
|
|
4
|
+ "bytes"
|
|
5
|
+ "crypto/hmac"
|
|
6
|
+ "crypto/sha1"
|
|
7
|
+ "crypto/sha256"
|
|
8
|
+ "encoding/base64"
|
|
9
|
+ "encoding/hex"
|
|
10
|
+ "encoding/json"
|
|
11
|
+ "fmt"
|
|
12
|
+ "github.com/astaxie/beego"
|
|
13
|
+ "io/ioutil"
|
|
14
|
+ "net/http"
|
|
15
|
+)
|
|
16
|
+
|
|
17
|
+func GetSignNameByPhone(phoneOne string) string {
|
|
18
|
+
|
|
19
|
+ var url string
|
|
20
|
+ url = "http://demo-open.itruscloud.com/apigate/smsService/sendingSms"
|
|
21
|
+ var phone string
|
|
22
|
+
|
|
23
|
+ phone = "13318464642"
|
|
24
|
+
|
|
25
|
+ var content string
|
|
26
|
+
|
|
27
|
+ content = "123456"
|
|
28
|
+
|
|
29
|
+ var autograph string
|
|
30
|
+ autograph = "【天威诚信】"
|
|
31
|
+
|
|
32
|
+ maprequest := make(map[string]interface{})
|
|
33
|
+
|
|
34
|
+ maprequest["phone"] = phone
|
|
35
|
+ maprequest["content"] = content
|
|
36
|
+ maprequest["autograph"] = autograph
|
|
37
|
+
|
|
38
|
+ byterequest, _ := json.Marshal(maprequest)
|
|
39
|
+
|
|
40
|
+ appId := beego.AppConfig.String("sign_appid")
|
|
41
|
+
|
|
42
|
+ serviceKye := beego.AppConfig.String("serviceKye")
|
|
43
|
+
|
|
44
|
+ serviceCode := beego.AppConfig.String("serviceCode")
|
|
45
|
+
|
|
46
|
+ reader := bytes.NewReader(byterequest)
|
|
47
|
+
|
|
48
|
+ signatureStr, _ := generateHMACSHA1SignatureOne(maprequest, serviceKye, serviceCode)
|
|
49
|
+
|
|
50
|
+ fmt.Println(signatureStr)
|
|
51
|
+
|
|
52
|
+ request, err := http.NewRequest("POST", url, reader)
|
|
53
|
+ if err != nil {
|
|
54
|
+ fmt.Println(err.Error())
|
|
55
|
+ }
|
|
56
|
+ fmt.Println("请求参数", request)
|
|
57
|
+ fmt.Println("Content-Signature", signatureStr)
|
|
58
|
+ fmt.Println("appID", appId)
|
|
59
|
+ fmt.Println("serviceCode", serviceCode)
|
|
60
|
+ request.Header.Set("appId", appId)
|
|
61
|
+ request.Header.Set("serviceCode", serviceCode)
|
|
62
|
+ request.Header.Set("Content-Type", "application/json;charset=UTF-8")
|
|
63
|
+ request.Header.Set("Content-Signature", signatureStr)
|
|
64
|
+ client := http.Client{}
|
|
65
|
+
|
|
66
|
+ resp, err := client.Do(request)
|
|
67
|
+ if err != nil {
|
|
68
|
+ fmt.Println(err.Error())
|
|
69
|
+
|
|
70
|
+ }
|
|
71
|
+ respBytes, err := ioutil.ReadAll(resp.Body)
|
|
72
|
+ if err != nil {
|
|
73
|
+ fmt.Println(err.Error())
|
|
74
|
+
|
|
75
|
+ }
|
|
76
|
+ str := string(respBytes)
|
|
77
|
+ fmt.Println(str)
|
|
78
|
+ return str
|
|
79
|
+}
|
|
80
|
+
|
|
81
|
+// 生成签名
|
|
82
|
+func setSignatureStr(nonce string, secret_key string) string {
|
|
83
|
+ fmt.Println(nonce)
|
|
84
|
+ fmt.Println(secret_key)
|
|
85
|
+ str := secret_key + nonce
|
|
86
|
+ hash := sha256.New()
|
|
87
|
+ //输入数据
|
|
88
|
+ hash.Write([]byte(str))
|
|
89
|
+ //计算哈希值
|
|
90
|
+ bytes := hash.Sum(nil)
|
|
91
|
+ //将字符串编码为16进制格式,返回字符串
|
|
92
|
+ hashCode := hex.EncodeToString(bytes)
|
|
93
|
+ //返回哈希值
|
|
94
|
+ return hashCode
|
|
95
|
+}
|
|
96
|
+
|
|
97
|
+func generateHMACSHA1SignatureOne(data interface{}, key, serviceCode string) (string, error) {
|
|
98
|
+ // 将数据转换为 JSON 格式的字节数组
|
|
99
|
+ jsonData, err := json.Marshal(data)
|
|
100
|
+ if err != nil {
|
|
101
|
+ return "", err
|
|
102
|
+ }
|
|
103
|
+
|
|
104
|
+ // 将密钥和 serviceCode 进行拼接
|
|
105
|
+ signingKey := key + serviceCode
|
|
106
|
+
|
|
107
|
+ // 将签名密钥转换为字节数组
|
|
108
|
+ keyBytes := []byte(signingKey)
|
|
109
|
+
|
|
110
|
+ // 创建一个新的 HMAC-SHA1 实例
|
|
111
|
+ h := hmac.New(sha1.New, keyBytes)
|
|
112
|
+
|
|
113
|
+ // 将 JSON 数据添加到 HMAC 实例中
|
|
114
|
+ h.Write(jsonData)
|
|
115
|
+
|
|
116
|
+ signature := base64.StdEncoding.EncodeToString(h.Sum(nil))
|
|
117
|
+
|
|
118
|
+ // 返回带有前缀的签名字符串
|
|
119
|
+ return "HMAC-SHA1 " + signature, nil
|
|
120
|
+}
|