自我总结
初次尝试微信公众号开发,遇到各种问题。废话不多说,上码:
1、创建自定义菜单
根据微信接口文档,内容如下图:对应链接
要创建自定义菜单要获取ACCESS_TOKEN,根据微信接口文档获取ACCESS_TOKEN接口如下图:对应链接
OK,下面上代码
首先获取ACCESS_TOKEN对应代码如下:
1、创建自定义菜单
根据微信接口文档,内容如下图:对应链接
要创建自定义菜单要获取ACCESS_TOKEN,根据微信接口文档获取ACCESS_TOKEN接口如下图:对应链接
OK,下面上代码
首先获取ACCESS_TOKEN对应代码如下:
package ;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.http.client.ClientProtocolException;
import org.json.JSONException;
import org.json.JSONObject;
import cn.com.wkt.weixin.service.impl.WXApiServiceImpl;
/**
*
* @author Administrator
*
*/
public class GetAccessToken {
public static Map
AccessToken = new HashMap
();
/**
* 获取 AccessToken
*
* @param publicName
* 公众号标识
* @param appId
* @param appSecret
* @throws ClientProtocolException
* @throws IOException
*/
public synchronized static void AccessToken(String publicName,
String appId, String appSecret) throws ClientProtocolException,
IOException, JSONException {
WXApiServiceImpl imp = new WXApiServiceImpl();
JSONObject json = imp.getAccessTokenJSON(appId, appSecret);
json.put("time", System.currentTimeMillis());
AccessToken.put(publicName, json);
}
/**
* 判断 AccessToken 是否存在或是否超时,不存在或超时重新获取
*
* @param appId
* @param appSecret
* @param publicName
* @return access_token
* @throws ClientProtocolException
* @throws IOException
* @throws JSONException
*/
public synchronized static String ifAccessToken(String appId,
String appSecret, String publicName)
throws ClientProtocolException, IOException, JSONException {
String access_token = "";
Long time = System.currentTimeMillis(); // 当前时间戳
// 判断 AccessToken 是否存在
if (AccessToken == null || AccessToken.get(publicName) == null) {
AccessToken(publicName, appId, appSecret);
}
// 上次获取 AccessToken 的时间戳
Long oldtime = Long.parseLong(AccessToken.get(publicName).get("time")
.toString());
if (time - oldtime > 7000 * 1000) { // 上次获取的时间大于7200秒,重新获取
AccessToken(publicName, appId, appSecret);
}
access_token = (String) AccessToken.get(publicName).get("access_token");
return access_token;
}
}
package cn.com.wkt.weixin.service.impl;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.stereotype.Service;
import cn.com.wkt.weixin.service.WXApiService;
@Service("wXApiService")
public class WXApiServiceImpl implements WXApiService {
public JSONObject getAccessTokenJSON(String appId, String appSecret)
throws ClientProtocolException, IOException, JSONException {
String result = "";
HttpClient httpclient = new DefaultHttpClient();
String smsUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
+