古詩詞大全網 - 個性簽名 - 微信微信官方賬號開發平臺,微信服務器發送驗證請求時,帶有nonce參數的get請求時,url錯誤。

微信微信官方賬號開發平臺,微信服務器發送驗證請求時,帶有nonce參數的get請求時,url錯誤。

#地區?微信驗證碼部分

///?& lt總結& gt

///?驗證微信簽名

///?& lt/summary & gt;

///?*?令牌、時間戳和nonce這三個參數按字典順序排序。

///?*?將三個參數字符串拼接成壹個字符串用於sha1加密。

///?*?開發者獲得的加密字符串可以與簽名進行比較,以識別請求源自微信。

///?& ltreturns & gt& lt/returns & gt;

私人?布爾?檢查簽名()

{

字符串?簽名?=?請求。query string[" signature "];

字符串?時間戳?=?請求。query string[" timestamp "];

字符串?現時?=?請求。query string[" nonce "];

string[]?ArrTmp?=?{?Token?時間戳,?現時?};

數組。sort(ArrTmp);?//字典排序

字符串?tmpStr?=?字符串。聯接(",?ArrTmp);

tmpStr?=?表單認證。hashpasswordforstoringconfigfile(tmpStr," sha 1 ");

tmpStr?=?tmpStr。to lower();

如果?(tmpStr?==?簽名)

{

回歸?真實;

}

其他

{

回歸?假的;

}

}

公共?靜電?布爾?CheckSignature(字符串?簽名,?字符串?時間戳,?字符串?nonce)

{

String[]?arr?=?新的?String[]?{?Token?時間戳,?現時?};

//?按照字典順序對三個參數token、timestamp和nonce進行排序?

數組。排序& lt字符串& gt(arr);

StringBuilder?內容?=?新的?StringBuilder();

為了什麽?(int?我?=?0;?我?& lt?由…改編長度;?i++)

{

內容。append(arr[I]);

}

字符串?tmpStr?=?SHA1_Encrypt(內容。ToString());

//?sha1的加密字符串可以和signature對比,說明請求源於微信?

回歸?tmpStr?!=?nulltmpStr。等於(簽名)?:?假的;

}

///?& lt總結& gt

///?用默認密鑰加密字符串。

///?& lt/summary & gt;

///?& ltparam?name="Source_String " >& lt/param & gt;

///?& ltreturns & gt& lt/returns & gt;

公共?靜電?字符串?SHA1_Encrypt(字符串?源_字符串)

{

byte[]?StrRes?=?編碼。default . GetBytes(Source _ String);

HashAlgorithm?伊莎?=?新的?sha 1 cryptoserviceprovider();

StrRes?=?伊莎。compute hash(StrRes);

StringBuilder?EnText?=?新的?StringBuilder();

foreach?(字節?伊比特?在?StrRes)

{

EnText。AppendFormat("{0:x2} ",?iByte);

}

回歸?EnText。ToString();

}

私人?作廢?有效()

{

字符串?echoStr?=?請求。query string[" echoStr "];

如果?(CheckSignature())

{

如果?(!字符串。IsNullOrEmpty(echoStr))

{

回應。write(echoStr);

回應。end();

}

}

}

///?& lt總結& gt

///?Unix時間轉換為日期時間

///?& lt/summary & gt;

///?& ltparam?name = " timeStamp " & gt& lt/param & gt;

///?& ltreturns & gt& lt/returns & gt;

私人?日期時間?UnixTimeToTime(字符串?時間戳)

{

日期時間?dtStart?=?時區。CurrentTimeZone.ToLocalTime(新?DateTime(1970,?1,?1));

龍?lTime?=?很長。解析(時間戳?+?"0000000");

時間跨度?托諾?=?新的?TimeSpan(lTime);

回歸?dtStart。添加(toNow);

}

///?& lt總結& gt

///?將datetime轉換為unixtime

///?& lt/summary & gt;

///?& ltparam?name = " time " & gt& lt/param & gt;

///?& ltreturns & gt& lt/returns & gt;

私人?int?ConvertDateTimeInt(System。日期時間?時間)

{

系統。日期時間?開始時間?=?時區。CurrentTimeZone.ToLocalTime(新?系統。DateTime(1970,?1,?1));

回歸?(int)(時間?-?開始時間)。總秒數;

}

#endregion希望妳能用。