H5实现微信SDK二维码扫描

前端调用微信JSDK实现二维码扫描功能

页面中引入JS的代码:


<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script type="text/javascript">
   
   function initWeiXinJsSdk(){
		wx.config({
			debug : false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
			appId : '${appId}',//$("#appId").val(), // 必填,企业微信的cropID
			timestamp : '${timestamp}',//$("#timestamp").val(), // 必填,生成签名的时间戳
			nonceStr : '${nonceStr}',//$("#nonceStr").val(), // 必填,生成签名的随机串
			signature : '${signature}',//$("#signature").val(),// 必填,签名
			jsApiList : [ 'scanQRCode', 'getLocation','chooseImage','uploadImage','downloadImage']
			// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
		});
		wx.error(function(res) {
			console.log(res);
			//alert(res);
			// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
		});
	}
	
	/**
	 * 初始化坐标
	 * @returns
	 */
	function initMapLocation(callback){
		//初始化坐标
		wx.getLocation({
		    type: 'wgs84', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02'
		    success: function (res) {
		        var lon = res.longitude; //经度
		        var lat = res.latitude;    //纬度
		        var errmsg = res.errMsg;
		        var errResult = errmsg.split(':');
		        if (errResult[1] == "ok") {
		        	LocationChange(lon,lat,function(result){
		        		callback(result);
		        	});
		        	
		        }
		    },
		    cancel: function (res) {
		        $.toptip('用户拒绝授权获取地理位置', 'error');
		        var result = {'code':'01', 'msg':'用户拒绝授权获取地理位置', 'lng': 0, 'lat': 0};
		        callback(result);
		    }
		});
	}

	/**
	 * 坐标转换(高德坐标)
	 * @param lon 经度
	 * @param lat 纬度
	 * @returns
	 */
	function LocationChange(lon,lat,callback) {
		var map = new AMap.Map('app_index_map', {
			resizeEnable: true,
	        zoom: 11
	    });
	    $.ajax({
	        type: "get",
	        url: "http://restapi.amap.com/v3/assistant/coordinate/convert?key=1b718b2826abfae7be353f5f27f89b7b&locations=" + lon + "," + lat + "&coordsys=gps",
	        async: true,
	        dataType: "json",
	        success: function (res) {
	            var latlng = res.locations;
	            var locations = latlng.split(',');
		        var result = {'code':'00', 'msg': '定位成功', 'lng': locations[0], 'lat': locations[1], 'map':map};
	            addMarker(map, result);
	            callback(result);
	        },
	        error:function(res){
		        var result = {'code':'01', 'msg': '定位失败', 'lng': 0, 'lat': 0, 'map':map};
	            callback(result);
	        }
	    });
	}

	
	
	/**
	 * 标记地图位置
	 * @param map
	 * @param result
	 * @returns
	 */
	function addMarker(map, result) {
	    var marker = new AMap.Marker({
	        position: [result.lng, result.lat]
	    });
	    marker.setMap(map);
	    /* var circle = new AMap.Circle({
	        center: [result.lng, result.lat],
	        radius: 100,
	        fillColor: "#000000", //填充颜色
	        fillOpacity: 0.2,//填充透明度
	        strokeColor: "#000000",//线颜色
	        strokeOpacity: 0.6,//线透明度
	        strokeWeight: 0,//线宽
	        strokeStyle: "solid"//线样式
	    });
	    circle.setMap(map); */
	    map.setFitView();
	}
</script>

扫描事件触发

<i class="scan-font iconfont icon-sao" id="icon-saoma"></i>
()(function(){
	initWeiXinJsSdk();
});

wx.ready(function () {
	document.querySelector('#icon-saoma').onclick = function() {
		wx.scanQRCode({
			desc : 'scanQRCode desc',
			needResult : 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
			scanType : [ "qrCode", "barCode" ], // 可以指定扫二维码还是一维码,默认二者都有
			success : function(res) {
				var url = res.resultStr;
				var errmsg = res.errMsg;
				var errResult = errmsg.split(':');
				if (errResult[1] == "ok") {
					//获取设备SN码
				   if(url.indexOf('=')==-1){
						$("#txtSnCode").val($.trim(url));
					}else{
						var code = $.trim(url.substring(url.indexOf('=') + 1,
								url.length));
						$("#txtQrCode").val(code);//二维码值
						$("#txtSnCode").val('');
					}
				   $("#signboard").val("1");
				   //一些业务操作的方法
                   //   do somthing....
				} else {
					//获取失败
				}
			},
			error : function(res) {
				if (res.errMsg.indexOf('function_not_exist') > 0) {
					alert('版本过低请升级');
				}
			}
		});
	};
	
});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值