微信小程序登陸Java後臺接口(詳解,附示例代碼)

 

首先看一下官方文檔html

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

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

1.當小程序調用wx.login()時,會得到一個code(臨時登陸憑證),而後咱們須要用wx.request()將code發送到本身的服務器.spring

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

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

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

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;


}

}

 

親,若是您感受本文有用,請點個贊再走吧✌(>‿◠)!!

相關文章
相關標籤/搜索