SpringBoot 获取微信小程序openid
最近做一个项目用到小程序,为了简化用户啊登录,通过获取小程序用户的openid来唯一标示用户。
1、官方教程
2、具体步骤
3、具体实现
4、可能出现的错误
5、代码下载
1、官方教程
先来看看官方怎么说的:官方链接
官方的意思是用户打开小程序会产生一个临时的code(code有实效性),通过这个code加上一些参数作 可以获取openID和sessionKey。
具体需要什么参数呢?官方介绍
2,具体步骤
A,拿到appid和appsecret
B,通过小程序wx.login({...}); 函数获取code
C,把code、appid、secret、type作为参数 发送给服务器换取 openID
3,具体实现
由于code是用户登录是产生的,grat_type是默认的,所以只要再拿到appID和appSecret
小程序的 appId 和小程序的 appSecret获取方法:
A:登录微信公众平台https://mp.weixin.qq.com
B:找到开发
小程序客户端获取code
在小程序app.js 中加入 下面的代码:当编译工程时会自动发送请求并且把code发送给服务器。
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
if (res.code) {
wx.request({
url: 'http://localhost:8080/cis',
data: {
code: res.code
},
header: {
'content-type': 'application/x-www-form-urlencoded'
},
success(res) {
console.log("openid:" + res.data.openid);
if (res.data.openid != "" || res.data.openid != null) {
// 登录成功
wx.setStorageSync("openid", res.data.openid);//将用户id保存到缓存中
wx.setStorageSync("session_key", res.data.session_key);//将session_key保存到缓存中
} else {
// 登录失败
// TODO 跳转到错误页面,要求用户重试 return false;
}
}
})
} else {
console.log('获取用户登录态失败!' + res.errMsg)
}
}
})
服务端用idea建立springboot工程 导入web依赖
A:
B:
C:
D:
在pom.xml中引入依赖:
<!--Http Requset封装-->
<!--http requset-->
<dependency>
<groupId>com.github.kevinsawicki</groupId>
<artifactId>http-request</artifactId>
<version>6.0</version>
</dependency> <!--json 解析-->
<!--https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
E:
建立controller包和server包,在server包下创建impl包:
WeChatController类用来处理请求,接收参数(code),代码如下:
import com.cnetopro.httpdemo.service.WeChatService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; @RestController
public class WeChatController {
@Autowired
WeChatService wc; @RequestMapping("/cis")
public void getcode(@RequestParam(value = "code")String code){
System.out.println(code); wc.codetoopenid(code); }
}
WeChatService接口用来 发送get请求获取openID和sessionkey,代码如下
import org.springframework.stereotype.Service; public interface WeChatService {
public String codetoopenid(String code);
}
WeChartServiceimpl类用来实现WeChartService里面的方法,代码如下
注意把xxxx...替换成自己的 appid
把eeeeee...替换成自己的secret
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cnetopro.httpdemo.service.WeChatService;
import com.github.kevinsawicki.http.HttpRequest;
import org.springframework.stereotype.Service; import java.util.HashMap;
import java.util.Map; @Service
public class WeChatServiceimpl implements WeChatService { @Override
public String codetoopenid(String code) {
Map<String, String> data = new HashMap<String, String>();
data.put("appid", "xxxxxxxxxxxxxxxxx");
data.put("secret", "eeeeeeeeeeeeeeeeeeeeeeeeee");
data.put("js_code", code);
data.put("grant_type", "authorization_code"); String response = HttpRequest.get("https://api.weixin.qq.com/sns/jscode2session").form(data).body();
System.out.println("Response was: " + response);
JSONObject obj= JSON.parseObject(response);//将json字符串转换为json对
System.out.println(obj); return null;
}
}
运行结果:
成功获取openID和sessionkey
WeChatServiceimpl代码说明:
用这个jar包来封装https请求
<!--http requset-->
<dependency>
<groupId>com.github.kevinsawicki</groupId>
<artifactId>http-request</artifactId>
<version>6.0</version>
</dependency>
用这个jar包来处理接收的数据
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
4、可能出现的错误说明:
1.小程序
错误:http://localhost:8080 不在以下 request 合法域名列表中,请参考文档
解决办法:点击小程序开发工具右上角详情>本地设置>不校验合法域名
2.idea开发工具控制台报错
(这个错误困扰了3个小时)
{"errcode":40013,"errmsg":"invalid appid, hints: [ req_id: dHMAcEyFe-9lrrvA ]"}
错误原因1: appId填错了
错误原因2:secret填错了
错误原因3(非常重要):微信开发着工具创建小程序时的appId与 服务器端代码的appId不一致,(因为有时喜欢用接口测试号appid)
5、代码下载
github:下载地址
gitee:下载地址
SpringBoot 获取微信小程序openid的更多相关文章
- java后台获取微信小程序openid
一.jar包准备 1.在网盘下载 链接:https://pan.baidu.com/s/15HAAWOg_yn768g4s9IrcPg 提取码:hgj0 二.在pom文件中添加依赖 1.将外部的引入的 ...
- JAVA获取微信小程序openid和获取公众号openid,以及通过openid获取用户信息
一,首先说明下这个微信的openid 为了识别用户,每个用户针对每个公众号会产生一个安全的OpenID,如果需要在多公众号.移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开 ...
- 调试阶段 获取微信小程序openid
wx.login({ success: function(res) { //首先获取用户code //res.code wx.request({ url: 'https://api.weixin.qq ...
- 微信小程序开发之如何哪获取微信小程序的APP ID
微信小程序的开发工具,在新建项目的时候,默认提示填写APP ID,如果不填写AppID 也是可以本地测试和开发的,但是无法通过手机调试,只能在开发工具里查看 如果需要真机调试微信小程序,需要安装微信6 ...
- SpringBoot实现微信小程序登录的完整例子
目录 一.登录流程 二.后端实现 1.SpringBoot项目结构树 2.实现auth.code2Session 接口的封装 3.建立用户信息表及用户增删改查的管理 4.实现登录认证及令牌生成 三.前 ...
- C# 获取微信小程序access_token
/// <summary> /// 获取access_token /// </summary> /// <returns></returns> publ ...
- Java 获取微信小程序二维码(可以指定小程序页面 与 动态参数)
一.准备工作 微信公众平台接口调试工具 小程序的唯一标识(appid) 小程序的密钥(secret) 二.获取access_token 打开微信公众平台接口调试工具,在参数列表中输入小程序的appid ...
- 如何获取微信小程序for循环的index
在微信小程序开发中,对于wx:for,可以使用wx:for-index="index"来获取数组中的元素的索引值(下标). <view class="item&qu ...
- 小程序 获取微信小程序的源码
1.微信小程序是以wxapkg可执行文件的形式存在本地的 2.网上有工具可以把wxapkg文件还原成源代码: https://github.com/qwerty472123/wxappUnpacker ...
随机推荐
- 解决IDEA更新为最新的2020.3版后,右键运行居然没有以xml形式运行的Run显示
一.前言 个人一直喜欢用IDEA最新版,结果更新后,发现TestNg批量执行,选中testng.xml右键没Run,如下图: 刚开始以为是配置错误呢,下载了2018.2版本的IDEA,还能正常运行,于 ...
- moviepy音视频开发:audio_fadein、fadeout实现声音淡入淡出
☞ ░ 前往老猿Python博文目录 ░ 一.概述 为了支持一些常规的音频变换处理,moviepy提供了一系列常用的变换函数,开发者可以直接使用这些方法进行变换,这些函数都在moviepy.audio ...
- PyQt(Python+Qt)学习随笔:纯文本编辑器QPlainTextEdit功能详解
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 一.概述 QPlainTextEdit是用于纯文本的一个高级文档编辑器 ...
- requests的再次学习
title: requests模块的再次理解 date: 2020-03-10 22:44:26 tags: 1.response的解析 当requests模块发送请求后,我们会对其响应的数据也就是r ...
- JAVA环境安装及其配置
一.JAVA版本的选择 我使用的是JAVA8,所以这次方法是JAVA8的安装过程. 这里我给出其下载地址,可以自行下载. 链接: https://pan.baidu.com/s/1k2Xydi6FJ2 ...
- 深海 => 暴力扫描挖掘机
平时总是联动这个联动那个,写一些小脚本,感觉零碎又没啥意思,想把市面上一些比较知名的工具集合一下,弄个方便点的躺着挖洞的工具,看看效果会不会更好,暂时名字取深海吧,估计又是一个迟迟不填的坑,灌灌灌灌水
- python——sklearn完整例子整理示范(有监督,逻辑回归范例)(原创)
sklearn使用方法,包括从制作数据集,拆分数据集,调用模型,保存加载模型,分析结果,可视化结果 1 import pandas as pd 2 import numpy as np 3 from ...
- js内存泄漏的问题?
内存泄漏指任何对象在您不再拥有或需要它之后仍然存在. 垃圾回收器定期扫描对象,并计算引用了每个对象的其他对象的数量.如果一个对象的引用数量为 0(没有其他对象引用过该对象),或对该对象的惟一引用是循环 ...
- CSP-S 2020 题解
赛后我重拳出击,赛场上我却爆零.哎. 题解本人口胡.有错请各位大佬们指出. A. 儒略日 这题是大型模拟题. 介绍两种写法:一种代码量致死(赛 场 自 闭),一种是非常好写的. 写法 1 我在赛场的思 ...
- ACM里的期望和概率问题 从入门到精通
起因:在2020年一场HDU多校赛上.有这么一题没做出来. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6829 题目大意:有三个人,他们分别有X,Y ...