建立微信公眾號測試帳號-Java本地服務(wù)
優(yōu)采云 發(fā)布時(shí)間: 2020-08-09 03:56這里的重點(diǎn)是頁(yè)面授權回調的域名.
這是第一個(gè)坑. 在測試編號中,您可以填寫(xiě)域名ip,甚至不需要填寫(xiě)域名,這極大地方便了測試授權的使用. 回調頁(yè)面表示微信用戶(hù)關(guān)注您的官方賬號. 當他選擇授權登錄時(shí),我們可以調用微信界面來(lái)獲取他的基本微信信息,例如唯一的微信openid,然后返回到我們的頁(yè)面之一,或者這是用于采集用戶(hù)信息的服務(wù). 頁(yè)面或服務(wù)必須在此域名下. 假設我填寫(xiě)了
例如,如果我想返回頁(yè)面,它可以是:
,
返回服務(wù):
只要在此域名下,無(wú)論嵌入多少層. 請注意,不能在前面添加https或http前綴.
在回調域名中,如果您的項目名稱(chēng)由下劃線(xiàn)組成,
例如,要訪(fǎng)問(wèn)您的項目,請刪除帶下劃線(xiàn)的項目名稱(chēng). 盡管刪除的項目名稱(chēng)只能映射回本地啟動(dòng)服務(wù)器,而不是映射回項目,但這不會(huì )造成傷害.
好的,這里很多人說(shuō),如果沒(méi)有域名,我該怎么辦,那是第二種材料,一個(gè)可以映射到Intranet的域名.
我使用的花生殼域名.
新用戶(hù)可以獲得幾個(gè)免費域名,他們也可以使用這些域名,但是對于我來(lái)說(shuō),測試并購買(mǎi)100個(gè)大洋的.com域名非常方便.
然后通過(guò)花生殼內部網(wǎng)下載客戶(hù)端
您擁有的域名將顯示在這里,包括您發(fā)送的域名.
隨意編寫(xiě)應用程序名稱(chēng),域名是下屬之一,映射是HTTP80. 內部主機不知道您可以打開(kāi)cmd ip config / all來(lái)查看您的地址. 我的項目從tomact開(kāi)始,使用默認端口8080. 最后,進(jìn)行診斷并在地址欄中鍵入Internet域名,以確保其他人可以訪(fǎng)問(wèn)您的本地項目.
到目前為止,第二種材料已經(jīng)準備好了.
第三個(gè)是可以運行的項目...這里將不討論. 您可以使用springboot + myb,springMVC,struts2來(lái)構建可以運行的項目. 如果沒(méi)有,請搜索其他博客以快速建立一個(gè)博客,至少您可以輸入一個(gè)servelet. 我只是直接運行公司的項目.
連接授權界面
首先編寫(xiě)一個(gè)鏈接: APPID&redirect_uri = l&response_type = code&scope = snsapi_base&state = 123#wechat_redirect
此鏈接已發(fā)送至微信,表明我要開(kāi)始??看私缑?/p>
appid: 是測試編號上的appid
redirect_uri: 我們剛剛在上面填寫(xiě)了,因此這里是在該域名下填寫(xiě)一個(gè)HTML以供回調. 必須添加或在這里,必須!
scope: 這是指要調用的微信界面,snsapi_base是指用戶(hù)的靜默授權,這是用戶(hù)執行微信授權而沒(méi)有彈出框提示是否進(jìn)行授權的情況,因此該界面獲取的信息較少,您可以查看詳細信息官方技術(shù)文檔.
狀態(tài): 填寫(xiě)您想要的任何內容.
我下載了官方的微信調試工具. 如果您按照上述步驟進(jìn)行操作,則您的鏈接將不會(huì )出現代碼錯誤,redirect_uri和其他錯誤.
如您所見(jiàn),在返回的頁(yè)面上,后綴附有代碼. 該代碼將被發(fā)送到微信以交換剛剛登錄的用戶(hù)的信息. 當然,您可以對上述授權鏈接進(jìn)行異步請求,并使用js在頁(yè)面上獲取它. 我是這樣子的
函數GetQueryString(name)
{
var reg = new RegExp(“(^ |&)” + name +“ =([^&] *)(&| $)”);
var r = window.location.search.substr(1).match(reg);
if(r!= null)返回unescape(r [2]);返回null;
}
調用GetQueryString(code)獲取地址的參數值.
獲取后,將其發(fā)送到后臺進(jìn)行處理. 有很多提交方法. 異步也是可能的,或者將整個(gè)表單直接連接到其他值并提交到后臺. 根仍然由后臺處理.
僅使用老式的struts2粘貼密鑰代碼,因此返回String映射以返回到頁(yè)面,如果您是springMVC控制器,請自行更改
public String juvenileSubsidy() {
//如果是第二次驗證登錄則直接發(fā)送微信的opendid
String openId =getOpenId();
.......//省略各種去到信息以后的service
return "login_jsp";
}
........
private String getOpenId(){
//appid和secret是測試公眾號上的,自行填寫(xiě),別直接copy,
//code是剛剛獲取到的,自行改寫(xiě)參數
String url="https://api.weixin.qq.com/sns/oa"
+ "uth2/access_token?appid="+wxappid+"&"
+ "secret="+appsecret+"&code="+wxcode+""
+ "&grant_type=authorization_code";
String openId="";
try {
URL getUrl=new URL(url);
HttpURLConnection http=(HttpURLConnection)getUrl.openConnection();
http.setRequestMethod("GET");
http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
http.connect();
InputStream is = http.getInputStream();
int size = is.available();
byte[] b = new byte[size];
is.read(b);
String message = new String(b, "UTF-8");
JSONObject json = JSONObject.parseObject(message);
openId=json.get("openid").toString();
} catch (Exception e) {
System.out.println(e.getMessage());
}
return openId;
}
當然,許多博客文章都是關(guān)于如何封裝地址參數名稱(chēng)的,以便以后可以調用. 一開(kāi)始,我寫(xiě)得很粗糙以顯示效果. 您可以在將來(lái)輕松封裝它,甚至可以使用xml讀取配置信息. 我的私有方法只是返回我需要的String openid. 您可以選擇返回對象,或檢查正式文檔,更改原創(chuàng )范圍,非靜默授權可以獲取更多用戶(hù)信息.
接下來(lái)是調試觀(guān)察.
{"access_token":"15_0D9_XTsx2YdwoD5KPd6WHAEc47xLqy4uuQAb06irOd5UgOnzwW3zPRdhMXinpJ7ucvkW3D7coema7QAdA",
"expires_in":7200,
"refresh_token":"15_cz_GGe-k41d_YVVgmrFvQBUvF_LuyuNSB2PTq8YWXHLz0l7Vg8hJnBWjGFMNhTT2NRFqqRYT5gSofww",
"openid":"o-MN1B0FGR1JV398vbSPNZ70xa424",
"scope":"snsapi_base"}
以上是成功發(fā)送到微信界面的json對象. 我叫snsapi_base,所以我只能返回此信息. 這些令牌每次都會(huì )刷新,并且這些密鑰也被微信用于驗證服務(wù)器的重要數據,但是在這里它們是無(wú)用的. 我得到了所需的openid.
通過(guò)這種方式,獲得了微信登錄官方賬號上唯一識別的ID,并可以通過(guò)該ID實(shí)現業(yè)務(wù)邏輯. 同時(shí),可以在本地測試官方帳戶(hù)服務(wù).
對于本文開(kāi)頭提到的接口配置信息,此處不需要使用它. 這要求后端發(fā)送令牌進(jìn)行驗證.
最后,您可以將此嬰兒鏈接放在官方帳戶(hù)的自定義菜單中. 這就是所謂的用戶(hù)登錄授權.
當然,這是測試帳戶(hù)授權. 正式啟動(dòng)后,它將替換為注冊域名,appid被替換為官方官方帳戶(hù)的ID,其余部分保持不變.
到目前為止,官方帳戶(hù)的靜默授權已完成!