进入微信小程序,点击开发-》选择消息推送-》扫码授权,填写必要参数
进入接口开发:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
/// <summary>
/// 验证小程序
/// </summary>
/// <returns></returns>
[HttpGet( "checksign" )]
public dynamic CheckSignature()
{
/// 1、将token、timestamp、nonce三个参数进行字典序排序
/// 2、将三个参数字符串拼接成一个字符串进行sha1加密
/// 3、开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
var _signature = Request.Query[ "signature" ].ToString();
var _timestamp = Request.Query[ "timestamp" ].ToString();
var _nonce = Request.Query[ "nonce" ].ToString();
<br> //参数排序
SortedDictionary< string , string > keyValuePairs = new SortedDictionary< string , string >();
keyValuePairs.Add( "token" , "xxxxxxxx" ); //设定的token
keyValuePairs.Add( "timestamp" , _timestamp);
keyValuePairs.Add( "_nonce" , _nonce);
StringBuilder sb = new StringBuilder();
foreach ( var item in keyValuePairs)
{
sb.Append(item.Value);
}
var signature = StringHelper.Sha1(sb.ToString()).ToLower(); //sha1加密,注意,必须是小写的
if (signature.Equals(_signature))
{
return Request.Query[ "echostr" ].ToString(); //注意:坑,官方文档上提示返回true和false,其实返回的是echostr参数
}
else
{
return "非法請求" ;
}
}
|
sha1加密:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/// <summary>
/// 基于Sha1的自定义加密字符串方法:输入一个字符串,返回一个由40个字符组成的十六进制的哈希散列(字符串)。
/// </summary>
/// <param name="str">要加密的字符串</param>
/// <returns>加密后的十六进制的哈希散列(字符串)</returns>
public static string Sha1( this string str)
{
var buffer = Encoding.UTF8.GetBytes(str);
var data = SHA1.Create().ComputeHash(buffer);
var sb = new StringBuilder();
foreach ( var t in data)
{
sb.Append(t.ToString( "X2" ));
}
return sb.ToString();
}
|
然后把上述接口发布到服务器上,必须绑定域名,而且直接指定到对应的接口上,如:http://api.xylove.net/lee/WX/checksign