1. 程式人生 > >網易雲信golang介面

網易雲信golang介面

友情推廣
在這裡插入圖片描述

網易雲信介紹

詳細資訊請見http://netease.im,進入這個網易雲信官網後,註冊賬號(有網易郵箱的直接登入)。

api介面介紹

  1. SendCode函式,
  2. VerifyCode函式

主要通過上述兩個函式,實現簡訊認證過程,第一個函式接收一個引數,即手機號,然後向網易雲信發出訊息,通知其傳送驗證碼到指定的手機上,第二個函式接收兩個引數,第一個引數是手機號,第二個引數是使用者輸入的驗證碼,這個函式用於檢查使用者輸入的驗證碼是否正確。

實現程式碼

package netease

import (
	"crypto/sha1"
	"crypto/tls"
	"encoding/json"
"fmt" "io/ioutil" "net/http" "net/http/cookiejar" "net/url" "strconv" "strings" "time" "github.com/hzwy23/hauth/logs" ) type msgCodeInfo struct { Code int `json:"code"` Msg string `json:"msg"` Obj string `json:"obj"` } type verifyCode struct { Code int `json:"code"` } var ( msgurl =
"https://api.netease.im/sms/sendcode.action" verifyurl = "https://api.netease.im/sms/verifycode.action" appKey = "0b5eb2a6a180bbeqw3aa732acbe80e71" appSecret = "0de6fed20d2e" nonce = "yph2b" ) func genSHA1(sec, nonce, curtme string) string { var sum = sec + nonce + curtme h := sha1.New() h.Write(
[]byte(sum)) bs := h.Sum(nil) sha := fmt.Sprintf("%x", bs) return sha } func checkCode(message []byte) (*msgCodeInfo, error) { var msg msgCodeInfo err := json.Unmarshal(message, &msg) if err != nil { logs.Error(err) return &msg, err } if msg.Code != 200 { return &msg, err } return &msg, nil } func SendCode(phone string) (*msgCodeInfo, error) { tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, DisableCompression: true, } client := http.Client{Transport: tr} client.Jar, _ = cookiejar.New(nil) var mobile = url.Values{"mobile": {phone}} req, err := http.NewRequest("POST", msgurl, strings.NewReader(mobile.Encode())) if err != nil { logs.Error(err) return nil, err } var curTime = strconv.Itoa(int(time.Now().Unix())) var checkSum = genSHA1(appSecret, nonce, curTime) req.Header.Add("AppKey", appKey) req.Header.Add("Nonce", nonce) req.Header.Add("CurTime", curTime) req.Header.Add("CheckSum", checkSum) req.Header.Add("Content-Type", "application/x-www-form-urlencoded") resp, err := client.Do(req) //傳送 if err != nil { logs.Error(err) return nil, err } defer resp.Body.Close() //一定要關閉resp.Body data, err := ioutil.ReadAll(resp.Body) if err != nil { logs.Error(err) return nil, err } msg, err := checkCode(data) if err != nil { logs.Error(err) return nil, err } return msg, nil } func VerifyCode(phone string, code string) (int, bool) { tr := &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, DisableCompression: true, } client := http.Client{Transport: tr} client.Jar, _ = cookiejar.New(nil) var mobile = url.Values{"mobile": {phone}, "code": {code}} req, err := http.NewRequest("POST", verifyurl, strings.NewReader(mobile.Encode())) if err != nil { logs.Error(err) return 408, false } var curTime = strconv.Itoa(int(time.Now().Unix())) var checkSum = genSHA1(appSecret, nonce, curTime) req.Header.Add("AppKey", appKey) req.Header.Add("Nonce", nonce) req.Header.Add("CurTime", curTime) req.Header.Add("CheckSum", checkSum) req.Header.Add("Content-Type", "application/x-www-form-urlencoded") resp, err := client.Do(req) //傳送 if err != nil { logs.Error(err) return 405, false } defer resp.Body.Close() //一定要關閉resp.Body data, err := ioutil.ReadAll(resp.Body) if err != nil { logs.Error(err) return 406, false } var ret verifyCode err = json.Unmarshal(data, &ret) if err != nil { logs.Error(err) return 407, false } if ret.Code == 200 { return ret.Code, true } else { return ret.Code, false } }

程式碼分析

引數資訊列表

  1. msgurl 是網易的api簡訊認證碼獲取介面,固定不變
  2. verifyurl 是網易的api簡訊認證介面,固定不變
  3. appKey 是網易分配給你的賬號key值
  4. appSecret 是網易分配給你的賬號key的密碼
  5. nonce是隨機數,自己隨便改。

總結

在簡訊認證的過程中,後臺會獲取傳送給使用者的簡訊認證碼。所以不要在不認識的網站上下輸入,網路化境複雜。如果伺服器被攻克,或者別的什麼高階的手法,還是可以擴過簡訊驗證這道門檻。不要在不明來歷的地方隨便輸入自己的資訊,在想要輸入的地方,看清楚再輸入,提高自我防護意思,才能防止自己的財產免受損失。

tips:看淡這一切,不作惡,平平淡淡的看笑話。