微信二维码使用及配置
1--依赖
<!-- 微信扫码依赖 -->
<dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5</version>
</dependency>
<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-mp</artifactId><version>4.1.0</version>
</dependency>
<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-common</artifactId><version>4.1.0</version>
</dependency>
2--使用方法
//获取二维码图片(微信二维码似乎只能携带一个参数)
private ResultJson getQrCode() {// 获取token开发者String getQrCodeUrl = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=" + WeChatUtils.getAccessToken();// 生成前端唯一标识UUIDString UUID = ResultUtil.getUUID();String json = "{\"expire_seconds\": 604800, \"action_name\": \"QR_STR_SCENE\"" + ", \"action_info\": {\"scene\": {\"scene_str\": \"" + UUID + "\"}}}";String result = WeChatUtils.doPostJson(getQrCodeUrl, json);//返回给前端try {JSONObject jsonObject = JSONObject.parseObject(result);jsonObject.put("UUID", UUID);return ResultJson.ok(jsonObject);} catch (Exception e) {e.printStackTrace();return ResultJson.error(e.getMessage());}
}
/*** @Description: 微信回调(微信官方调用)*/
@RequestMapping("/checkSign")
public String checkSign(HttpServletRequest request) throws Exception {//获取微信请求参数String signature = request.getParameter("signature");String timestamp = request.getParameter("timestamp");String nonce = request.getParameter("nonce");String echostr = request.getParameter("echostr");//参数排序。 token 就要换成自己实际写的 tokenString[] params = new String[]{timestamp, nonce, "123456"};Arrays.sort(params);//拼接String paramstr = params[0] + params[1] + params[2];//加密//获取 shal 算法封装类MessageDigest Sha1Dtgest = MessageDigest.getInstance("SHA-1");//进行加密byte[] digestResult = Sha1Dtgest.digest(paramstr.getBytes("UTF-8"));//拿到加密结果String mysignature = StringUtil.bytes2HexString(digestResult);mysignature = mysignature.toLowerCase(Locale.ROOT);//是否正确boolean signsuccess = mysignature.equals(signature);//逻辑处理if (signsuccess && echostr != null) {//peizhi tokenreturn echostr;//不正确就直接返回失败提示.} else {//重点JSONObject jsonObject = loginService.callback(request);return jsonObject.toJSONString();}
}
//上面的方法调用这个方法
public JSONObject callback(HttpServletRequest request) throws IOException {//request中有相应的信息,进行解析WxMpXmlMessage message = WxMpXmlMessage.fromXml(request.getInputStream());//获取消息流,并解析xml//消息类型String messageType = message.getMsgType();//消息事件String messageEvent = message.getEvent();//openidString openId = message.getFromUser();//UUIDString UUID = message.getEventKey();JSONObject jsonObject = new JSONObject();jsonObject.put("code", "200");//if判断,判断查询if (messageType.equals("event")) {jsonObject = null;//扫描二维码if (messageEvent.equals("SCAN")) {}//关注if (messageEvent.equals("subscribe")) {}//没有该用户if (jsonObject == null) {//从微信上中拉取用户信息String url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" + getAccessToken() +"&openid=" + fromUser +"&lang=zh_CN";String result = doGet(url);jsonObject = JSONObject.parseObject(result);}return jsonObject;
}
3--工具类
public class WeChatUtils {private static final String APP_ID = "";private static final String APP_SECRET = "";/*** 获取图片*/public static String getAccessToken() {String accessToken;String getTokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + APP_ID + "&secret=" + APP_SECRET;String result = doGet(getTokenUrl);JSONObject jsonObject = JSONObject.parseObject(result);accessToken = jsonObject.getString("access_token");return accessToken;}public static String doGet(String url, Map<String, String> param) {// 创建Httpclient对象CloseableHttpClient httpclient = HttpClients.createDefault();String resultString = "";CloseableHttpResponse response = null;try {// 创建uriURIBuilder builder = new URIBuilder(url);if (param != null) {for (String key : param.keySet()) {builder.addParameter(key, param.get(key));}}URI uri = builder.build();// 创建http GET请求HttpGet httpGet = new HttpGet(uri);// 执行请求response = httpclient.execute(httpGet);// 判断返回状态是否为200if (response.getStatusLine().getStatusCode() == 200) {resultString = EntityUtils.toString(response.getEntity(), "UTF-8");}} catch (Exception e) {e.printStackTrace();} finally {try {if (response != null) {response.close();}httpclient.close();} catch (IOException e) {e.printStackTrace();}}return resultString;}public static String doGet(String url) {return doGet(url, null);}public static String doPost(String url, Map<String, String> param) {// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();CloseableHttpResponse response = null;String resultString = "";try {// 创建Http Post请求HttpPost httpPost = new HttpPost(url);// 创建参数列表if (param != null) {List<NameValuePair> paramList = new ArrayList<>();for (String key : param.keySet()) {paramList.add(new BasicNameValuePair(key, param.get(key)));}// 模拟表单UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, "utf-8");httpPost.setEntity(entity);}// 执行http请求response = httpClient.execute(httpPost);resultString = EntityUtils.toString(response.getEntity(), "utf-8");} catch (Exception e) {e.printStackTrace();} finally {try {response.close();} catch (IOException e) {e.printStackTrace();}}return resultString;}public static String doPost(String url) {return doPost(url, null);}public static String doPostJson(String url, String json) {// 创建Httpclient对象CloseableHttpClient httpClient = HttpClients.createDefault();CloseableHttpResponse response = null;String resultString = "";try {// 创建Http Post请求HttpPost httpPost = new HttpPost(url);// 创建请求内容StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);httpPost.setEntity(entity);// 执行http请求response = httpClient.execute(httpPost);resultString = EntityUtils.toString(response.getEntity(), "utf-8");} catch (Exception e) {e.printStackTrace();} finally {try {response.close();} catch (IOException e) {e.printStackTrace();}}return resultString;}
}
微信二维码使用及配置相关推荐
- 小程序获取企业微信二维码,使用联系我插件配置企业微信二维码
通过配置获取企业微信二维码总共分为五步: 第一步:登录企业微信管理后台,查询企业微信的企业ID(corpid)和Secret(corpsecret); 第二步:获取access_token: 第三步: ...
- 魔坊APP项目-15-邀请好友(业务逻辑流程图、服务端提供邀请好友的二维码生成接口、客户端通过第三方识别微信二维码,服务端提供接口允许访问、App配置私有协议,允许第三方应用通过私有协议,唤醒APP)
邀请好友 1.业务逻辑流程图 客户端提供点击"邀请好友"以后的页面frame,html/invite.html,代码: <!DOCTYPE html> <html ...
- 微信二维码支付快速入门
目录 一.二维码生成插件qrious 二.HttpClient 三.微信扫码支付 1.申请步骤 2.开发文档 四.入门Demo 1.工程搭建 2.myStudy-pay-interface 3.myS ...
- 开放平台–扫描微信二维码登录
准备 如不了解第三方登录流程,建议先大概了解一下,在来看看代码. 说明: 由于开放平台无测试号测试,所以只能上开放平台进行配置信息.公众平台的测试号并不能给开放平台使用. 微信开放平台地址:https ...
- 微信分享朋友圈链接怎么显示图片-企业微信二维码转成名片
一.背景 在移动端业务开发的中,很多时候会进行h5页面的分享操作,但是原生的微信分享效果并不能满足我们业务的需求,如下图: 企业微信二维码转成名片 我们可以看的原生的分享描述是一个页面链接,分享图标也 ...
- java微信二维码登录
1.注册 微信开放平台:https://open.weixin.qq.com 2.邮箱激活 3.完善开发者资料 4.开发者资质认证 准备营业执照,1-2个工作日审批.300元 5.创建网站应用 提交审 ...
- Opencv4.5.1 微信二维码识别功能 QRCode 编译与使用 C++
日常生活中手机摄像头最常用的功能可能就是扫码了,而且大部分使用微信扫码,微信扫码的功能的确很强大,精度高.速度快.微信扫码近来加入了opencv开源项目了.现特地进行了尝试,并记录了整个过程,以上动图 ...
- 微信二维码活码制作管理系统源码+独立版网站
正文: 活码管理系统 PHP在线制作微信二维码活码管理平台引流源码 独立版网站系统 只需要修改MySql.php的数据库配置和后台账号密码即可,后台账号默认是admin,密码admin123456 , ...
- 微信二维码的生成(java后端)--邀请新人
目录 写在前言 1.微信官方文档 2.具体分析 写在前言 最近因为在学习微信小程序邀请新用户的功能,所以需要后端生成二维码并且携带本人的用户id或者其他的信息,传给前端.用户通过这个二维码去进行登录或 ...
最新文章
- opentracing
- 用spring security设置用户jwt令牌和设置接口访问权限案例
- edxp显示未安装_如何在 Centos 8 / RHEL 8 上安装和配置 VNC 服务器
- CUDA out of memory. Tried to allocate 14763.13 GiB (GPU 3; 10.73 GiB total capacity; 165.28 MiB alre
- linux的基础知识——IP,UDP和TCP
- javascript 显示一定范围内的素数(质数)
- phpstorm编辑器乱码问题解决
- 4 读写文件_WEB安全之SQL注入(4)——读写文件
- PyCharm2018 汉化激活
- DF1协议的CSP寻址
- Brooklyn 最新版 |创意多用途响应式 WordPress 主题下载
- Redis客户端与服务端
- 工作感想-软件测试工程师
- 查找对方IP地址技巧五招
- MQTT客户端paho.mqtt.XXX
- linux dnf命令安装
- 实战案例|拒绝信息泄露,腾讯云助力电商对抗网络爬虫
- GrabCut图像分割
- 【Android取证篇】华为外部存储支持备份的数据类型-支持第三方应用
- 2022 年工业工程、人工智能、计算机和应用科学前沿国际会议RTIACA2022征稿通知