JAVA实现调用微信js-sdk扫一扫
喜欢的朋友可以关注下。
已经很久没有给大家分享一片技术文章了,今天抽了点时间来,给大家说一说如何调用微信提供的扫一扫接口。
前提: 需要申请一个公众号:申请公众号需要的资料我就不说了,去申请微信会提示需要哪些。
准备appid(公众号的id) AppSecret (公众号的密钥) 正文: 首先,我们先来简单了解一下流程,详细的微信文档有说明。
获取Token→根据token获取Ticket→根据ticket签名→反会参数给前端→前端调起扫一扫接口 下面直接上代码
1.获取token
- /**
- * Description: 获取微信公众号token<BR>
- *
- * @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<BR>
- *
- * @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:微信扫一扫接口 <BR>
- *
- * @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<String, Object> getWechatSign(HttpServletRequest request) throws Exception {
- /* 返回的json数据 */
- Map<String, Object> jsonMap = new HashMap<>();
- // 构成子数据map
- Map<String, Object> 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秒后自动关闭
- });
- }
- });
- }
其实就是这么的简单
这里需要提醒大家 页面一定要引入 不然会调用不了微信的函数
如有需要可以加我Q群【308742428】大家一起讨论技术。
后面会不定时为大家更新文章,敬请期待。
喜欢的朋友可以关注下。
如果对你有帮助,请打赏一下!!!
JAVA实现调用微信js-sdk扫一扫的更多相关文章
- 调用微信js sdk
场景:需要调用微信获取当前位置的借口. 途径:查看微信 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 .后 ...
- 微信JS SDK配置授权,实现分享接口
微信开放的JS-SDK面向网页开发者提供了基于微信内的网页开发工具包,最直接的好处就是我们可以使用微信分享.扫一扫.卡券.支付等微信特有的能力.7月份的时候,因为这个分享的证书获取问题深深的栽了一坑, ...
- 实战微信JS SDK开发:贺卡制作与播放(1)
前段时间忙于CanTK 2.0的开发,所以博客一直没有更新.CanTK 2.0主要增强了游戏和富媒体的开发,现在编码和测试基本完成了,等文档完成了再正式发布,里面有不少激动人心的功能,等发布时再一一细 ...
- 微信JS SDK接入的几点注意事项
微信JS SDK接入,主要可以先参考官网说明文档,总结起来有几个步骤: 1.绑定域名:先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.备注:登录后可在“开发者中心”查看对 ...
- 微信js sdk上传多张图片
微信js sdk上传多张图片,微信上传多张图片 该案例已tp3.2商城为例 直接上代码: php代码: public function ind(){ $appid="111111111111 ...
- 微信JS SDK使用权限签名算法
jsapi_ticket 生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据.正常情况下,jsapi_ticket的有效期为7200秒, ...
- 微信js sdk分享开发摘记java版
绑定域名和引入js的就不说了 废话不说直接上代码 public void share(HttpServletRequest request) throws Exception { StringBuff ...
- 微信JS SDK Demo 官方案例[转]
摘要: 微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用 ...
- 微信js SDK接口
微信JS-SDK说明文档 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 一.微信登录功能 在进行微信OAut ...
随机推荐
- Pandas聚合
数据聚合 import pandas as pd from pandas import Series import numpy as np # 准备数据 df = pd.DataFrame([[-0. ...
- openvpn显示连接成功但是无法进行git操作
使用openvpn连接公司内网以进行git操作.以管理员身份运行openvpn gui,一段时间后提示连接成功,右下角图标变成绿色,但是进行git操作,每次都发生失败,提示连接不上.右键点击openv ...
- python3 urllib.parse 常用函数
1.获取url参数 urlparse from urllib import parse url = "https://docs.python.org/3.5/library/urllib.p ...
- python 函数编程
def test1(): print('in the test1') def test2(): print('in the test2') return 1 def test3(): print('i ...
- MySQL开发——【字符集、校对集】
字符集 查看MySQL中的字符集 基本语法: show character set; 查看MySQL中的默认字符集 基本语法: show variables like ‘character_set%’ ...
- 6J - 盐水的故事
挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下:然后滴二滴,停一下:再滴三滴,停一下...,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速度是一秒(假设最后一滴不到D毫升,则 ...
- java【基础】多态
new 接口就会发生很有意思的现象 public class InerClassDemo { public static void main(String[] args) { // TODO Auto ...
- 服务器重新启动,oracle数据库重新连接问题
最近服务器使用期限到了,用户无法登陆,联系了网络的同事,重新开启了服务器,用户可以重新登陆了,但是在使用oracle数据库的时候,发现报了以下的错误: 很明显是数据库服务没有启动,解决这个问题分两步: ...
- Python之路(第三十篇) 网络编程:socket、tcp/ip协议
一.客户端/服务器架构 1.硬件C/S架构(打印机) 打印机作为一个服务端,电脑连接打印机进行打印 2.软件C/S架构 互联网中处处是C/S架构 如谷歌网站是服务端,你的浏览器是客户端(B/S架构也是 ...
- oracle 为什么没有权限的用户也可以用sysdba登录
我随便创建了一个用户,create user lisi identified by lisi; 当我用sqlplus登录的时候: cmd -> sqlplus lisi/lisi 进不去 ...