建設(shè)銀行內(nèi)部網(wǎng)站網(wǎng)絡(luò)營銷的seo是做什么的
一、準備一個已經(jīng)認證OK的微信公眾號和已經(jīng)備案的域名,且解析好配置好https證書。
1.如上圖 微信公眾號 > 基本配置 ,設(shè)置開發(fā)者密碼
2.設(shè)置IP白名單,白名單填寫提供后端服務(wù)的服務(wù)器公網(wǎng)IP
二、公眾號服務(wù)器配置。
1.找到基本配置
2.將服務(wù)器url填寫為你備案的域名,關(guān)于URL請求超時
和token驗證失敗
,可以到下面的文章中查看解決方法。
解決方法傳送門
三、設(shè)置jsapi安全域名、授權(quán)域名、業(yè)務(wù)域名。
1.如圖找到 公眾號設(shè)置>功能設(shè)置
2.三個參數(shù)都設(shè)置為域名
四、在后端設(shè)置一個路由返回微信的登錄url
// AuthLogin @Title 授權(quán)URL
// @router /authLogin [post,get]
func (u *UserController) AuthLogin() {url := "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" + appid + "&redirect_uri=" + baseUrl + "&response_type=code&scope=snsapi_userinfo&state=200#wechat_redirect"u.Success(0, url, "成功")
}
注釋:
baseUrl為H5中授權(quán)成功返回的頁面。
五、在網(wǎng)頁H5中,打開第四步后端返回的鏈接進行微信授權(quán),并且保存好微信授權(quán)返回的code參數(shù);
1.首先獲取授權(quán)的URL,然后直接跳轉(zhuǎn)這個URL;
authLogin(){uni.$u.http.get("/user/authLogin").then(response=>{console.log(response)if (response.code === 0){window.location.href = response.data}else{}})}
2.用戶點擊我同意
之后,便會攜帶code
以及state
等參數(shù)跳轉(zhuǎn)回uni-app的一個頁面中,在onload事件里面觸發(fā),判斷code
不為空,則調(diào)用第3步的后臺接口,獲取用戶的資料信息。
oauthLogin() {this.loading = trueuni.$u.http.get(`/user/oAuthToken?code=${this.code}`).then(response => {if (response.code === 0) {this.$store.commit('user/token', response.data)uni.navigateTo({url: "/pages/serve"})} else {this.$store.commit('user/token', "")}this.loading = false})
},
onLoad: function(option) {if (option['state'] !== undefined && Number(option.state) === 200 && option['code'] !== undefined) {this.code = option['code']this.oauthLogin()} else {this.loading = falsethis.$wx.initJssdk()}this.loadmore()},
3.后端獲取微信用戶信息的接口如下,這里要先用code獲取accessToken和openid,然后再用accessToken以及openid拿到用戶信息,最后做一個緩存,避免重復(fù)獲取。
// OAuthToken @Title OAuth獲取用戶信息
// @router /oAuthToken [post,get]
func (u *UserController) OAuthToken() {errRes := oAuthErrRes{}successRes := oAuthRes{}successInfoRes := oAuthInfoRes{}authorization := u.GetString("code", "")u.hasLogin = falseif u.hasLogin == false {url := "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" + appid + "&secret=" + secret + "&code=" + authorization + "&grant_type=authorization_code"res, err := common.PostReq(url, "")logs.Error(res)err = json.Unmarshal([]byte(res), &errRes)err = json.Unmarshal([]byte(res), &successRes)if err != nil {u.Error(400, "請求錯誤")}if errRes.Errcode > 0 {u.Error(400, errRes.Errmsg)}url = "https://api.weixin.qq.com/sns/userinfo?access_token=" + successRes.AccessToken + "&openid=" + successRes.Openid + "&lang=zh_CN"res, err = common.PostReq(url, "")logs.Error(res)err = json.Unmarshal([]byte(res), &errRes)err = json.Unmarshal([]byte(res), &successInfoRes)if err != nil {u.Error(400, "請求錯誤")}if errRes.Errcode > 0 {if u.hasLogin == true {_ = u.ac.Delete(u.token)_ = u.ac.Delete(u.token + "-info")}}_ = u.SetSession("access_token", successRes.AccessToken)_ = u.SetSession("openid", successRes.Openid)m := models.Member{NickName: successInfoRes.Nickname,Phone: 0,Sex: successInfoRes.Sex,LoginType: 1,HeadImgUrl: successInfoRes.Headimgurl,OpenId: successInfoRes.Openid,UnionId: successInfoRes.Unionid,AccessToken: successRes.AccessToken,Location: successInfoRes.Country + " " + successInfoRes.Province + " " + successInfoRes.City,}_ = m.Add()} else {successRes = u.authRessuccessInfoRes = u.infoReslogs.Error("登錄緩存信息", successInfoRes)}token := common.GetToken()if u.hasLogin == true {token = u.token}data, _ := json.Marshal(successRes)_ = u.ac.Put(token, string(data), 28*60*60*time.Second)data, _ = json.Marshal(successInfoRes)_ = u.ac.Put(token+"-info", string(data), 28*60*60*time.Second)u.Success(0, token, "請求成功")
}
六、在第五步中,已經(jīng)將獲取到的用戶信息保存在cache中,對應(yīng)的key則是接口中返回的token,之后網(wǎng)頁中其它接口,就可以直接拿cache中保存的用戶信息,至此微信授權(quán)登錄流程已經(jīng)走完。
實際上對接并不難,就是要配置這配置那,哪一步?jīng)]配置好,就導(dǎo)致出錯。