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

Uniapp + SpringBoot 開發(fā)微信H5項目 微信公眾號授權(quán)登錄 JAVA后臺(一、配置使用微信公眾平臺測試公眾號)

這篇具有很好參考價值的文章主要介紹了Uniapp + SpringBoot 開發(fā)微信H5項目 微信公眾號授權(quán)登錄 JAVA后臺(一、配置使用微信公眾平臺測試公眾號)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

申請測試號進行調(diào)試開發(fā),測試號擁有大部分服務(wù)號有的接口權(quán)限。

一、接口配置信息填寫校驗

這里需要填寫一個URL和一個Token驗證字符串
我這里是用了natapp內(nèi)網(wǎng)穿透 將本地的后臺8080端口服務(wù)映射到了 http://x7zws8.natappfree.cc
https://natapp.cn/在natapp官網(wǎng)注冊賬號并且申請免費隧道
h5授權(quán)公眾號登錄 springboot,java,uni-app,spring boot,微信,前端,微信公眾平臺
申請完了之后把域名綁定到自己的后臺
h5授權(quán)公眾號登錄 springboot,java,uni-app,spring boot,微信,前端,微信公眾平臺
后臺接口:

    @RequestMapping(value = "/check", produces = "text/plain;charset=UTF-8", method = {RequestMethod.GET, RequestMethod.POST})
    //微信服務(wù)器根據(jù)配置的token,結(jié)合時間戳timestamp和隨機數(shù)nonce通過SHA1生成簽名,發(fā)起get請求,檢驗token的正確性,
    //檢驗正確原樣返回隨機字符串echostr,失敗返回空字符串
    public String check(HttpServletRequest request, HttpServletResponse response,
                        @RequestParam("signature") String signature,
                        @RequestParam("timestamp") String timestamp,
                        @RequestParam("nonce") String nonce,
                        String echostr) throws Exception {
        //若是為get請求,則為開發(fā)者模式驗證
        if ("get".equals(request.getMethod().toLowerCase())) {
            String checkSignature = SHA1.creatSHA1("token", timestamp, nonce);
            if (checkSignature.equals(signature)) {
                return echostr;
            }
        }
        return null;
    }

SHA1:

import java.security.MessageDigest;
import java.util.Arrays;

//SHA1加密算法類
public class SHA1 {
    /**
     *
     * @param token
     * @param timestamp 時間戳
     * @param nonce 隨機字符串
     * @return 安全簽名
     * @throws AesException
     */
    public static String creatSHA1(String token, String timestamp, String nonce) throws AesException
    {
        try {
            String[] array = new String[] { token, timestamp, nonce};
            StringBuffer sb = new StringBuffer();
            // 字符串排序
            Arrays.sort(array);
            for (int i = 0; i < 3; i++) {
                sb.append(array[i]);
            }
            String str = sb.toString();
            // SHA1簽名生成
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            md.update(str.getBytes());
            byte[] digest = md.digest();

            StringBuffer hexstr = new StringBuffer();
            String shaHex = "";
            for (int i = 0; i < digest.length; i++) {
                shaHex = Integer.toHexString(digest[i] & 0xFF);
                if (shaHex.length() < 2) {
                    hexstr.append(0);
                }
                hexstr.append(shaHex);
            }
            return hexstr.toString();
        } catch (Exception e) {
            e.printStackTrace();
            throw new AesException(AesException.ComputeSignatureError);
        }
    }
}

AesException:

public class AesException extends Exception {

    public final static int OK = 0;
    public final static int ValidateSignatureError = -40001;
    public final static int ParseXmlError = -40002;
    public final static int ComputeSignatureError = -40003;
    public final static int IllegalAesKey = -40004;
    public final static int ValidateAppidError = -40005;
    public final static int EncryptAESError = -40006;
    public final static int DecryptAESError = -40007;
    public final static int IllegalBuffer = -40008;

    private int code;

    private static String getMessage(int code) {
        switch (code) {
            case ValidateSignatureError:
                return "簽名驗證錯誤";
            case ParseXmlError:
                return "xml解析失敗";
            case ComputeSignatureError:
                return "sha加密生成簽名失敗";
            case IllegalAesKey:
                return "SymmetricKey非法";
            case ValidateAppidError:
                return "appid校驗失敗";
            case EncryptAESError:
                return "aes加密失敗";
            case DecryptAESError:
                return "aes解密失敗";
            case IllegalBuffer:
                return "解密后得到的buffer非法";
            default:
                return null; // cannot be
        }
    }

    public int getCode() {
        return code;
    }

    public AesException(int code) {
        super(getMessage(code));
        this.code = code;
    }
}

校驗走完之后配置測試號中 網(wǎng)頁服務(wù)下的網(wǎng)頁授權(quán)獲取基本用戶
h5授權(quán)公眾號登錄 springboot,java,uni-app,spring boot,微信,前端,微信公眾平臺
h5授權(quán)公眾號登錄 springboot,java,uni-app,spring boot,微信,前端,微信公眾平臺

這里填自己前端項目運行后的地址 我的后端項目端口是8080 uniapp前端運行完了之后的端口是8081所以我配置的是本地的ipv4 ip+端口號

二、后端配置 + 拼裝URL + 通過Code獲取用戶OpenID和基本信息

在SpringBoot項目的pom中引入依賴

        <dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-mp</artifactId>
            <version>4.6.0</version>
        </dependency>

創(chuàng)建配置類

import com.ruoyi.system.domain.WechatConfig;
import com.ruoyi.system.service.IWechatConfigService;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class WxMpConfig {

    @Autowired
    private IWechatConfigService wechatConfigService;

    @Bean
    public WxMpConfigStorage wxMpConfigStorage() {
        WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();
        WechatConfig wechatConfig = wechatConfigService.selectWechatConfigById(1L);
        //我這里是做成了獲取數(shù)據(jù)庫中保存的AppID和AppSercret正常情況下寫死就可以
        configStorage.setAppId(wechatConfig.getAppId());
        configStorage.setSecret(wechatConfig.getAppSecret());
        return configStorage;
    }

    @Bean
    public WxMpService wxMpService(WxMpConfigStorage configStorage) {
        WxMpService wxMpService = new WxMpServiceImpl();
        wxMpService.setWxMpConfigStorage(configStorage);
        return wxMpService;
    }
}

之后就可以在Controller中正常使用了
/authorize 接口其實只做了一步操作 就是構(gòu)建獲取code的url 構(gòu)建完成之后返回給前端 前端直接重定向
buildAuthorizationUrl其中的三個參數(shù)
第一個是回調(diào)地址
第二個填snsapi_base 或者 snsapi_userinfo
snsapi_base 是之能獲取到 openid 而 snsapi_userinfo 是可以獲取到用戶基本信息
snsapi_base是靜默獲取 而 snsapi_userinfo 需要用戶點擊授權(quán)

@RestController
@RequestMapping("/wx")
public class WeChatController extends BaseController {
    @GetMapping("/authorize")
    public AjaxResult test() {
        WxOAuth2Service oAuth2Service = wxMpService.getOAuth2Service();
        String redirectUrl = oAuth2Service.buildAuthorizationUrl("http://192.168.1.100:8081", "snsapi_userinfo", null);
        return success(redirectUrl);
    }

    @GetMapping("/userInfo")
    public AjaxResult userInfo(@RequestParam("code") String code) throws WxErrorException {
        WxOAuth2Service oAuth2Service = wxMpService.getOAuth2Service();
        WxOAuth2AccessToken wxMpOAuth2AccessToken = oAuth2Service.getAccessToken(code);
        logger.info("【wxMpOAuth2AccessToken:】{}", wxMpOAuth2AccessToken);
        String openId = wxMpOAuth2AccessToken.getOpenId();
        logger.info("【openid:】{}", openId);
        WxOAuth2UserInfo userInfo = oAuth2Service.getUserInfo(wxMpOAuth2AccessToken, "zh_CN");
        logger.info("【用戶信息:】{}", userInfo.toString());
        return success(userInfo);
    }
}

二、uniapp前端調(diào)用

前端首先調(diào)用 /authorize 獲取拼裝好的地址然后重定向并獲取code
getUrlCode來判斷地址中是否包含code如果有的話拿著code去獲取用戶基本信息和openid文章來源地址http://www.zghlxwxcb.cn/news/detail-839140.html

<template>
	<view class="content">
		<image class="logo" :src="loginUser.headImgUrl ? loginUser.headImgUrl : '/static/logo.png'"></image>
		<view class="text-area">
			<text class="title">{{loginUser.openid}}</text>
		</view>
		<button type="default" @click="login">登錄</button>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				loginUser:{}
			}
		},
		onLoad(query) {
			const that = this;
			let code = that.getUrlCode();
			if (code) {
				console.log("有code")
				console.log(code)
				uni.request({
					url: "http://192.168.1.100:8080/wx/userInfo",
					data: {
						code: code
					},
					success(res) {
						console.log("獲取到用戶信息")
						console.log(res.data.data);
						that.loginUser = res.data.data;
					}
				})
			} else {
				console.log("沒有code")
			}
		},
		methods: {
			login() {
				uni.request({
					url: "http://192.168.1.100:8080/wx/authorize",
					success(res) {
						window.location.href = res.data.msg;
					}
				})
			},
			getUrlCode() {
				return (
					decodeURIComponent(
						(new RegExp("[?|&]" + "code" + "=" + "([^&;]+?)(&|#|;|$)").exec(
							location.href
						) || [, ""])[1].replace(/\+/g, "%20")
					) || null
				);
			},
		}
	}
</script>

到了這里,關(guān)于Uniapp + SpringBoot 開發(fā)微信H5項目 微信公眾號授權(quán)登錄 JAVA后臺(一、配置使用微信公眾平臺測試公眾號)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • uniApp 微信小程序 授權(quán) 公眾號推送信息

    uniApp 微信小程序 授權(quán) 公眾號推送信息

    準(zhǔn)本工作? 1.首先小程序 ?更公眾號關(guān)聯(lián)起來 2.配置相應(yīng)的域名(也就是你請求后端接口的公共地址) 3.需要寫一個h5 頁面 用于跳板 公眾號 的授權(quán) 公眾號如何關(guān)聯(lián)小程序? 打開微信公眾號后臺,選擇「設(shè)置 – 公眾號設(shè)置 」 [關(guān)注公眾號 -打開開關(guān)? ], 步驟一 步驟二? 步

    2024年02月10日
    瀏覽(26)
  • uniapp微信公眾號(h5)端跳轉(zhuǎn)微信小程序

    uniapp微信公眾號(h5)端跳轉(zhuǎn)微信小程序

    ?。。〔皇俏⑿殴娞柌藛翁D(zhuǎn)小程序 微信公眾號菜單跳轉(zhuǎn)小程序:公眾號和小程序相互關(guān)聯(lián),在公眾號的自定義菜單中配置即可 1、 綁定域名 ?2、安裝依賴 jweixin-module 3、 引入掛載 ?。?!main.js引入掛載 ?。?!單頁面引入掛載 4、 通過 config 接口注入權(quán)限驗證配置(需要后

    2024年02月13日
    瀏覽(469)
  • PHP實踐:手把手微信公眾號網(wǎng)頁授權(quán)登錄功能實現(xiàn)

    PHP實踐:手把手微信公眾號網(wǎng)頁授權(quán)登錄功能實現(xiàn)

    ??作者簡介,黑夜開發(fā)者,全棧領(lǐng)域新星創(chuàng)作者?,CSDN博客專家,阿里云社區(qū)專家博主,2023年6月CSDN上海賽道top4。 ??數(shù)年電商行業(yè)從業(yè)經(jīng)驗,歷任核心研發(fā)工程師,項目技術(shù)負責(zé)人。 ??本文已收錄于PHP專欄:PHP進階實戰(zhàn)教程。 ??另有專欄PHP入門基礎(chǔ)教程,希望各位大佬

    2024年02月12日
    瀏覽(23)
  • H5頁面實現(xiàn)微信授權(quán)登錄

    H5頁面實現(xiàn)微信授權(quán)登錄

    用戶通過掃碼海報攜帶活動二維碼跳轉(zhuǎn)到h5頁面,并且完成微信授權(quán),完成授權(quán)的用戶進入小程序后不再進行授權(quán)操作。這里邊涉及到了兩個大問題: 一是怎樣在一個域名下部署兩個項目; 二是用戶點擊授權(quán)之后跳轉(zhuǎn)當(dāng)前頁,獲取到code值后,什么時候向服務(wù)端發(fā)送授權(quán)請求

    2023年04月08日
    瀏覽(17)
  • uniapp實現(xiàn)公眾號微信登錄

    2024年02月07日
    瀏覽(26)
  • H5 及 web 頁面微信授權(quán)登錄流程

    注意:我們要求調(diào)試微信網(wǎng)頁授權(quán),必須開發(fā)者微信號與公眾號建立綁定關(guān)系 需求背景:將H5頁面分享到微信,頁面中的功能需要登錄,所以再進行功能操作前需要調(diào)起登錄 1、微信登錄的幾種情況: PC端: PC端微信瀏覽器 - 網(wǎng)頁內(nèi)嵌二維碼方式(需要掃碼,使用微信服務(wù)號

    2024年02月12日
    瀏覽(14)
  • 【微信授權(quán)登錄】uniapp開發(fā)小程序,實現(xiàn)微信授權(quán)登錄功能 & 退出登錄

    【微信授權(quán)登錄】uniapp開發(fā)小程序,實現(xiàn)微信授權(quán)登錄功能 & 退出登錄

    微信授權(quán)登錄(獲取用戶信息) 1.先獲取用戶信息——用戶授權(quán)允許后,通過調(diào)用uni.login 可以獲取到code。 2.拿著獲取到的code去調(diào)用——登錄接口,可以獲取到token。 3.把token存入緩存。就可以在頁面判斷是否登錄了。 第一種方式: 第二種方式:

    2024年02月03日
    瀏覽(35)
  • 微信公眾平臺測試號申請、使用HBuilder X與微信開發(fā)者工具實現(xiàn)授權(quán)登陸功能以及單點登錄

    微信公眾平臺測試號申請、使用HBuilder X與微信開發(fā)者工具實現(xiàn)授權(quán)登陸功能以及單點登錄

    測試賬號申請 測號響應(yīng)流程:客戶端發(fā)送請求,微信服務(wù)器收到請求后,轉(zhuǎn)發(fā)到開發(fā)者服務(wù)器上,處理完后在發(fā)送給微信服務(wù)器,在返回給客戶端 1、打開微信公眾平臺,點擊測試帳號申請。地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login, 通過微信掃一掃授權(quán)就能進

    2024年02月02日
    瀏覽(38)
  • 【微信授權(quán)登錄】uniapp開發(fā)小程序,實現(xiàn)獲取微信授權(quán)登錄功能

    【微信授權(quán)登錄】uniapp開發(fā)小程序,實現(xiàn)獲取微信授權(quán)登錄功能

    微信授權(quán)登錄(獲取用戶信息) 1.先獲取用戶信息——用戶授權(quán)允許后,通過調(diào)用uni.login 可以獲取到code。 2.拿著獲取到的code去調(diào)用——登錄接口,可以獲取到token。 3.把token存入緩存。就可以在頁面判斷是否登錄了。 第一種方式: 第二種方式:

    2024年02月11日
    瀏覽(24)
  • php對接微信公眾號掃碼登錄開發(fā)實錄(H5微信掃描登錄、服務(wù)出現(xiàn)故障調(diào)試、模版消息設(shè)置、掃碼輪詢交互)

    php對接微信公眾號掃碼登錄開發(fā)實錄(H5微信掃描登錄、服務(wù)出現(xiàn)故障調(diào)試、模版消息設(shè)置、掃碼輪詢交互)

    微信公眾號掃碼登錄在安全性、用戶體驗和數(shù)據(jù)收集方面優(yōu)勢明顯,是目前許多應(yīng)用程序采用的登錄方式之一。 無需記住賬號密碼:用戶無需輸入和記住賬號和密碼,只需使用微信掃描二維碼即可快速登錄。 安全性高:微信采用 OAuth2.0 協(xié)議,將用戶信息傳遞給第三方應(yīng)用程

    2024年02月07日
    瀏覽(27)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包