基於微信公眾測試平台進行開發測試,並在網上找了很多資料再此聲明(如有占用代碼請聯系以備修改),由於比較雜不一一說明謝謝他們的努力。供有需要的人參考。
首先是實現微信的認證,登錄微信測試平台我們可以看到系統自動給了一個微信號,測試號信息:appID和appsecret。
在接口配置信息中,有URL和Token 二個文本框,我們分別在URL上寫上我們的服務器測試文件的地址,采用的是一般處理程序類似(http://yourdomain.com/valided.ashx).
Token的值我們可以自定義。
然后我們新建一個項目,新建valided.ashx文件用於驗證。
//在ProcessRequest方法里面寫上如下代碼:
if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
{
//do something
}else{
AuthWechat(); //采用GET方法判斷進入驗證方法
}
///認證微信
private void AuthWechat()
{
string token = "testweixin";//Token的值
string echoString = HttpContext.Current.Request.QueryString["echoStr"];
string signature = HttpContext.Current.Request.QueryString["signature"];
string timestamp = HttpContext.Current.Request.QueryString["timestamp"];
string nonce = HttpContext.Current.Request.QueryString["nonce"];
if (CheckSignature(token, signature, timestamp, nonce))
{
if (!string.IsNullOrEmpty(echoString))
{
HttpContext.Current.Response.Write(echoString);
HttpContext.Current.Response.End();
}
}
}
/// <summary>
/// 對微信傳入參數進行封裝到數組,拼接字符串,進行加密操作
/// </summary>
private bool CheckSignature(string token, string signature, string timestamp, string nonce)
{
string[] ArrTmp = { token, timestamp, nonce };//將參數放進數組
Array.Sort(ArrTmp);//對數組進行排序
string tmpStr = string.Join("", ArrTmp);//將數組進行拼接
///對拼接后的字符串進行加密操作
// tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr, "SHA1");
tmpStr=Membership.CreateUser(tmpStr, "SHA1").ToString();
//轉換成小寫形式
tmpStr = tmpStr.ToLower();
//比對成功返回
if (tmpStr == signature)
{
return true;
}
else
{
return false;
}
}
上圖中的相關參數說明:
| 描述 | |
|---|---|
| signature | 微信加密簽名,signature結合了開發者填寫的token參數和請求中的timestamp參數、nonce參數。 |
| timestamp | 時間戳 |
| nonce | 隨機數 |
| echostr | 隨機字符串 |
參考官方文檔地址解析:驗證消息真實性
將上面的代碼保存后我們編譯下然后發布到服務器,在剛剛的測試號里面寫好發布對應的地址,點擊保存的時候系統會提示你是否配置成功,有時可能是網絡原因會提示配置失敗,建議多試幾次,如果沒有問題一般都會提示配置成功!這就實現了驗證和簽名。完成了重要的一步為其他接口的開發和實現奠定了基礎。
