aspnet core写一个能通过微信公众号兼容模式回调URL token验证的接口
首先,需要在微信公众号的开发者中心中配置兼容模式,并在其中填写回调URL。在回调URL中,需要验证请求是否来自微信服务器,具体的实现方式是:将token、timestamp和nonce三个参数按字典序排序,然后将它们拼接起来,再进行SHA1加密,最后将加密结果与signature参数进行比对。
以下是一个ASP.NET Core的示例代码,可以实现上述功能:
[Route("api/[controller]")]
[ApiController]
public class WeixinController : ControllerBase
{
private readonly ILogger<WeixinController> _logger;
private readonly IConfiguration _config;
public WeixinController(ILogger<WeixinController> logger, IConfiguration config)
{
_logger = logger;
_config = config;
}
[HttpGet]
public IActionResult Get([FromQuery(Name = "signature")]string signature, [FromQuery(Name = "timestamp")]string timestamp, [FromQuery(Name = "nonce")]string nonce, [FromQuery(Name = "echostr")]string echostr)
{
if (CheckSignature(signature, timestamp, nonce))
{
return Content(echostr, "text/plain");
}
else
{
return BadRequest();
}
}
private bool CheckSignature(string signature, string timestamp, string nonce)
{
var token = _config["WeixinToken"]; // 从配置文件中读取token
var arr = new[] { token, timestamp, nonce };
Array.Sort(arr);
var str = string.Join("", arr);
var sha1 = System.Security.Cryptography.SHA1.Create();
var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(str));
var sb = new StringBuilder();
foreach (var b in hash)
{
sb.AppendFormat("{0:x2}", b);
}
var result = sb.ToString();
return result == signature;
}
}
在上述代码中,我们首先从配置文件中读取token,然后在Get方法中接收微信服务器发送的四个参数,分别是signature、timestamp、nonce和echostr。我们调用CheckSignature方法来验证请求是否来自微信服务器,如果验证通过,则将echostr字符串返回回去。否则,返回BadRequest()
原文地址: https://www.cveoy.top/t/topic/c4A0 著作权归作者所有。请勿转载和采集!