微信定制开发系列四——微信获取Token

发送到手机
使用"扫一扫"即可发送至手机

微信获取token的接口可以说是微信定制开发中最基础也是最重要的接口,这里我不是来说明怎么实现这个接口的,因为会程序的童鞋们肯定都知道怎么去实现这个接口,所以我就不废话多说了,我主要是讲解下会在开发中遇到的一些问题以及怎么解决。

首先刚开始对接微信接口的童鞋需要值得注意的是大部分的接口调用都是有限制次数的。详细信息可以参考公众平台的文档:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1433744592&token=&lang=zh_CN

值得一提的是也是我们开发中最关心的一个接口,获取access_token这个接口,每天只有2000次,所以我们在开发的时候一定要存在本地,每次获取的Token有效期是2个小时,过期之后需要重新向微信发起请求获取Token。但是Token存在本地之后会有一个严重的问题,这个问题开发的时候是不会遇到的,一旦开发结束进入测试或者上线状态的时候就会遇到一个问题。在调用微信其他接口的时候经常会出现一个错误:"errcode":40001,"errmsg":"invalid credential, access_token is invalid or not latest hint: [h2fSka0941vr20]“,这个问题出现的原因只有一个可能就是本地或者测试服务器获取了Token,会导致正式服务器的Token不是最新的导致失效,严重的说可能线上的网站会直接崩溃。所以这里我采用了在获取微信接口的时候加入一个判断,如果是线上网站是直接向微信获取Token,如果是测试或者本地网站则向线上的已经写好的接口获取Token,这样可以完美的避免Token会覆盖的问题。参考代码:

        public static AccessTokenModel GetToken(string appId, string sercet, string appCode) {
            var isOnline = bool.Parse(ConfigurationManager.AppSettings["IsOnline"]);
            if (!isOnline) {
                return WeChatUtil.GetToken(appId, sercet, "Aurora");
            }
            else {
                var url = string.Format("{0}/api/getToken", ConfigurationManager.AppSettings["WebDomain"]);
                var result = WeChatUtil.GetJson(url);
                return JsonConvert.DeserializeObject<AccessTokenModel>(result);
            }
        }
        [HttpGet]
        public ActionResult GetToken() {
            var token = DomainHelper.GetToken(WxPayConfig.APPID, WxPayConfig.APPSECRET, "Aurora");
            return Json(token, JsonRequestBehavior.AllowGet);
        }

在分享一个检查Token是哪里覆盖了正式服务器的方法,在微信后台里面有一个运维中心,在微信开发的时候一定要启用,这里可以帮助大家在上线以后排查接口的问题,然后在日志查询里面选择Token接口,就可以查询最近哪个IP调用了接口导致正式服务器的Token失效。

blob.png

阅读相关主题
微信定制开发系列四——微信获取Token

微信定制开发系列四——微信获取Token

分享:

标签: