微信公眾號程序開發的時候,獲取用戶信息的時候,需要用到用戶的openId,openId是微信用戶的唯一標識符,這個操作可以后台實現也可以前端實現,之前項目里是通過后台來獲取的,好像用到了一些三方的包,然后我抽空看了一下微信開發文檔,發現通過前端獲取openId也很簡單,如下所示:
一、先附上微信公眾號開發文檔 https://developers.weixin.qq.com/doc/oplatform/Mobile_App/WeChat_Login/Development_Guide.html
二、獲取openId
第一步,先獲取code,大致可以理解為每次點擊微信公眾號的不同菜單欄,都會產生不同的code,但是同一個用戶不同的code,又對應着唯一的openId
通過自定義的路徑,可以獲取到code,注意code只能用一次,使用過就失效了,鏈接為
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxxxxxxxxxxxxxx&redirect_uri=http%3a%2f%2f127.0.0.1&response_type=code&scope=snsapi_userinfo#wechat_redirect
其中appid為開發者賬號或者微信平台的的appid,redirect_uri為跳轉的重定向地址(地址包含特殊符號,需要轉碼才行),其他為默認參數,不用考慮,注意,重定向地址只能使用80端口
請求地址后會重定向到一個新的地址,地址的參數中會有code這個參數,如下所示
http://127.0.0.1/?url=index&code=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&state=
然后直接獲取問號傳的參數code即可(vue可以使用this.$route.query.code獲取)
第二步:根據code獲取openId,請求地址為
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
其中appid和secret為開發者賬號或者微信平台的的appid和appsecret,code為第一步獲取到的code,最后一個參數為默認參數,不用考慮
如下所示
this.$axios.get(`https://api.weixin.qq.com/sns/oauth2/access_token?appid=xxxxxxxxxxxxxxxxxxxx&secret=xxxxxxxxxxxxxxx&code=xxxxxxxxx&grant_type=authorization_code`).then(res => { console.log(res); });
然后就可以返回openid了
注意:如果出現跨域問題,使用proxy代理即可
如果返回值錯誤,對照開發指南的錯誤表,解決錯誤即可
嗯,就醬~~