微信扫一扫接口 HTML5+JS+java

HTML5代码

//加载时执行load方法
<body onload="load()">
//单击图片跳转扫一扫界面
<img class="img-responsive center-block" id="Scan" src="img/050cc620cfa7f48e2c916582f6e8a11.png" />

JS代码


function wxConfig( appids,  timestamps,   nonceStrs,  signatures) {  
  wx.config({ 
   debug : false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 
   appId :appids, // 必填,公众号的唯一标识 
   timestamp :timestamps, // 必填,生成签名的时间戳 
   nonceStr :nonceStrs, // 必填,生成签名的随机串 
   signature :signatures,// 必填,签名,见附录1 
   jsApiList: ['scanQRCode']
   // jsApiList : ['checkJsApi', 'startRecord', 'stopRecord','translateVoice','scanQRCode', 'openCard' ] 
  // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 
  }); 
    //config失败
  wx.error(function(res){
  
  });
  //config成功后执行
  wx.ready(function(){
	  wx.checkJsApi({
	             jsApiList : ['scanQRCode'],
	             success : function(res) {
	             //单击#Scan跳转扫一扫界面
				 document.querySelector('#Scan').onclick = function() {
					 scanQRCode();
					 };
	             },
		});
});
	
	 
 }; 
//扫一扫接口
	function scanQRCode(){
		wx.scanQRCode({
		     needResult : 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
		     scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
		     success : function(res) {
		     var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
			  $("#ewm").html("返回结果"+result);
		       alert("返回结果"+result);
		     },	
			fail : function(res) {
			console.log(res)
			alert("失败");
		}
		 });
	}	
	//加载时执行
function load(){
	$.ajax({
				type:"post",
				url:"http://wecat.free.idcfengye.com/lt/saoyisao",//自己请求参数的地址(如有必要可采取jsonp)
				data: {
				      url:location.href.split('#')[0]
				        },
				 success:function(result){
					result=JSON.parse(result);
					var appid=result.appid;
					var timestamp=result.timestamp;
					var nonceStr= result.nonceStr;
					var signature=result.signature;
					wxConfig(appid, timestamp, nonceStr,signature); 
					 
				  },
				error: function (e) {
	            alert("请勿频繁刷新");
	        }
			});
}

Java代码

/**
 * @author : JackHe
 * @date : 15:12 2019/9/5
 */
@Service
public class WecatServiceimpl implements  WecatService{
    @Autowired
    private  RedisClient redisClient;

    private static String APPID = "appid";
    private static String SECRET = "SECRET";

    /**
     * 获取access_token
     */
    public  String getAccess_token() {
        String Access_token_json = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" +APPID+"&secret="+SECRET;
        String token = HttpClientUtil.get(Access_token_json);
        //返回结果的json对象
        JSONObject resultObject = JSON.parseObject(token);

        return resultObject.getString("access_token");
    }

    /**
     * 获取jsapi_ticket 签名....
     */
    public  String getJsapi_ticket(String urls) {
        WecatBean bean =new WecatBean();
        String wecatbean= redisClient.get("Wecat");
        if ("".equals(wecatbean)||null==wecatbean){
            String token= getAccess_token();
            String jsapi_ticket = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+token+"&type=jsapi";
            String tokens = HttpClientUtil.get(jsapi_ticket);
            //返回结果的json对象
            JSONObject resultObject = JSON.parseObject(tokens);

            //1、获取AccessToken
            String accessToken =token;

            //2、获取Ticket
            String jsapi_tickets = resultObject.getString("ticket");

            //3、时间戳和随机字符串
            String noncestr = create_nonce_str();
            String timestamp = create_timestamp();

            //System.out.println("accessToken:" + accessToken + "\njsapi_ticket:" + jsapi_ticket + "\n时间戳:" + timestamp + "\n随机字符串:" + noncestr);

            //4、获取url
            String url = urls;

            //5、将参数排序并拼接字符串
            String str = "jsapi_ticket=" + jsapi_tickets +
                    "&noncestr=" + noncestr +
                    "&timestamp=" + timestamp +
                    "&url=" + url;

            //sha1加密
            String signature =null;
            MessageDigest crypt = null;
            try {
                crypt = MessageDigest.getInstance("SHA-1");
                crypt.reset();
                crypt.update(str.getBytes("UTF-8"));
                signature = byteToHex(crypt.digest());
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            System.out.println(str);
            System.out.println(signature);

            bean.setAppid(APPID);
            bean.setSignature(signature);
            bean.setNonceStr(noncestr);
            bean.setTimestamp(timestamp);
            redisClient.set("Wecat",JSON.toJSONString(bean));
            redisClient.timeout("Wecat",115);
        }else {
            System.out.println("else");
            JSONObject resultObject = JSON.parseObject(wecatbean);
            bean.setAppid(resultObject.getString("appid"));
            bean.setSignature(resultObject.getString("signature"));
            bean.setNonceStr(resultObject.getString("nonceStr"));
            bean.setTimestamp(resultObject.getString("timestamp"));
            System.out.println(bean.getSignature());

        }

        return JSON.toJSONString(bean);
    }






    private static String create_nonce_str() {
        return UUID.randomUUID().toString();
    }

    private static String create_timestamp() {
        return Long.toString(System.currentTimeMillis() / 1000);
    }


    //sha1加密
    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;
    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值