国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
1.配置安全回調(diào)網(wǎng)域:
2.用戶(hù)級(jí)授權(quán)和靜默授權(quán)
3.網(wǎng)頁(yè)授權(quán)access_token和普通access_token的區(qū)別
4.引導(dǎo)用戶(hù)進(jìn)入授權(quán)頁(yè)面同意授權(quán),獲取code?
js:
getWxUserInfo方法:
5.後臺(tái)restful--??
首頁(yè) 微信小程式 微信開(kāi)發(fā) 微信開(kāi)發(fā)之Author網(wǎng)頁(yè)授權(quán)

微信開(kāi)發(fā)之Author網(wǎng)頁(yè)授權(quán)

Feb 15, 2017 am 11:15 AM
java 微信公眾號(hào)開(kāi)發(fā)

?微信開(kāi)發(fā)中,經(jīng)常有這樣的需求:獲得用戶(hù)頭像、綁定微信號(hào)給用戶(hù)發(fā)送資訊.. 那麼實(shí)現(xiàn)這些的前提就是授權(quán)!

?

1.配置安全回調(diào)網(wǎng)域:

微信開(kāi)發(fā)之Author網(wǎng)頁(yè)授權(quán)

?

在微信公眾號(hào)請(qǐng)求用戶(hù)網(wǎng)頁(yè)授權(quán)之前,開(kāi)發(fā)者需要先到網(wǎng)頁(yè)平臺(tái)官網(wǎng)中的「開(kāi)發(fā)- 介面網(wǎng)頁(yè)授權(quán)取得使用者基本資訊」的設(shè)定選項(xiàng)中,修改授權(quán)回呼域名,值得注意的是這裡就是直接寫(xiě)全域名,如: www.liliangel.cn。然而我們開(kāi)發(fā)h5中一般用的是二級(jí)域名,如:h5.liliangel.cn 也同樣在安全回調(diào)域名中。

?

2.用戶(hù)級(jí)授權(quán)和靜默授權(quán)

1、以snsapi_base為scope發(fā)起的網(wǎng)頁(yè)授權(quán),是用來(lái)獲取進(jìn)入頁(yè)面的用戶(hù)的openid的,並且是靜默授權(quán)並自動(dòng)跳轉(zhuǎn)到回調(diào)頁(yè)的。使用者感知的就是直接進(jìn)入了回調(diào)頁(yè)。

2、以snsapi_userinfo為scope發(fā)起的網(wǎng)頁(yè)授權(quán),是用來(lái)取得使用者的基本資訊的。但這種授權(quán)需要使用者手動(dòng)同意,而且由於使用者同意過(guò),所以無(wú)須關(guān)注,就可在授權(quán)後取得該使用者的基本資訊。

?

3.網(wǎng)頁(yè)授權(quán)access_token和普通access_token的區(qū)別

1、微信網(wǎng)頁(yè)授權(quán)是透過(guò)OAuth2.0機(jī)制實(shí)現(xiàn)的,在用戶(hù)授權(quán)給公眾號(hào)後,公眾號(hào)碼可以獲取到一個(gè)呼叫網(wǎng)頁(yè)授權(quán)特有的接口憑證(網(wǎng)頁(yè)授權(quán)access_token),透過(guò)網(wǎng)頁(yè)授權(quán)access_token可以進(jìn)行授權(quán)後接口調(diào)用,如獲取用戶(hù)基本信息;?

2、其他微信接口,需要通過(guò)基礎(chǔ)支持中的“獲取access_token”接口來(lái)獲取到的普通access_token調(diào)用。?

?

4.引導(dǎo)用戶(hù)進(jìn)入授權(quán)頁(yè)面同意授權(quán),獲取code?

微信開(kāi)發(fā)之Author網(wǎng)頁(yè)授權(quán)

?

微信更新後,授權(quán)頁(yè)也變化了。其實(shí)習(xí)慣了綠色的那個(gè)經(jīng)典頁(yè)面..

js:


var?center?=?{
????????init:?function(){
????????????.....
????????},
????????enterWxAuthor:?function(){
????????????var?wxUserInfo?=?localStorage.getItem("wxUserInfo");
????????????if?(!wxUserInfo)?{
????????????????var?code?=?common.getUrlParameter('code');
????????????????if?(code)?{
????????????????????common.getWxUserInfo();
????????????????????center.init();
????????????????}else{
????????????????????//沒(méi)有微信用戶(hù)信息,沒(méi)有授權(quán)-->>?需要授權(quán),跳轉(zhuǎn)授權(quán)頁(yè)面
????????????????????window.location.href?=?'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+?WX_APPID?+'&redirect_uri='+?window.location.href?+'&response_type=code&scope=snsapi_userinfo#wechat_redirect';
????????????????}
????????????}else{
????????????????center.init();
????????????}
????????}
}
$(document).ready(function()?{?
????center.enterWxAuthor();
}

?

以scope=snsapi_userinfo為例,頁(yè)面載入的時(shí)候進(jìn)入授權(quán)方法,說(shuō)明之前已經(jīng)授權(quán)過(guò),直接進(jìn)入初始化方法。如果沒(méi)有,判斷url是否包含code,有code說(shuō)明是進(jìn)入授權(quán)頁(yè)回呼後的頁(yè)面,那麼透過(guò)code換取使用者資訊即可。沒(méi)有code,也就是使用者第一次進(jìn)入該頁(yè)面,引導(dǎo)去授權(quán)頁(yè),redirect_uri為目前頁(yè)面位址。

getWxUserInfo方法:


/**
?????*?授權(quán)后獲取用戶(hù)的基本信息
?????*/
????getWxUserInfo:function(par){
????????var?code?=?common.getUrlParameter("code");
????????
????????if?(par)?code?=?par;
????????
????????$.ajax({
????????????async:?false,
????????????data:?{code:code},
????????????type?:?"GET",
????????????url?:?WX_ROOT?+?"wechat/authorization",
????????????success?:?function(json)?{
????????????????if?(json){
????????????????????try?{
????????????????????????//保證寫(xiě)入的wxUserInfo是正確的
????????????????????????var?data?=?JSON.parse(json);
????????????????????????if?(data.openid)?{
????????????????????????????localStorage.setItem('wxUserInfo',json);//寫(xiě)緩存--微信用戶(hù)信息
????????????????????????}
????????????????????}?catch?(e)?{
????????????????????????//?TODO:?handle?exception
????????????????????}
????????????????}
????????????}
????????});
????},

?

5.後臺(tái)restful--??

?


這裡有一個(gè)授權(quán)access_token ,切記:授權(quán)access_token非全域access_token?,需要使用緩存,這裡我使用的redis,具體配置不多說(shuō)後面寫(xiě)相關(guān)配置博文,當(dāng)然也可以使用ehcache,關(guān)於ehcahe配置在我的第一篇博客中有詳細(xì)介紹。

  /**
?????*?微信授權(quán)
?????*?@param?code?使用一次后失效
?????*?
?????*?@return?用戶(hù)基本信息
?????*?@throws?IOException?
?????*/
????@RequestMapping(value?=?"/authorization",?method?=?RequestMethod.GET)????public?void?authorizationWeixin(
????????????@RequestParam?String?code,
????????????HttpServletRequest?request,?
????????????HttpServletResponse?response)?throws?IOException{
????????request.setCharacterEncoding("UTF-8");??
????????response.setCharacterEncoding("UTF-8");?

????????PrintWriter?out?=?response.getWriter();
????????LOGGER.info("RestFul?of?authorization?parameters?code:{}",code);????????
????????try?{
????????????String?rs?=?wechatService.getOauthAccessToken(code);
????????????out.write(rs);
????????????LOGGER.info("RestFul?of?authorization?is?successful.",rs);
????????}?catch?(Exception?e)?{
????????????LOGGER.error("RestFul?of?authorization?is?error.",e);
????????}finally{
????????????out.close();
????????}
????}

?


當(dāng)時(shí)趕時(shí)間,代碼命名較亂??梢钥吹剑矣昧艘粋€(gè)同步的方法,先從緩存中獲取key為WEIXIN_SQ_ACCESS_TOKEN,如果取到了說(shuō)明沒(méi)有過(guò)期,直接通過(guò)httpclient調(diào)用微信提供的接口,返回用戶(hù)信息的字符串給前端。如果沒(méi)有取到,說(shuō)明沒(méi)有或已經(jīng)過(guò)期,則根據(jù)refresh_token刷新access_token,再寫(xiě)緩存,由於access_token擁有較短的有效期,為了保險(xiǎn)我這裡設(shè)置了緩存的失效時(shí)間微信給的時(shí)間再減一個(gè)小時(shí)?;剡^(guò)頭來(lái)看程式碼發(fā)現(xiàn),上面的邏輯有點(diǎn)點(diǎn)小問(wèn)題,這樣寫(xiě)會(huì)導(dǎo)致第一次獲取或者緩存失效後第一次獲取access_token都會(huì)去刷新一次,暫時(shí)不影響使用,後面做優(yōu)化修改 TODO。

6:保存使用者資訊

通常情況下,授權(quán)後我們會(huì)將使用者資訊保存資料庫(kù)表,openid為唯一主鍵,外鍵關(guān)聯(lián)起我們自己的使用者表,這樣一來(lái),無(wú)論是後續(xù)要開(kāi)展什麼業(yè)務(wù),還是做營(yíng)運(yùn)數(shù)據(jù)統(tǒng)計(jì),都有了一個(gè)跟微信公眾號(hào)的關(guān)聯(lián)關(guān)係。

值得注意的是:我們獲取到的headimgurl是微信提供的一個(gè)url地址,當(dāng)用戶(hù)修改頭像後可能導(dǎo)致原來(lái)的地址失效,所以最好是通過(guò)將圖片保存到本地伺服器然後保存本地的地址url!

微信回傳的值:

微信開(kāi)發(fā)之Author網(wǎng)頁(yè)授權(quán)

更多微信開(kāi)發(fā)之Author網(wǎng)頁(yè)授權(quán)?相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願(yuàn)投稿,版權(quán)歸原作者所有。本站不承擔(dān)相應(yīng)的法律責(zé)任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請(qǐng)聯(lián)絡(luò)admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線(xiàn)上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話(huà)題

Laravel 教程
1600
29
PHP教程
1502
276
如何使用JDBC處理Java的交易? 如何使用JDBC處理Java的交易? Aug 02, 2025 pm 12:29 PM

要正確處理JDBC事務(wù),必須先關(guān)閉自動(dòng)提交模式,再執(zhí)行多個(gè)操作,最後根據(jù)結(jié)果提交或回滾;1.調(diào)用conn.setAutoCommit(false)以開(kāi)始事務(wù);2.執(zhí)行多個(gè)SQL操作,如INSERT和UPDATE;3.若所有操作成功則調(diào)用conn.commit(),若發(fā)生異常則調(diào)用conn.rollback()確保數(shù)據(jù)一致性;同時(shí)應(yīng)使用try-with-resources管理資源,妥善處理異常並關(guān)閉連接,避免連接洩漏;此外建議使用連接池、設(shè)置保存點(diǎn)實(shí)現(xiàn)部分回滾,並保持事務(wù)盡可能短以提升性能。

了解Java虛擬機(jī)(JVM)內(nèi)部 了解Java虛擬機(jī)(JVM)內(nèi)部 Aug 01, 2025 am 06:31 AM

TheJVMenablesJava’s"writeonce,runanywhere"capabilitybyexecutingbytecodethroughfourmaincomponents:1.TheClassLoaderSubsystemloads,links,andinitializes.classfilesusingbootstrap,extension,andapplicationclassloaders,ensuringsecureandlazyclassloa

如何使用Java的日曆? 如何使用Java的日曆? Aug 02, 2025 am 02:38 AM

使用java.time包中的類(lèi)替代舊的Date和Calendar類(lèi);2.通過(guò)LocalDate、LocalDateTime和LocalTime獲取當(dāng)前日期時(shí)間;3.使用of()方法創(chuàng)建特定日期時(shí)間;4.利用plus/minus方法不可變地增減時(shí)間;5.使用ZonedDateTime和ZoneId處理時(shí)區(qū);6.通過(guò)DateTimeFormatter格式化和解析日期字符串;7.必要時(shí)通過(guò)Instant與舊日期類(lèi)型兼容;現(xiàn)代Java中日期處理應(yīng)優(yōu)先使用java.timeAPI,它提供了清晰、不可變且線(xiàn)

比較Java框架:Spring Boot vs Quarkus vs Micronaut 比較Java框架:Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

前形式攝取,quarkusandmicronautleaddueTocile timeProcessingandGraalvSupport,withquarkusoftenpernperforminglightbetterine nosserless notelless centarios.2。

垃圾收集如何在Java工作? 垃圾收集如何在Java工作? Aug 02, 2025 pm 01:55 PM

Java的垃圾回收(GC)是自動(dòng)管理內(nèi)存的機(jī)制,通過(guò)回收不可達(dá)對(duì)象釋放堆內(nèi)存,減少內(nèi)存洩漏風(fēng)險(xiǎn)。 1.GC從根對(duì)象(如棧變量、活動(dòng)線(xiàn)程、靜態(tài)字段等)出發(fā)判斷對(duì)象可達(dá)性,無(wú)法到達(dá)的對(duì)像被標(biāo)記為垃圾。 2.基於標(biāo)記-清除算法,標(biāo)記所有可達(dá)對(duì)象,清除未標(biāo)記對(duì)象。 3.採(cǎi)用分代收集策略:新生代(Eden、S0、S1)頻繁執(zhí)行MinorGC;老年代執(zhí)行較少但耗時(shí)較長(zhǎng)的MajorGC;Metaspace存儲(chǔ)類(lèi)元數(shù)據(jù)。 4.JVM提供多種GC器:SerialGC適用於小型應(yīng)用;ParallelGC提升吞吐量;CMS降

了解網(wǎng)絡(luò)端口和防火牆 了解網(wǎng)絡(luò)端口和防火牆 Aug 01, 2025 am 06:40 AM

NetworkPortSandFireWallsworkTogetHertoEnableCommunication whereSeringSecurity.1.NetWorkPortSareVirtualendPointSnumbered0-655 35,with-Well-with-Newonportslike80(HTTP),443(https),22(SSH)和25(smtp)sindiessingspefificservices.2.portsoperateervertcp(可靠,c

以身作則,解釋說(shuō)明 以身作則,解釋說(shuō)明 Aug 02, 2025 am 06:26 AM

defer用於在函數(shù)返回前執(zhí)行指定操作,如清理資源;參數(shù)在defer時(shí)立即求值,函數(shù)按後進(jìn)先出(LIFO)順序執(zhí)行;1.多個(gè)defer按聲明逆序執(zhí)行;2.常用於文件關(guān)閉等安全清理;3.可修改命名返回值;4.即使發(fā)生panic也會(huì)執(zhí)行,適合用於recover;5.避免在循環(huán)中濫用defer,防止資源洩漏;正確使用可提升代碼安全性和可讀性。

比較Java構(gòu)建工具:Maven vs. Gradle 比較Java構(gòu)建工具:Maven vs. Gradle Aug 03, 2025 pm 01:36 PM

Gradleisthebetterchoiceformostnewprojectsduetoitssuperiorflexibility,performance,andmoderntoolingsupport.1.Gradle’sGroovy/KotlinDSLismoreconciseandexpressivethanMaven’sverboseXML.2.GradleoutperformsMaveninbuildspeedwithincrementalcompilation,buildcac

See all articles