위챗 애플릿 위챗 개발 소스 코드에서 WeChat 개발을 분석해 보세요.

소스 코드에서 WeChat 개발을 분석해 보세요.

May 05, 2017 am 10:49 AM

지난 이틀 동안 위챗에서 인터페이스를 오픈해야 해서 공부를 했는데요, 과정은 매우 어려웠지만 결과는 이상적으로 좋았습니다. 이제 위챗 개발에 있어서 주의해야 할 점을 소개하겠습니다. .

1. 계정 문제

 /* 우선 공개 플랫폼을 선택해야 합니다(오픈 플랫폼은 신청용인 것 같습니다) 통합에 대해서는 잘 연구하지 않았는데 혹시 아시는 분 계시면 알려주세요.) 공개 플랫폼에서는 계정을 등록해야 하는데 그 중 개인형과 법인형이 있습니다. 구독 번호만 신청할 수 있으며, 기업 유형에서만 서비스 계정을 얻을 수 있습니다. 구독 계정은 일부 키워드를 구성하여 수행할 수 있습니다. 서비스 계정은 서비스 계정에만 일부 스마트 기능을 배포할 수 있습니다. 따라서 귀하가 개인이고 다른 콘텐츠로 사용자가 보낸 메시지에 대한 답장을 타겟팅하려면 잠자기 상태로 전환하세요. */

위 문단의 의미는 개발에 종사하시는 분들은 아실 겁니다. 네, 오늘 구독 계정에 로그인해 보니 구독 계정에도 고급 기능이 있다는 걸 알았네요. 그 당시에는 없었습니다. 리뷰를 통과하세요. 좋아요, 아래 공유를 방해하지 않습니다.

2. 개발 모드

서비스 계정을 얻으면 매우 간단합니다. (구독 계정에는 고급 기능 옵션이 없습니다.) 나중에 활성화할 방법을 선택할 수 있습니다. 현재 개발 및 편집을 위해 하나만 시작할 수 있습니다.

3, 구성 서버

WeChat 인터페이스에는 URL이 하나만 있으며 모든 데이터는 다음을 통해 연결됩니다. 이 URL 서버는 이 인터페이스를 사용하여 연결(GET 또는 POST)해야 합니다. 다음은 이 인터페이스가 사용되는 두 위치에 대해 설명합니다.

4. 확인 서버

귀하의 서버 URL을 입력한 후 WeChat은 귀하의 URL에 액세스하기 위해 여러 매개변수를 가져옵니다. 특정 데이터를 반환하려면 다음 링크를 확인하세요: http://mp.weixin.qq.com/wiki/index.php?title=%E6%8E%A5%E5%85%A5 %E6% 8C%87%E5%8D%97

참고용으로 몇 가지 PHP 코드가 있습니다. 여기에서 여러 번 우회하여 전체 코드를 게시하겠습니다.

 1         /// <summary> 2         /// 验证微信签名 3         /// </summary> 4         /// <param name="sigNature">微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。</param> 5         /// <param name="timestamp">时间戳</param> 6         /// <param name="nonce">随机数</param> 7         /// <param name="echoStr">随机字符串</param> 8         /// <returns>开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。</returns> 9         [System.Web.Http.AcceptVerbs("GET")]10         [System.Web.Http.ActionName("Api")]11         [ApiExplorerSettings(IgnoreApi = false)]12         public HttpResponseMessage CheckSignature(string sigNature, string timestamp, string nonce, string echoStr)13         {14             var content =15                    string.Format("SigNature:{0}\nTimestamp:{1}\nNonce:{2}\nEchoStr:{3}",16                                  sigNature, timestamp, nonce, echoStr);17             logger.Debug(content);    // 此处的log你可以删掉18 19             var list = new string[] { timestamp, nonce, TOKEN };20             Array.Sort(list);21             var tmpArr = string.Join("", list);22             var tmpStr = FormsAuthentication.HashPasswordForStoringInConfigFile(tmpArr, "SHA1").ToLower();23 24             if (tmpStr == sigNature && !string.IsNullOrEmpty(echoStr))     //根据微信的验证规则做判断25                 return Tools.GetReturn(echoStr);26 27             return Tools.GetReturn("error");28         }
로그인 후 복사

GetReturn 함수 를 작성한 이유는 MVC가 문자열을 반환할 때마다 한 쌍의 따옴표가 추가되기 때문입니다. 외부 계층으로 이동하고 WeChat은 여전히 ​​​​이를 인식하지 못할 정도로 멍청합니다. . . . 이 기능은 주로 MVC 캡슐화를 제거하기 위한 것입니다

1      public static HttpResponseMessage GetReturn(string message)2         {3             return new HttpResponseMessage4                 {5                     Content = new StringContent(message, Encoding.UTF8, "text/html")6                 };7         }
로그인 후 복사

위 CheckSignature는 주로 WeChat 서비스를 확인하는 데 사용되는 GET 인터페이스입니다. 물론 WeChat이 말한 내용을 잘 살펴보면, echoStr을 받았을 때 별도의 확인 단계를 거치지 않고 그냥 돌려보내도 괜찮다는 것을 알 수 있습니다.

5, 메시지 수신 인터페이스

사용자가 메시지를 보낼 때 한 가지 기능에만 집중했습니다 가끔 사용자 메시지에 답장을 하고 싶을 때가 있는데, 문자 메시지에만 집중해도 괜찮습니다(사실 다른 유형의 메시지도 원칙은 비슷합니다).

여기서 몇 가지 사항에 주의해야 합니다.

a. 이 인터페이스의 ActionName은 위에서 확인한 인터페이스와 동일합니다. 외부에서 접근하는 방식이 다릅니다.

아아아아

b. 메시지 내용을 가져오는 이 방법을 찾기까지 오랫동안 연구해 왔고 많은 노력이 필요했습니다.

1         [System.Web.Http.AcceptVerbs("POST")]2         [System.Web.Http.ActionName("Api")]3         [ApiExplorerSettings(IgnoreApi = false)]4         public HttpResponseMessage ReceiveMessage()
로그인 후 복사

 c. 이 인터페이스에서 그는 많은 변수를 게시했습니다. 나는 그를 위해 정규 표현식을 사용했습니다.

1   var message = Request.Content.ReadAsStringAsync().Result;
로그인 후 복사

 d. 두 가지 유형이 있습니다. 이벤트: 이벤트와 텍스트, 이벤트는 팔로우와 언팔로우가 필요하며, 보낸 텍스트에 주의를 기울일 때 감사를 표시해야 합니다. 회신하다.

1             var toUserName = GetItemValue(message, ToUserNameReg);2             var fromUserName = GetItemValue(message, FromUserNameReg);3             var createTime = GetItemValue(message, CreateTimeReg);4             var msgType = GetItemValue(message, MsgTypeReg);5             var content = GetItemValue(message, ContentReg);6             var msgId = GetItemValue(message, MsgIdReg);7             var eventStr = GetItemValue(message, EventReg);8             var eventKey = GetItemValue(message, EventKeyReg);
로그인 후 복사

 e, 모든 코드는 여기에 있습니다:

            switch (msgType)
            {                case "text":
                    {
                    }                case "event":
                    {
                    }                default:                    return Tools.GetReturn("error");
            }
로그인 후 복사
1         private static readonly Regex ToUserNameReg = new Regex(@"(?<=<ToUserName><!\[CDATA\[).*?(?=\]\]></ToUserName>)", RegexOptions.Compiled);2         private static readonly Regex FromUserNameReg = new Regex(@"(?<=<FromUserName><!\[CDATA\[).*?(?=\]\]></FromUserName>)", RegexOptions.Compiled);3         private static readonly Regex CreateTimeReg = new Regex(@"(?<=<CreateTime>)\d*?(?=</CreateTime>)", RegexOptions.Compiled);4         private static readonly Regex MsgTypeReg = new Regex(@"(?<=<MsgType><!\[CDATA\[).*?(?=\]\]></MsgType>)", RegexOptions.Compiled);5         private static readonly Regex ContentReg = new Regex(@"(?<=<Content><!\[CDATA\[).*?(?=\]\]></Content>)", RegexOptions.Compiled);6         private static readonly Regex MsgIdReg = new Regex(@"(?<=<MsgId>)\d*?(?=</MsgId>)", RegexOptions.Compiled);7         private static readonly Regex EventReg = new Regex(@"(?<=<Event><!\[CDATA\[).*?(?=\]\]></Event>)", RegexOptions.Compiled);8         private static readonly Regex EventKeyReg = new Regex(@"(?<=<EventKey><!\[CDATA\[).*?(?=\]\]></EventKey>)", RegexOptions.Compiled);
로그인 후 복사
 1      /// <summary> 2         /// 接受微信消息,如果需要反馈,则调用回复接口进行答复 3         /// </summary> 4         /// <param name="ToUserName">开发者微信号</param> 5         /// <param name="FromUserName">发送方帐号(一个OpenID)</param> 6         /// <param name="CreateTime">消息创建时间 (整型)</param> 7         /// <param name="MsgType">text</param> 8         /// <param name="Content">文本消息内容</param> 9         /// <param name="MsgId">消息id,64位整型</param>10         /// <returns>successful or not</returns>11         [System.Web.Http.AcceptVerbs("POST")]12         [System.Web.Http.ActionName("Api")]13         [ApiExplorerSettings(IgnoreApi = false)]14         public HttpResponseMessage ReceiveMessage()15         {16             var message = Request.Content.ReadAsStringAsync().Result;17 18             var toUserName = GetItemValue(message, ToUserNameReg);19             var fromUserName = GetItemValue(message, FromUserNameReg);20             var createTime = GetItemValue(message, CreateTimeReg);21             var msgType = GetItemValue(message, MsgTypeReg);22             var content = GetItemValue(message, ContentReg);23             var msgId = GetItemValue(message, MsgIdReg);24             var eventStr = GetItemValue(message, EventReg);25             var eventKey = GetItemValue(message, EventKeyReg);26 27             var logStr = string.Format("Message:{8}\n\nToUserName:{0}\nFromUserName:{1}\nCreateTime:{2}\nMsgType:{3}\nContent:{4}\nMsgId:{5}\nEvent:{6}\nEventKey:{7}",28                         toUserName, fromUserName, createTime, msgType, content, msgId, eventStr, eventKey, message);29             logger.Debug(logStr);30 31             switch (msgType)32             {33                 case "text":34                     {35                         var returnMessage = Tools.GetCategory(content);  // 这块是获取反馈信息的方法,你的和我的应该不一样,所以这块你得修改一下。36                         var sendMessage = GetSendMessage(fromUserName, returnMessage, toUserName);37                         logger.Debug("MsgId:" + msgId + Environment.NewLine + sendMessage);38 39                         return Tools.GetReturn(sendMessage);        // 这个函数在上面已经贴出来了,在这块就不在贴了40                     }41                 case "event":42                     {43                         if (eventStr == "subscribe")      // 关注事件44                         {45                             var returnMessage = "欢迎关注**账号 [微笑]";46                             var sendMessage = GetSendMessage(fromUserName, returnMessage, toUserName);47                             return Tools.GetReturn(sendMessage);48                         }49                         return Tools.GetReturn("error");50                     }51                 default:52                     return Tools.GetReturn("error");53             }54         }
로그인 후 복사
 1      /// <summary> 2         /// 获取消息体中正则所能匹配到的内容 3         /// </summary> 4         /// <param name="message">消息内容</param> 5         /// <param name="regex">正则</param> 6         /// <returns>返回正则匹配的所有内容</returns> 7         [ApiExplorerSettings(IgnoreApi = true)] 8         private string GetItemValue(string message, Regex regex) 9         {10             if(regex.IsMatch(message))11                 return regex.Match(message).Value;12             return "";13         }
로그인 후 복사

[관련 추천]

WeChat 공개 계정 플랫폼 소스 코드 다운로드

2. Xiaozhu CMS Lifetong O2O 시스템 v2.0 전용 버전을 다운로드하세요

위 내용은 소스 코드에서 WeChat 개발을 분석해 보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Linux에서 컬 버전을 업데이트하는 방법에 대한 튜토리얼입니다! Linux에서 컬 버전을 업데이트하는 방법에 대한 튜토리얼입니다! Mar 07, 2024 am 08:30 AM

Linux에서 컬 버전을 업데이트하려면 다음 단계를 따르세요. 현재 컬 버전을 확인하세요. 먼저 현재 시스템에 설치된 컬 버전을 확인해야 합니다. 터미널을 열고 다음 명령을 실행합니다. 컬 --version 이 명령은 현재 컬 버전 정보를 표시합니다. 사용 가능한 컬 버전 확인: 컬을 업데이트하기 전에 사용 가능한 최신 버전을 확인해야 합니다. 최신 버전의 컬을 찾으려면 컬의 공식 웹사이트(curl.haxx.se)나 관련 소프트웨어 소스를 방문하세요. 컬 소스 코드 다운로드: 컬 또는 브라우저를 사용하여 선택한 컬 버전의 소스 코드 파일(일반적으로 .tar.gz 또는 .tar.bz2)을 다운로드합니다.

Linux 커널 소스 코드 저장 경로 분석 Linux 커널 소스 코드 저장 경로 분석 Mar 14, 2024 am 11:45 AM

Linux 커널은 소스 코드가 전용 코드 저장소에 저장되어 있는 오픈 소스 운영 체제 커널입니다. 이번 글에서는 리눅스 커널 소스코드의 저장 경로를 자세히 분석하고, 독자들의 이해를 돕기 위해 구체적인 코드 예시를 활용하겠습니다. 1. Linux 커널 소스 코드 저장 경로 Linux 커널 소스 코드는 linux라는 Git 저장소에 저장되어 있으며, 이 저장소는 [https://github.com/torvalds/linux](http://github.com/torvalds/linux)에서 호스팅됩니다.

자바 소스 코드를 보는 방법 자바 소스 코드를 보는 방법 Dec 27, 2023 pm 04:41 PM

보기 단계: 1. 설치 디렉토리를 찾거나 온라인으로 봅니다. 2. 소스 코드의 압축을 풉니다. 3. 텍스트 편집기 또는 통합 개발 환경을 사용합니다. 4. 소스 코드를 탐색하고 봅니다. 자세한 소개: 1. 설치 디렉터리 찾기 또는 온라인 보기: JDK가 설치된 경우 JDK 설치 디렉터리에서 Java 소스 코드를 찾을 수 있습니다. JDK 설치 디렉토리에는 일반적으로 Java 코어 클래스 라이브러리의 소스 코드가 포함된 src.zip 또는 이와 유사한 압축 파일이 있으며 Java 소스 코드를 온라인으로 볼 수도 있습니다.

Tomcat 소스 코드를 보는 방법 Tomcat 소스 코드를 보는 방법 Jan 25, 2024 pm 01:56 PM

Tomcat 소스 코드를 보는 단계: 1. Tomcat 소스 코드를 다운로드합니다. 2. IDEA에서 Tomcat 소스 코드를 가져옵니다. 3. 소스 코드를 봅니다. 4. Tomcat의 작동 원리를 이해합니다. 6. 주의사항 7. 지속적으로 학습하고 업데이트하세요. 8. 도구와 플러그인을 사용하세요. 자세한 소개: 1. Tomcat 소스 코드를 다운로드하려면 먼저 Tomcat 소스 코드를 얻어야 합니다. Apache Tomcat 등의 공식 웹사이트에서 소스 코드 패키지를 다운로드할 수 있습니다.

PHP WeChat 개발: 메시지 암호화 및 암호 해독 구현 방법 PHP WeChat 개발: 메시지 암호화 및 암호 해독 구현 방법 May 13, 2023 am 11:40 AM

PHP는 웹 개발 및 서버 측 프로그래밍, 특히 WeChat 개발에 널리 사용되는 오픈 소스 스크립팅 언어입니다. 오늘날 점점 더 많은 회사와 개발자가 WeChat 개발에 PHP를 사용하기 시작하고 있습니다. PHP는 배우기 쉽고 사용하기 쉬운 개발 언어이기 때문입니다. WeChat 개발에서 메시지 암호화 및 복호화는 데이터 보안과 관련되어 있기 때문에 매우 중요한 문제입니다. 암호화 및 복호화 방법이 없는 메시지의 경우 해커가 쉽게 데이터를 획득할 수 있어 사용자에게 위협이 될 수 있습니다.

자바 소스 코드의 접미사는 무엇입니까? 자바 소스 코드의 접미사는 무엇입니까? Dec 27, 2023 pm 04:31 PM

Java에서 소스 코드 파일의 접미사는 일반적으로 .java입니다. Java 프로그램을 작성하면 Java 소스 코드가 포함된 접미사 .java가 붙은 소스 코드 파일이 생성됩니다. 예를 들어, 간단한 Java 소스 코드 파일의 이름은 MyClass.java로 지정할 수 있습니다. 여기서 MyClass는 클래스 이름이고 .java는 파일의 접미사입니다.

Linux 커널 소스 코드 배포에 대한 심층 탐구 Linux 커널 소스 코드 배포에 대한 심층 탐구 Mar 15, 2024 am 10:21 AM

이것은 Linux 커널 소스 코드 배포를 심층적으로 탐구하는 1500 단어 분량의 기사입니다. 제한된 공간으로 인해 Linux 커널 소스 코드의 조직 구조에 중점을 두고 독자의 이해를 돕기 위해 몇 가지 구체적인 코드 예제를 제공합니다. Linux 커널은 소스 코드가 GitHub에서 호스팅되는 오픈 소스 운영 체제 커널입니다. 전체 Linux 커널 소스 코드 배포판은 매우 방대하며 여러 하위 시스템 및 모듈과 관련된 수십만 줄의 코드를 포함합니다. Linux 커널 소스 코드를 더 깊이 이해하려면

소스 코드를 읽어 최신 PHP 코드 사양의 디자인 원칙과 목표를 어떻게 이해할 수 있습니까? 소스 코드를 읽어 최신 PHP 코드 사양의 디자인 원칙과 목표를 어떻게 이해할 수 있습니까? Sep 05, 2023 pm 02:46 PM

소스 코드를 읽어 최신 PHP 코드 사양의 디자인 원칙과 목표를 어떻게 이해할 수 있습니까? 소개: 고품질 PHP 코드를 작성할 때 특정 코딩 표준을 따르는 것이 매우 중요합니다. 코드 사양을 통해 코드의 가독성, 유지 관리성, 확장성을 향상시킬 수 있습니다. PHP 언어에는 PSR(PHPStandardsRecommendations)이라는 널리 채택된 코드 사양이 있습니다. 이 기사에서는 최신 PHP 코드 사양의 소스 코드를 읽는 방법을 소개합니다.

See all articles