南海职工家拓展交友报名系统用到的接口
在这个小系统里,主要用到了上传图片和分享两个接口。
以下是js代码:
$(function(){
$.ajax({
url: "/entrysystem/getwxsign",
data: {"path":location.href.split('#')[0]},
type: "post",
dataType: "json",
success: function (data) {
//通过config接口注入权限验证配置
getJSSDK(data);
}
});
});
function getJSSDK(data) {
// var appId=data.appId;
// var timestamp=data.timestamp;
// var nonceStr=data.nonceStr;
// var signature=data.signature;
wx.config({
debug : false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId : data.appId, // 必填,公众号的唯一标识
timestamp : data.timestamp, // 必填,生成签名的时间戳
nonceStr : data.nonceStr, // 必填,生成签名的随机串
signature : data.signature,// 必填,签名,见附录1
jsApiList : [ 'chooseImage', 'uploadImage', 'downloadImage',
'previewImage', 'onMenuShareTimeline', 'onMenuShareAppMessage',
'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone' ]
});
}
wx.ready(function() {
// config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,
// config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口
// 放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
var shareData = {
title : $('title').text(),// 分享标题
desc : '青年男女职工报名即可参加,南海职工家为您组织的游戏、徒步、划船、骑单车等活动,我们约吧',// 分享描述 ,这里请特别注意是要去除html
link : 'http://test.ep7.net/entrysystem/servlet/oauth',// 分享链接
imgUrl : 'http://test.ep7.net/entrysystem/images/labourunion.jpg',// 分享图标
dataUrl : '' // 如果type是music或video,则要提供数据链接,默认为空
};
wx.onMenuShareTimeline(shareData);
wx.onMenuShareAppMessage(shareData);
wx.onMenuShareQQ(shareData);
wx.onMenuShareWeibo(shareData);
wx.onMenuShareQZone(shareData);
});
// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,
// 也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
wx.error(function(res) {
alert("error" + res.errMsg);
});
后台java代码:
/**
* 获取微信签名
* GetSigualueServlet
* 创建人:xbj
* 时间:2017年5月22日-下午2:05:53
* @version 1.0.0
*
*/
public class GetWXSignatureServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
//发送获取微信信息请求的页面路径
String path = request.getParameter("path");
//获取微信相关信息
String info = getWXInfo(path);
PrintWriter out = response.getWriter();
out.print(info);
out.flush();
out.close();
}
/**
* 获取微信信息
* 方法名:getWXInfo
* 创建人:xbj
* 时间:2017年5月15日-下午2:23:16
* @param path
* @return JSONObject
* @exception
* @since 1.0.0
*/
private String getWXInfo(String path){
JSONObject json = new JSONObject();
String appId = ConfigurationUtil.appID;
//时间戳
String timestamp = String.valueOf(new Date().getTime()/1000);
//随机数
String nonceStr = RandomStringUtils.randomAlphanumeric(20);
//微信加密签名
String signature = getSignaTure(nonceStr, timestamp, path);
json.put("appId", appId);
json.put("timestamp",timestamp);
json.put("nonceStr",nonceStr);
json.put("signature", signature);
return json.toString();
}
/**
* 获取签名
* (这里用一句话描述这个方法的作用)
* 方法名:getSignaTure
* 创建人:xbj
* 时间:2017年5月15日-下午2:21:07
* @param nonceStr
* @param timestamp
* @param path
* @return String
* @exception
* @since 1.0.0
*/
private String getSignaTure(String nonceStr, String timestamp, String path){
AT at = ATUtil.freshAccessToken();
if(at != null){
String aceessToken = at.getAccess_token();
String ticket = ATUtil.getTicket(aceessToken);
String str = "jsapi_ticket="+ticket+"&noncestr="+nonceStr+"×tamp="+timestamp+"&url="+path;
return JStrUtil.sha1Encode(str).toLowerCase();
}
return null;
}
}
public class ATUtil {
/**
* 获取access-token
* (这里用一句话描述这个方法的作用)
* 方法名:freshAccessToken
* 创建人:xbj
* 时间:2017年5月9日-上午10:07:41
* @return AT
* @exception
* @since 1.0.0
*/
public static AT freshAccessToken(){
AT at = null;
String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
+ConfigurationUtil.appID+"&secret="+ConfigurationUtil.appsecret;
String result = HttpUtil.requestHTTP(url, "get", "");
if (result.contains("access_token")) {
JSONObject jsonObject = JSONObject.fromObject(result);
at = new AT(jsonObject.getString("access_token"), jsonObject.getLong("expires_in"));
}
return at;
}
/**
* 获取ticket
* (这里用一句话描述这个方法的作用)
* 方法名:getTicket
* 创建人:xbj
* 时间:2017年5月9日-上午10:44:47
* @param at
* @return String
* @exception
* @since 1.0.0
*/
public static String getTicket(String at){
String url="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+at+"&type=jsapi";
String ticket = "";
String result = HttpUtil.requestHTTP(url, "get", "");
if(result != null && !"".equals(result)){
JSONObject json = JSONObject.fromObject(result);
ticket = json.getString("ticket");
}
return ticket;
}
}
public class AT {
private final String access_token;
private final long expire_in;
public AT(String at, long ei) {
this.access_token = at;
this.expire_in = ei;
}
public AT(String at) {
this.access_token = at;
this.expire_in = 0;
}
public String getAccess_token() {
return access_token;
}
public long getExpire_in() {
return expire_in;
}
}