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 +
"×tamp=" + 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;
}
}