java弹出微信扫一扫_JAVA实现调用微信js-sdk扫一扫
喜欢的朋友可以关注下。
已经很久没有给大家分享一片技术文章了,今天抽了点时间来,给大家说一说如何调用微信提供的扫一扫接口。
前提: 需要申请一个公众号:申请公众号需要的资料我就不说了,去申请微信会提示需要哪些。
准备appid(公众号的id)
AppSecret (公众号的密钥)
正文: 首先,我们先来简单了解一下流程,详细的微信文档有说明。
获取Token→根据token获取Ticket→根据ticket签名→反会参数给前端→前端调起扫一扫接口
下面直接上代码
1.获取token
/**
* Description: 获取微信公众号token
*
* @author dsn
* @date 2018年9月21日 上午9:53:26
* @param appid
* @param secret
* @return
* @version 1.0
*/
public static String getAccessToken(String appid, String secret) {
String token = "";
String token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid
+ "&secret=" + secret;
JSONObject result = PayCommonUtil.httpsRequest(token_url, "POST");
if (result.get("access_token") != null) {
token = result.get("access_token").toString();
}
return token;
}
2.获取ticket
/**
* Description: 获取微信ticket
*
* @author dsn
* @date 2018年9月21日 上午9:54:03
* @param token
* @return
* @version 1.0
*/
public static String getTicket(String token) {
if ("".equalsIgnoreCase(token) || null == token) {
return "";
}
String ticket_url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + token + "&type=jsapi";
JSONObject result = PayCommonUtil.httpsRequest(ticket_url, "POST");
return result.get("ticket").toString();
}
3.签名
public static String getSign(String jsapi_ticket, String noncestr, Long timestamp, String url)
throws NoSuchAlgorithmException {
String shaStr = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + noncestr + "×tamp=" + timestamp + "&url="
+ url;
MessageDigest mDigest = MessageDigest.getInstance("SHA1");
byte[] result = mDigest.digest(shaStr.getBytes());
StringBuffer signature = new StringBuffer();
for (int i = 0; i < result.length; i++) {
signature.append(Integer.toString((result[i] & 0xff) + 0x100, 16).substring(1));
}
return signature.toString();
}
4.action中调用
/**
* Description:微信扫一扫接口
*
* @author ran.chunlin
* @date 2017年4月11日 上午10:07:35
* @param request
* @return
* @throws Exception
* @version 1.0
*/
@RequestMapping(params = "method=getWechatSign", method = RequestMethod.GET)
public @ResponseBody Map getWechatSign(HttpServletRequest request) throws Exception {
/* 返回的json数据 */
Map jsonMap = new HashMap<>();
// 构成子数据map
Map subJsonMap = new HashMap<>();
// 1.获取参数
String url = showNull(request.getParameter("url"));
String t = showNull(request.getParameter("t"));
String appId = showNull(request.getParameter("appId"));
String appSecret = showNull(request.getParameter("appSecret"));
if (url == null || t == null || appId == null || appSecret == null) {
return json4Map(jsonMap, subJsonMap, "参数为空", STATUSCODE_FAILED_BADINPUT_PARAM);
} else {
String accessToken = WeiXinUtils.getAccessToken(appId, appSecret);
String ticket = WeiXinUtils.getTicket(accessToken);
Long timestamp = System.currentTimeMillis() / 1000;
String nonceStr = RandomStringUtils.randomAlphanumeric(16);
String sign = getSign(ticket, nonceStr, timestamp, url);
subJsonMap.put("result", "1");
subJsonMap.put("timestamp", timestamp);
subJsonMap.put("nonceStr", nonceStr);
subJsonMap.put("appId", appId);
subJsonMap.put("sign", sign);
}
return json4Map(jsonMap, subJsonMap, "获取sign成功", STATUSCODE_SUCCESS);
}
5.前端代码
// 扫一扫 进入页面时去调用
$.ajax({
type : 'GET',
url : "你action的url",
data : {
appId : "",
appSecret : "",
url : location.href,
t : Math.random()
},
success : function(json) {
if (json.data.result == "1") {
wxConfig(json.data.timestamp, json.data.nonceStr,
json.data.sign, json.data.appId);
}
}
});
function wxConfig(_timestamp, _nonceStr, _signature, _appId) {
wx.config({
// debug : false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId : _appId, // 必填,公众号的唯一标识
timestamp : _timestamp, // 必填,生成签名的时间戳
nonceStr : _nonceStr, // 必填,生成签名的随机串
signature : _signature,// 必填,签名,见附录1
jsApiList : [ 'onMenuShareTimeline', 'onMenuShareAppMessage',
'onMenuShareQQ', 'onMenuShareWeibo', 'scanQRCode' ]
// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
}
//扫码调用
function scanCode() {
wx.scanQRCode({
needResult : 1,
scanType : [ "qrCode", "barCode" ],
success : function(res) {
console.log(res)
//扫描返回的数据
var result = res.resultStr;
},
fail : function(res) {
layer.open({
content : '请稍后再试',
skin : 'msg',
time : 2
//2秒后自动关闭
});
}
});
}
其实就是这么的简单
这里需要提醒大家 页面一定要引入
不然会调用不了微信的函数
标签: java
顶一下
(0)
0%
踩一下
(0)
0%
java弹出微信扫一扫_JAVA实现调用微信js-sdk扫一扫相关推荐
- java弹出提示框jo类_Java JobMeta.getJobLogTable方法代码示例
import org.pentaho.di.job.JobMeta; //导入方法依赖的package包/类 public static String getLastExecutionResult(L ...
- 用Java弹出创建新的消息通知
首先创建JFrame作为弹出窗口. 在其中添加一些JLabel以包含信息,并在适当的位置分配它们,使其看起来像一条通知消息. 下面给出了示例代码: String message = 'You got ...
- JAVA弹出浏览器窗口
JAVA弹出浏览器窗口(方坤[url]www.whjava.com[/url]) /**弹出浏览器窗口***/@SuppressWarnings("unchecked")publi ...
- java 弹出下载_java如何实现下载弹出的对话框
展开全部 Java实现点击下载32313133353236313431303231363533e58685e5aeb931333337396234文件的时候,弹出"另存为"对话框, ...
- java 弹出下载_java怎么实现下载弹出的对话框
Java实现点击下载文件的时候,弹出"另存为"对话框,选择保存位置,然后下载,代码如下: public void downLoad(String filePath, HttpSer ...
- java 弹出另存为_java如何实现 io流传输过来的文件,提示另存为弹出窗口?
java如何实现 io流传输过来的文件,提示另存为弹出窗口? mip版 关注:166 答案:6 悬赏:0 解决时间 2021-01-24 22:00 已解决 2021-01-24 11:06 最 ...
- java弹出对话框的三个命令_Java中弹出对话框中的几种方式
Java中弹出对话框中的几种方式 2019年12月06日 阅读数:20 这篇文章主要向大家介绍Java中弹出对话框中的几种方式,主要内容包括基础应用.实用技巧.原理机制等方面,希望对大家有所帮助. 1 ...
- 弹出框 每次打开 滚动条置顶_微信置顶文字怎么弄?微信置顶一句话教程
今日支付宝红包 支付宝首页搜索511501453 马上领取红包 (支付宝双十二活动,瓜分15亿红包) (领取后一定要记得使用,不然会浪费的呦, 更会影响第二天的领取!) 奶思靓机 " 一 个 ...
- java 弹出软键盘_Android开发之弹出软键盘工具类简单示例
本文实例讲述了Android开发之弹出软键盘工具类.分享给大家供大家参考,具体如下: package com.maobang.imsdk.util; import android.content.Co ...
最新文章
- SSL只是基本安全措施
- 双代号网络图节点编号原则_一表多图(表格/横道图/网络图)让计划编制效率提高10倍...
- 线性规划总结3——单纯形法和对偶单纯形法
- 关于301跳转的多种办法
- 安卓代码迁移:Make.exe: *** [libs/armabi-v7a/gdbserver] Error 1
- FZU 1402 猪的安家 中国剩余定理
- Matlab解析LQR与MPC的关系
- C++对象模型3--无重写的单继承
- 原创内容将成网络视频的一支奇军
- 抖音电商带货,卖给粉丝还是卖给有需要的人?
- NoSQL数据库概览及其与SQL语法的比较
- QQ、MSN、淘包旺旺、Skype临时对话的html链接代码
- 计算机毕业设计springboot基于springboot框架的企业合同管理系统设计与实现
- 一小时搞定简单VBA编程 Excel宏编程快速上手
- 快讯分类_如何掌握Google快讯
- Java实现微信公众号模板消息管理群发和单发
- vc++datamatrix二维码识别
- C语言基础概述(一)
- python爬虫抓取千千音乐网站的歌曲
- 一个合格的java工程师应该必备的能力
热门文章
- 南方科技大学唐圆圆组招聘环境相关领域科研人才(年薪33~50万)
- 插拔式java_# 可插拔式组件设计,领略组件开发的奥秘
- R语言DALEX包的model_profile函数对caret包生成的多个算法模型的连续变量进行分析、使用Acumulated Local Effects (ALE)方法解释某个连续特征和目标值关系
- Python使用matplotlib可视化相关性分析热力图图heatmap、使用seaborn中的heatmap函数可视化相关性热力图(Correllogram)
- pandas获取dataframe中索引值最大值所在的数据行(get dataframe row of max index value)
- pandas使用bdate_range函数获取起始时间(start)和结束时间(end)范围内的所有工作日日期(business day)
- R语言配对图可视化:配对图(pair plot)可视化(根据分类变量的值为散点图上的数据点添加颜色和形状、Add color and shape by variables)
- R绘制直方图(Histogram)
- python保存内容到文件(text、json、csv)
- 使用opencv dnn 模块调用darknet模型时候出错,不支持relu激活函数