小程序上线一年多,一直都比较稳定或者说没有太注意小程序码生成的问题。近期出现用户反馈小程序码生成不了,就进行了排查:
a、怀疑token被其他应用刷新导致我的应用token失效,进入小程序将安全域名非我应用的域名全部剔除,并且检查本域名下只有我一个应用在获取token;
b、怀疑自己应用有多处地方触发生成token,全局检查并未发现此情况;
c、怀疑定时获取token失败,通过日志查看,服务器的确每1000秒成功获取新token,为了验证将原有1000秒获取token改成了300秒也就是5分钟获取一次;
做了c步骤以后,发现更加不稳定了,临界5分钟时也就是token获取前1分钟,生成小程序码大概率是失败的,失败原因都是token无效,所以想请问,官方文档是写旧token有5分钟有效期,这个是不是最近做了什么调整?另外同一个token,前一次失败,再点一次生成码又成功,又是什么原因?
1、token原设定时间是1000秒获取一次,也就是大概17分钟左右一次
//获取当前小程序的ACCESS_TOKEN
string Uri = "https://api.weixin.qq.com/cgi-bin/token";
string AppID = CommonHelper.GetAppSettings("WX_APPID");
string AppSecret = CommonHelper.GetAppSettings("WX_AppSecret");
string Param = string.Format("grant_type=client_credential&appid={0}&secret={1}", AppID,AppSecret);
var jSon = HttpHelper.HttpGet(Uri, Param);
LitJson.JsonData jobj = LitJson.JsonMapper.ToObject(jSon);
if (jobj.ContainsKey("access_token"))
……
2、比较多场景用到小程序码而且是大量的,所以使用了wxacode.getUnlimited
这个接口也比较简单就是将token作为参数去请求小程序码
string URI = string.Format("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={0}", Weixin_API.ACCESS_TOKEN);
string DataJson = string.Empty;
DataJson = "{";
DataJson += string.Format("\"scene\":\"{0}\",", scene);//所要传的参数用,分开
DataJson += string.Format("\"width\":\"{0}\",", 430);
DataJson += string.Format("\"page\":\"{0}\",", path);//扫码所要跳转的地址,根路径前不要填加'/',不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面
DataJson += "\"line_color\":{";
DataJson += string.Format("\"r\":\"{0}\",", "0");
DataJson += string.Format("\"g\":\"{0}\",", "0");
DataJson += string.Format("\"b\":\"{0}\"", "0");
DataJson += "},";
DataJson += string.Format("\"is_hyaline\":true");
DataJson += "}";
byte[] res = HttpHelper.HttpPost1(URI, DataJson);
//存储小程序码
您好!生成小程序码的接口有两个,可以根据情况排查。
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/qr-code.html