使用公众平台测试账号来完成验证
为什么使用测试账号
因为普通服务号(未认证)可使用的微信接口非常有限,为了方便开发测试,可以使用微信公众平台提供的测试账号功能。
在公众平台后台,进入开发者工具,点击公众平台测试账号,即可获得一个拥有较多接口权限的测试用 AppId 和 AppSecret。
配置测试账号的 URL 和 Token
在测试账号管理页面,配置服务器地址(URL)和令牌(Token),与正式公众号的配置方式一致。
如果配置错误或代码有误,微信会返回如下错误:
{"errcode":-107,"errmsg":"token check timeout"}Code language: JSON / JSON with Comments (json)
常见原因包括:服务器地址无法访问、Token 不一致、代码逻辑错误等。
添加日志辅助调试
为了方便排查问题,可以封装一个写日志的方法,将关键信息记录到文本文件中:
private void Writelog(string message)
{
string path = Server.MapPath("/") + "log.txt";
System.IO.File.AppendAllText(path, message + "\r\n");
}Code language: JavaScript (javascript)
使用前需先在网站根目录手动创建 log.txt 文件,并确保应用程序对该文件有写入权限。
验证接口 Get 方法完整代码
在 Web.config 的 appSettings 中配置相关参数:
<add key="WeixinToken" value="你的Token" />
<add key="WeixinAppId" value="你的AppId" />
<add key="WeixinAppSecret" value="你的AppSecret" />
<add key="WeixinEncodingAESKey" value="你的EncodingAESKey" />Code language: HTML, XML (xml)
控制器中的 Get 验证方法:
private string token = WebConfigurationManager.AppSettings["WeixinToken"];
private string appId = WebConfigurationManager.AppSettings["WeixinAppId"];
private string appSecret = WebConfigurationManager.AppSettings["WeixinAppSecret"];
private string encodingAESKey = WebConfigurationManager.AppSettings["WeixinEncodingAESKey"];
/// <summary>
/// 该地址供微信服务器调用,后台配置 URL 和 Token 时,微信会发送 GET 请求到此地址
/// </summary>
[HttpGet]
[ActionName("Index")]
public ActionResult Get(PostModel postModel, string echostr)
{
Writelog("Get验证");
if (CheckSignature.Check(postModel.Signature, postModel.Timestamp, postModel.Nonce, token))
{
return Content(echostr); //返回随机字符串表示验证通过
}
else
{
return Content("failed:" + postModel.Signature + "," + CheckSignature.GetSignature(postModel.Timestamp, postModel.Nonce, token) + "。" +
"如果你在浏览器中看到这句话,说明此地址可以被作为微信公众账号后台的Url,请注意保持Token一致。");
}
}Code language: PHP (php)
说明:
[ActionName("Index")]标注后,该 Action 可通过http://weixin.foxdevelop.com/直接访问。验证通过后会原样返回echostr,微信服务器据此确认接口有效。
Previous: 了解 Senparc 的消息处理机制
Next: 使用 Senparc 完成自动回复功能