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

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

這篇具有很好參考價值的文章主要介紹了微信公眾平臺測試號申請、使用HBuilder X與微信開發(fā)者工具實現(xiàn)授權登陸功能以及單點登錄。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

測試賬號申請

測號響應流程:客戶端發(fā)送請求,微信服務器收到請求后,轉發(fā)到開發(fā)者服務器上,處理完后在發(fā)送給微信服務器,在返回給客戶端

1、打開微信公眾平臺,點擊測試帳號申請。地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login,

通過微信掃一掃授權就能進入到測試號管理頁面??梢钥吹阶约旱拈_發(fā)者ID

測試號中的url需要自己有服務器編寫對應接口,點擊提交微信會像url發(fā)送數(shù)據(jù)根據(jù)返回結果判斷url是否配置成功;token為自己定義的字符串

微信公眾平臺測試號,微信小程序,測試號,小程序登陸,微信授權,openid

最后在掃碼添加自己微信為開發(fā)者

微信公眾平臺測試號,微信小程序,測試號,小程序登陸,微信授權,openid

下載中轉工具NATAPP-內(nèi)網(wǎng)穿透 基于ngrok的國內(nèi)高速內(nèi)網(wǎng)映射工具

下載后在網(wǎng)頁注冊,進行實名認證,申請免費隧道,會生成隧道信息,啟動natapp,

輸入 natapp -authtoken 隧道信息生成的authtoken 回車

這時就會生成自己的域名,在測試時需要一直開啟natapp

若是有企業(yè)公眾號那么就不用以上步驟,直接配置開發(fā)者WX即可

創(chuàng)建小程序測試:使用微信開發(fā)者工具通過掃碼登陸,點擊創(chuàng)建選擇小程序即可,AppID為剛才申請的。選擇需要編寫的模板即可

使用HBuilder X與微信開發(fā)者工具實現(xiàn)授權登陸功能

首先需要在HBuilder上導入項目模板,在設置安全中配置微信開發(fā)者工具的目錄,然后點擊運行到小程序模擬器,這樣運行之后就會自動打開微信開發(fā)者工具

創(chuàng)建登陸頁面主要代碼login.vue,主要是調(diào)用微信提供的api獲取用戶的code,這在前端同時還獲取了用戶的基本信息發(fā)送給后端

<button class="confirm-btn" @click="wxlogin" :disabled="logining">登錄</button>
//對應邏輯
methods: {
			wxlogin(){
			uni.getUserProfile({
					desc:"獲取資料",
					success: (res) => {
						console.log(res)
						this.encryptedData=res.encryptedData
						this.rawData=res.rawData
						this.iv=res.iv
						this.signature=res.signature
						this.avatarUrl=res.userInfo.avatarUrl
						this.name=res.userInfo.nickName
					}
				});//獲取用戶資料
				uni.login({
				  provider: 'weixin',
				  success: (res) => {
					
					 this.code=res.code;
					// console.log(this.code);
					
				  }
				});
				console.log(this.name)
				console.log(this.avatarUrl)
				//發(fā)送請求
				uni.request({
					url:"http://localhost:8081/api/dsxs/company/token",
					method:"POST",
				 data: {
					// encryptedData:this.encryptedData,
					// rawData:this.rawData,
					// iv:this.iv,
					// signature:this.signature,
					code:this.code,
					img:this.avatarUrl,
					name:this.name
				    },
					success: (e) => {
						
						console.log("向后端請求成功");
					}
					
				})
			},

后端可以通過之前申請的appID、appSecret和前端傳來的code獲取到用戶的openID與session_key

創(chuàng)建springboot項目,添加依賴

 <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.7.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        <!--lombok用來簡化實體類-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.3.1</version>
        </dependency>

        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.62</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>

配置好實體類與數(shù)據(jù)相關代碼后,將自己的appID、appSecret放在配置文件中

wx.open.app_id=xxxxxxxx
wx.open.app_secret=xxxxxxxxx

創(chuàng)建獲取配置信息類

@Component
//@PropertySource("classpath:application.properties")
public class ConstantPropertiesUtil implements InitializingBean {
    //讀取配置文件并賦值
    @Value("${wx.open.app_id}")
    private String appId;
    @Value("${wx.open.app_secret}")
    private String appSecret;

    public static String WX_OPEN_APP_ID;
    public static String WX_OPEN_APP_SECRET;

    @Override
    public void afterPropertiesSet() throws Exception {
        WX_OPEN_APP_ID = appId;
        WX_OPEN_APP_SECRET = appSecret;
    }
}

編寫用戶登錄控制層,這里我的實現(xiàn)邏輯是根據(jù)前端傳來的code,獲取用戶openID作為用戶的唯一標識。首先在數(shù)據(jù)庫中查詢有無當前用戶,要有創(chuàng)建token返回給前端對應信息。因為前端寫的是一次性將code與用戶信息全傳過來,用戶點擊登陸后會跳轉到授權頁面,用戶若點擊拒絕那么用戶信息將不會傳過來,只有code,這時我的處理邏輯是判斷有無用戶信息,若沒有不存如數(shù)據(jù)庫,這里由于用戶點擊授權會有時間響應所以做了一個短暫的休眠處理。

public class LoginController {
    @Autowired
    private UserService userService;

    @PostMapping("token")
    public R login(@RequestBody LoginBO loginBO) throws IOException, InterruptedException {
    //拼接對應信息
        StringBuffer baseAccessTokenUrl = new StringBuffer()
                .append("https://api.weixin.qq.com/sns/jscode2session")
                .append("?appid=%s")
                .append("&secret=%s")
                .append("&js_code=%s")
                .append("&grant_type=authorization_code");
        String accessTokenUrl = String.format(baseAccessTokenUrl.toString(),
                ConstantPropertiesUtil.WX_OPEN_APP_ID,
                ConstantPropertiesUtil.WX_OPEN_APP_SECRET,
                loginBO.getCode());
         //像網(wǎng)站發(fā)送請求
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder().url(accessTokenUrl).build();
        Response response = client.newCall(request).execute();
        //請求成功會返回對應信息,解析為json
        if (response.isSuccessful()){
            String body = response.body().string();
            JSONObject jsonObject = JSONObject.parseObject(body);
            String session_key = jsonObject.getString("session_key");
            String openid = jsonObject.getString("openid");
            HashMap<String, Object> map = new HashMap<>();
            Thread.sleep(1000);
            //判斷數(shù)據(jù)中有無當前用戶
            User userInfo = userService.getByOpenId(openid);
            if (userInfo==null){
                User user = new User();
                user.setOpenid(openid);

                if (loginBO.getName().equals("")){
                    return R.error().message("授權失敗");
                }
                user.setNickName(loginBO.getName());
                user.setAvatarUrl(loginBO.getImg());
                user.setStat(1);
                userService.save(user);
                userInfo = userService.getByOpenId(openid);
            }
                String token = JwtHelper.createToken(userInfo.getOpenid(),userInfo.getNickName(),userInfo.getAvatarUrl());
                map.put("token",token);
                map.put("nickname",userInfo.getNickName());
                map.put("img",userInfo.getAvatarUrl());
                return R.ok().data(map);
        }
        return R.error().message("授權失敗,請重試");
    }

微信公眾平臺測試號,微信小程序,測試號,小程序登陸,微信授權,openid

創(chuàng)建JWT生成token工具類

public class JwtHelper {
    //過期時間  毫秒
    private static long tokenExpiration = 60*60*1000;
    //自定義秘鑰
    private static String tokenSignKey = "123456";
    public static String createToken(String openid,String nickName,String img) {
        String token = Jwts.builder()
                //設置分組
                .setSubject("DSXS-USER")
                //設置字符串過期時間
                .setExpiration(new Date(System.currentTimeMillis() + tokenExpiration))
                //私有部分
                .claim("userId", openid)
                .claim("userName", nickName)
                .claim("img",img)
                //設置秘鑰
                .signWith(SignatureAlgorithm.HS512, tokenSignKey)
                .compressWith(CompressionCodecs.GZIP)
                .compact();
        return token;
    }
    //從生成token字符串獲取userId值
    public static String getUserId(String token) {
        if(StringUtils.isEmpty(token)) return null;
        Jws<Claims> claimsJws = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        String userId = (String)claims.get("userId");
        return (String)claims.get("userId");
    }
    public static String getUserName(String token) {
        if(StringUtils.isEmpty(token)) return "";
        Jws<Claims> claimsJws
                = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        return (String)claims.get("userName");
    }
    public static String getImg(String token) {
        if(StringUtils.isEmpty(token)) return "";
        Jws<Claims> claimsJws
                = Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);
        Claims claims = claimsJws.getBody();
        return (String)claims.get("img");
    }

創(chuàng)建根據(jù)token獲取用戶信息方法

//根據(jù)token獲取用戶信息
    @GetMapping("auth/getUserInfo")
    public R getUserInfo(HttpServletRequest request) {
        try{
            String userId = AuthContextHolder.getUserId(request);
            String userName = AuthContextHolder.getUserName(request);
            String userImg = AuthContextHolder.getUserImg(request);
            User user = new User();
            user.setOpenid(userId);
            user.setNickName(userName);
            user.setAvatarUrl(userImg);
            return R.ok().data("userInfo",user);
        }catch (ExpiredJwtException e){
            System.out.println("token失效");
        }
        return R.error().message("token失效");
    }

若有其他實現(xiàn)方式歡迎討論文章來源地址http://www.zghlxwxcb.cn/news/detail-782098.html

到了這里,關于微信公眾平臺測試號申請、使用HBuilder X與微信開發(fā)者工具實現(xiàn)授權登陸功能以及單點登錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關文章

  • HBuilder將uniapp項目運行到微信開發(fā)者工具進行小程序調(diào)試

    HBuilder將uniapp項目運行到微信開發(fā)者工具進行小程序調(diào)試

    HBuilder將uniapp項目運行到微信開發(fā)者工具進行小程序調(diào)試 有時候我們的項目開發(fā)是使用uniapp,而最終是要發(fā)布到微信小程序的。 在開發(fā)uniapp項目過程中,我們可以使用HBuilderX運行到微信小程序模擬器(微信開發(fā)者工具),一邊寫代碼一邊調(diào)試、預覽效果。 電腦安裝以下軟件

    2024年02月16日
    瀏覽(96)
  • 使用Laf云平臺,兩步將ChatGPT接入微信公眾號

    原文鏈接:https://husanr.cloud/views/ChatGPT/aircode_wechat

    2023年04月14日
    瀏覽(25)
  • uniapp項目從Hbuilder Vscode運行到小程序模擬器 微信開發(fā)者工具后沒有反應,進不去!其實保姆級答案只需要三步

    uniapp項目從Hbuilder Vscode運行到小程序模擬器 微信開發(fā)者工具后沒有反應,進不去!其實保姆級答案只需要三步

    先看問題如下圖:uniapp項目從Hbuilder 或者Vscode點擊運行到小程序模擬器 微信開發(fā)者工具后沒有反應,進不去 只能在最外面如下圖: 如何解決: 如果不知道如何查看自己的微信小程序AppID請看我的另一篇文章,下方是文章鏈接 如何查看自己的appid以及在微信開發(fā)者工具中查看

    2024年02月11日
    瀏覽(75)
  • 微信公眾號推送天氣教程,自動定時推送【Java版】開發(fā)者和小白詳細教程

    微信公眾號推送天氣教程,自動定時推送【Java版】開發(fā)者和小白詳細教程

    久違的大更新: 建議先打開,因為GitHub在國內(nèi)加載很慢。 點擊打開 Java版本,教程最近一次更新時間為: 2023-08-23 重大更新: 1: 諺語功能修復。 2: 新增農(nóng)歷生日。 已經(jīng)部署的伙伴,務必在公眾號后臺更新新的模塊以及applicantion.yml配置文件中的模板ID,新的模板在本教程當中

    2024年01月23日
    瀏覽(154)
  • 使用Appium 測試微信小程序和微信公眾號方法

    使用Appium 測試微信小程序和微信公眾號方法

    由于騰訊系QQ、微信等都是基于騰訊自研X5內(nèi)核,不是google原生webview,需要打開TBS內(nèi)核Inspector調(diào)試功能才能用Chrome瀏覽器查看頁面元素,并實現(xiàn)Appium自動化測試微信小程序和微信公眾號。 前提條件Appium環(huán)境搭建,這里不多說了,可查閱Appium環(huán)境搭建文章。 因夜神等模擬器是

    2024年02月13日
    瀏覽(24)
  • 【微信小程序二維碼配置】微信公眾平臺配置二維碼,小程序測試二維碼,小程序動態(tài)二維碼,然后掃碼打開對應頁面進行操作

    【微信小程序二維碼配置】微信公眾平臺配置二維碼,小程序測試二維碼,小程序動態(tài)二維碼,然后掃碼打開對應頁面進行操作

    微信公眾平臺地址:微信公眾平臺 選擇 開發(fā)管理 – 開發(fā)設置 – 掃普通鏈接二維碼打開小程序 配置項 二維碼規(guī)則: URL 為內(nèi)含下載校驗文件的服務器 URL , 可以加二級,比如我的 https://*** /preview , 二級隨便寫什么都可以 測試鏈接(選填): 匹配二維碼規(guī)則地址,后加 *** 參數(shù), 因

    2024年01月19日
    瀏覽(36)
  • 申請百度地圖開發(fā)者AK和基本使用

    申請百度地圖開發(fā)者AK和基本使用

    前言 有需求就會有市場,百度地圖也會開放一些免費的Api。來提供一些基本的地圖服務。 今天我們講解的是百度地圖申請AK過程,和申請完之后基本的使用,方便大家日后有需要瀏覽。 AK-申請 1.首先我們學習一個技術最直接的是去看官方文檔,大家可以搜索百度地圖開放平

    2023年04月09日
    瀏覽(29)
  • weixin微信開放平臺 微信公眾平臺

    weixin微信開放平臺 微信公眾平臺

    ? 微信小程序 https://mp.weixin.qq.com/ 微信開發(fā)者社區(qū):?https://developers.weixin.qq.com/community/search?query=63002page=1block=1random=1571284603034 申請流程指引: https://kf.qq.com/product/weixinmp.html#hid=99? ? ? ?微信公眾號可以快速注冊認證小程序了==https://www.cnblogs.com/ytkah/articles/6781163.html ? https://dev

    2024年02月08日
    瀏覽(21)
  • JAVA 微信公眾號授權給開放平臺(第三方平臺)開發(fā)流程及第三方平臺代公眾號實現(xiàn)業(yè)務

    JAVA 微信公眾號授權給開放平臺(第三方平臺)開發(fā)流程及第三方平臺代公眾號實現(xiàn)業(yè)務

    一 、開放平臺賬戶注冊及開發(fā)配置請參考我之前的文章 開發(fā)前準備工作。 二、授權流程 官方文檔細節(jié)比較多 我說的比較直白 (1)首先 啟動票據(jù)推送服務 (2)接收消息→解密→驗證并獲取票據(jù)→保存票據(jù) component_verify_ticket (3)獲取第三方平臺調(diào)用憑證 component_access_tok

    2024年03月15日
    瀏覽(34)
  • 微信公眾平臺自定義菜單 /事件推送

    用戶點擊自定義菜單后,微信會把點擊事件推送給開發(fā)者,請注意,點擊菜單彈出子菜單,不會產(chǎn)生上報。 請注意,第3個到第8個的所有事件,僅支持微信iPhone5.4.1以上版本,和Android5.4以上版本的微信用戶,舊版本微信用戶點擊后將沒有回應,開發(fā)者也不能正常接收到事件推

    2024年02月16日
    瀏覽(22)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包