微信公众平台开发文档

微信授权登录获取用户信息有2种方式:
1.静默授权获取用户信息、
2.非静默授权弹出授权界面,用户确认之后获取用户信息(这种方法能够获取到更多信息)。

开发前准备:

1.获取到AppID
2.AppSecret
3.设置IP白名单
4.添加网页授权域名
公众号设置->功能设置

前端获取code:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

通过code换取网页授权access_token

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

拉取用户信息

https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN

<dependency><groupId>com.github.kevinsawicki</groupId><artifactId>http-request</artifactId><version>6.0</version>
</dependency>
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.4</version><scope>provided</scope>
</dependency>
package com.pica.cloud.patient.resident.server.util;import com.alibaba.fastjson.JSON;
import com.github.kevinsawicki.http.HttpRequest;
import com.pica.cloud.patient.resident.common.constants.CommonCons;
import com.pica.cloud.patient.resident.server.configuration.BeanConfiguration;
import com.pica.cloud.patient.resident.server.vo.AccessTokenVo;
import com.pica.cloud.patient.resident.server.vo.WechatUserInfoVo;
import lombok.extern.slf4j.Slf4j;
import lombok.var;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;/*** @ClassName WechatUtil* @Description* @Author Jun.li0101* @Date 2019/3/19 16:43* @ModifyDate 2019/3/19 16:43* @Version 1.0*/
@Component
@Slf4j
public class WechatUtil {private static BeanConfiguration configuration;private final static Integer SUCCESS = 0;@Autowiredpublic WechatUtil(BeanConfiguration config) {WechatUtil.configuration = config;}public static AccessTokenVo getWechatAccessToken(String code) {if (code == null) {return null;}String url = String.format(CommonCons.Wechat.LOGIN_ACCESS_TOKEN_URL, configuration.getAppId(), configuration.getAppSecret(), code);try {String result = HttpRequest.get(url).body();log.info("getWechatAccessToken result:{}", result);var token = JSON.parseObject(result, AccessTokenVo.class);if (token.getErrCode() == null || SUCCESS.equals(token.getErrCode())) {log.info("get wechat access token:{}", token);return token;} else {log.warn("code {} request wechat api get access token error:{}", code, token);}} catch (Exception ex) {log.error("getWechatAccessToken error", ex);}return null;}public static WechatUserInfoVo getWechatUserInfo(AccessTokenVo tokenVo) {if (tokenVo == null) {return null;}var url = String.format(CommonCons.Wechat.GET_USER_INFO_URL, tokenVo.getAccessToken(), tokenVo.getOpenId());try {String result = HttpRequest.get(url).body();var info = JSON.parseObject(result, WechatUserInfoVo.class);if (info.getErrCode() == null || SUCCESS.equals(info.getErrCode())) {log.info("get wechat user info:{}", info);return info;} else {log.warn("request wechat api get user information error:{}", info);}} catch (Exception ex) {log.error("getWechatUserInfo error", ex);}return null;}}
package com.pica.cloud.patient.resident.server.vo;import com.alibaba.fastjson.annotation.JSONField;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;/*** @ClassName AccessTokenVo* @Description {@link} 参考 https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317851&token=&lang=zh_CN* @Author Jun.li0101* @Date 2019/3/19 17:15* @ModifyDate 2019/3/19 17:15* @Version 1.0*/
@Getter
@Setter
@ToString
public class AccessTokenVo extends WechatCommonVo {@JSONField(format = "access_token")private String accessToken;@JSONField(format = "expires_in")private Integer expiresIn;@JSONField(format = "refresh_token")private String refreshToken;@JSONField(format = "openid")private String openId;@JSONField(format = "scope")private String scope;@JSONField(format = "unionid")private String unionId;}
//
package com.pica.cloud.patient.resident.server.vo;import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;/*** @ClassName WechatUserInfoVo* @Description {@link} 参考 https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419317853&token=&lang=zh_CN* @Author Jun.li0101* @Date 2019/3/19 18:59* @ModifyDate 2019/3/19 18:59* @Version 1.0*/
@Getter
@Setter
@ToString
public class WechatUserInfoVo extends WechatCommonVo {@JSONField(format = "openid")private String openid;@JSONField(format = "nickname")private String nickname;@JSONField(format = "sex")private Integer sex;@JSONField(format = "province")private String province;@JSONField(format = "city")private String city;@JSONField(format = "country")private String country;@JSONField(format = "headimgurl")private String headImgurl;@JSONField(format = "unionid")private String unionid;@JSONField(format = "language")private String language;}
  • 微信登录表情特殊符号处理
    据库以及JDBC默认的字符集都是utf8,在存储emoji表情时会报错:
Incorrect string value: '\xF0\x9F\xA4\xA9' for column 'nickname'

原因是utf8不支持4字节的emoji表情。

具体如下:

utf8与utf8mb4具有相同存储特性:相同的代码值,相同的编码,相同的长度。不过utf8mb4扩展到一个字符最多可有4位元,所以能支持更多的位元集。utf8mb4不只兼容utf8,还能比utf8能展示更新的字符。将编码改为utf8mb4外不需要做其他转换。

为了要跟国际接轨,原本的utf8编码在存储某些国家的文字(或是罕见字)已经不敷使用,因此在mysql5.5.3版以上,可以开始使用4-Byte UTF-8 Unicode的编码方式。

Mysql查看版本方式:

select version();

Mysql在5.5.3版本之后增加了utf8mb4字符编码,mb4即most bytes 4。简单说utf8mb4是utf8的超集并完全兼容utf8,能够用四个字元存储更多的字符。

utf8mb4可以向下兼容utf8,而且比utf8可以表示更多的字符。此外,将编码改为utf8mb4不需 要其他转换。

解决办法:

1.修改mysql配置文件my.cnf,同时将库表的默认字符集都改为utf8mb4;

default-character-set=utf8mb4

同时修改项目的JDBC连接配置

spring.datasource.tomcat.init-s-q-l=SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci

微信授权登录(java实现)相关推荐

  1. 微信公众号 授权登录 JAVA

    微信授权登录 java 首先 腾讯那么大的公司 文档写的那么low 微信那么火 demo写的那么差 我就想说一句  微信简直就是在歧视Java 我这边自己整合了下 微信支付和微信登录 java的代码  ...

  2. Java版本微信授权登录(测试版)

    这篇文章是对微信授权登录的一个测试版本,并不能直接在生产上使用,对于在生产上正式使用将会在下一篇中描述. 一,首先需要以下两个数据 appID和appsecret 如何获取这两个数据,请先登录微信公众 ...

  3. Java版本微信授权登录(升级版)

    前面写了一遍文章<Java版本微信授权登录(测试版)>,可以当做入门的基础文章,这里继续做一点深入,主要解决的是,如何在本地开发中微信授权以后跳转到本地启动的项目中. 我们知道了微信公众平 ...

  4. java如何实现微信授权登录

    要在 Java 中实现微信授权登录,需要按照以下步骤操作: 在微信开放平台(https://open.weixin.qq.com/)申请微信登录的第三方平台资格,并获取相应的 AppID 和 AppS ...

  5. 慕课网_《微信授权登录》学习总结

    时间:2017年08月12日星期六 说明:本文部分内容均来自慕课网.@慕课网:http://www.imooc.com 教学源码:无 学习源码:https://github.com/zccodere/ ...

  6. 微信授权登录(微信订阅号使用测试账号)

    1.微信授权登录: 微信公众号测试登录: 准备: 1.1 花生壳! 下载地址:http://hsk.oray.com/download/ 1.2 微信公众号:https://mp.weixin.qq. ...

  7. SpringBoot2.0(九):实现微信授权登录并且获取用户信息

    第一步:配置域名 由于我是本地测试,需要一个域名映射工具,改工具使用非常简单,如果自己有域名可以使用自己的域名(自己的域名必须备案)如果没有可以在第一个输入框里面输入自己的域名前缀!微信授权登录端口必 ...

  8. android友盟微信授权登录清除,【转载】Android友盟SDK微信授权登录接入

    微信授权登录接入需要先到微信开放平台申请好应用的APPID,交纳300大洋费用得到授权登录权限后才能使用,此处不再赘述. 接入的两种方式 -- 微信SDK接入:使用微信官方SDK接入,需要分" ...

  9. springboot微信授权登录

    水平有限!实现方法直接找的网上的以为大神所编写的api来实现,这里主要是记录一下自己实现的过程.具体方法请参考网址:https://github.com/liyiorg/weixin-popular, ...

最新文章

  1. 使用 Smartmontools 检测硬盘坏道
  2. osgEarth3.0 加载天地图
  3. JavaSE—集合框架
  4. Yii Zii.widgets.Cmenu 操作
  5. vue.js java php_听说Java程序员喜欢AngularJS,PHP程序员喜欢Vue.js
  6. java 类加载的机制面试题_java 类加载机制 阿里面试题
  7. 《OSPF和IS-IS详解》一2.4 理解内部BGP
  8. python输入城市找省份_利用字典模拟省市区(县)的查询
  9. 【Java力扣算法《代码随想录》04】第4章链表63-69题(leetcode题号203+707+206+24+19+面试题02.07+142)
  10. wps word文字样式管理
  11. 【ESP8266】 ESP8266与LittleFS文件系统
  12. 一个人怎样才算见过世面?
  13. 3.17从键盘输入两个正整数 a 和 b,求其最大公约数和最小公倍数。
  14. 软件系统三员管理_3个可怕的系统管理员故事
  15. 点击input时,不显示边框!
  16. 广告平台精准推送系统解决方案架构
  17. UE4 蓝图学习 FlipFlop
  18. 工作笔记一 --- 坐标点(point)
  19. 【电力电子技术课程设计】单相交流调压电路Simulink仿真
  20. js替换常见特殊字符

热门文章

  1. Spring注解总结
  2. 计算机算法设计与分析期末考试试卷,算法设计与分析期末考试卷及答案a
  3. 从零开始学AI(Python基础)
  4. vfifo控制mig_基于MIG IP核的DDR3控制器(一)
  5. 【详细+超基础】Java-学习笔记
  6. Linux云计算架构
  7. Excel平均值运算2种操作,不会函数也可轻松上手
  8. filezilla server搭建ftp服务器步骤
  9. lgo怎么打开o文件_GO语言文件的创建与打开实例分析
  10. 【Java设计模式】迭代器模式