微信小程序登錄Java后台接口(詳解,附示例代碼)


首先看一下官方文檔

地址:微信小程序官方文檔API登錄接口

 

我們先對官方給的時序圖進行簡單的分析

1.當小程序調用wx.login()時,會獲得一個code(臨時登錄憑證),然后我們需要用wx.request()將code發送到自己的服務器.

2.在服務器的接口中,調用登錄憑證校檢接口,將appid(小程序唯一標識)+appsecret(小程序的app secret)+code發送到微信接口服務.然后微信服務器會返回session_key(會話秘鑰)+openid(用戶的唯一標識).

3.在服務器的接口中,已經得到微信用戶的唯一標識openid,已經數據傳輸的session_key,接下來就寫業務邏輯了.

4.返回給小程序自定義登錄態,小程序將它存入storage中.接下來的wx.request()的業務請求,都會攜帶自定義登錄態.

5.在服務器的接口中通過自定義登錄態查詢openid和session_key,然后返回業務數據.

划一下重點

在服務器的接口中,需要進行一個http請求,將從小程序獲得的code和接口中存儲的appid和secret發送給微信接口服務,然后就可以獲得session_key和openid.

接口地址

 

https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
請求參數
參數 必填 說明
appid 是 小程序唯一標識
secret 是 小程序的 app secret
js_code 是 登錄時獲取的 code
grant_type 是 填寫為 authorization_code
在不滿足UnionID下發條件的情況下,返回參數
參數 說明
openid 用戶唯一標識
session_key 會話密鑰
在滿足UnionID下發條件的情況下,返回參數
參數 說明
openid 用戶唯一標識
session_key 會話密鑰
unionid 用戶在開放平台的唯一標識符
返回說明

//正常返回的JSON數據包

{

"openid": "OPENID",

"session_key": "SESSIONKEY",

}



//滿足UnionID返回條件時,返回的JSON數據包

{

"openid": "OPENID",

"session_key": "SESSIONKEY",

"unionid": "UNIONID"

}

//錯誤時返回JSON數據包(示例為Code無效)

{

"errcode": 40029,

"errmsg": "invalid code"

}
小程序登錄示例代碼

//app.js

App({

onLaunch: function() {

wx.login({

success: function(res) {

if (res.code) {

//發起網絡請求

wx.request({

url: 'https://test.com/onLogin',

data: {

code: res.code

}

})

} else {

console.log('登錄失敗!' + res.errMsg)

}

}

});

}

})
Java后台接口示例代碼


package com.xx.action;

import java.util.Map;

import org.springframework.http.HttpMethod;

import org.springframework.http.HttpStatus;

import org.springframework.http.ResponseEntity;

import org.springframework.web.client.RestTemplate;



import com.google.gson.Gson;

import com.hp.bean.WeChatAppLoginReq;

import com.hp.bean.WeChatSession;

import com.opensymphony.xwork2.ActionSupport;



public class WeChatLogin extends ActionSupport{



/**

*author 李俊標

*2018-4-19

*/

private static final long serialVersionUID = 1L;



private static final String APPID = "wx9xxxxxxxxxxx9b4";

private static final String SECRET = "685742***************84xs859";

private String code;



public String getCode() {

return code;

}





public void setCode(String code) {

this.code = code;

}

//獲取憑證校檢接口

public String login()

{

//微信的接口

String url = "https://api.weixin.qq.com/sns/jscode2session?appid="+APPID+

"&secret="+SECRET+"&js_code="+ code +"&grant_type=authorization_code";

RestTemplate restTemplate = new RestTemplate();

//進行網絡請求,訪問url接口

ResponseEntity<String> responseEntity = restTemplate.exchange(url, HttpMethod.GET, null, String.class);

//根據返回值進行后續操作

if(responseEntity != null && responseEntity.getStatusCode() == HttpStatus.OK)

{

String sessionData = responseEntity.getBody();

Gson gson = new Gson();

//解析從微信服務器獲得的openid和session_key;

WeChatSession weChatSession = gson.fromJson(sessionData,WeChatSession.class);

//獲取用戶的唯一標識

String openid = weChatSession.getOpenid();

//獲取會話秘鑰

String session_key = weChatSession.getSession_key();

//下面就可以寫自己的業務代碼了

//最后要返回一個自定義的登錄態,用來做后續數據傳輸的驗證

}



return null;



}

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM