精华内容
下载资源
问答
  • 根据微信api,整理了一下调用微信扫一扫功能。如有问题请指正: 以下是具体步骤: 1、绑定域名(很关键)2、引入JS文件(很简单) script src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js">script>3、通过...

    根据微信api,整理了一下调用微信扫一扫功能。如有问题请指正:

    以下是具体步骤:

    1. 绑定域名(很关键
    2. 引入JS文件(很简单)<scriptsrc="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
    3. 通过config接口注入权限验证配置(很重要
    4. 通过ready接口处理成功验证(还没用到)
    5. 通过error接口处理失败验证(还没用到)

    绑定域名(第一步):

    以下是通过config接口注入权限验证配置(第三步):

    下面是js代码:

    $.ajax({
                type : "post",
                url : "/weixin/open/weixinOAuthCallback_sign.action",
                data : {
                    "url" : location.href.split('#')[0]
                },
                dataType : "json",
                success : function(data) {
                    wx.config({ 
                        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。   
                        appId: data.appId, // 必填,公众号的唯一标识
                        timestamp: data.timestamp, // 必填,生成签名的时间戳
                        nonceStr: data.nonceStr, // 必填,生成签名的随机串
                        signature: data.signature,// 必填,签名,见附录1
                        jsApiList: [
                                      'checkJsApi',
                                      'startRecord',
                                      'stopRecord',
                                      'translateVoice',
                                      'scanQRCode',// 微信扫一扫接口
                                      'openCard'
                                   ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 
                    }); 
                    wx.error(function(res) {
                        alert("出错了:" + res.errMsg);//这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
                    });
    
                    wx.ready(function() {
                        wx.checkJsApi({
                             jsApiList : ['scanQRCode'],
                             success : function(res) {
    
                             }
                        });
                    });
                    //点击按钮扫描二维码
                    $("#scanQRCode").click(function(){
                        wx.scanQRCode({
                            needResult : 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
                            scanType : [ "qrCode"], // 可以指定扫二维码还是一维码,默认二者都有
                            success : function(res) {
                                var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
                                window.location.href = result;//因为我这边是扫描后有个链接,然后跳转到该页面
                            },
                            error : function(){
                                console.log('123');
                            }
                        });
                    });
                }
            });
    


    下面是后台java代码,用于获取sign签名AppID:微信公众号应用的唯一标识,AppSecret微信公众号的私匙(相当于密码)

    /**
           * 得到jsApi-ticket
           * @return
           */
          @SuppressWarnings({ "static-access", "unused" })
          private String getJsapiTicket(){
                HttpServletRequest request = ServletActionContext.getRequest();
                String code = request.getParameter("code");
            String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?"; 
            String params = "grant_type=client_credential&appid=" + APPID + "&secret=" + APP_SECRET + ""; 
            String result = this.httpGet(requestUrl+params); 
            String accessToken = com.alibaba.fastjson.JSONObject.parseObject(result).getString("access_token"); 
           
            requestUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?"; 
            params = "access_token=" + accessToken + "&type=jsapi"; 
            result = this.httpGet(requestUrl+params); 
            String jsapi_ticket = com.alibaba.fastjson.JSONObject.parseObject(result).getString("ticket"); 
            return jsapi_ticket;
        }
          /**
           * 获取sign签名
           * @return
           */
          public String sign() {
                HttpServletRequest request = ServletActionContext.getRequest();
            Map ret = new HashMap();
            String url = request.getParameter("url");
            String jsapi_ticket= getJsapiTicket();
            String nonce_str = create_nonce_str();
            String timestamp = create_timestamp();
            String string1;
            String signature = "";
            int length=url.indexOf("#");
                String uri = url;
                if(length > 0){
                      uri=url.substring(0,length);//当前网页的URL,不包含#及其后面部分
                }
            //注意这里参数名必须全部小写,且必须有序
            string1 = "jsapi_ticket=" + jsapi_ticket +
                      "&noncestr=" + nonce_str +
                      "×tamp=" + timestamp +
                      "&url=" + url;
            System.out.println(string1);
            try
            {
                MessageDigest crypt = MessageDigest.getInstance("SHA-1");
                crypt.reset();
                crypt.update(string1.getBytes("UTF-8"));
                signature = byteToHex(crypt.digest());
            }
            catch (NoSuchAlgorithmException e)
            {
                e.printStackTrace();
            }
            catch (UnsupportedEncodingException e)
            {
                e.printStackTrace();
            }
            ret.put("appId", APPID);
            ret.put("url", uri);
            ret.put("jsapi_ticket", jsapi_ticket);
            ret.put("nonceStr", nonce_str);
            ret.put("timestamp", timestamp);
            ret.put("signature", signature);
            System.out.println(signature);
            this.setJsonString(JsonUtil.toJSONString(ret));
            return "json";
        }
        private static String byteToHex(final byte[] hash) {
            Formatter formatter = new Formatter();
            for (byte b : hash)
            {
                formatter.format("%02x", b);
            }
            String result = formatter.toString();
            formatter.close();
            return result;
        }
        private static String create_nonce_str() {
            return UUID.randomUUID().toString();
        }
        private static String create_timestamp() {
            return Long.toString(System.currentTimeMillis() / 1000);
        }
          /**
         * 发送get请求
         * @param url    路径
         * @return
         */ 
        public static String httpGet(String url){ 
            //get请求返回结果 
             String strResult = null; 
            try { 
                DefaultHttpClient client = new DefaultHttpClient(); 
                //发送get请求 
                HttpGet request = new HttpGet(url); 
                HttpResponse response = client.execute(request); 
      
                /**请求发送成功,并得到响应**/ 
                if (response.getStatusLine().getStatusCode() == org.apache.http.HttpStatus.SC_OK) { 
                    /**读取服务器返回过来的json字符串数据**/ 
                      strResult = EntityUtils.toString(response.getEntity()); 
                } else { 
                    logger.error("get请求提交失败:" + url); 
                } 
            } catch (IOException e) { 
                logger.error("get请求提交失败:" + url, e); 
            } 
            return strResult; 
        }
     ret = new HashMap();
            String url = request.getParameter("url");
            String jsapi_ticket= getJsapiTicket();
            String nonce_str = create_nonce_str();
            String timestamp = create_timestamp();
            String string1;
            String signature = "";
            int length=url.indexOf("#");
                String uri = url;
                if(length > 0){
                      uri=url.substring(0,length);//当前网页的URL,不包含#及其后面部分
                }
            //注意这里参数名必须全部小写,且必须有序
            string1 = "jsapi_ticket=" + jsapi_ticket +
                      "&noncestr=" + nonce_str +
                      "×tamp=" + timestamp +
                      "&url=" + url;
            System.out.println(string1);
            try
            {
                MessageDigest crypt = MessageDigest.getInstance("SHA-1");
                crypt.reset();
                crypt.update(string1.getBytes("UTF-8"));
                signature = byteToHex(crypt.digest());
            }
            catch (NoSuchAlgorithmException e)
            {
                e.printStackTrace();
            }
            catch (UnsupportedEncodingException e)
            {
                e.printStackTrace();
            }
            ret.put("appId", APPID);
            ret.put("url", uri);
            ret.put("jsapi_ticket", jsapi_ticket);
            ret.put("nonceStr", nonce_str);
            ret.put("timestamp", timestamp);
            ret.put("signature", signature);
            System.out.println(signature);
            this.setJsonString(JsonUtil.toJSONString(ret));
            return "json";
        }
        private static String byteToHex(final byte[] hash) {
            Formatter formatter = new Formatter();
            for (byte b : hash)
            {
                formatter.format("%02x", b);
            }
            String result = formatter.toString();
            formatter.close();
            return result;
        }
        private static String create_nonce_str() {
            return UUID.randomUUID().toString();
        }
        private static String create_timestamp() {
            return Long.toString(System.currentTimeMillis() / 1000);
        }
          /**
         * 发送get请求
         * @param url    路径
         * @return
         */ 
        public static String httpGet(String url){ 
            //get请求返回结果 
             String strResult = null; 
            try { 
                DefaultHttpClient client = new DefaultHttpClient(); 
                //发送get请求 
                HttpGet request = new HttpGet(url); 
                HttpResponse response = client.execute(request); 
      
                /**请求发送成功,并得到响应**/ 
                if (response.getStatusLine().getStatusCode() == org.apache.http.HttpStatus.SC_OK) { 
                    /**读取服务器返回过来的json字符串数据**/ 
                      strResult = EntityUtils.toString(response.getEntity()); 
                } else { 
                    logger.error("get请求提交失败:" + url); 
                } 
            } catch (IOException e) { 
                logger.error("get请求提交失败:" + url, e); 
            } 
            return strResult; 
        }
    

    展开全文
  • 微信公众号开发之微信扫一扫

    千次阅读 2018-07-04 12:44:18
    最近开发一个食堂项目,项目中用到使用微信扫一扫实现项目中的扫一扫的功能。 1、添加点击扫一扫的触发事件的按钮 <span id="scanQRCode">扫一扫</span> 2、添加微信扫一扫的js引用 <script ...

    最近开发一个食堂项目,项目中用到使用微信扫一扫实现项目中的扫一扫的功能

    1、添加点击扫一扫的触发事件的按钮

    <span  id="scanQRCode">扫一扫</span>

    2、添加微信扫一扫的js引用

    <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>

    3、后台调用微信扫一扫的相关参数的获取(后面会说)

    <input type="hidden" id="appId" name="appId" value="${jssdkMap.appId}"/>
    <input type="hidden" id="timestamp" name="timestamp" value="${jssdkMap.timestamp}"/>
    <input type="hidden" id="nonceStr" name="nonceStr" value="${jssdkMap.nonceStr}"/>
    <input type="hidden" id="signature" name="signature" value="${jssdkMap.signature}"/>

    4、方法调用

    $(function() {
    	scanCode();
    });

    5、开启微信扫一扫

    function scanCode() {
    	wx.config({
    		debug : false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    		appId : $("#appId").val(), // 必填,公众号的唯一标识
    		timestamp : $("#timestamp").val(), // 必填,生成签名的时间戳
    		nonceStr : $("#nonceStr").val(), // 必填,生成签名的随机串
    		signature : $("#signature").val(),// 必填,签名,见附录1
    		jsApiList : [ 'scanQRCode' ]// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    	});
    }

    6、调用微信扫一扫

    $("#scanQRCode").click(function() {
    	wx.scanQRCode({
    		needResult : 1,// 默认为0,扫描结果由微信处理,1则直接返回扫描结果
    		scanType : [ "qrCode", "barCode" ], // 可以指定扫二维码还是一维码,默认二者都有 */
    		/*   desc : 'scanQRCode desc', */
    		success : function(res) {
    			var url = res.resultStr;//扫码后获取结果
    			location.href =  url;
    		}
    	});
    });

    后台数据的获取

    url参数为:扫一扫获取的结果,一般为路径或者加密之后的结果

    JSSDK获取

    public static Map<String, String>  getJsSdk(String url) {
    	Map<String, String> returnMap = new HashMap<String,String>();
    	try {
    		String ticket = getJsapiTicket();
    		if(StringUtils.isNotBlank(ticket) && StringUtils.isNotBlank(url)){
    			returnMap = sign(ticket, url);
                            returnMap.put("appId", IConstants.wxgzAppID);//微信公众号appId
    		}
    	} catch (Exception e) {
    	}
    	return returnMap;
    }

    生成签名

    public static Map<String, String> sign(String jsapi_ticket, String url) {
    	Map<String, String> result = new HashMap<String, String>();
    	String nonce_str = create_nonce_str(); 
    	String timestamp = create_timestamp();
    	String string;
    	String signature = "";
    	// 注意这里参数名必须全部小写,且必须有序
    	string = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "×tamp=" + timestamp + "&url=" + url;
    	try {
    		MessageDigest crypt = MessageDigest.getInstance("SHA-1");
    		crypt.reset();
    		crypt.update(string.getBytes("UTF-8"));
    		signature = byteToHex(crypt.digest());
    	} catch (NoSuchAlgorithmException e) {
    			e.printStackTrace();
    	} catch (UnsupportedEncodingException e) {
    		e.printStackTrace();
    	}
    	result.put("url", url);
    	result.put("jsapi_ticket", jsapi_ticket);
    	result.put("nonceStr", nonce_str);
    	result.put("timestamp", timestamp);
    	result.put("signature", signature);
    	return result;
    }
    public static String byteToHex(final byte[] hash) {
    	Formatter formatter = new Formatter();
    	for (byte b : hash) {
    		formatter.format("%02x", b);
    	}
    	String result = formatter.toString();
    	formatter.close();
    	return result;
    }
    public static String create_nonce_str() {
    	return UUID.randomUUID().toString();
    }
    public static String create_timestamp() {
    	return Long.toString(System.currentTimeMillis() / 1000);
    }

    临时票据的生成

    注意:ticket有时间刷新限制
    public static String getJsapiTicket() throws Exception {
    	String ticken = null;
    	try {
    		String access_token = getToken();
    		if(access_token != null && StringUtils.isNotBlank(access_token)){
    		// 创建HttpClient实例
    		HttpClient httpclient = new DefaultHttpClient();
    		// 创建Get方法实例
    HttpGet httpgets = new HttpGet("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi"); // 免费api
    		HttpResponse response = httpclient.execute(httpgets);
    		HttpEntity entity = response.getEntity();
    		if (entity != null) {
    			InputStream instreams = entity.getContent();
    			String str = convertStreamToString(instreams);
    			JSONObject jsOb = JSONObject.fromObject(str);
    			httpgets.abort();
    			ticken = Public.mapTo(jsOb.get("ticket"), "");
    		}
    	}	
        } catch (Exception e) {
    	// TODO: handle exception
        }
    return ticken;
    }
    public static String convertStreamToString(InputStream is) {
    	BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    	StringBuilder sb = new StringBuilder();
    	String line = null;
    	try {
    		while ((line = reader.readLine()) != null) {
    			sb.append(line + "\n");
    		}
    	} catch (IOException e) {
    		e.printStackTrace();
    	} finally {
    		try {
    			is.close();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    	return sb.toString();
    }

    token获取

    public static String getToken() throws Exception {
    	String access_token = null;
    	// 创建HttpClient实例
    	HttpClient httpclient = new DefaultHttpClient();
    	// 创建Get方法实例需要微信公众号appId+secret
    	HttpGet httpgets = new HttpGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
    				+ IConstants.wxgzAppID + "&secret=" + IConstants.wxgzAppSecret);
    	HttpResponse response = httpclient.execute(httpgets);
    	HttpEntity entity = response.getEntity();
    	Map<String, Object> maData = new HashMap<String, Object>();
    	if (entity != null) {
    		InputStream instreams = entity.getContent();
    		String str = convertStreamToString(instreams);
    		JSONObject jsOb = JSONObject.fromObject(str);
    		httpgets.abort();
    		access_token = Public.mapTo(jsOb.get("access_token"), "") ;
    	}
    	return access_token;
    }

    项目中的扫一扫功能已经上线,如果有疑问,请留言!!!

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 从而导致基于微信的好多开发都比较不是很方便,今天我们在公众号的个页面需要使用微信扫一扫撒,扫条形码,然后获取条形码数据,再生成二维码,再识别二维码进行付款。如果是自己写调用微信扫一扫,需要前后端结合才...

    本以为调用微信扫一扫很容易,结果看了微信的开发者文档,正如大家所说,微信的开发文档写的一塌糊涂,非常的不详细。

    转载:https://www.imooc.com/article/42734
    从而导致基于微信的好多开发都比较不是很方便,今天我们在公众号的个页面需要使用微信扫一扫撒,扫条形码,然后获取条形码数据,再生成二维码,再识别二维码进行付款。如果是自己写调用微信扫一扫,需要前后端结合才可以,尤其是签名,时间戳等动态获取的值,但是后来有一位大佬分享的代码,简单粗暴一共几行,就可调用微信扫一扫。
    在这里插入图片描述
    在这里插入图片描述
    获取条形码数据并赋值到输入框
    在这里插入图片描述

    上代码:

    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/> 
    		<title></title>
    		<script type="text/javascript" src="js/jquery-1.8.3.min.js"></script>
    		<script type="text/javascript" src="js/jquery.qrcode.min.js"></script>
    		 <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    		<style>
    			body{/*text-align:center*/} 
    			.container{
    				margin: 0 auto;
    				padding: 25px 0 0 0 ;
    		        position: relative;
    		      
    		    }
    		    #scanBtn{
    		        display: inline-block;
    		    	width: 60px;
    		    	height: 60px;		    	
    		    	top: 23px;
    		    	/*margin-left: 15px;*/
    		    	position:absolute;
    		    	background-image: url(img/aaronS.png) ;
    		    	background-size:50% 50% ;
    		    	background-repeat:no-repeat ;
    		    	background-position-x:center ;
    		    	background-position-y:center ;
    		    }
    			#DeliveryID
    			{
    				width:200px;
    				height:40px;
    				border-radius:10px;
    				padding-left: 10px;
    				font-size: 1rem;
    				vertical-align: middle;
    			}
    			.coders{
    			  text-align:center;
    			}
    			#CodeBut
    			{
    				
    				-webkit-appearance:none;	
    				margin-top: 40px;
    				height: 60px;
    				width: 300px;
    				color:white;
    				border-width: 0;
    				background-color: rgba(234,85,4,1); 
    				font-size: 2rem;
    				border-radius:10px;
    			}
    			#CodeImg{
    				 text-align:center;
    				margin-top: 150px;
    			}
    			#name{
    				-webkit-appearance:none;
    				width:100px;			
    				height:60px;
    				color:white;
    				background-color: rgba(234,85,4,1); 
    				-webkit-background-color: rgba(234,85,4,1); 
    				border-width: 0;
    				border-radius:10px;
    				font-size:20px;
    				vertical-align: middle;
    			}
    			canvas{
    				display: none;
    			}
    				
    			input {
    				width: 80%;
    				border: 1px solid #ccc;
    				padding: 11px 15px;
    				border-radius: 3px;
    				padding-left: 5px;
    				-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
    				box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);
    				-webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;
    				-o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;
    				transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s
    			}
    			
    			input:focus {
    				border-color: #66afe9;
    				outline: 0;
    				-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6);
    				box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgba(102, 175, 233, .6)
    			}
    			
    			input::-webkit-outer-spin-button,
    			input::-webkit-inner-spin-button {
    				-webkit-appearance: none;
    				appearance: none;
    				margin: 0;
    			}
    			
    		</style>
    		<script type="text/javascript">
    			$(document).ready(function () {
    			
    				 if (location.href.indexOf("qrresult=")>-1){
    				 			var listContent = location.href.split("qrresult=")[1]; //获取扫中以后的内容
    				 			var listContents = listContent.slice(9);	//由于生成的字符串前9位是没用,直截取有用的数字内容		 			
    				    	 	$("#DeliveryID").val(listContents);
    				    	 
    				    }
        			
    				
    	});
    	
    	</script>
    	</head>
    	<body>
    
    		<div>
    			<div class="container">
    				
    				<input id="DeliveryID" type="number" placeholder="请输入交货单号" name="" value="" />
    				<div id="scanBtn"></div>
    				<!--对,就是下面这一句,大佬提供的,且必须要a标签-->
    				<a id="scanBtn" href="http://sao315.com/w/api/saoyisao?redirect_uri=你使用扫一扫当前页面的服务器地址,https开头的"></a>
    			</div>
    	</body>
    </html>
    
    
    展开全文
  • 主要为大家详细介绍了java实现微信公众号扫一扫,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 微信公众号中调起微信扫一扫功能 前端 引入js(import): <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script> 初始化页面时通过接口对微信进行配置,加载...

    微信公众号中调起微信扫一扫功能

    前端

    引入js(import):

    <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
    

    初始化页面时通过接口对微信进行配置,加载页面时调用getConfig函数,wx.config配置正确时会调用wx.ready,在wx.ready中对扫一扫的按钮绑定点击事件。

    getConfig:function () {
            var params = {
                "url" : location.href.split('#')[0]
            };
            $.post(basePath + '/portal/replenishment/wxOpen', JSON.stringify(params), function (res) {
                var data = res.data;
                wx.config({
                    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                    appId: data.appId, // 必填,公众号的唯一标识
                    timestamp: data.timestamp, // 必填,生成签名的时间戳
                    nonceStr: data.nonceStr, // 必填,生成签名的随机串
                    signature: data.signature,// 必填,签名,见附录1
                    jsApiList: ["scanQRCode"] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                });
                wx.ready(function () {
                    // 9.1.2 扫描二维码并返回结果
                    document.querySelector('#scanQRCode').onclick = function () {
                        wx.scanQRCode({
                            needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
                            scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
                            success: function (res) {
                                var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
                                iv.toIndex(result); //注:扫码返回结果后,如果需要对当前页面赋值等操作,需要另写函数
                            },
                            error:function (res) {
                                alert(res)
                            }
                        });
                    }
                })
    
                //初始化jsapi接口 状态
                wx.error(function (res) {
                   console.log("调用微信jsapi返回的状态:" + res.errMsg);
                });
            });
    
        },
        toIndex:function (result) {
            $("#input__inner").val(result);
            iv.getGoodsList(result);
        }
    

    html中:

    <button class="yy-button" id="scanQRCode">扫一扫</button>
    

    后台

    Controller层

    @RequestMapping(value = "/portal/replenishment/wxOpen")
        public Json wxOpen(@RequestBody Map map){
            return json(portalReplenishmentService.wxOpen(map),ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMsg());
        }
    

    实现类

        public static final String APPID = "wxXXXXXXXXXXXXXXXX"; //微信公众号appid
        public static final String APP_SECRET="6f9c7XXXXXXXXXXXXXXXXXX";//微信公众号APP_SECRET
    @Override
        public Map wxOpen(Map map) {
            Map ret = new HashMap();
            String url = map.get("url").toString();//前端获取配置时获取的 地址 参数
            String jsapi_ticket= getJsapiTicket();
            String nonce_str = create_nonce_str();
            String timestamp = create_timestamp();
            String string1;
            String signature = "";
            int length=url.indexOf("#");
            String uri = url;
            if(length > 0){
                uri=url.substring(0,length);//当前网页的URL,不包含#及其后面部分
            }
            //注意这里参数名必须全部小写,且必须有序
            string1 = "jsapi_ticket=" + jsapi_ticket +
                    "&noncestr=" + nonce_str +
                    "&timestamp=" + timestamp +
                    "&url=" + url;
            System.out.println(string1);
            try
            {
                MessageDigest crypt = MessageDigest.getInstance("SHA-1");
                crypt.reset();
                crypt.update(string1.getBytes("UTF-8"));
                signature = byteToHex(crypt.digest());
            }
            catch (NoSuchAlgorithmException e)
            {
                e.printStackTrace();
            }
            catch (UnsupportedEncodingException e)
            {
                e.printStackTrace();
            }
            ret.put("appId", APPID);
            ret.put("url", uri);
            ret.put("jsapi_ticket", jsapi_ticket);
            ret.put("nonceStr", nonce_str);
            ret.put("timestamp", timestamp);
            ret.put("signature", signature);
            return ret;
        }
    
        private String getJsapiTicket(){
            String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?";
            String params = "grant_type=client_credential&appid=" + APPID + "&secret=" + APP_SECRET + "";
            String result = this.httpGet(requestUrl+params);
            String accessToken = com.alibaba.fastjson.JSONObject.parseObject(result).getString("access_token");
    
            requestUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?";
            params = "access_token=" + accessToken + "&type=jsapi";
            result = this.httpGet(requestUrl+params);
            String jsapi_ticket = com.alibaba.fastjson.JSONObject.parseObject(result).getString("ticket");
            return jsapi_ticket;
        }
    
        private static String byteToHex(final byte[] hash) {
            Formatter formatter = new Formatter();
            for (byte b : hash)
            {
                formatter.format("%02x", b);
            }
            String result = formatter.toString();
            formatter.close();
            return result;
        }
        private static String create_nonce_str() {
            return UUID.randomUUID().toString();
        }
        private static String create_timestamp() {
            return Long.toString(System.currentTimeMillis() / 1000);
        }
        /**
         * 发送get请求
         * @param url    路径
         * @return
         */
        public static String httpGet(String url){
            //get请求返回结果
            String strResult = null;
            try {
                DefaultHttpClient client = new DefaultHttpClient();
                HttpGet request = new HttpGet(url);
                HttpResponse response = client.execute(request);
    
                if (response.getStatusLine().getStatusCode() == org.apache.http.HttpStatus.SC_OK) {
                    strResult = EntityUtils.toString(response.getEntity());
                } else {
                }
            } catch (IOException e) {
            }
            return strResult;
        }
    

    测试

    在微信中测试时,需要有外网能够访问的域名,例如:http://agent.xxx.cn,不能用localhost,也不能用本机ip地址,只要在微信中访问页面地址,都能调起微信扫一扫
    在这里插入图片描述

    展开全文
  • 最近其他项目组需要在微信公众号里面调用微信扫一扫功能,于是就帮忙一起搞了搞,一开始以为挺简单,从网上搜一下教程弄一下就可以了,没成想还挺麻烦的,网上的教程呢好多都是会了不用看,不会的看了也没啥用的...
  • 微信公众号,JS-SDK调用微信扫一扫

    千次阅读 2018-03-29 16:25:31
    微信公众号关联网页调用微信扫一扫功能,可以参照《微信公众平台技术文档》-&gt; 微信JS-SDK说明文档,官方链接地址:https://mp.weixin.qq.com/wiki?t=resource/res_main&amp;id=mp1421141115步骤一:绑定...
  • 1、前端页面: <!DOCTYPE html> <html> <head>...meta charset="utf-8">...扫一扫测试</title> <meta name="renderer" content="webkit"> <meta http-equiv=...
  • 所以就需要使用微信公众平台提供的JSSDK来调用扫一扫功能。仅以此来记录自己的学习过程,也希望能帮助到有此需求的一些朋友。 过程中参考文章有:https://blog.csdn.net/u011327333/article/details/50439...
  • 首先需要在微信公众号中配置JS接口安全域名,路径:微信公众号->设置->公众号设置->功能设置,点击设置里面有详细的教程,根据教程操作将域名写到里面,如图: 获取开发者ID和密码,获取路径:微信公众号-...
  • 微信公众号调用扫一扫

    千次阅读 2019-04-27 15:58:00
    文章目录微信公众号调用扫一扫1.申请测试账号2.通过AppID和AppSecret获取access_token3.通过access_token添加菜单4.通过access_token获取jsapi_ticket5.配置JS接口安全域名6.在js中添加以下代码7.调用扫码 微信...
  • 年前的时候做了个微信公众号调用扫一扫的功能,年后回来有用户反应扫一扫调不出来了,测试后发现IOS没问题,安卓点击之后却没反应,是不是微信更新了的原因?
  • 微信公众号扫一扫

    千次阅读 2018-03-27 18:32:43
    根据微信JS-JDK文档说明,实现扫一扫主要有以下几大步骤: 绑定域名 引入JS文件 通过config接口注入权限验证配置 通过ready接口处理成功验证 通过error接口处理失败验证 绑定域名 在JS接口安全域名填入域名,...
  • debug: false, 如果为true的话安卓手机不能正常跳转,ios可以(微信一大坑) //扫一扫 toSweep() { // 获取当前页面路径 var url = window.location.href; // 获取微信签名 this....
  • java实现微信公众号源码 AppiumWeChatAuto 1、如果要实现微信公众号文章的自动采集就必须实现微信公众号文章的自动浏览操作; 2、此工程是基于Appium和Java来实现的Android微信客户端自动化浏览的操作,基于微信...
  • 微信公众号授权以及微信扫码授权登录1.进行配置2.微信扫码登录微信授权登录 1.进行配置 首先我为了方便先新建了settings.php 配置文件。 配置信息 &lt;?php // +---------------------------------------------...
  • 微信公众号之H5页面调用微信扫一扫

    千次阅读 2020-04-23 19:24:26
    signature: res.signature, jsApiList: [ // 所有要调用的 API 都要加到这个列表中 'scanQRCode' ] }) }, error: function () { console.log('config fail') } }) } 2>点击“扫一扫”按钮调用微信扫一扫接口 ...
  • 本篇介绍的二维码登录不是微信开发平台的二维码登录,而是利用微信公众号临时二维码码事件关注公众号进行登录注册, 浏览器判断码状态有两种方式, 第种是ajax每隔一秒进行轮询,如果用户码了则后台给个...
  • UNI-APP 开发微信公众号(H5)JSSDK的使用、微信扫一扫 自己做了一个h5端调起微信扫一扫的功能,上网一找,没有说得很详细的,依样画葫芦,结果出了很多问题。下面给大家讲一下做的方法,用这个方法亲测有效。 在做...
  • 微信公众号开发--微信JS-SDK扫一扫功能后台 微信公众号开发--微信JS-SDK扫一扫功能后台 微信公众号开发--微信JS-SDK扫一扫功能后台 微信公众号开发--微信JS-SDK扫一扫功能后台
  • 微信公众号主要面向名人、政府、媒体、企业等机构推出的合作推广业务。在这里可以通过微信渠道将品牌推广给上亿的微信用户,减少宣传成本,提高品牌知名度,打造更具影响力的品牌形象。 3. 公众平台 微信公众平...
  • 参考微信JS-SDK说明文档 尽管作用不是很大1.首先在JSP页面引入http://res.wx.qq.com/open/js/jweixin-1.1.0.js2.通过config接口注入权限验证配置
  • 微信企业号或微信公众号调用扫一扫功能JS-SDK安全域名配置配置设置好之后下面就上代码java代码 JS-SDK安全域名配置 企业微信号 —— 安全域名配置需要通过验证(如下图) 微信公众 ——— 安全域名配置 设置 ——&...
  • 该方法需引入微信js-sdk ,先npm安装 npm install weixin-js-sdk html &amp;amp;lt;div class=&amp;quot;login_div&amp;quot;&amp;amp;gt; &amp;amp;lt;mt-button id=&amp;quot;wxsys&...
  • asp源码,调起微信公众号扫一扫接口 Class WxAPI Private s_APPID Private s_APPSECRET Private s_REDIRECT_URI Private s_SCOPE Private parameters Private Sub Class_Initialize Set parameters = Server....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,308
精华内容 18,523
关键字:

微信扫一扫没有公众号