//根據微信提供的接口,請求獲得openid和session_id
public class UserInfoUtils {
private String getKeyURL="
https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code";
public String getKey(String appid, String secret, String code) {
getKeyURL=String.format(getKeyURL,appid,secret,code);
String respone = MyHttpsUtil.httpsRequest(getKeyURL, "GET", null);
return respone;
}
}
相同code,在請求微信接口時,只能請求一次,再次請求就會返回openid爲null的錯誤:{"errcode":40163,"errmsg":"code been used, hints: [ req_id: WNUzlA0105th41 ]"}
測試時在微信開發工具上清除緩存後,從新請求就能夠了。
可是測試時還有一個問題:
public class UserInfoUtils {
private
static String getKeyURL="
https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code";
public
static String getKey(String appid, String secret, String code) {
getKeyURL=String.format(getKeyURL,appid,secret,code);
String respone = MyHttpsUtil.httpsRequest(getKeyURL, "GET", null);
return respone;
}
}
就是我在URL和方法上都加了static關鍵字,調用靜態方法時,就算清除了緩存,code也不同了,但仍是會報錯:{"errcode":40163,"errmsg":"code been used, hints: [ req_id: WNUzlA0105th41 ]"}。
解決方法:將static關鍵字去掉就ok了,由於靜態變量會保存getKeyURL,以後調用方法得到的值是上次轉換後的值,%s被轉換成具體的值,以後調用format方法就不能給URL賦值了。