国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于uniapp+java實(shí)現(xiàn)微信小程序無感登錄,授權(quán)手機(jī)號(hào)登錄,獲取昵稱頭像,獲取定位信息

這篇具有很好參考價(jià)值的文章主要介紹了基于uniapp+java實(shí)現(xiàn)微信小程序無感登錄,授權(quán)手機(jī)號(hào)登錄,獲取昵稱頭像,獲取定位信息。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

項(xiàng)目背景

使用uniapp開發(fā)微信小程序,避免不了微信登錄。但自動(dòng)微信2022年升級(jí)了api版本后,不再允許返回昵稱和頭像信息,所以才出現(xiàn)無感登錄或授權(quán)手機(jī)號(hào)登錄。實(shí)現(xiàn)方式大同小異。

java后端所需maven


1、小程序無感登錄

前端實(shí)現(xiàn)代碼:

	onLoad() {
		if (!uni.getStorageSync("token")) {
			this.showLogin = true;
			uni.login({
				provider: 'weixin',
				success: (loginRes) => {
					this.code = loginRes.code;
					//此處將code傳入后端進(jìn)行解析到openid,最終得到登錄后的token緩存到本地即可
				}
			})
		}
	}

由于使用uni.login并不需要用戶授權(quán),所以能做到無感登錄。

后端實(shí)現(xiàn):

/**
微信登錄工具類
**/
public class WechatGetUserInfoUtil {

    public static final String APPID = "wxd5fc6c544e752529";
    public static final String SECRET = "c2bf267226c0157c859da6934ee3c298";


	/**
	根據(jù)微信小程序登錄獲得的code獲取用戶信息
	*/
    public static Map<String, String> getWxLoginInfo(String code) {
        String apiUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + APPID + "&secret=" + SECRET + "&js_code=" + code + "&grant_type=authorization_code";
        String responseBody = HttpUtil.get(apiUrl);
        Map jsonObject = new Gson().fromJson(responseBody, Map.class);
        Map<String, String> map = new HashMap<>();
        map.put("openid", jsonObject.get("openid").toString());
        map.put("session_key", jsonObject.get("session_key").toString());
        return map;
    }
}

通過以上方法可以對(duì)應(yīng)的openid,然后通過openid可以得到用戶信息,如果不存在用戶信息,則創(chuàng)建一個(gè)用戶即可。默認(rèn)頭像和隨機(jī)數(shù)昵稱值即可。

2、授權(quán)手機(jī)號(hào)登錄

授權(quán)手機(jī)號(hào)登錄相對(duì)于無感登錄是相對(duì)復(fù)雜一點(diǎn),但也還好。
前端:(ps:此處前端框架使用了uView,只是樣式上有所變化)

<template>
	<view>
		<!-- 登錄授權(quán)彈出層 -->
		<u-popup :show="showLogin" mode="center" round="10rpx" @close="showLogin=false">
			<view class="login_view">
				<view class="content_view">
					<image src="../../static/logo.png"></image>
					<view>親,授權(quán)手機(jī)號(hào)后才能正常使用相關(guān)功能</view>
				</view>
				<view class="btn_view">
					<u-button type="primary" open-type="getPhoneNumber" @getphonenumber="login" color="#43ad47"
						shape="circle" text="授權(quán)登錄"></u-button>
				</view>
			</view>
		</u-popup>
	</view>
</template>
	<script>
		export default {
		data() {
			return {
				showLogin: false,
				code:''
			}
		},
		onLoad() {
			if (!uni.getStorageSync("token")) {
				this.showLogin = true;
				uni.login({
					provider: 'weixin',
					success: (loginRes) => {
						this.code = loginRes.code;
					}
				})
			}
		},
		methods: {
			login(e) { //授權(quán)登錄
				let obj = {
					iv: e.detail.iv,
					encryptedData: e.detail.encryptedData,
					code: this.code
				}
				if (e.detail.iv) {
					wxlogin(obj).then(res => {
						this.showLogin = false;
						uni.setStorageSync('token', res.data.access_token);
						uni.showToast({
							title: "登錄成功",
							icon: "none",
							duration: 2000
						})
					})
				} else {
					uni.$u.toast('授權(quán)失敗,請(qǐng)聯(lián)系管理員');
				}
			},
		}
	</script>
	<style lang="scss">
		.login_view {
			width: 630rpx;
			height: 400rpx;

			.title_view {
				font-size: 36rpx;
				color: #333;
				text-align: center;
				padding: 20rpx;
			}

			.content_view {
				margin: 50rpx;
				margin-bottom: 20rpx;
				font-size: 28rpx;
				text-align: center;

				image {
					width: 100rpx;
					height: 100rpx;
					border-radius: 50%;
				}

				view {
					margin-top: 20rpx;
				}
			}

			.btn_view {
				margin: 30rpx;

			}
		}
	</style>

注意,獲取手機(jī)號(hào)需要用戶點(diǎn)擊按鈕觸發(fā)后方可獲取,不然是無法獲取到手機(jī)號(hào)信息的。
獲取code一定要在授權(quán)之前獲取,否則后端無法解密出對(duì)應(yīng)的手機(jī)號(hào)信息。

后端實(shí)現(xiàn):

	
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import com.google.gson.Gson;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.Base64Utils;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.*;
import java.security.spec.InvalidParameterSpecException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

 
public class WechatGetUserInfoUtil {

    public static final String APPID = "wxd5fc6c544e752529";
    public static final String SECRET = "c2bf267226c0157c859da6934ee3c298";
 
    public static Map<String, String> getWxLoginInfo(String code) {
        String apiUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + APPID + "&secret=" + SECRET + "&js_code=" + code + "&grant_type=authorization_code";
        String responseBody = HttpUtil.get(apiUrl);
        Map jsonObject = new Gson().fromJson(responseBody, Map.class);
        Map<String, String> map = new HashMap<>();
        map.put("openid", jsonObject.get("openid").toString());
        map.put("session_key", jsonObject.get("session_key").toString());
        return map;
    }

    /**
     * 解密用戶手機(jī)號(hào)
     *
     * @param encryptedData 包括敏感數(shù)據(jù)在內(nèi)的完整用戶信息的加密數(shù)據(jù)
     * @param iv            加密算法的初始向量
     */
    public static String getMobile(String encryptedData, String sesskey, String iv) {
        String result = decryptData(encryptedData, sesskey, iv);
        if (result == null) {
            return null;
        }
        Map<String, String> map = new JSONObject(result).toBean(Map.class);
        return map.get("phoneNumber");
    }


    public static String decryptData(String encryptedData, String sessionKey, String iv) {
        // 被加密的數(shù)據(jù)
        byte[] dataByte = Base64Utils.decode(encryptedData.getBytes());
        // 加密秘鑰
        byte[] keyByte = Base64Utils.decode(sessionKey.getBytes());
        // 偏移量
        byte[] ivByte = Base64Utils.decode(iv.getBytes());
        try {
            // 如果密鑰不足16位,那么就補(bǔ)足. 這個(gè)if 中的內(nèi)容很重要
            int base = 16;
            if (keyByte.length % base != 0) {
                int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
                byte[] temp = new byte[groups * base];
                Arrays.fill(temp, (byte) 0);
                System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
                keyByte = temp;
            }
            // 初始化
            Security.addProvider(new BouncyCastleProvider());
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
            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) {
                String result = new String(resultByte, "UTF-8");
                return result;
            }
        } catch (NoSuchAlgorithmException e) {
            log.error(e.getMessage(), e);
        } catch (NoSuchPaddingException e) {
            log.error(e.getMessage(), e);
        } catch (InvalidParameterSpecException e) {
            log.error(e.getMessage(), e);
        } catch (IllegalBlockSizeException e) {
            log.error(e.getMessage(), e);
        } catch (BadPaddingException e) {
            log.error(e.getMessage(), e);
        } catch (UnsupportedEncodingException e) {
            log.error(e.getMessage(), e);
        } catch (InvalidKeyException e) {
            log.error(e.getMessage(), e);
        } catch (InvalidAlgorithmParameterException e) {
            log.error(e.getMessage(), e);
        } catch (NoSuchProviderException e) {
            log.error(e.getMessage(), e);
        }
        return null;
    }
}

實(shí)現(xiàn)時(shí)需要先調(diào)用:getWxLoginInfo得到openid和session_key信息,然后調(diào)用獲取手機(jī)號(hào)getMobile得到手機(jī)號(hào),最后通過openid取獲取用戶信息,如果不存在,則創(chuàng)建一個(gè)用戶,并設(shè)置openid和手機(jī)號(hào)信息,最后返回token即可。

3、修改用戶昵稱頭像信息

前端:

<button class="authorization" type="default" open-type="chooseAvatar" @chooseavatar="chooseavatar" >上傳微信頭像</button> 
<input id="nickname-input" v-model="nickname" v- class="authorization white" type="nickname" placeholder="請(qǐng)輸入用戶昵稱" > 
chooseavatar(e) {
	this.avater = this.avater;//如果需要上傳頭像,則先上傳再賦值
	},

此處不是很完善,后面完善

4、獲取定位信息

前端:

 uni.getLocation({
 	type: 'gcj02',
 	success: function(res) {
 	 	///處理業(yè)務(wù)
 	 	res.latitude
 	 	res.longitude
 	},
 	fail: function(err) {
 		 console.log("授權(quán)失敗");
 	}
 });


需要打開manifest.json進(jìn)行配置請(qǐng)求定位權(quán)限
微信小程序無感登錄,java,uni-app,微信小程序

注意:微信開發(fā)者工具中,不支持定位,也不會(huì)彈出授權(quán)申請(qǐng),只有在手機(jī)上才可以,所以微信開發(fā)者工具上時(shí),可以采用設(shè)置默認(rèn)值進(jìn)行測試。

如果需要持續(xù)定位,則需要單獨(dú)申請(qǐng)后臺(tái)定位授權(quán),具體前往uniapp查看。文章來源地址http://www.zghlxwxcb.cn/news/detail-590906.html

到了這里,關(guān)于基于uniapp+java實(shí)現(xiàn)微信小程序無感登錄,授權(quán)手機(jī)號(hào)登錄,獲取昵稱頭像,獲取定位信息的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于Java+Vue+uniapp微信小程序社團(tuán)微信平臺(tái)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+Vue+uniapp微信小程序社團(tuán)微信平臺(tái)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 2022-2024年

    2024年02月03日
    瀏覽(92)
  • uniapp 微信小程序 封裝axios 包含請(qǐng)求攔截、響應(yīng)攔截、無感刷新令牌功能

    前言: 1、為什么不適用uniapp自帶的請(qǐng)求功能? 答:uniapp自帶的請(qǐng)求功能,再刷新了令牌后,重新請(qǐng)求返回的數(shù)據(jù)無法返回給發(fā)起請(qǐng)求的方法。也就是說,刷新令牌后重新發(fā)起的請(qǐng)求和第一次發(fā)起請(qǐng)求的方法是割裂的。 2、封裝文件中,我設(shè)置了無感刷新令牌功能。我后臺(tái)的

    2024年02月03日
    瀏覽(21)
  • 基于Java+Vue+uniapp微信小程序農(nóng)場驛站平臺(tái)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+Vue+uniapp微信小程序農(nóng)場驛站平臺(tái)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 2022-2024年

    2024年02月05日
    瀏覽(91)
  • 基于Java+Vue+uniapp微信小程序醫(yī)院掛號(hào)系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+Vue+uniapp微信小程序醫(yī)院掛號(hào)系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和學(xué)生畢業(yè)項(xiàng)目實(shí)戰(zhàn),高校老師/講師/同行交流合作 ? 主要內(nèi)容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P

    2024年02月03日
    瀏覽(19)
  • 基于Java+Vue+uniapp微信小程序新生報(bào)到系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+Vue+uniapp微信小程序新生報(bào)到系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 2022-2024年

    2024年02月03日
    瀏覽(27)
  • 基于Java+Vue+uniapp微信小程序婚慶攝影系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+Vue+uniapp微信小程序婚慶攝影系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 2022-2024年

    2024年02月04日
    瀏覽(46)
  • 基于Java+Vue+uniapp微信小程序場地預(yù)約系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+Vue+uniapp微信小程序場地預(yù)約系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和學(xué)生畢業(yè)項(xiàng)目實(shí)戰(zhàn),高校老師/講師/同行交流合作 ? 主要內(nèi)容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P

    2024年02月04日
    瀏覽(26)
  • 基于Java+Vue+uniapp微信小程序車視界系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+Vue+uniapp微信小程序車視界系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和學(xué)生畢業(yè)項(xiàng)目實(shí)戰(zhàn),高校老師/講師/同行交流合作 ? 主要內(nèi)容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P

    2024年02月03日
    瀏覽(24)
  • 基于Java+Vue+uniapp微信小程序校園訂餐系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+Vue+uniapp微信小程序校園訂餐系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和學(xué)生畢業(yè)項(xiàng)目實(shí)戰(zhàn),高校老師/講師/同行交流合作 ? 主要內(nèi)容: SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、P

    2024年02月03日
    瀏覽(24)
  • 基于Java+Vue+uniapp微信小程序外賣商城平臺(tái)設(shè)計(jì)和實(shí)現(xiàn)

    基于Java+Vue+uniapp微信小程序外賣商城平臺(tái)設(shè)計(jì)和實(shí)現(xiàn)

    博主介紹 : ? 全網(wǎng)粉絲30W+,csdn特邀作者、博客專家、CSDN新星計(jì)劃導(dǎo)師、Java領(lǐng)域優(yōu)質(zhì)創(chuàng)作者,博客之星、掘金/華為云/阿里云/InfoQ等平臺(tái)優(yōu)質(zhì)作者、專注于Java技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn) ? ?? 文末獲取源碼聯(lián)系 ?? ?????精彩專欄 推薦訂閱 ?????不然下次找不到喲 2022-2024年

    2024年02月04日
    瀏覽(93)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包