微信小程序登陆(全流程-前后端)

news/2024/11/22 16:10:13/

环境要求

1.注册一个小程序

2.微信开发者工具

3.idea(springboot)

目录

项目准备

用户登陆

前端开发,传递code

index.wxss

index.js

后端编写,调用微信接口,获取openId

现在用户的所有信息都拿不到,只能用户自己填写


其实微信前端是可以直接请求获取openId的,但是会暴露你的key和secret

流程:前端获取code->后端调用微信接口->返回openid给前端


项目准备

1.打开微信开发工具,点击添加

2.创建小程序

  • 修改项目名称
  • 更换目录
  • 选择从网页创建好的小程序AppId
  • 选择不使用云服务
  • 模板选择基础
  • 使用javaScript的基础模板

用户登陆

前端开发,传递code

首先画一个登陆按钮

index.wxml 

<view class="test_view"><view class="title">前后端请求-响应测试</view><view><button bindtap="clickLogin">登陆</button></view></view>

index.wxss

.test_view .title{font-weight: bold;font-size: 18px;color: #5F687E;text-align: center;margin-bottom: 10px;}.test_view button{background-color: palegoldenrod;}

index.js

// index.js
// 获取应用实例
const app = getApp()Page({// data: {//  user_name:"小王"// },clickLogin:function(){wx.login({success (res) {console.log("js_code",res.code)if (res.code) {//发起网络请求wx.request({url: 'http://localhost:8087/user/getWxInfoTest',method: 'post',data: {code: res.code}})} else {console.log('登录失败!' + res.errMsg)}}})}
})

后端编写,调用微信接口,获取openId

获取openId需要3个参数,appid,code,secret。

登录 微信公众平台 =>开发管理=>开发设置=>开发者Id

appId

AppSecret

其中的HttpUtils参考我的这篇

httpUtils(怕大家还要去我的博客里找,这里给懒的同学~准备了一份直接复制就可以用的)

package com.example.tx_mini_pro.tools;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;public class HttpUtils {public static String getRequest(String httpurl) {HttpURLConnection connection = null;InputStream is = null;BufferedReader br = null;String result = null;// 返回结果字符串try {// 创建远程url连接对象URL url = new URL(httpurl);// 通过远程url连接对象打开一个连接,强转成httpURLConnection类connection = (HttpURLConnection) url.openConnection();// 设置连接方式:getconnection.setRequestMethod("GET");// 设置连接主机服务器的超时时间:15000毫秒connection.setConnectTimeout(15000);// 设置读取远程返回的数据时间:60000毫秒connection.setReadTimeout(60000);// 发送请求connection.connect();// 通过connection连接,获取输入流if (connection.getResponseCode() == 200) {is = connection.getInputStream();// 封装输入流is,并指定字符集br = new BufferedReader(new InputStreamReader(is, "UTF-8"));// 存放数据StringBuffer sbf = new StringBuffer();String temp = null;while ((temp = br.readLine()) != null) {sbf.append(temp);sbf.append("\r\n");}result = sbf.toString();}} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {// 关闭资源if (null != br) {try {br.close();} catch (IOException e) {e.printStackTrace();}}if (null != is) {try {is.close();} catch (IOException e) {e.printStackTrace();}}connection.disconnect();// 关闭远程连接}return result;}
}

springBoot请求接口,请求外部接口_springboot请求外部接口_我要用代码向我喜欢的女孩表白的博客-CSDN博客

public  static String getOpenid(String code,String appid,String secret) {
// 调用接口必要的参数StringBuilder data=new StringBuilder();
// appid、secret定义在配置文件中,注入到项目里data.append("appid="+appid+"&");data.append("secret="+ secret+"&");data.append("js_code="+ code+"&");data.append("grant_type="+ "authorization_code");String response = HttpUtils.getRequest("https://api.weixin.qq.com/sns/jscode2session?" + data);return response;}

本地调试需要在微信小程序中,【详情】,然后【选择不校验合法】

Controller层

package com.example.tx_mini_pro.controller;import com.alibaba.fastjson.JSONObject;import com.example.tx_mini_pro.tools.AppConfigTools;
import com.example.tx_mini_pro.tools.WechatTools;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {
//    @Autowired
//    UserService userService;@AutowiredWechatTools wechatTools;/*** 微信小程序的登陆,如果有账号,则返回登陆成功,如果没有则返回(首次用户,需要认证)* @return*/
//    @PostMapping("/login")
//    public RsJsonBean LoginUser(@RequestBody JSONObject obj){
//
//        userService.LoginUser(obj.getString("code"));
//
//    return null;
//}@PostMapping("/getWxInfoTest")public String getWxInfoTest(@RequestBody JSONObject obj) {String AppId = AppConfigTools.getWxAppId();String AppSecret = AppConfigTools.getWxAppSecret();JSONObject wxJson = JSONObject.parseObject(WechatTools.getOpenid(obj.getString("code"), AppId, AppSecret));log.info("微信的返回值{}", wxJson);return wxJson.toJSONString();}
}

拿到openId之后,其实就已经登陆了,如果用户是首次的话,那应该注册,获取用户的基本信息

现在获取用户昵称和头像,其他的很多东西,现在比较注重隐私,数据都拿不到的。

现在用户的所有信息都拿不到,只能用户自己填写

 

 

 

关于授权,如果用户拒绝授权,就得删除小程序,在重新进来

 

wx.getUserInfo,然后我得到了一个,昵称叫微信用户的东西,头像是这个

 

前端授权代码

wxml

<view><button bindtap="getScope">授权头像和昵称</button></view>

js

 getScope:function(){wx.getSetting({success(res) {if (!res.authSetting['scope.record']) {wx.authorize({scope: 'scope.userInfo',success () {// 用户已经同意小程序使用昵称和头像功能console.log(wx.getUserInfo())}})}}})}

结果.我真的对小程序很无语

 

参考:

微信小程序登录方法,授权登陆及获取微信用户手机号_微信小程序登陆_痴心阿文的博客-CSDN博客

java 后端获取微信小程序openid-CSDN博客

微信小程序获取用户openid的方法详解_javascript技巧_脚本之家


http://www.ppmy.cn/news/40834.html

相关文章

yshop代码生成器遇到的问题 eFrom.vue没生成

what eForm.ftl文件文件不支持生成eForm.vue文件 how 1. eForm.ftl文件文件不支持生成eForm.vue文件 Part 1: 生成eForm.vue文件, Reson: 添加eForm生成文件规则&#xff0c;解决报错问题 module: yshop-generatorpakage: co.yixiang.modules.gen.utils.GenUtil /*** 获取…

G2—FIFO IP核2023-04-07

1.简介 FIFO是英文First In First Out 的缩写&#xff0c;是一种先进先出的数据缓存器&#xff0c;fifo在FPGA内部是RAM加上已编写好的读写控制模块&#xff08;RTL级&#xff09;然后“封装”在一起的一个module。他与普通存储器的区别是没有外部读写地址线&#xff0c;这样使…

数学分析:多元微积分4

再看多元微分的泰勒公式前&#xff0c;我们回忆下泰勒公式的初始意义&#xff1a; 根据数学分析1 150页。 其实是用多项式去逼近具体函数f(x)的过程。 现在&#xff0c;我们来看多元微分的泰勒公式&#xff1a; 再看这个公式之前&#xff0c;我们需要引入这样一个问题&#x…

Oracle序列创建和使用以及取消最大限制

Oracle序列创建和使用 创建序列 语法 CREATE SEQUENCE 序列名 [相关参数] 参数说明 INCREMENT BY :序列变化的步进&#xff0c;负值表示递减。(默认1) START WITH:序列的初始值 。(默认1) MAXvalue:序列可生成的最大值。(默认不限制最大值&#xff0c;NOMAXVALUE) MINVALUE:序列…

大学物理第四单元:刚体

1.刚体的定轴转动 思考&#xff1a;改变转动状态的因素 答&#xff1a;改变刚体运动状态的的因素有力的大小及力臂有关&#xff0c;力与力臂的乘积为力矩。 力臂&#xff1a;力到转轴的距离 简而言之&#xff0c;改变刚体运动状态的因素是力矩&#xff0c;与力和力臂有关。 …

移除Office 365快捷键

在Windows中使用AltShiftCtrlWin会打开Office 365应用&#xff0c;禁用方法是&#xff1a;以管理员身份打开一个CMD窗口&#xff0c;执行如下命令&#xff1a; REG ADD HKCU\Software\Classes\ms-officeapp\Shell\Open\Command /t REG_SZ /d rundll32执行后&#xff0c;重启ex…

电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境&#xff0c;促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标…

二叉树刷题指南

文章目录一、完全二叉树的节点个数二、平衡二叉树三、二叉搜索树中的众数四、二叉搜索树中的插入操作五、修剪二叉搜索树一、完全二叉树的节点个数 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&am…