首先,需要在微信公众号的开发者中心中配置兼容模式,并在其中填写回调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()

aspnet core写一个能通过微信公众号兼容模式回调URL token验证的接口

原文地址: https://www.cveoy.top/t/topic/c4A0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录