網站首頁 編程語言 正文
申請微信公共賬號
既然要接入微信公共平臺,微信公共號是必須的(當然如果只是測試的話也可以申請微信公共平臺接口測試賬號),來這里微信公共平臺?申請微信公共號(注:申請微信公共號不能用已綁定微信的郵箱),微信公共平臺有自己的官方文檔,官方文檔有不少資料,可以多看看,開發者模式默認是關閉的,需要配置并啟用,如下圖:
URL即你的網站處理微信模塊,必須是HTTP://開頭的網站,筆者自己之前接入幾天一直失敗,最終發現是因為自己網站加密了用的是HTTPS,這個需要注意HTTPS網站是不可以的,Token是不會驗證成功的,Token是自定義的不少于3個字符,EncodingAESKey會在加密消息時用到。
編寫網站邏輯
編寫微信接口測試代碼,創建控制器,在控制器中編寫代碼,編寫一個Action 方法用于微信服務器檢驗,Token是否配置成功或者接入成功。
既然使用MVC,本人比較懶,懶得用Request.QueryStrings["echostr"] 這樣的方法來一個一個獲取參數,于是創建了一個Model,用來讓微信服務器請求時參數自動適配到Model的相應屬性,便于訪問,便于寫代碼,在微信公共平臺的官方文檔中可以看到用到的參數
于是創建一個這樣的Model
public class WeChatRequestModel
{
public string signature { get; set; }
public string timestamp { get; set; }
public string nonce { get; set; }
public string echostr { get; set; }
}
接著看官方文檔,接下來開始在控制器中編寫代碼,開始驗證
根據校驗流程開始編寫代碼,也可參考官方給出PHP代碼編寫相應的 .NET 代碼
下面給出我的示例代碼,在接入沒成功之前參考許多別人的代碼,不一定是最好的,你也可以參考一些別人的代碼(這里說明一下,驗證signature是否正確是從安全方面考慮的,你也可以將GET請求中的echostr參數直接輸出,建議還是驗證一下,畢竟安全更重要一些)
用來讓微信服務器訪問的Action 方法代碼
配置微信公共平臺上的信息
配置接入服務器,圖中的參數都必須配置,Token要與網站代碼中的Token保持一致,EncodingAESKey直接隨機生成就可以,當然自己寫也是可以的,只要你愿意,消息加解密方式,建議開發測試階段選擇明文模式以及兼容模式,正式上線使用后選擇安全模式。
最后第一項也是最重要的一項,URL,再次強調必須是HTTP網站,HTTPS是驗證不成功的,如果是HTTPS能改成HTTP的話要改成HTTP,Url寫成剛才我們編寫的用于訪問的驗證的Action的Url地址,即要訪問這個控制器時請求的URL地址,如:?http://www.example.com/Home/Valid/
public class HomeController :Controller
{
/// <summary>
/// 定義Token,與微信公共平臺上的Token保持一致
/// </summary>
private const string Token = "StupidMe";
/// <summary>
/// 驗證簽名,檢驗是否是從微信服務器上發出的請求
/// </summary>
/// <param name="model">請求參數模型 Model</param>
/// <returns>是否驗證通過</returns>
private bool CheckSignature(Model.FormatModel.WeChatRequestModel model)
{
string signature, timestamp, nonce, tempStr;
//獲取請求來的參數
signature = model.signature;
timestamp = model.timestamp;
nonce = model.nonce;
//創建數組,將 Token, timestamp, nonce 三個參數加入數組
string[] array = { Token, timestamp, nonce };
//進行排序
Array.Sort(array);
//拼接為一個字符串
tempStr = String.Join("", array);
//對字符串進行 SHA1加密
tempStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tempStr, "SHA1").ToLower();
//判斷signature 是否正確
if (tempStr.Equals(signature))
{
return true;
}
else
{
return false;
}
}
public void Valid(Model.FormatModel.WeChatRequestModel model)
{
//獲取請求來的 echostr 參數
string echoStr = model.echostr;
//通過驗證
if (CheckSignature(model))
{
if (!string.IsNullOrEmpty(echoStr))
{
//將隨機生成的 echostr 參數 原樣輸出
Response.Write(echoStr);
//截止輸出流
Response.End();
}
}
}
}
原文鏈接:https://www.cnblogs.com/weihanli/p/4348747.html
相關推薦
- 2023-01-19 GO的基礎知識掃盲注意事項_Golang
- 2022-08-14 hyper-v如何配置NAT網絡的實現_Hyper-V
- 2022-04-06 詳解pandas中缺失數據處理的函數_python
- 2022-07-16 SpringMVC基礎工作原理以及實例
- 2022-07-06 ELK收集Nginx日志的項目實戰_nginx
- 2022-09-04 python實現自動生成C++代碼的代碼生成器_python
- 2024-02-17 序列轉序模型及其pytorch實現
- 2023-01-02 Kotlin中空判斷與問號和感嘆號標識符使用方法_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支