如何获取微信access token获取失败

C#微信公众平台开发—access_token的获取存储与更新 - C#技巧 - 大学IT网
当前位置: >
> C#微信公众平台开发—access_token的获取存储与更新
关键词:&&阅读(8899) 赞(16)
[摘要]本文是对C#微信公众平台开发—access_token的获取存储与更新的讲解,对学习C#编程技术有所帮助,与大家分享。
一、什么是access_token?
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。正常情况下access_token有效期为7200秒,重复获取将导致上次获取的access_token失效。由于获取access_token的api调用次数非常有限,建议开发者全局存储与更新access_token,频繁刷新access_token会导致api调用受限,影响自身业务。
二、要解决的问题
1、如何获取access_token。
2、由于access_token的有效期为7200秒,即2小时,并且重复获取将导致上次获取的access_token失效,获取access_token的api调用次数非常有限,所以要解决如何全局存储与更新access_token。
1、将access_token存储在数据库中。
2、何时更新access_token呢?当access_token失效的时候更新,那么怎么判断access_token有没有失效呢?使用当前的access_token请求微信接口,获取自定义菜单,如果返回的errcode为42001,则说明access_token已经失效,这时再重新获取access_token。
四、代码:
1、Http请求代码(HttpRequestUtil类):
#region 请求Url,不发送数据
/// &summary&
/// 请求Url,不发送数据
/// &/summary&
public static string RequestUrl(string url)
return RequestUrl(url, "POST");
#endregion
#region 请求Url,不发送数据
/// &summary&
/// 请求Url,不发送数据
/// &/summary&
public static string RequestUrl(string url, string method)
// 设置参数
HttpWebRequest request = WebRequest.Create(url) as HttpWebR
CookieContainer cookieContainer = new CookieContainer();
request.CookieContainer = cookieC
request.AllowAutoRedirect =
request.Method =
request.ContentType = "text/html";
request.Headers.Add("charset", "utf-8");
//发送请求并获取相应回应数据
HttpWebResponse response = request.GetResponse() as HttpWebR
//直到request.GetResponse()程序才开始向目标网页发送Post请求
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream, Encoding.UTF8);
//返回结果网页(html)代码
string content = sr.ReadToEnd();
#endregion
2、辅助方法(Tools类):
namespace SWX.Utils
/// &summary&
/// 工具类
/// &/summary&
public class Tools
#region 获取Json字符串某节点的值
/// &summary&
/// 获取Json字符串某节点的值
/// &/summary&
public static string GetJsonValue(string jsonStr, string key)
string result = string.E
if (!string.IsNullOrEmpty(jsonStr))
key = "\"" + key.Trim('"') + "\"";
int index = jsonStr.IndexOf(key) + key.Length + 1;
if (index & key.Length + 1)
//先截逗号,若是最后一个,截&}&号,取最小值
int end = jsonStr.IndexOf(',', index);
if (end == -1)
end = jsonStr.IndexOf('}', index);
result = jsonStr.Substring(index, end - index);
result = result.Trim(new char[] { '"', ' ', '\'' }); //过滤引号或空格
#endregion
3、判断access_token是否过期(WXApi类):
#region 验证Token是否过期
/// &summary&
/// 验证Token是否过期
/// &/summary&
public static bool TokenExpired(string access_token)
string jsonStr = HttpRequestUtil.RequestUrl(string.Format("https://api./cgi-bin/menu/get?access_token={0}", access_token));
if (Tools.GetJsonValue(jsonStr, "errcode") == "42001")
#endregion
4、请求微信接口,获取access_token(WXApi类):
#region 获取Token
/// &summary&
/// 获取Token
/// &/summary&
public static string GetToken(string appid, string secret)
string strJson = HttpRequestUtil.RequestUrl(string.Format("https://api./cgi-bin/token?grant_type=client_credential&appid={0}&secret={1}", appid, secret));
return Tools.GetJsonValue(strJson, "access_token");
#endregion
5、全局存储与更新access_token(AdminUtil类):
#region 获取access_token
/// &summary&
/// 获取access_token
/// &/summary&
public static string GetAccessToken(PageBase page)
string access_token = string.E
UserInfo user = GetLoginUser(page);
if (user != null)
if (string.IsNullOrWhiteSpace(user.access_token)) //尚未保存过access_token
access_token = WXApi.GetToken(user.AppID, user.AppSecret);
if (WXApi.TokenExpired(user.access_token)) //access_token过期
access_token = WXApi.GetToken(user.AppID, user.AppSecret);
return user.access_
MSSQLHelper.ExecuteSql(string.Format("update SWX_Config set access_token='{0}' where UserName='{1}'", access_token, user.UserName));
return access_
#endregion
C#微信公众平台开发源码在我的博客首页左侧下面
相关C#技巧推荐1616人阅读
JAVA(44)
作者:zhutulang
以下是微信公众平台开发者文档中截取的内容:
access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
接口调用请求说明
http请求方式: GET
grant_type
获取access_token填写client_credential
第三方用户唯一凭证
第三方用户唯一凭证密钥,即appsecret
正常情况下,微信会返回下述JSON数据包给公众号:
{&access_token&:&ACCESS_TOKEN&,&expires_in&:7200}
access_token
获取到的凭证
expires_in
凭证有效时间,单位:秒
那么,从以上的说明中我们知道:
(1)我们需要以get方式发送https请求。
(2)appid和secret 可以从我们的公众号后台查看。
(3)目前,access_token的有效期目前为2个小时,我们需要提供一个定时刷新机制。并且最好能有一个强制刷新的机制。
一、如何发送https请求
对于第一点,用HttpClient包发送https请求,核心思路就是忽略校验过程,代码参考自:
SSLClient 类如下:
&package com.dongliushui.
importjava.security.cert.CertificateE
import javax.net.ssl.SSLC
import javax.net.ssl.TrustM
import javax.net.ssl.X509TrustM
import org.apache.http.conn.ClientConnectionM
import org.apache.http.conn.scheme.S
importorg.apache.http.conn.scheme.SchemeR
importorg.apache.http.conn.ssl.SSLSocketF
importorg.apache.http.impl.client.DefaultHttpC
*@ClassName: SSLClient
*@Description: 用于进行Https请求的HttpClient
*@author (代码来源):http://blog.csdn.net/rongyongfeikai2/article/details/
*@version V1.0
public class SSLClient extendsDefaultHttpClient {
publicSSLClient() throws Exception{
SSLContext ctx = SSLContext.getInstance(&TLS&);
X509TrustManager tm = new X509TrustManager() {
publicvoid checkClientTrusted(
java.security.cert.X509Certificate[]chain, String authType)
throwsCertificateException {
//TODO Auto-generated method stub
publicvoid checkServerTrusted(
java.security.cert.X509Certificate[]chain, String authType)
throwsCertificateException {
//TODO Auto-generated method stub
publicjava.security.cert.X509Certificate[] getAcceptedIssuers() {
//TODO Auto-generated method stub
ctx.init(null, new TrustManager[]{tm}, null);
SSLSocketFactory ssf = newSSLSocketFactory(ctx,SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
ClientConnectionManager ccm = this.getConnectionManager();
SchemeRegistry sr = ccm.getSchemeRegistry();
sr.register(new Scheme(&https&, 443, ssf));
HttpUtil 类如下:
package com.dongliushui.
import java.util.ArrayL
import java.util.I
import java.util.L
import java.util.M
import java.util.Map.E
import net.sf.json.JSONO
import org.apache.http.HttpE
import org.apache.http.HttpR
import org.apache.http.NameValueP
import org.apache.http.client.HttpC
importorg.apache.http.client.entity.UrlEncodedFormE
importorg.apache.http.client.methods.HttpG
import org.apache.http.client.methods.HttpP
import org.apache.http.entity.StringE
importorg.apache.http.impl.client.DefaultHttpC
importorg.apache.http.message.BasicNameValueP
import org.apache.http.util.EntityU
*@ClassName: HttpUtil
* @Description:Http请求工具类
*@author zhutulang
*@version V1.0
public class HttpUtil {
* &p&Title: doHttpsPost&/p&
* &p&Description: 发送https 形式的post请求&/p&
* @param url 请求url
* @param contentType
* @param paramMap 参数map
* @author zhutulang
* @version 1.0
publicstatic byte[] doHttpsPostJson(String url, String contentType, Map&String,String& paramMap){
returnpostJson(1, url, contentType, paramMap);
* &p&Title: doHttpsPost&/p&
* &p&Description: 发送http 形式的post请求&/p&
* @param url 请求url
* @param contentType
* @param paramMap 参数map
* @author zhutulang
* @version 1.0
publicstatic byte[] doPostJson(String url, String contentType, Map&String,String& paramMap){
return postJson(0, url, contentType,paramMap);
* &p&Title: doHttpsGet&/p&
* &p&Description: 发送https 形式的get请求&/p&
* @param url 请求url
* @param contentType
* @author zhutulang
* @version 1.0
publicstatic byte[] doHttpsGet(String url, String contentType){
returnget(1, url, contentType);
* &p&Title: doGet&/p&
* &p&Description: 发送http 形式的gett请求&/p&
* @param url 请求url
* @param contentType
* @author zhutulang
* @version 1.0
publicstatic byte[] doGet(String url, String contentType){
returnget(0, url, contentType);
* &p&Title: post&/p&
* &p&Description: 发送post请求,表单提交参数&/p&
* @param type 0:普通post请求
1:https形式的post请求
* @param url 请求url
* @param contentType
* @param paramMap 参数map
* @author zhutulang
* @version 1.0
privatestatic byte[] postCommon(int type, String url, String contentType,Map&String, String& paramMap){
//响应内容
byte[] bs =
HttpClient httpClient =
HttpPost httpPost =
if(type == 0){
//创建发送 http 请求的httpClient实例
httpClient= new DefaultHttpClient();
}else if(type == 1){
//创建发送 https 请求的httpClient实例
httpClient= new SSLClient();
// 创建HttpPost
httpPost = new HttpPost(url);
httpPost.setHeader(&content-type&, contentType);
//设置参数
List&NameValuePair& list = newArrayList&NameValuePair&();
if(paramMap != null){
Iterator&Entry&String, String&&iterator = paramMap.entrySet().iterator();
while(iterator.hasNext()){
Entry&String,String& elem =(Entry&String, String&) iterator.next();
list.add(newBasicNameValuePair(elem.getKey(),elem.getValue()));
if(list.size() & 0){
UrlEncodedFormEntity entity = newUrlEncodedFormEntity(list,&UTF-8&);
httpPost.setEntity(entity);
// 执行POST请求
HttpResponse response =httpClient.execute(httpPost);
// 获取响应实体
HttpEntity entity = response.getEntity();
if(entity != null){
bs = EntityUtils.toByteArray(entity);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭连接,释放资源
httpClient.getConnectionManager().shutdown();
httpPost =
httpClient =
* &p&Title: post&/p&
* &p&Description: 发送post请求,json方式提交参数&/p&
* @param type 0:普通post请求
1:https形式的post请求
* @param url 请求url
* @param contentType
* @param paramMap 参数map
* @author zhutulang
* @version 1.0
privatestatic byte[] postJson(int type, String url, String contentType, Map&String,String& paramMap){
//响应内容
byte[] bs =
HttpClient httpClient =
HttpPost httpPost =
if(type == 0){
//创建发送 http 请求的httpClient实例
httpClient= new DefaultHttpClient();
}else if(type == 1){
//创建发送 https 请求的httpClient实例
httpClient= new SSLClient();
// 创建HttpPost
httpPost = new HttpPost(url);
httpPost.setHeader(&content-type&, contentType);
if(paramMap != null){
Iterator&Entry&String, String&&iterator = paramMap.entrySet().iterator();
// 接收参数json列表
JSONObject jsonParam = newJSONObject();
while(iterator.hasNext()){
Entry&String,String& elem =(Entry&String, String&) iterator.next();
jsonParam.put(elem.getKey(),elem.getValue());
if(jsonParam.size() & 0){
StringEntity entity = newStringEntity(jsonParam.toString(),&UTF-8&);
entity.setContentEncoding(&UTF-8&);
entity.setContentType(&application/json&);
httpPost.setEntity(entity);
// 执行POST请求
HttpResponse response =httpClient.execute(httpPost);
// 获取响应实体
HttpEntity entity = response.getEntity();
if(entity != null){
bs = EntityUtils.toByteArray(entity);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭连接,释放资源
httpClient.getConnectionManager().shutdown();
httpPost =
httpClient =
* &p&Title: get&/p&
* &p&Description: 发送get请求&/p&
* @param type 0:普通get请求
1:https形式的get请求
* @param url
* @param contentType
* @author zhutulang
* @version 1.0
privatestatic byte[] get(int type, String url, String contentType){
//响应内容
byte[] bs =
HttpClient httpClient =
HttpGet httpGet =
if(type == 0){
//创建发送 http 请求的httpClient实例
httpClient= new DefaultHttpClient();
}else if(type == 1){
//创建发送 https 请求的httpClient实例
httpClient= new SSLClient();
// 创建HttpPost
httpGet = new HttpGet(url);
httpGet.setHeader(&content-type&, contentType);
// 执行POST请求
HttpResponse response =httpClient.execute(httpGet);
// 获取响应实体
HttpEntity entity = response.getEntity();
if(entity != null){
bs = EntityUtils.toByteArray(entity);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭连接,释放资源
httpClient.getConnectionManager().shutdown();
httpClient =
二、如何定时刷新access_token
在集群环境中,这个问题可能会比较复杂。我们可能需要考虑到在集群中各个机器的任务调度协调,对于获取到的access_token,我们可能会考虑将它保存在数据库中,或者统一的缓存模块中,比如redis中。对于单服务器环境,我们大可以直接将其保存在内存中。
定时任务我们经常会用到quartz框架。不过spring也提供有任务调度的模块,我习惯用@Scheduled注解。至于它的使用,大家可自行百度。
以下代码中形如@Value(&#{weixinProperties['AppId']}&)
是通过spring读取配置文件,如果没见过这样做的朋友也可以自行去查找相关资料。
相关的配置放在一个名为weixin.properties的配置文件中:
#weixin properties
# 你自己的appid和appsecret
AppId=XXXXXXXXX
AppSecret=XXXXXXXXXXXXXXXXXXX
#get access_token urlget
get_access_token_url=https://api./cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
#batchget_material urlpost
batchget_material_url=https://api./cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN
Spring配置文件中:
&!-- weixin.properties 配置文件 --&
&bean id=&weixinProperties& class=&org.springframework.beans.factory.config.PropertiesFactoryBean&&
&property name=&locations&&
&value&classpath*:weixin.properties&/value&
&/property&
&bean id=&propertyConfigurer&class=&org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer&&
&property name=&properties& ref=&weixinProperties& /&
AccessTokenTaker 代码如下:
package com.dongliushui.
importjava.io.UnsupportedEncodingE
import org.apache.log4j.L
importorg.springframework.beans.factory.annotation.V
import org.springframework.scheduling.annotation.S
importorg.
import com.dongliushui.util.HttpU
*@ClassName: AccessTokenTaker
*@Description: 获取access_token
*@author zhutulang
*@version V1.0
@Component
public class AccessTokenTaker {
@Value(&#{weixinProperties['AppId']}&)
String appId;
@Value(&#{weixinProperties['AppSecret']}&)
String appS
@Value(&#{weixinProperties['get_access_token_url']}&)
String getAccessTokenU
* access_token
privatestatic
String ACCESS_TOKEN =
* 上次更新access_token时间
privatestatic
LongLAST_ACCESS_TOKEN_UPDATE_TIME =
privatestatic Logger log = Logger.getLogger(AccessTokenTaker.class);
* &p&Title: get&/p&
* &p&Description: 每隔一个小时去获取一次access_token&/p&
* @author zhutulang
* @version 1.0
@Scheduled(fixedRate=3600000)
privatevoid getTask(){
* &p&Title: getFromCache&/p&
* &p&Description: 从缓存中获取access_token&/p&
* @author zhutulang
* @version 1.0
String getFromCache(){
returnACCESS_TOKEN;
* &p&Title: getNew&/p&
* &p&Description: 强制更新、获取access_token&/p&
* &p&如果发现现在的时间戳和上次更新的时间戳间隔小于5分钟,那么不更新&/p&
* @author zhutulang
* @version 1.0
publicsynchronized
String getNew(){
longtimeNow = System.currentTimeMillis();
if(LAST_ACCESS_TOKEN_UPDATE_TIME== null){
}elseif(timeNow - LAST_ACCESS_TOKEN_UPDATE_TIME & 300000){
//如果是5分钟以内
returnACCESS_TOKEN;
returnACCESS_TOKEN;
* &p&Title: get&/p&
* &p&Description: 调用获取access_token接口&/p&
* @author zhutulang
* @version 1.0
synchronized
void get(){
Stringurl = getAccessTokenUrl.replace(&APPID&,appId).replace(&APPSECRET&, appSecret);
StringcontentType = &application/json&;
byte[]bytes = HttpUtil.doHttpsGet(url, contentType);
StringaccessToken = new String(bytes, &UTF-8&);
longtimeNow = System.currentTimeMillis();
ACCESS_TOKEN= accessT
LAST_ACCESS_TOKEN_UPDATE_TIME= timeN
(&执行获取access_token任务,access_token=&+ACCESS_TOKEN);
(&时间戳=&+LAST_ACCESS_TOKEN_UPDATE_TIME);
}catch (UnsupportedEncodingException e) {
//TODO Auto-generated catch block
e.printStackTrace();
publicString getAppId() {
returnappId;
publicvoid setAppId(String appId) {
this.appId= appId;
publicString getAppSecret() {
returnappS
publicvoid setAppSecret(String appSecret) {
this.appSecret= appS
publicString getGetAccessTokenUrl() {
returngetAccessTokenU
publicvoid setGetAccessTokenUrl(String getAccessTokenUrl) {
this.getAccessTokenUrl= getAccessTokenU
&其它相关代码可查看:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:283205次
积分:3832
积分:3832
排名:第6052名
原创:103篇
转载:27篇
评论:88条
(1)(7)(1)(4)(2)(5)(8)(1)(4)(4)(6)(1)(4)(2)(2)(1)(3)(4)(2)(5)(5)(1)(1)(2)(6)(11)(7)(5)(1)(6)(1)(4)(14)& 有一段时间没有搞微信开发了 ,今天突然要改一下程序! 回头一看 微信的帮助文档太tm的稀烂的,太难懂了,这做个笔记以后看着方便
& 微信有2个ACCESS_TOKEN,
& 1,基础接口的token 获取接口是&&
https://api./cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
& 2,用户网页授权access_token 获取接口地址是
&&https://api./sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
&&网页授权access_token 需要通过code去获取
& &code是怎么来的,是通过调用下面接口来获取的
& &https://open./connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
& 注意这个接口中有个参数scope 默认有2个值snsapi_base和snsapi_userinfo,这个接口会根据scope 来生成不同的code并且获取不同作用的access_token&,不管scope传什么值都能在得到对应access_token的同时得到open_id, 如果你只需要得到opend_id 那使用snsapi_base参数到此结束了,如果需要获取用户的其他信息比如 昵称 地址 就要snsapi_userinfo 会弹出授权
&3 怎么获取用户信息那就调用下面接口
&&https://api./sns/userinfo?access_token={0}&openid={1}&lang=zh_CN
&很明显这个接口中的access_token是第二步获取code的时候scope 参数传snsapi_userinfo来换取的access_token
&4 微信还有一个获取用户基本信息的接口 但是 这个接口需要你关注了公众号
https://api./cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN &(此接口的access_token 是接口基础调用access_token 不是网页授权access_token)
微信的解释:是在用户和公众号产生消息交互或关注后事件推送后,才能根据用户OpenID来获取用户基本信息。这个接口,包括其他微信接口,都是需要该用户(即openid)关注了公众号后,才能调用成功的。
阅读(...) 评论() &只需一步,快速开始
后使用快捷导航没有帐号?
所属分类: &
1、有任何问题,请发新贴来提问;
2、我们将会每日进行问题的回复;
获取access_token - 傻瓜式微信开发教程7 - 耗子原创
查看: 33577|回复: 194
& 主题帖子积分
本帖最后由 moremorefun 于
14:39 编辑
现在我们尝试首次调用微信提供给我们的API.
微信的API大部分是需要`access_token`作为验证字段了,
那我们首先尝试获取`access_token`.
我们这次帖子的主要目的是在用户发送给我们的公众号一个文本消息的时候返回给用户我们获取到的access_token.
根据我们在[回复简单的文本消息 - 傻瓜式微信开发教程4 - 耗子原创]中的说明,
我们对用户的文本消息在`index.php`页面中的`onText()`函数中进行处理.
微信关于获取`access token`的说明在这里:
在说明中我们可以看到,获取`access_token`需要提供`appid`和`secret`两个参数,
而之前我们的Wechat-php库中没有写入secret参数,所以我们还要对`Wechat.php`做一些修改,
主要是为了保存`appid`和`secret`两个字段.
所以我们修改的`Wechat.php`的代码为:
&?php
&&class Wechat {
& & // ....
& & // ....
& & // ....
& & protected $encrypted =
& & protected $appid = '';
& & protected $appsecret = '';
& & // 添加appsecret参数
& & public function __construct($config=array('token'=&'', 'aeskey'=&'', 'appid'=&'', 'appsecret'=&'', 'debug' =& FALSE)) {
& && &$token = $config['token'];
& && &$aeskey = $config['aeskey'];
& && &$appid = $config['appid'];
& && &$debug = $config['debug'];
& && &// 将两个参数储存在实例中
& && &$this-&appid = $config['appid'];
& && &$this-&appsecret = $config['appsecret'];
& && &// ...
& && &// ...
& && &// ...
& & }
&&}
复制代码
我们的调用函数为:
* 微信开发者社区:
* 微信公众平台 PHP SDK 示例文件
&&require('wechat/Wechat.php');
&&/**
& &* 微信公众平台演示类
& &*/
&&class TestWechat extends Wechat {
& & /**
& &&&* 收到文本消息时触发,回复收到的文本消息内容
& &&&*
& &&&* @return void
& &&&*/
& & protected function onText() {
& && &// 获取到 appid 和 appsecret
& && &$appid = $this-&
& && &$appsecret = $this-&
& && &// 构建获取access_token的url
& && &$url = &https://api./cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}&;
& && &// 构建http请求并执行
& && &$ch = curl_init();
& && &curl_setopt($ch, CURLOPT_URL, $url);
& && &curl_setopt($ch, CURLOPT_HEADER, false);
& && &curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
& && &$result=curl_exec($ch);
& && &curl_close($ch);
& && &// 解析返回的json数据
& && &$jsoninfo = json_decode($result);
& && &// 读取json中的access_token字段
& && &$access_token = $jsoninfo-&access_
& && &$expires_in = $jsoninfo-&expires_
& && &// 将获取到的access_token作为文本信息返回
& && &$this-&responseText(&access_token: '{$access_token}'\nexpires_in: '{$expires_in}'&);
& & }
&&}
&&// 这里调用新的
&&$wechat = new TestWechat(array(
& & 'token'& &&&=& 'xxxx',& && && && &&&// 更新为自己的
& & 'aeskey'& & =& 'xxxx',& && && && & // 更新为自己的
& & 'appid'& &&&=& 'xxxx',& && && && &&&// 更新为自己的
& & 'appsecret' =& 'xxxx',& && && & // 更新为自己的
& & 'debug'& &&&=& true
& & ));
&&$wechat-&run();
复制代码
附件中有整个代码的压缩包
游客,如果您要查看本帖隐藏内容请
& 主题帖子积分
专家路上, 积分 73, 距离下一级还需 927 积分
专家路上, 积分 73, 距离下一级还需 927 积分
&&学习了&&
& 主题帖子积分
新人求带, 积分 23, 距离下一级还需 127 积分
新人求带, 积分 23, 距离下一级还需 127 积分
挺不错的,继续看
& 主题帖子积分
新人求带, 积分 33, 距离下一级还需 117 积分
新人求带, 积分 33, 距离下一级还需 117 积分
感谢楼主的无私分享
& 主题帖子积分
新人求带, 积分 17, 距离下一级还需 133 积分
新人求带, 积分 17, 距离下一级还需 133 积分
& 主题帖子积分
专家路上, 积分 123, 距离下一级还需 877 积分
专家路上, 积分 123, 距离下一级还需 877 积分
下载下来试试。
& 主题帖子积分
新人求带, 积分 27, 距离下一级还需 123 积分
新人求带, 积分 27, 距离下一级还需 123 积分
而纷纷呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃呃额
& 主题帖子积分
略知一二, 积分 217, 距离下一级还需 283 积分
略知一二, 积分 217, 距离下一级还需 283 积分
& 主题帖子积分
新人求带, 积分 87, 距离下一级还需 63 积分
新人求带, 积分 87, 距离下一级还需 63 积分
耗子的教程貌似很久没更新了
& 主题帖子积分
专家路上, 积分 50, 距离下一级还需 950 积分
专家路上, 积分 50, 距离下一级还需 950 积分
感谢分享!
<是专业的第三方微信开发者平台,为生态而生。
本站为第三方微信开发者平台,非腾讯官方网站。
天津市滨海新区中新生态城中成大道生态建设公寓9号楼3层301
欢迎来这里一起喝喝茶,聊聊你的产品。
微信公众号gongzhongkaifa
工作日12小时内回复。
工作日12小时内回复。

我要回帖

更多关于 access token获取失败 的文章

 

随机推荐