亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

小程序登錄、微信網(wǎng)頁(yè)授權(quán)(Java版)

joywek / 1243人閱讀

摘要:小程序登錄微信網(wǎng)頁(yè)授權(quán)版首先呢,登錄授權(quán)授權(quán)登錄,是一樣的意思,不用糾結(jié)。寫小程序授權(quán)登錄的代碼前,需要了解清楚與的區(qū)別,這里再簡(jiǎn)單介紹一下騰訊有個(gè)微信開放平臺(tái),只有企業(yè)才能注冊(cè)賬號(hào),可理解為微信體系里,最頂級(jí)的賬號(hào)。

小程序登錄、微信網(wǎng)頁(yè)授權(quán)(Java版)

首先呢,“登錄”、“授權(quán)”、“授權(quán)登錄”,是一樣的意思,不用糾結(jié)。

寫小程序授權(quán)登錄的代碼前,需要了解清楚openid與unionid的區(qū)別,這里再簡(jiǎn)單介紹一下:

騰訊有個(gè) “微信·開放平臺(tái)”,只有企業(yè)才能注冊(cè)賬號(hào),可理解為微信體系里,最頂級(jí)的賬號(hào)。官網(wǎng)地址:https://open.weixin.qq.com

除了這個(gè)微信開放平臺(tái),還有另一個(gè)叫做 “微信公眾平臺(tái)”,可注冊(cè)四種賬號(hào),包括服務(wù)號(hào)、訂閱號(hào)、小程序、企業(yè)微信。也就是說(shuō),公眾號(hào)(服務(wù)號(hào)和訂閱號(hào)可統(tǒng)稱為公眾號(hào))占一個(gè)賬號(hào),小程序也占一個(gè)賬號(hào)。在沒有綁定開放平臺(tái)前,小程序授權(quán)登錄只能拿到用戶的openid。官網(wǎng)地址:https://mp.weixin.qq.com

小程序可綁定在公眾號(hào)下,公眾號(hào)可以綁定在微信開放平臺(tái)下,小程序也可以綁定在微信開放平臺(tái)下。(好像有點(diǎn)小繞)簡(jiǎn)單點(diǎn)說(shuō),所有的公眾平臺(tái)賬號(hào)都需要綁定在 “開放平臺(tái)” 下,才可獲得的unionid,這是打通同個(gè)企業(yè)下所有微信公眾賬號(hào)的最有效方法(官方推薦)

更加具體的可自行百度...

一、以下為小程序登錄的代碼:

方式一:通過(guò)code調(diào)用code2session接口獲得message,包含openid、session_key,滿足條件的情況下還能直接獲得unionid

條件如下:(存在局限性)

官方說(shuō)明UnionID獲取途徑,如果開發(fā)者帳號(hào)下存在同主體的公眾號(hào),并且該用戶已經(jīng)關(guān)注了該公眾號(hào)。開發(fā)者可以直接通過(guò) wx.login + code2Session 獲取到該用戶 UnionID,無(wú)須用戶再次授權(quán)。

開發(fā)者帳號(hào)下存在同主體的公眾號(hào)或移動(dòng)應(yīng)用,并且該用戶已經(jīng)授權(quán)登錄過(guò)該公眾號(hào)或移動(dòng)應(yīng)用。也可通過(guò)code2session獲取該用戶的 UnionID。

/**
 * Author: huanglp
 * Date: 2018-11-28
 */
public class WeiXinUtils {

    private static Logger log = LoggerFactory.getLogger(WeiXinUtils.class);

    /**
     * 通過(guò)前端傳過(guò)來(lái)的code, 調(diào)用小程序登錄接口, 獲取到message并返回 (包含openid session_key等)
     *
     * @param code
     * @return
     */
    public static JSONObject login(String code) {
        log.info("==============小程序登錄方法開始================");
        WxMiniProperties properties = WeiXinPropertiesUtils.getWxMiniProperties();
        String url = properties.getInterfaceUrl() + "/sns/jscode2session?appid="
            + properties.getAppId() + "&secret=" + properties.getAppSecret() 
            + "&js_code=" + code + "&grant_type=authorization_code";
        JSONObject message;
        try {
            // RestTemplate是Spring封裝好的, 挺好用, 可做成單例模式
            RestTemplate restTemplate = new RestTemplate();
            String response = restTemplate.getForObject(url, String.class);
            message = JSON.parseObject(response);
        } catch (Exception e) {
            log.error("微信服務(wù)器請(qǐng)求錯(cuò)誤", e);
            message = new JSONObject();
        }
        log.info("message:" + message.toString());
        log.info("==============小程序登錄方法結(jié)束================");
        return message;

        // 后續(xù), 可獲取openid session_key等數(shù)據(jù), 以下代碼一般放在Service層
        //if (message.get("errcode") != null) {
        //    throw new ValidationException(message.toString());
        //}
        //String openid = message.get("openid").toString();
        //String sessionKey = message.get("session_key").toString();
        //...

    }
}

補(bǔ)充1: WeiXinPropertiesUtils工具類

public class WeiXinPropertiesUtils {

    // 微信小程序配置
    private static WxMiniProperties miniProperties;
    // 微信公眾號(hào)配置
    private static WxProperties wxProperties;

    private static void init() {
        if (miniProperties == null) {
            miniProperties = ContextLoader.getCurrentWebApplicationContext()
                .getBean(WxMiniProperties.class);
        }
        if (wxProperties == null) {
            wxProperties = ContextLoader.getCurrentWebApplicationContext()
                .getBean(WxProperties.class);
        }
    }

    public static WxMiniProperties getWxMiniProperties() {
        init();
        return miniProperties;
    }

    public static WxProperties getWxProperties() {
        init();
        return wxProperties;
    }
}

補(bǔ)充2: WxMiniProperties配置類

@Data
@Component
@ConfigurationProperties(prefix = "luwei.module.wx-mini")
public class WxMiniProperties {

    private String appId;
    private String appSecret;
    private String interfaceUrl;

}

到此已能通過(guò)code獲取到用戶的openid和session_key,但若不滿足條件,即使將小程序綁定到微信開放平臺(tái)上,也獲取不到unionid,所以此方式不穩(wěn)定,推薦使用解密的方式獲取數(shù)據(jù)。

方式二:通過(guò)解密的方式獲取用戶unionid

/**
 * 通過(guò)encryptedData,sessionKey,iv獲得解密信息, 擁有用戶豐富的信息, 包含openid,unionid,昵稱等
 */
public static JSONObject decryptWxData(String encryptedData, String sessionKey, String iv) throws Exception {
    log.info("============小程序登錄解析數(shù)據(jù)方法開始==========");
    String result = AesCbcUtil.decrypt(encryptedData, sessionKey, iv, "UTF-8");
    JSONObject userInfo = new JSONObject();
    if (null != result && result.length() > 0) {
        userInfo = JSONObject.parseObject(result);
    }
    log.info("result: " + userInfo);
    log.info("============小程序登錄解析數(shù)據(jù)方法結(jié)束==========");
    return userInfo;
}

補(bǔ)充1: AesCbcUtil工具類,直接復(fù)制即可,需要添加bouncycastle依賴。BouncyCastle是一個(gè)開源的加解密解決方案,官網(wǎng)可查看http://www.bouncycastle.org/

package com.luwei.common.utils;

import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.AlgorithmParameters;
import java.security.Security;

/**
 * Updated by huanglp
 * Date: 2018-11-28
 */
public class AesCbcUtil {

    static {
        Security.addProvider(new BouncyCastleProvider());
    }

    /**
     * AES解密
     *
     * @param data     //被加密的數(shù)據(jù)
     * @param key      //加密秘鑰
     * @param iv       //偏移量
     * @param encoding //解密后的結(jié)果需要進(jìn)行的編碼
     */
    public static String decrypt(String data, String key, String iv, String encoding) {

        // org.apache.commons.codec.binary.Base64
        byte[] dataByte = Base64.decodeBase64(data);
        byte[] keyByte = Base64.decodeBase64(key);
        byte[] ivByte = Base64.decodeBase64(iv);

        try {
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding");
            SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
            AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
            parameters.init(new IvParameterSpec(ivByte));

            cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
            byte[] resultByte = cipher.doFinal(dataByte);
            if (null != resultByte && resultByte.length > 0) {
                return new String(resultByte, encoding);
            }
            return null;

        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
}

到此已經(jīng)獲取到 JSONObject類型的 userInfo,包含openid,unionid,昵稱,頭像等數(shù)據(jù)

后續(xù)可以將用戶信息保存到數(shù)據(jù)庫(kù),再返回給前端一個(gè)token即可,shiro經(jīng)過(guò)公司封裝了一層,代碼如下:

...
// 獲得用戶ID
int userId = wxUser.getWxUserId();
shiroTokenService.afterLogout(userId);
String uuid = UUID.randomUUID().toString();
String token = StringUtils.deleteAny(uuid, "-") + Long.toString(System.currentTimeMillis(), Character.MAX_RADIX);
shiroTokenService.afterLogin(userId, token, null);
return token;
二、以下為公眾號(hào)(網(wǎng)頁(yè))授權(quán)的代碼:

網(wǎng)頁(yè)授權(quán)更加簡(jiǎn)單,可查看 官方文檔

需添加 riversoft 相關(guān)依賴包,公眾號(hào)網(wǎng)頁(yè)授權(quán),只需要將公眾號(hào)綁定了開放平臺(tái),就能獲取到unionid及其他用戶信息。

public static OpenUser webSiteLogin(String code, String state) {
    log.info("============微信公眾號(hào)(網(wǎng)頁(yè))授權(quán)開始===========");
    WxProperties properties = WeiXinPropertiesUtils.getWxProperties();
    AppSetting appSetting = new AppSetting(properties.getAppId(), properties.getAppSecret());
    OpenOAuth2s openOAuth2s = OpenOAuth2s.with(appSetting);
    AccessToken accessToken = openOAuth2s.getAccessToken(code);

    // 獲取用戶信息
    OpenUser openUser = openOAuth2s.userInfo(accessToken.getAccessToken(), accessToken.getOpenId());
    log.info("============微信公眾號(hào)(網(wǎng)頁(yè))授權(quán)結(jié)束===========");
    return openUser;
    
    // 后續(xù), 可將用戶信息保存
    // 最后一步, 生成token后, 需重定向回頁(yè)面
    //return "redirect:" + state + "?token=" + token;
}

隆鵬

廣州蘆葦科技Java開發(fā)團(tuán)隊(duì)

蘆葦科技-廣州專業(yè)互聯(lián)網(wǎng)軟件服務(wù)公司

抓住每一處細(xì)節(jié) ,創(chuàng)造每一個(gè)美好

關(guān)注我們的公眾號(hào),了解更多

想和我們一起奮斗嗎?lagou搜索“ 蘆葦科技 ”或者投放簡(jiǎn)歷到 server@talkmoney.cn 加入我們吧

關(guān)注我們,你的評(píng)論和點(diǎn)贊對(duì)我們最大的支持

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/72772.html

相關(guān)文章

  • H5/web app/第三方網(wǎng)頁(yè) 微信授權(quán)登錄 調(diào)研

    摘要:微信登錄用戶可使用微信帳號(hào)快速登錄你的網(wǎng)站,同一用戶使用微信登錄你的不同應(yīng)用和公眾帳號(hào),會(huì)對(duì)應(yīng)同一個(gè),以便進(jìn)行不同業(yè)務(wù)間的帳號(hào)統(tǒng)一微信授權(quán)登錄可分為掃碼登錄一般用于網(wǎng)頁(yè)微信開放平臺(tái)跳轉(zhuǎn)授權(quán)登錄第三方使用微信開放平臺(tái)微信內(nèi)置瀏覽器內(nèi)登錄一 微信登錄: 用戶可使用微信帳號(hào)快速登錄你的網(wǎng)站,同一用戶使用微信登錄你的不同應(yīng)用和公眾帳號(hào),會(huì)對(duì)應(yīng)同一個(gè)UnionID,以便進(jìn)行不同業(yè)務(wù)間的帳號(hào)統(tǒng)一 ...

    keithxiaoy 評(píng)論0 收藏0
  • 微信程序開發(fā)早知道

    摘要:小程序仍在不斷更新和完善,舊代碼可能會(huì)因不符合新政策,在下次發(fā)布的時(shí)候無(wú)法正常運(yùn)行。用戶微信支付后,需要后臺(tái)推送消息到服務(wù)器,才能確認(rèn)支付成功。小程序也存在兼容性問(wèn)題,對(duì)待不愿更新微信的用戶,要像對(duì)待忠實(shí)的用戶一樣,小程序基礎(chǔ)庫(kù)版本分布。 小程序沒有跳轉(zhuǎn)公眾號(hào)、跳轉(zhuǎn)公眾號(hào)圖文素材的能力。除非用戶通過(guò)掃描二維碼進(jìn)入小程序的情景,可以顯示關(guān)注公眾號(hào)組件。公眾號(hào)菜單、公眾號(hào)圖文素材可以打開...

    lyning 評(píng)論0 收藏0
  • 微信網(wǎng)頁(yè)登錄原理暨查看將自己刪除掉的人項(xiàng)目

    摘要:項(xiàng)目作用訪問(wèn)項(xiàng)目的網(wǎng)頁(yè),掃一掃網(wǎng)頁(yè)上的二維碼,就會(huì)顯示你的微信好友中將你刪除的人的列表。顯示參考文檔該功能的實(shí)現(xiàn)網(wǎng)頁(yè)微信登錄原理項(xiàng)目源碼項(xiàng)目源碼 項(xiàng)目作用 訪問(wèn)項(xiàng)目的網(wǎng)頁(yè),掃一掃網(wǎng)頁(yè)上的二維碼,就會(huì)顯示你的微信好友中將你刪除的人的列表。 在線網(wǎng)址: 訪問(wèn)115.29.55.54:8080/WXApi就可以使用該項(xiàng)目所說(shuō)的網(wǎng)頁(yè) 項(xiàng)目原理 在微信中,將你刪掉的好友是無(wú)法加入你創(chuàng)建的群...

    sean 評(píng)論0 收藏0
  • 微信網(wǎng)頁(yè)登錄原理暨查看將自己刪除掉的人項(xiàng)目

    摘要:項(xiàng)目作用訪問(wèn)項(xiàng)目的網(wǎng)頁(yè),掃一掃網(wǎng)頁(yè)上的二維碼,就會(huì)顯示你的微信好友中將你刪除的人的列表。顯示參考文檔該功能的實(shí)現(xiàn)網(wǎng)頁(yè)微信登錄原理項(xiàng)目源碼項(xiàng)目源碼 項(xiàng)目作用 訪問(wèn)項(xiàng)目的網(wǎng)頁(yè),掃一掃網(wǎng)頁(yè)上的二維碼,就會(huì)顯示你的微信好友中將你刪除的人的列表。 在線網(wǎng)址: 訪問(wèn)115.29.55.54:8080/WXApi就可以使用該項(xiàng)目所說(shuō)的網(wǎng)頁(yè) 項(xiàng)目原理 在微信中,將你刪掉的好友是無(wú)法加入你創(chuàng)建的群...

    sourcenode 評(píng)論0 收藏0
  • 記錄微信程序的坑

    摘要:除官方外的參考文章微信小程序?qū)嵗齽?chuàng)建下發(fā)模板消息實(shí)例手把手教你開發(fā)微信小程序之模版消息開發(fā)教你突破小程序模板消息的推送限制獲取用戶信息接口的廢棄問(wèn)題接口是獲取用戶信息昵稱,頭像等的接口,在官方文檔上寫是即將廢棄。 ----------------更新-------------- 2018年10月10日官網(wǎng)3個(gè)接口廢棄的通知: 1、分享監(jiān)聽接口分享消息給好友時(shí),開發(fā)者將無(wú)法從callba...

    EastWoodYang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<