電腦桌面下方什么都沒有了,任務欄沒有了怎么辦?
方法:
1、任務欄可以操作的情況下,在任務欄空白處右鍵,選擇“啟動任務欄管理器”,或者使用ctrl+alt+del快捷鍵,調出任務管理器。
2、在windows任務管理器的左上角,點擊“文件”——“新建任務(運行...)”。
3、在彈出創建新任務的窗口中輸入“.exe",然后點擊確定,看電腦是否出現任務欄。
4、如果還是沒有顯示,重新在任務欄空白處,右鍵點擊,選擇“屬性”。
5、在任務欄中,”任務欄外觀——屏幕上的任務欄位置“進行改變一下,如原來在底部,重新設置一下在右側。
6、然后”確定“,看任務欄是否出在桌面的右側出現,出現代表成功恢復了,重新把任務欄位置調回來即可!如果沒有成功,最后實沒辦法,只能重啟電腦了。
我家電腦最下方的任務欄不顯示,各種方法都試了,還是不顯示怎么辦
方法一如下:
1,可以先看看任務欄隱藏屬性是否開啟了,可能影響到最小化窗口顯示,先在任務欄上右鍵,選擇“屬性”。
2,進入屬性窗口后,選擇“任務欄”選項卡,看看其下的“自動隱藏任務欄”是否勾選了,如果勾選了,取消,如果沒勾選,可以先勾選上,退出,再進入,再去掉勾選試試,也許通過這樣設置,任務欄就可能恢復正常了。
方法二如下:
1,如果遇到任務欄不顯示最小化窗口,可以重啟電腦試試,也許經過重啟,系統短時間的抽風也許就好了。如果不想重啟電腦,也可以把資源管理器重啟一下,效果是一樣的,方法,在任務欄右鍵,選擇“啟動任務管理器”。
2,進入任務管理器后,選擇“進程”,找到“.exe”這個進程,右鍵,選擇“結束進程”,彈出警示框,按“結束進程”即可。
3,結束資源管理器進程后,除了任務管理器窗口,桌面上其它圖標,任務欄,或者其它程序窗口,都會關閉(注意結束進程前,保存正在編輯的重要的文件資料)。這時,點擊任務管理器窗口“文件”菜單,選擇“新建任務”。
4,彈出一個創建新任務窗口,在框中輸入命令,按確定,就能重啟資源管理器。
電腦任務欄中不顯示東西怎么辦?
出現這種情況是由于:
1 桌面程序.exe有問題
2任務欄設置錯誤
3.任務欄故障解決方法1:?有一種情況是打開的窗口任務欄不顯示,包括任務欄也看不到。但是鼠標點擊過去又能正常顯示,這是因為設置了 任務欄自動隱藏導致的。
解決辦法:找到任務欄,右鍵。屬性。
打開任務欄屬性,找到常規里??面的—自動隱藏任務欄選項 。把前面的那個 勾 去掉即可方法2:桌面進程異常
如果不是上述情況,一般是由于桌面進程出錯。重啟計算機,或注銷重新登錄即可恢復正常,如果有正在進行的任務不方便重啟或注銷,可以通過下面方法重置桌面進程。
操作步驟如下:找到任務欄,右鍵“任務管理器”如果是XP系統直接輸入 ctrl+alt+t調出任務管理器
找到“進程”選項卡---- 找到 進程,點擊結束進程,并確定
新建任務
然后點擊,新建任務,在任務新建打開選項輸入 確定即可,您在查看任務欄您會發現,之前打開的窗口又正?;謴土朔椒ㄈ喝蝿諜谛迯停?/p>
如果按照上述方法還不行,可能是電腦系統異常導致任務欄出問題了??梢缘骄W上搜索下載任務欄修復工具。(taskbar repair tool plus)任務欄修復下載之后點擊修復按鈕時殺毒軟件彈出注冊表寫入警告,請點擊允許。這是任務欄修復工具向注冊表寫入自啟動消息。?
電腦桌面下面工具欄不見了怎么辦
由操作失誤引起的任務欄消失不見該怎么辦?相應的解決方法:
1、按鍵盤上的F11鍵,看是否恢復顯示任務欄
2、按windows鍵(Ctrl和Alt中間那個鍵)→顯示【開始】菜單,在彈出的空白處單擊鼠標右鍵,點擊【屬性】→在彈出的屬性窗口中選擇【任務欄】→把【自動隱藏任務欄】方框中的勾去掉,同時選擇【鎖定任務欄】。
拓展資料
由系統沒有正常加載成功引起的任務欄消失不見該怎么辦?相應的解決方法:
按“Ctrl+Alt+Del”組合鍵打開任務管理器→在彈出的窗口中選擇【文件】→選擇【新建任務】,輸入【.exe】,按【確定】即可。
由電腦中毒引起的系統任務欄消失不見該怎么辦?相應的解決方法:
安裝或更新360安全衛士、金山毒霸等免費的殺毒軟件。這些軟件可以查殺木馬,然后修復病毒木馬對系統的破壞,從而讓桌面任務欄重見天日。
電腦屏幕下方的任務欄為什么不顯示我的QQ圖標?
隱藏了··你通過默認熱鍵 ctrl+alt+z能夠打開QQ嗎 ? 如果可以那是因為QQ里面的設置問題??!你打開 QQ點你自己的圖像,在彈出的框左下角有個系統設置,點擊后在主板設置那,把在任務欄通知區域顯示QQ圖標的那個 復選框 打上鉤就OK了。
電腦屏幕最下方的任務欄不見了該怎么辦?
第一種方法:
按windows健(位于ctrl和alt中間),顯示出開始菜單,在空白處單擊右鍵,點擊“屬性',打開“任務欄和開始菜單屬性”,在任務欄中選中“自動隱藏任務欄”,應用后再取消選擇。同時選擇“鎖定任務欄”。
第二種方法:
系統沒有正常加載成功,請“ctrl+alt+del'打開任務管理器,點擊文件,新建任務,輸入.exe,確定即可。
電腦下面的任務欄不見了怎么辦
xp系統下解決任務欄不見了的方法首先,你鼠標放在之前任務欄的位置,看他是否會自己出來,能自動出來就是設置了自動隱藏了
.打開“我的電腦>控制面板>任務欄和開始菜單”,在“任務欄和開始菜單屬性”對話框中,點“任務欄”標簽,將“自動隱藏任務欄”選項前面的小勾去掉,再點“確定”。
如果你連桌面都沒有那就是資源管理器沒打開,Ctrl+Alt+Del,在【文件】中【新建任務】中添加.exe
電腦屏幕下方任務欄不顯示怎么辦
按下 Ctrl+Alt+Del 鍵,打開任務管理器->"進程"選項卡->找到 .exe ->點結束進程->點“文件”->在新建任務中輸入“.exe ”,再點“確定”。
微信公眾號開發之使用服務號的模板消息實現每日提醒通知功能
本文主要內容:
1. 項目簡介
靈感來源于學校的 每日健康日報,要求使用微信小程序進行每日健康打卡。所以此項目的功能類似于 QQ群機器人,或者是 每日鬧鐘。
功能描述:
用戶訪問給定的頁面,進行 授權登錄 ,然后確認自己的身份(本科生或研究生),并 開啟通知 ,即可每天在約定時間收到微信服務號的消息提醒。當然,用戶可以自定義每日通知的時間,也可以隨時開啟或關閉每日通知。
特點對比 2. 項目截圖
左圖:用戶訂閱的頁面,中圖:用戶修改通知時間的頁面,右圖:用戶收到的消息提醒
3. 開發準備 3.1 開發工具
1、編碼工具:用于項目開發。如果使用 Java 實現,可使用 IDEA,如果使用 PHP 開發,可使用 ;
2、運行工具:用于本地測試。如果是PHP開發,可選擇作為PHP項目的運行部署環境;
3、測試工具:只能使用 微信開發者工具 ,開發模式選擇 公眾號網頁調試 。
微信開發者工具下載地址:
因為涉及到微信授權登錄功能,所以測試工具必須使用 微信開發者工具,而普通瀏覽器無法實現該功能。
微信開發者工具的使用和調試方法,與普通瀏覽器一致。
3.2 環境支持
1、任意域名一枚,需要開啟SSL(即https訪問);
2、微信服務號一個,必須通過認證;
3、具有外網IP的服務器一臺。
如果僅僅是學習技術,滿足前兩項即可。如果項目需要上線,上述三者必不可少。
對于第2條,沒有服務號,也可以在微信開放平臺 中創建網站應用。不過微信開放平臺同樣需要企業認證。
在上述環境均滿足的情況下,接下來需要對微信服務號進行一些配置。主要有:
1、獲取公眾號開發信息:
公眾號的開發信息主要是 開發者ID(AppID) 和 開發者密碼()。
某些接口必須使用開發者ID和開發者密碼才能進行調用請求。
獲取路徑是:微信公眾號后臺 → 開發 → 基本配置。
2、設置IP白名單
只有IP白名單中的IP地址才可以調用 獲取接口,其中是進行其他操作,如發送消息模板等的必備參數。
3、配置域名
配置域名的頁面訪問路徑是:公眾號后臺 → 設置 → 公眾號設置 → 功能設置。
需要配置的域名主要有三個:
① 業務域名
設置業務域名后,在微信內訪問該域名下頁面時,不會被重新排版。用戶在該域名上進行輸入時,不出現安全提示。比如在微信內打開網頁,輸入表單的時候,不會出現“請勿輸入QQ密碼”等安全提示。
② JS接口安全域名
設置JS接口安全域名后,公眾號開發者可在該域名下調用微信開放的JS接口。比如前文中的的獲取,需要使用此域名。
③ 網頁授權域名
用戶在網頁授權頁同意授權給公眾號后,微信會將授權數據傳給一個回調頁面,回調頁面需在此域名下,以確保安全可靠。
4、添加開發者
只有已添加的開發者,才可以使用web開發者工具進行對應公眾號的開發和調試。
添加開發者頁面的訪問路徑是:微信公眾號后臺 → 開發 → 開發者工具 → web開發者工具。
5、添加模板
在添加功能插件模塊中,添加模板消息功能
然后在模板庫中,搜索合適的模板,進行添加:
其中模板ID是開發用到的參數。
4. 官方參考文檔解讀
關于微信公眾號的開發技術,及其實現路線,在官網中均有介紹。
官方文檔:
打開官方開發文檔,第一單元標題為開發前必讀,開發者規范和全局返回碼說明章節還是有必要讀一讀的。
開發時,不能違反微信的相關規范,否則容易被封號,然后全局返回碼可以幫助快速定位問題所在。
4.1 網頁授權登錄解讀
打開官方開發文檔,第5章微信網頁開發中,第2節即為網頁授權的參考文檔。
直達鏈接:
該章節的目錄之前,有一段關于網頁授權的一些說明。
第一點關于網頁授權回調域名的說明,即前文中關于域名的配置。
第二點關于網頁授權的兩種scope的區別說明,主要說明的是兩種授權模式,一種是靜默登錄授權形式,這種形式只能獲取到用戶的OpenID,另一種是獲取用戶基本信息的形式,這種形式會彈窗,需要用戶手動點擊登錄。兩種實現方式,主要是修改登錄鏈接中的scope參數的值。后文詳述。
第三點關于網頁授權和普通的區別,可參考文檔。其實主要說明的是網頁授權的安全性更高,必須通過code來獲取,而且不同code獲取的不同,每一個有效期2小時(7200秒),每個在這2小時內,只對同一個用戶有效。而普通(即基礎支持中的“獲取”接口獲取到的)可以直接獲取,不同場景可重復使用,有效期也為2小時,過時需要刷新。
具體而言,網頁授權流程分為四步:
1、引導用戶進入授權頁面同意授權,獲取code
2、通過code換取網頁授權(與基礎支持中的不同)
3、如果需要,開發者可以刷新網頁授權,避免過期
4、通過網頁授權和openid獲取用戶基本信息(支持UnionID機制)
1. 獲取code
首先需要使用戶訪問如下鏈接,才能進行登錄:
#
該鏈接中,大寫字母標識的字段,需要進行替換(下同)。
上述鏈接中的各個參數詳細說明如下:
參數是否必須說明
appid
是
公眾號的唯一標識
是
授權后重定向的回調鏈接地址, 請使用 對鏈接進行處理
是
返回類型,只能填寫code
scope
是
應用授權作用域,只能為 (不彈出授權頁面,直接跳轉,只能獲取用戶openid)或(彈出授權頁面,可通過openid拿到昵稱、性別、所在地。并且, 即使在未關注的情況下,只要用戶授權,也能獲取其信息 )
state
否
重定向后會帶上state參數,開發者可以填寫a-zA-Z0-9的參數值,最多128字節
#
是
無論直接打開還是做頁面302重定向時候,必須帶此參數
用戶確定登錄后,即可在授權后重定向的回調鏈接地址中獲取到code,格式如下:
/?code=CODE&state=STATE
這里的CODE是接下來換取的必須參數,而STATE是開發者自定義的其他信息。
2. 換取
上面獲取到了code,接下來需要使用這個code來換取。
請求鏈接如下(GET方式):
上述鏈接中的各個參數詳細說明如下:
參數是否必須說明
appid
是
公眾號的唯一標識、開發者ID
secret
是
公眾號的、開發者密碼
code
是
填寫第一步獲取的code參數
是
只能為:
請求成功后,返回的JSON數據包格式如下:
{
"access_token":"ACCESS_TOKEN",
"expires_in":7200,
"refresh_token":"REFRESH_TOKEN",
"openid":"OPENID",
"scope":"SCOPE"
}
關于該JSON數據包的各個字段說明如下:
參數說明
網頁授權接口調用憑證,注意:此與基礎支持的不同
接口調用憑證超時時間,單位(秒)
用戶刷新,有效期30天。當超時后,可以使用進行刷新。
openid
用戶唯一標識,請注意,在未關注公眾號時,用戶訪問公眾號的網頁,也會產生一個用戶和公眾號唯一的OpenID
scope
用戶授權的作用域,使用逗號(,)分隔
下面是可選操作,一般用不到:
使用獲取的鏈接如下(GET方式):
上述鏈接中的各個參數詳細說明如下:
參數是否必須說明
appid
是
公眾號的唯一標識
是
填寫為
是
填寫通過獲取到的參數
正確返回的JSON格式和上面的一致。
一些說明:
執行到這里,我們已經拿到了用戶的OpenID。如果僅僅做用戶唯一性校驗,至此結束即可。同樣,對于發送模板消息,也只需要用戶的OpenID。
3. 獲取用戶信息
如果網頁授權作用域為 ,則此時開發者可以通過 和 openid 拉取用戶信息了。
請求鏈接如下(GET方式、需使用https協議):
上述鏈接的參數說明如下:
參數描述
網頁授權接口調用憑證,即前面步驟獲取到的。
openid
用戶的唯一標識
lang
返回國家地區語言版本,zh_CN 簡體,zh_TW 繁體,en 英語
請求成功后返回的JSON數據包格式如下:
{
"openid":" OPENID",
"nickname": NICKNAME,
"sex":"1",
"province":"PROVINCE",
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
"privilege":[ "PRIVILEGE1" "PRIVILEGE2" ],
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
上述JSON數據包的參數詳細說明如下:
參數描述
openid
用戶的唯一標識
用戶昵稱
sex
用戶的性別,值為1時是男性,值為2時是女性,值為0時是未知
用戶個人資料填寫的省份
city
普通用戶個人資料填寫的城市
country
國家,如中國為CN
用戶頭像,最后一個數值代表正方形頭像大小(有0、46、64、96、132數值可選,0代表640*640正方形頭像),用戶沒有頭像時該項為空。若用戶更換頭像,原有頭像URL將失效。
用戶特權信息,json 數組,如微信沃卡用戶為()
unionid
只有在用戶將公眾號綁定到微信開放平臺帳號后,才會出現該字段。
附:檢驗授權憑證()是否有效
請求鏈接(GET方法、需使用https協議):
上述鏈接的參數說明如下:
參數描述
網頁授權接口調用憑證,注意:此與基礎支持的不同
openid
用戶的唯一標識
正確的JSON數據包返回結果如下:
{ "errcode":0,"errmsg":"ok"}
錯誤時的JSON返回示例:
{ "errcode":40003,"errmsg":"invalid openid"}
使用該方法可以檢測是否過期,以保證項目的高可用性。
4.2 模板消息推送解讀
打開官方開發文檔,第4章 消息管理 中,第7節即為 模板消息接口 的參考文檔。
直達鏈接:
在官方文檔中,該模塊很大篇幅所敘述的內容,是針對第三方微信服務商,所以有一些是個人開發者用不到的。
總結模板消息推送的實際過程,主要流程如下:
1. 獲取基礎
請求鏈接如下(GET方式):
該鏈接中的參數詳細說明如下:
參數是否必須說明
是
獲取填寫
appid
是
第三方用戶唯一憑證
secret
是
第三方用戶唯一憑證密鑰,即
請求成功返回的JSON數據包格式如下:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
JSON數據包參數說明:
參數說明
獲取到的憑證
憑證有效時間,單位:秒
2. 發送消息模板
請求鏈接如下(POST方式):
該鏈接中只需要 一個參數,即第一步獲取到的 。
POST數據包格式為JSON格式,示例如下:
{
"touser":"OPENID",
"template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
"url":"http://weixin.qq.com/download",
"miniprogram":{
"appid":"xiaochengxuappid12345",
"pagepath":"pages/index?foo=bar"
},
"data":{
"first": {
"value":"恭喜你購買成功!",
"color":"#173177"
},

"keyword1":{
"value":"巧克力",
"color":"#173177"
},
"keyword2": {
"value":"39.8元",
"color":"#173177"
},
"keyword3": {
"value":"2014年9月22日",
"color":"#173177"
},
"remark":{
"value":"歡迎再次購買!",
"color":"#173177"
}
}
}
該JSON數據包中的各個參數詳細說明如下:
參數是否必填說明
touser
是
接收者openid
是
模板ID,前文配置中添加模板消息后獲得的一串字符
url
否
模板跳轉鏈接(海外帳號沒有跳轉能力)
否
跳小程序所需數據,不需跳小程序可不用傳該數據。當鏈接和小程序都存在時,優先跳轉小程序。
appid
是
所需跳轉到的小程序appid(該小程序appid必須與發模板消息的公眾號是綁定關聯關系,暫不支持小游戲)
否
所需跳轉到小程序的具體頁面路徑,支持帶參數,(示例pages/index?foo=bar),要求該小程序已發布,暫不支持小游戲
data
是
模板數據。這里的數據個數,需要與消息模板中的參數對應,如下圖所示。
color
否
模板內容字體顏色,不填默認為黑色
請求成功后,返回的JSON數據包格式如下所示:
{
"errcode":0,
"errmsg":"ok",
"msgid":200228332
}
這時,用戶手機微信將收到對應的提醒。
行文至此,講述的主要是授權登錄和發送模板消息的大致實現流程。
下文,將結合實際的項目,對上述功能的實現流程,以項目源碼的形式,進行更加詳細的演示。
5. 網頁授權登錄實現(PHP為例) 5.1 工具類GetWX
該工具類的主要功能是根據微信授權登錄的實現流程,進行鏈接請求和數據獲取。
/**
* 獲取微信用戶信息
*/
class GetWX
{
//公眾號的開發信息
private $appid = 'APPID';
private $appsecret = 'APPSECERT';
/**
* 功能:用戶授權并獲取code
*
* @param $callback
*/
public function get_code($callback)
{
$appid = $this->appid;
$scope = 'snsapi_userinfo';
$state = md5(uniqid(rand(), TRUE));//唯一ID標識符絕對不會重復
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid . '&redirect_uri=' . urlencode($callback) . '&response_type=code&scope=' . $scope . '&state=' . $state . '#wechat_redirect';
header("Location:$url");
}
/**
* 功能:通過code獲取access_token
*
* @param $code
* @return mixed
*/
public function get_access_token($code)
{
$appid = $this->appid;
$appsecret = $this->appsecret;
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code';
$data = json_decode(file_get_contents($url));//返回的json數組轉換成array數組
return $data;
}
/**
* 功能:使用access_token獲取用戶信息
*
* @param $access_token
* @param $openid
* @return mixed
*/
public function get_user_info($access_token, $openid)
{
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN';
$data = json_decode(file_get_contents($url));//返回的json數組轉換成array數組
return $data;
}
}
?>
關于該工具類的具體實現方法不唯一。后文中有第二種完整的示例。
5.2 獲取code
登錄回調頁面(login.php)的源碼如下:
include 'getWX.php';
$getWX = new GetWX();
//如果沒有GET到code,則執行登錄操作
if (!isset($_GET['code'])) {
//微信服務器回調url,這里是本頁url
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$callback = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
//獲取code
$getWX->get_code($callback);
} //GET到了code,可以執行后續操作
else {
}
如上源碼所示,這時訪問,執行到if語句處,判斷鏈接中沒有code這個參數,所以獲取了當前鏈接的URL地址(參數),并將其交給方法,該方法將構造登錄鏈接,并前往該頁面,然后彈出登錄授權頁面,如下所示:
用戶點擊 同意 之后,返回到$鏈接。這時,鏈接中攜帶code參數,以及開發者自定義的state參數。如下圖所示:
我們暫時用到的是code參數。
5.3 換取
接下來,使用該 code換取,繼續完善login.php代碼,具體如下:
include 'getWX.php';
$getWX = new GetWX();
//如果沒有GET到code,則執行登錄操作
if (!isset($_GET['code'])) {
//微信服務器回調url,這里是本頁url
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$callback = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
//獲取code
$getWX->get_code($callback);
} //GET到了code,可以執行后續操作
else {
//從鏈接中拿code
$code = $_GET['code'];
//獲取網頁授權access_token和用戶openid
$data = $getWX->get_access_token($code);
//測試輸出
echo 'access_token:' . $data->access_token . '
';
echo 'expires_in:' . $data->expires_in . '
';
echo 'refresh_token:' . $data->refresh_token . '
';
echo 'openid:' . $data->openid . '
';
echo 'scope:' . $data->scope . '
';
}
輸出的信息如下:
5.4 獲取用戶信息
上面拿到了 和 OpenID,接下來可以使用這兩個參數來獲取用戶的基本信息。
繼續完善login.php,如下:
include 'getWX.php';
$getWX = new GetWX();
//如果沒有GET到code,則執行登錄操作
if (!isset($_GET['code'])) {
//微信服務器回調url,這里是本頁url
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$callback = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
//獲取code
$getWX->get_code($callback);
} //GET到了code,可以執行后續操作
else {
//從鏈接中拿code
$code = $_GET['code'];
//獲取網頁授權access_token和用戶openid
$data = $getWX->get_access_token($code);
//獲取微信用戶信息
$userInfo = $getWX->get_user_info($data->access_token, $data->openid);
//測試輸出:
echo 'openid:' . $userInfo->openid . '
';
echo 'nickname:' . $userInfo->nickname . '
';
echo 'sex:' . $userInfo->sex . '
';
echo 'province:' . $userInfo->province . '
';
echo 'city:' . $userInfo->city . '
';
echo 'country:' . $userInfo->country . '
';
echo 'headimgurl:' . $userInfo->headimgurl . '
';
}
執行結果如下圖所示:
這時,我們就拿到了用戶的基本信息,之后就可以將這些基本信息保存到數據庫,用戶ID等可以保存到session或者cookie中,等等,進行各種其他操作。
5.5 另一種完整的示例
工具類:
/**
* 獲取微信用戶信息
* 本源碼來自互聯網
*/
class GetWxUser
{
private $appid = '';
private $appsecret = '';
/**
* 1、獲取微信用戶信息,判斷有沒有code,有使用code換取access_token,沒有去獲取code。
* @return array 微信用戶信息數組
*/
public function get_user_all()
{
if (!isset($_GET['code'])) {//沒有code,去微信接口獲取code碼
//微信服務器回調url,這里是本頁url
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$callback = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
//獲取code
$this->get_code($callback);
} else {//獲取code后跳轉回來到這里了
$code = $_GET['code'];
$data = $this->get_access_token($code);//獲取網頁授權access_token和用戶openid
$userInfo = $this->get_user_info($data['access_token'], $data['openid']);//獲取微信用戶信息
return $userInfo;
}
}
/**
* 2、用戶授權并獲取code
* @param string $callback 微信服務器回調鏈接url
*/
public function get_code($callback)
{
$appid = $this->appid;
$scope = 'snsapi_userinfo';
$state = md5(uniqid(rand(), TRUE));//唯一ID標識符絕對不會重復
$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=' . $appid . '&redirect_uri=' . urlencode($callback) . '&response_type=code&scope=' . $scope . '&state=' . $state . '#wechat_redirect';
header("Location:$url");

}
/**
* 3、使用code換取access_token
* @param string 用于換取access_token的code,微信提供
* @return array access_token和用戶openid數組
*/
public function get_access_token($code)
{
$appid = $this->appid;
$appsecret = $this->appsecret;
$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $appid . '&secret=' . $appsecret . '&code=' . $code . '&grant_type=authorization_code';
$user = json_decode(file_get_contents($url));
if (isset($user->errcode)) {
echo 'error:' . $user->errcode . '
msg :' . $user->errmsg;
exit;
}
$data = json_decode(json_encode($user), true);//返回的json數組轉換成array數組
return $data;
}
/**
* 4、使用access_token獲取用戶信息
* @param string access_token
* @param string 用戶的openid
* @return array 用戶信息數組
*/
public function get_user_info($access_token, $openid)
{
$url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN';
$user = json_decode(file_get_contents($url));
if (isset($user->errcode)) {
echo 'error:' . $user->errcode . '
msg :' . $user->errmsg;
exit;
}
$data = json_decode(json_encode($user), true);//返回的json數組轉換成array數組
return $data;
}
}
?>
登錄頁login.php:
header("Content-Type: text/html;charset=utf-8");
//設置時區
date_default_timezone_set('Asia/Chongqing');
include 'getWXUser.php';
$getWxUser = new GetWxUser();
//主頁的URL
$homeUrl = 'https://mzxy.cxhit.cn';
//沒有code,去微信接口獲取code碼
if (!isset($_GET['code'])) {
//微信服務器回調url,這里是本頁url
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$callback = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
$getWxUser->get_code($callback);
} //獲取code后跳轉回來到這里了
else {
$code = $_GET['code'];
//獲取網頁授權access_token和用戶openid
$data = $getWxUser->get_access_token($code);
//獲取微信用戶信息(數組)
$userInfo = $getWxUser->get_user_info($data['access_token'], $data['openid']);
//保存到數據庫
if ($userInfo['openid'] != '') {
saveUserInfo($userInfo['openid'], $userInfo['nickname'], $userInfo['sex'], $userInfo['province'], $userInfo['city'], $userInfo['country'], $userInfo['headimgurl']);
}
//保存到cookie里
setcookie('openid', $userInfo['openid'], time() + 3600 * 24 * 30, "/");
//返回主頁
header("Location:" . $homeUrl);
}
?>
6. 模板消息推送實現(PHP為例) 6.1 官方JSSDK文檔(PHP)
該SDK實現了各種參數的獲取,源碼如下:
class JSSDK
{
private $appId;
private $appSecret;
public function __construct($appId, $appSecret)
{
$this->appId = $appId;
$this->appSecret = $appSecret;
}
public function getSignPackage()
{
$jsapiTicket = $this->getJsApiTicket();
// 注意 URL 一定要動態獲取,不能 hardcode.
$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
$url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$timestamp = time();
$nonceStr = $this->createNonceStr();
// 這里參數的順序要按照 key 值 ASCII 碼升序排序
$string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";
$signature = sha1($string);
$signPackage = array(
"appId" => $this->appId,
"nonceStr" => $nonceStr,
"timestamp" => $timestamp,
"url" => $url,
"signature" => $signature,
"rawString" => $string
);
return $signPackage;
}
private function createNonceStr($length = 16)
{
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$str = "";
for ($i = 0; $i < $length; $i++) {
$str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
}
return $str;
}
private function getJsApiTicket()
{
// jsapi_ticket 應該全局存儲與更新,以下代碼以寫入到文件中做示例
$data = json_decode($this->get_php_file("jsapi_ticket.php"));
if ($data->expire_time < time()) {
$accessToken = $this->getAccessToken();
// 如果是企業號用以下 URL 獲取 ticket
// $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=$accessToken";
$url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
$res = json_decode($this->httpGet($url));
$ticket = $res->ticket;
if ($ticket) {
$data->expire_time = time() + 7000;
$data->jsapi_ticket = $ticket;
$this->set_php_file("jsapi_ticket.php", json_encode($data));
}
} else {
$ticket = $data->jsapi_ticket;
}
return $ticket;
}
public function getAccessToken()
{
// access_token 應該全局存儲與更新,以下代碼以寫入到文件中做示例
$data = json_decode($this->get_php_file("access_token.php"));
if ($data->expire_time < time()) {
// 如果是企業號用以下URL獲取access_token
// $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$this->appId&corpsecret=$this->appSecret";
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";
$res = json_decode($this->httpGet($url));
$access_token = $res->access_token;
if ($access_token) {
$data->expire_time = time() + 7000;
$data->access_token = $access_token;
$this->set_php_file("access_token.php", json_encode($data));
}
} else {
$access_token = $data->access_token;
}
return $access_token;
}
private function httpGet($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
// 為保證第三方服務器與微信服務器之間數據傳輸的安全性,所有微信接口采用https方式調用,必須使用下面2行代碼打開ssl安全校驗。
// 如果在部署過程中代碼在此處驗證失敗,請到 http://curl.haxx.se/ca/cacert.pem 下載新的證書判別文件。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
private function get_php_file($filename)
{
return trim(substr(file_get_contents($filename), 15));
}
private function set_php_file($filename, $content)
{
$fp = fopen($filename, "w");
fwrite($fp, "" . $content);
fclose($fp);
}
}
6.2 模板消息JSON化
這里以下面這個模板消息為實例,進行演示。模板 詳細內容 處的內容需要牢記,因為在構造JSON時,要用這些信息。
然后定義一個函數,主要功能是實現發送數據的JSON格式化
函數源碼:
//模板消息JSON格式化
function json_tempalte($openid, $appid, $nickname, $time)
{
//模板消息
$template = array(
'touser' => $openid, //用戶openid
'template_id' => 'XXXX', //在公眾號下配置的模板id
'url' => 'https://XXXX.cn', //點擊模板消息會跳轉的鏈接
'miniprogram' => array(
'appid' => $appid,
'pagepath' => 'pages/main/login/login?foo=bar'
),
'data' => array(
'first' => array('value' => '完成今日健康日報了嗎?未完成,請盡快哦~', 'color' => "#FF0000"),
'keyword1' => array('value' => $nickname, 'color' => '#173177'), //keyword需要與配置的模板消息對應
'keyword2' => array('value' => $time, 'color' => '#173177'),
'remark' => array('value' => '點擊此處前往填報。本通知由您訂閱產生,切換身份、更改通知時間及退訂管理,請訪問菜單欄『學習助手』模塊。', 'color' => '#FF0000'),
)
);
$json_template = json_encode($template);
return $json_template;
}
這個函數返回的結果是JSON數據包。
6.3 發送模板消息
關鍵源碼如下:
include("jssdk.php");
$jssdk = new JSSDK("APPID", "APPSECRET");
//定義消息模板JSON
$json_template = json_tempalte('APPID', 'wxa0738e54aae84423', '拾年之璐' . '(本科生)', date("Y-m-d"));
//獲取AccessToken
$accessToken = $jssdk->getAccessToken();
//POST 的鏈接
$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $accessToken;
//提交
list($returnCode, $returnContent) = http_post_json($url, $json_template);
//打印日志(JSON格式)
echo '發送結果如下:' . $returnContent . '\n';
*請認真填寫需求信息,我們會在24小時內與您取得聯系。