藍(lán)暢首頁(yè) >> 動(dòng)態(tài)
微信開(kāi)發(fā):微信網(wǎng)頁(yè)授權(quán)獲取openid
時(shí)間:2019-10-19 03:17:42 | 來(lái)源:
一、準(zhǔn)備工具
微信開(kāi)發(fā),官方的文檔應(yīng)該是第一個(gè)想到的這里把官方文檔貼出來(lái):微信網(wǎng)頁(yè)授權(quán)文檔
二、開(kāi)始開(kāi)發(fā)
內(nèi)網(wǎng)穿透就不在這里演示了,下面我們直入主題:
1.填寫(xiě)網(wǎng)頁(yè)授權(quán)域名
在這篇文檔的一開(kāi)始就埋了一個(gè)坑

這段話就是說(shuō),我們?cè)陂_(kāi)發(fā)前需要在圖片中框紅的位置填入我們所要開(kāi)發(fā)的域名。這里我們使用的是測(cè)試環(huán)境,所以需要在測(cè)試賬號(hào)管理頁(yè)面的這個(gè)位置填入我們自己的域名,這里要注意填入域名的規(guī)則。

2.文檔閱讀
接著閱讀文檔我們可以發(fā)現(xiàn)網(wǎng)頁(yè)授權(quán)有兩種scope,
snsapi_base和snsapi_userinfo。兩種scope都可以獲取到opeid,不同的是snsapi_userinfo除了openid外還可以獲取到用戶的基本信息,但是需要用戶手動(dòng)進(jìn)行確認(rèn)。
再往下閱讀我們可以看到官方文檔的授權(quán)步驟
第一步:用戶同意授權(quán),獲取code
第二步:通過(guò)code換取網(wǎng)頁(yè)授權(quán)access_token以及openid
第三步:刷新access_token(如果需要)
第四步:拉取用戶信息(需scope為 snsapi_userinfo)
我們只需要openid,所以我們只開(kāi)發(fā)到第二步就好了。下面我們就按著官方步驟來(lái)開(kāi)發(fā)。
3.獲取code
查看文檔后我們發(fā)現(xiàn)我們需要拼接一個(gè)url并且訪問(wèn)它。url的參數(shù)文檔中寫(xiě)的很清楚了。看他的例子也能看個(gè)清楚。這里比較重要的是redirect_uri。這個(gè)參數(shù)所填的是一個(gè)鏈接。我們?cè)L問(wèn)url后會(huì)自動(dòng)轉(zhuǎn)發(fā)到這個(gè)鏈接并且將我們需要的code以及拼接url中的state的值作為參數(shù)。這個(gè)redirect_uri的值要填入的是我們代碼中的controller的位置。
所以這里我們需要一段代碼:
/** * <pre> * Description: wechat OAuth2.0 * Author: lllx * Version: 1.0 * Created at: 2018/2/1 * </pre> */@RestController@RequestMapping("/weixin")@Slf4jpublicclassWeixinController{@GetMapping("/auth")publicvoidauth(@RequestParam("code")String code,@RequestParam("state")String state){ log.info("auth開(kāi)始了。。。。"); log.info("code={}",code); log.info("state={}",state);}}
我拼接的url,這里大家要注意根據(jù)自己的情況進(jìn)行拼接。拼接成功后需要在微信app中進(jìn)行訪問(wèn)
https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=http://xxx/sell/weixin/auth&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
訪問(wèn)后的結(jié)果

這樣我們就拿到了code
4.獲取openid
繼續(xù)查看文檔,發(fā)現(xiàn)我們只需要使用獲取到的code再訪問(wèn)另一個(gè)url就可以獲取到我們想要的了。接著上面的代碼
/** * <pre> * Description: wechat OAuth2.0 * Author: lllx * Version: 1.0 * Created at: 2018/2/1 * </pre> */@RestController@RequestMapping("/weixin")@Slf4jpublicclassWeixinController{@GetMapping("/auth")publicvoidauth(@RequestParam("code")String code,@RequestParam("state")String state){ log.info("auth開(kāi)始了。。。。"); log.info("code={}",code); log.info("state={}",state);String url ="https://api.weixin.qq.com/sns/oauth2/access_token?appid=xxxx&secret=xxxx&code="+code+"&grant_type=authorization_code";RestTemplate restTemplate =newRestTemplate();String result = restTemplate.getForObject(url,String.class); log.info("result={}",result);}}
這時(shí)我們?cè)俅卧L問(wèn)第三步拼接的url就可以看到如下結(jié)果。

將結(jié)果格式化一下我們可以就看到我們想要的openid

三、總結(jié)
流程看起來(lái)還是很簡(jiǎn)單的。但以上只是一個(gè)最簡(jiǎn)單、最直接的手工獲取openid的例子。真正在使用過(guò)程中需要結(jié)合自身的業(yè)務(wù)流程來(lái)進(jìn)行開(kāi)發(fā),這時(shí)可能就有些麻煩了。此時(shí)我們也可以借助一些網(wǎng)上第三方sdk來(lái)開(kāi)發(fā)。例如:weixin-java-tools。
關(guān)于我們:
Infocode藍(lán)暢信息技術(shù)有限公司成功為多家世界財(cái)富500強(qiáng)企業(yè)以及其他著名品牌提供優(yōu)質(zhì)服務(wù),是您靠譜的互聯(lián)網(wǎng)開(kāi)發(fā)供應(yīng)商。
服務(wù)客戶遍及北京、上海、杭州、深圳、廣州、天津、青島、南京、寧波、蘇州、無(wú)錫、廈門(mén)、重慶、西安等大中型城市及地區(qū) 為您提供:H5開(kāi)發(fā),小程序開(kāi)發(fā),H5外包,微信開(kāi)發(fā)外包,H5商城開(kāi)發(fā),小程序商城開(kāi)發(fā),網(wǎng)站開(kāi)發(fā)外包,H5游戲開(kāi)發(fā),小程序開(kāi)發(fā)外包,小程序設(shè)計(jì)、APP開(kāi)發(fā)外包,UI設(shè)計(jì),SEO優(yōu)化,SEO外包,視頻后期制作等優(yōu)質(zhì)服務(wù)
網(wǎng)站優(yōu)化公司:網(wǎng)站優(yōu)化的作用
如何實(shí)現(xiàn)SEO關(guān)鍵詞排名提升成為了企業(yè)亟待解決的問(wèn)題
提升網(wǎng)站快速排名的SEO策略,讓你的網(wǎng)站名列前茅
打造高效SEO網(wǎng)站系統(tǒng),提升您的在線業(yè)務(wù)