WeChat 공개 플랫폼 메시지 인터페이스의 작동 원리는 대략적으로 다음과 같이 이해할 수 있습니다. 사용자 측에서 공개 계정 측까지의 프로세스는 다음과 같습니다. WeChat 서버는 이를 수신합니다. 메시지는 접속 시 사용자가 입력한 URL에 게시됩니다. URL 핸들러에서 메시지의 정당성을 먼저 판단한 후 해당 응답을 보냅니다. 메시지 본문 내용을 기반으로 작성되었습니다. 원리는 이해하기 쉽고, 소켓에 노출된 적이 있는 분들에게는 더 쉬울 수도 있습니다.
그러나 WeChat의 문서는 때때로 약간 혼란스럽고 WeChat 액세스에 대한 문서는 실제로 마음에 들지 않습니다. 공식 문서의 첫 번째 단계는 "메시지 인터페이스 신청"입니다. 여기서 URL을 입력해야 합니다. 이 URL은 WeChat에서 보낸 메시지를 처리하는 데 사용되지만 WeChat은 두 번째 단계에서 URL에 관련 구성을 작성합니다. . 조심하면 초보자를 망칠 것입니다. 아래에서는 제가 이해한 대로 설명하겠습니다.
먼저 개발자가 접속하면 WeChat 서버는 여러분이 입력한 URL로 get 요청을 보냅니다. 이 요청은 각각 서명(WeChat 암호화된 서명, 서명)의 4가지 매개변수를 전달합니다. 개발자가 입력한 토큰 매개변수와 요청의 timestamp 매개변수 및 nonce 매개변수의 조합), timestamp(timestamp), nonce(임의의 숫자), echostr(임의의 문자열) .아래 그림과 같이 HttpContext.Current.Request.RawUrl을 사용하여 현재 요청의 원래 URL을 가져옵니다.
개발자는 서명(아래) 확인 방법). 본 GET 요청이 WeChat 서버에서 오는 것이 확인되면 echostr 매개변수 내용을 그대로 반환해 주셔야 접속이 적용되어 개발자가 되며, 그렇지 않으면 접속이 실패하게 됩니다.
加密/校验流程如下:1. 将token、timestamp、nonce三个参数进行字典序排序 2. 将三个参数字符串拼接成一个字符串进行sha1加密 3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。下面是代码实现。首先,在你的处理程序中(我是新建了一个一般处理程序wx.ashx),判断当前请求的类型,因为接入时,是发送的GET请求,消息处理是发送的POST请求。如下图:这里我对验证url的方法进行封装。/// <summary> /// 验证url权限, 接入服务器 /// </summary> /// <param name="token"></param> /// <returns></returns> public static bool ValidUrl(string token) { string echoStr = VqiRequest.GetQueryString("echoStr"); if (CheckSignature(token)) { if (!string.IsNullOrEmpty(echoStr)) { Utils.ResponseWrite(echoStr); return true; } } return false; }/// <summary> /// 验证微信签名 /// </summary> /// * 将token、timestamp、nonce三个参数进行字典序排序 /// * 将三个参数字符串拼接成一个字符串进行sha1加密 /// * 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。 /// <returns></returns> public static bool CheckSignature(string token) { string signature = VqiRequest.GetQueryString("signature"); string timestamp = VqiRequest.GetQueryString("timestamp"); string nonce = VqiRequest.GetQueryString("nonce"); string[] ArrTmp = { token, timestamp, nonce }; Array.Sort(ArrTmp); //字典排序 string tmpStr = string.Join("", ArrTmp); tmpStr = Utils.HashPasswordForStoringInConfigFile(tmpStr, "SHA1"); tmpStr = tmpStr.ToLower(); if (tmpStr == signature) { return true; } else { return false; } }참고: VqiRequest.GetQueryString 코드는 캡슐화된 QueryString 요청 메서드입니다. 사용 시 QueryString[""]으로 변경할 수 있습니다.
처리 프로세스는 그림과 같습니다.
배열에 시그니처, 타임스탬프, nonce 세 가지 매개변수를 넣고,
정렬된 ArrTmp:
세 개의 매개변수 문자열을 하나의 문자열로 연결:
sha1로 tmpStr을 암호화하고 암호화된 문자열을 소문자로 변환합니다.
그런 다음 서명과 비교하여 동일하면 이는 확인 성공을 의미합니다.
인증에 성공했으며 echoStr이 WeChat으로 반환되었습니다.
/// <summary> /// 根据指定的密码和哈希算法生成一个适合于存储在配置文件中的哈希密码 /// </summary> /// <param name="str">要进行哈希运算的密码</param> /// <param name="type"> 要使用的哈希算法</param> /// <returns>经过哈希运算的密码</returns> public static string HashPasswordForStoringInConfigFile(string str, string type) { return FormsAuthentication.HashPasswordForStoringInConfigFile(str, type); } public static void ResponseWrite(string str) { HttpContext.Current.Response.Write(str); HttpContext.Current.Response.End(); }
처리 프로그램 작성 후 iis에 배포(방법은 Tutorial 1 참조), 로그인 WeChat 관리 배경 mp.weixin으로 이동합니다. 개발자 센터 페이지에서 "구성 수정 버튼"을 클릭하여 URL, 토큰 및 EncodingAESKey를 입력합니다. 여기서 URL은 개발자가 WeChat 서버를 수신하는 데 사용하는 인터페이스 URL입니다. 데이터. 토큰은 개발자가 작성하고 서명을 생성하는 데 사용할 수 있습니다(토큰은 보안을 확인하기 위해 인터페이스 URL에 포함된 토큰과 비교됩니다). EncodingAESKey는 개발자가 수동으로 입력하거나 임의로 생성되며 메시지 본문 암호화 및 암호 해독 키로 사용됩니다. 동시에 개발자는 일반 텍스트 모드, 호환 모드 및 보안 모드 등 메시지 암호화 및 암호 해독 방법을 선택할 수 있습니다. 모드 선택 및 서버 구성은 제출 후 즉시 적용됩니다. 암호화 및 복호화 방법의 기본 상태는 일반 텍스트 모드입니다. 암호화 및 암호 해독 모드는 이후 시리즈에서 공유되므로 계속 지켜봐 주시기 바랍니다.
그림과 같이:
제출을 클릭한 후 WeChat 서버 요청은 위에 적힌 URL로 이동합니다. 확인이 성공하면 바인딩이 성공한 것입니다.
END
[관련 추천]
위 내용은 WeChat 개발 부서에 대한 초보자 액세스 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!