- 浏览: 5161237 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
微信小程序序的代码中提示,使用code换取openid,但官方文档中没有给出进一步的说明。
换取openid的要点:由于安全的原因,必须由自己小程序的服务器端完成。知道了这个要点,实现起来就简单了,服务器端写一个RestController,接收code参数,使用httpclient向微信的服务端换openid就行了。
代码使用了SpringBoot,不会也不难理解。主要代码如下:
用到了一个httpclient封闭的工具类,代码如下:
小程序中,使用wx.request(url:'https://域名/api/wx/session',....),就可以拿到一个JSON对象,其中有openid。
换取openid的要点:由于安全的原因,必须由自己小程序的服务器端完成。知道了这个要点,实现起来就简单了,服务器端写一个RestController,接收code参数,使用httpclient向微信的服务端换openid就行了。
代码使用了SpringBoot,不会也不难理解。主要代码如下:
package com.wallimn.iteye.sp.asset.common.controller; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.fasterxml.jackson.databind.ObjectMapper; import com.wallimn.iteye.sp.asset.common.util.AesUtil; import com.wallimn.iteye.sp.asset.common.util.HttpUtil; @RestController @RequestMapping("/api/wx") public class WeixinController { private static Logger log = LoggerFactory.getLogger(WeixinController.class); @Value("${wx.appId}") private String appId; @Value("${wx.appSecret}") private String appSecret; @Value("${wx.grantType}") private String grantType; // wx.grantType=authorization_code @Value("${wx.requestUrl}") private String requestUrl; // wx.requestUrl=https://api.weixin.qq.com/sns/jscode2session @RequestMapping("/session") public Map<String, Object> getSession(@RequestParam(required = true) String code) { return this.getSessionByCode(code); } @SuppressWarnings("unchecked") private Map<String, Object> getSessionByCode(String code) { String url = this.requestUrl + "?appid=" + appId + "&secret=" + appSecret + "&js_code=" + code + "&grant_type=" + grantType; // 发送请求 String data = HttpUtil.get(url); log.debug("请求地址:{}", url); log.debug("请求结果:{}", data); ObjectMapper mapper = new ObjectMapper(); Map<String, Object> json = null; try { json = mapper.readValue(data, Map.class); } catch (Exception e) { e.printStackTrace(); } // 形如{"session_key":"6w7Br3JsRQzBiGZwvlZAiA==","openid":"oQO565cXXXXXEvc4Q_YChUE8PqB60Y"}的字符串 return json; } }
用到了一个httpclient封闭的工具类,代码如下:
package com.wallimn.iteye.sp.asset.common.util; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.Map; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.message.BasicNameValuePair; public class HttpUtil { private static final String Charset = "utf-8"; /** * 发送请求,如果失败,会返回null * @param url * @param map * @return */ public static String post(String url, Map<String, String> map) { // 处理请求地址 try { HttpClient client = HttpClientBuilder.create().build(); URI uri = new URI(url); HttpPost post = new HttpPost(uri); // 添加参数 List<NameValuePair> params = new ArrayList<NameValuePair>(); for (String str : map.keySet()) { params.add(new BasicNameValuePair(str, map.get(str))); } post.setEntity(new UrlEncodedFormEntity(params, Charset)); // 执行请求 HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() == 200) { // 处理请求结果 StringBuffer buffer = new StringBuffer(); InputStream in = null; try { in = response.getEntity().getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(in,Charset)); String line = null; while ((line = reader.readLine()) != null) { buffer.append(line); } } catch (Exception e) { e.printStackTrace(); } finally { // 关闭流 if (in != null) try { in.close(); } catch (Exception e) { e.printStackTrace(); } } return buffer.toString(); } else { return null; } } catch (Exception e1) { e1.printStackTrace(); } return null; } /** * 发送请求,如果失败会返回null * @param url * @param str * @return */ public static String post(String url, String str) { // 处理请求地址 try { HttpClient client = HttpClientBuilder.create().build(); URI uri = new URI(url); HttpPost post = new HttpPost(uri); post.setEntity(new StringEntity(str, Charset)); // 执行请求 HttpResponse response = client.execute(post); if (response.getStatusLine().getStatusCode() == 200) { // 处理请求结果 StringBuffer buffer = new StringBuffer(); InputStream in = null; try { in = response.getEntity().getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(in,"utf-8")); String line = null; while ((line = reader.readLine()) != null) { buffer.append(line); } } finally { // 关闭流 if (in != null) in.close(); } return buffer.toString(); } else { return null; } } catch (Exception e) { e.printStackTrace(); } return null; } /** * 发送GET方式的请求,并返回结果字符串。 * <br> * 时间:2017年2月27日,作者:http://wallimn.iteye.com * @param url * @return 如果失败,返回为null */ public static String get(String url) { try { HttpClient client = HttpClientBuilder.create().build(); URI uri = new URI(url); HttpGet get = new HttpGet(uri); HttpResponse response = client.execute(get); if (response.getStatusLine().getStatusCode() == 200) { StringBuffer buffer = new StringBuffer(); InputStream in = null; try { in = response.getEntity().getContent(); BufferedReader reader = new BufferedReader(new InputStreamReader(in,Charset)); String line = null; while ((line = reader.readLine()) != null) { buffer.append(line); } } finally { if (in != null) in.close(); } return buffer.toString(); } else { return null; } } catch (Exception e) { e.printStackTrace(); } return null; } }
小程序中,使用wx.request(url:'https://域名/api/wx/session',....),就可以拿到一个JSON对象,其中有openid。
发表评论
-
gradle编译错误:Could not find method compile() for arguments
2020-09-19 10:50 18511编译(IDEA+Gradle)一个别人的工程,出现一个 ... -
netty心跳检查之UDP篇
2019-09-15 08:50 2396部分UDP通信场景中,需要客户端定期发送心跳信息,以获取终 ... -
解决tomcat部署两个SpringBoot应用提示InstanceAlreadyExistsException
2019-06-30 11:49 3392两个SpringBoot应用部署在一个Tomcat中,单独 ... -
Eclipse配置MyBatis代码自动化功能
2019-06-29 10:16 17731.安装插件 Eclipse中,Help->Ecli ... -
vue.js中使用qrcode生成二维码
2019-05-20 00:00 7656一、安装包 npm install qrcodejs2 --s ... -
MySQL插入数据报错: Incorrect string value: '\xFD\xDE'
2019-03-31 23:19 1253我MySQL数据库用的uft-8字符集,插入数据一直很正常 ... -
vue自定义组件并双向绑定属性
2019-03-08 22:46 3258做了两个子组件,原理基本一样,一个是使用原生的select ... -
vue-router简单示例
2019-03-05 00:32 1153写个基本完整、稍有借鉴意义的示例,防止自己忘记。 &l ... -
“联通充值系统繁忙”轻松应对
2019-02-06 11:03 3973大过年的,联通充个值一直报“充值系统繁忙”。昨天晚上试了几 ... -
electron.js数据库应用---导航菜单(element-ui+mysql)
2019-02-05 21:33 2364一、环境搭建 略, ... -
electron.js数据库应用---入门(mysql+element-ui)
2019-01-27 23:19 7504我的机器:Windows10,64 ... -
SpringMVC 在controller层中注入成员变量request,是否线程安全
2018-12-17 21:17 2748@RestController public class ... -
VueJS 组件参数名命名与组件属性转化
2018-12-03 00:00 2077转自:https://www.cnblogs.com/meiy ... -
vue-resource拦截器实现token发送及检验自动化
2018-11-16 22:38 3077用了很长时间vue-resource,最近思考$http发 ... -
element-ui试用手记
2018-10-29 20:25 1747element-ui、iviewui都以vue.js为基础 ... -
iviewui中表格控件中render的使用示例
2018-07-07 16:46 9787示例了如何在表格中显示按钮,如何将代码转化为文字。 i ... -
Tomcat错误“Alias name tomcat does not identify a key entry”解决
2018-07-05 21:39 6575申请到了阿里云的证书后,下载、按照说明生成jks格式证书、 ... -
阿里云免费证书“fileauth.txt内容配置错误”解决
2018-07-05 20:43 5301最近研究微信小程序开发,上阿里云申请了个证书,使用文件验证 ... -
springboot2.0跨域配置
2018-07-04 22:11 5285springboot2.0跨域配置: 一、代码 ... -
SpringBoot2.0启用https协议
2018-06-28 23:00 7778SpringBoot2.0之后,启用https协议的方式与 ...
相关推荐
在上面的代码中,我们可以看到,微信小程序 SpringBoot 后台获取用户的 OpenID 的过程需要通过微信 API 来实现,后台需要使用微信 API 的 jscode2session 接口来换取 openid,並将其返回到微信小程序中。 在 ...
1.在小程序中获取用户的登录信息,成功后可以获取到用户的code值 2.在用户自己的服务端请求微信获取用户openid接口,成功后可以获取用户的openid值 ...4.在微信小程序中支付订单,最终实现微信的支付功能
首先,**获取openid**是微信小程序与微信服务器进行数据交互的基础。Openid是每个微信用户在小程序中的唯一标识,它允许小程序识别并关联到具体的微信用户。获取openid通常通过以下几个步骤完成: 1. **授权登录**:...
微信小程序登录功能允许用户授权后获取微信用户的基本信息,如openid和unionid。用户点击授权后,小程序会跳转到微信服务器获取code,然后服务器端使用code换取openid和access_token,再进一步获取用户信息。这样...
微信小程序书店SpringBoot后端源码案例设计是一个典型的Web开发项目,主要采用了微信小程序作为前端交互界面,结合SpringBoot框架构建后端服务。这个案例旨在教授开发者如何将这两种技术有效地结合,实现一个完整的...
在本文中,我们将深入探讨如何使用SpringBoot框架来实现一个基于微信开放平台的Web端扫码登录功能。微信扫码登录是一种安全、便捷的用户身份验证方式,它允许用户通过扫描二维码来授权登录,而无需输入用户名和密码...
在本文中,我们将深入探讨如何使用SpringBoot框架与微信小程序进行对接,实现小程序的用户登录功能以及发送模板消息。SpringBoot以其简洁、高效的特点,在Java Web开发中广泛应用,而微信小程序则是移动端的一种轻量...
在本项目"基于 springboot 实现微信扫描小程序码登录.zip"中,主要涉及的技术栈包括 Java、Spring Boot、以及微信小程序的相关开发。下面将详细解释这些技术及其在项目中的应用。 1. **Java**: 作为项目的编程语言...
首先,我们需要了解SpringBoot框架,它是Spring平台的核心模块,简化了创建独立的、生产级别的基于Java的应用程序过程。微信登录则涉及到微信开放平台,允许开发者通过API与微信用户进行交互。 1. **SpringBoot基础...
在微信小程序开发中,获取用户授权获取手机号是一个关键的功能,特别是在需要实名认证或个性化服务的场景下。本文将详细讲解如何使用`getPhoneNumber` API来实现这一功能,并提供具体的实现思路和示例代码。 首先,...
项目采用SpringBoot框架,可直接运行,...包含统一下单(支付接口)即WeixinController中pay方法、支付结果通知(回调接口)即WeixinController中notify方法、使用code获取openid接口即WeixinController中prepay方法
4. 处理微信小程序的登录请求,使用code换取openid和session_key,生成JWT并返回给小程序。 5. 配置Shiro的过滤器链,实现JWT的自动鉴权。 6. 使用Redis存储JWT,实现登录状态的持久化。 通过以上步骤,你可以构建...
2. **SpringBoot后端处理**:当后端接收到微信小程序发送的授权码后,通过调用微信API,使用AppID和AppSecret换取access_token和openid。access_token是微信服务器用于识别调用方身份的凭证,而openid是用户的唯一...
1. 在微信小程序公众平台注册小程序,获取唯一APPID。 2. 在微信支付商户平台中绑定已获取的APPID,确保支付功能可用。 六、实战——SpringBoot框架集成 1. 初始化Spring Boot项目,配置不同环境的属性文件。 2. ...