위챗 백엔드의 '고급' 기능을 복잡하게 헤쳐나가는 것보다 개발자가 되기 위한 준비가 더 중요하다고 생각해서 이 부분을 먼저 다루겠습니다.
개발자로서 우리가 직면해야 할 두 가지 주요 개체는 WeChat 서버와 애플리케이션(웹사이트) 서버입니다.
WeChat 사용자가 공개 플랫폼에 메시지를 보내면 메시지는 실제로 WeChat 서버로 먼저 전송되고 WeChat 서버는 웹사이트 서버에 또 다른 요청을 시작합니다. 웹사이트 서버는 이 요청의 결과를 반환합니다. , 그러면 WeChat 서버가 이를 WeChat 클라이언트로 보냅니다.
전체 메시지 통신 과정은 다음과 같습니다.
위의 5단계 중 우리는 개발자로서 주로 3단계에 중점을 둡니다. 이 단계에서는 주로 초점을 맞춥니다. on 실제로 3가지 작업이 있습니다:
2에서 XML 정보 수신
서버 내부 로직 실행
4
에 대한 XML 정보 정리 및 반환
2. XML 통신 형식
사용자가 WeChat 클라이언트를 사용하여 다양한 유형의 메시지를 보내면 웹사이트 서버는 다양한 형식(문자, 음성, 사진 등)의 데이터를 수신합니다. 형식 현재는 XML만 있습니다.
학습에 있어서 가장 간단한 텍스트 유형에 능숙하다면 다른 형식도 비슷하다고 생각합니다. 다음 지침에서는 Senparc.Weixin.MP.dll이 이러한 번거로운 형식과 정의를 완전히 무시하는 데 도움이 될 수 있다는 것을 알게 될 것입니다.
간단한 텍스트 요청 XML(RequestMessage) 내용은 다음과 같습니다.
<xml> <ToUserName><![CDATA[gh_a96a4a619366]]></ToUserName> <FromUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></FromUserName> <CreateTime>1357986928</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[TNT2]]></Content> <MsgId>5832509444155992350</MsgId> </xml>
参数 | 描述 |
---|---|
ToUserName | 开发者微信号 |
FromUserName | 发送方帐号(一个OpenID) |
CreateTime | 消息创建时间 (整型) |
MsgType | text |
Content | 文本消息内容 |
MsgId | 消息id,64位整型 |
간단한 텍스트 반환 XML(ResponseMessage)의 내용은 다음과 같습니다.
<xml> <ToUserName><![CDATA[olPjZjsXuQPJoV0HlruZkNzKc91E]]></ToUserName> <FromUserName><![CDATA[gh_a96a4a619366]]></FromUserName> <CreateTime>12345678</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDATA[content]]></Content> <FuncFlag>0</FuncFlag> </xml>
参数 | 描述 |
---|---|
ToUserName | 接收方帐号(收到的OpenID) |
FromUserName | 开发者微信号 |
CreateTime | 消息创建时间 |
MsgType | text |
Content | 回复的消息内容,长度不超过2048字节 |
FuncFlag | 位0x0001被标志时,星标刚收到的消息。 |
각 XML 정보에는 텍스트 정보와 같은 크기 제한이 있습니다. 콘텐츠 내용은 600 단어를 초과하지 않는 것이 좋습니다.
위 그림에서 2단계가 시작된 후 WeChat 서버에 대기 시간이 있습니다. 5초, 처리되지 않은 경우 이 시간 내에 4단계로 이동하면 요청이 종료됩니다(데이터 전송 시간 포함). 즉, 시간이 초과되면 웹사이트 서버가 데이터를 반환하더라도 클라이언트는 응답을 받을 수 없습니다.
문자 메시지에 태그를 추가하여 링크를 넣을 수 있습니다. 하지만 많은 친구들이 테스트한 결과 iOS에서는 문제가 없는 것으로 나타났습니다. 실제로 그 이유는 (적어도 지금까지는) 다음과 같습니다. Android WeChat 클라이언트는 태그 형식을 엄격히 준수하여 작성해야 합니다. //xxxx">content , href 뒤에 작은따옴표를 사용하지 말고 다른 속성을 추가하지 마세요.
위 XML 노드의 FromUserName은 WeChat 사용자의 OpenId입니다. 동일한 공개 계정에 대해 이 OpenId의 처음 6자리는 전체 공개 기록 중에서 일관되고 고유합니다. 플랫폼. 즉, 동일한 사용자가 두 개의 다른 공개 계정을 팔로우하는 경우 두 개의 다른 OpenId를 갖게 됩니다.
CreateTime은 Unix 시간을 사용하므로 C#을 사용하는 경우 변환을 해야 합니다.
과거에는 WeChat 서버가 노드 이름 대신 노드 위치(node[0])를 사용하여 정보를 읽었습니다. .이제 이 문제는 나아지는 것 같으나, 그래도 조심해야 합니다(엔…………&%&……).
이 특별한 통신 방법으로 인해 (적어도 지금까지는) 모든 요청이 먼저 클라이언트에서 시작되어야 합니다. 웹사이트 서버 클라이언트(물론 시뮬레이션된 로그인과 같은 다른 방법도 있습니다)
비록 전체 의사소통 과정은 매우 힘들지만 단순하지만, 공식 API는 여전히 일부 분야에 대해 특별한 규칙이나 처리가 이루어지고 있으며, 수많은 유형의 요청 데이터를 프로세스 중심 방식으로 처리하는 것도 매우 힘든 일입니다.
이를 위해 저는 오픈 소스 프로젝트를 만들었습니다: Senparc.Weixin.MP, 주소: http://www.php.cn/
Senparc.Weixin.MP의 주요 목적은 다음과 같습니다. C# 개발자가 전체 통신 프로세스를 단순화하고, 개체 지향 방식으로 메시지를 처리하며, 번거로운 API보다는 비즈니스 로직에 집중할 수 있도록 지원합니다.
Senparc.Weixin.MP를 사용하고 이를 외부 네트워크에 배포하여 WeChat 서버와 통신하려면 다음 환경을 준비해야 합니다.
VS2012(VS2010 이상) SP1);
MVC 데모를 실행하려면 .NET 4.0 이상이 필요합니다(MVC 4 설치). Webforms 데모를 실행하려면 .NET 3.5 이상이 필요합니다. ;
포트 80, 가상 호스트, 피넛셸 매핑 인트라넷, VPS, 독립 서버를 사용하여 접속할 수 있는 도메인 이름 또는 IP를 사용할 수 있습니다.
더 많은 Senparc.Weixin.MP SDK WeChat 공개 플랫폼 개발 튜토리얼(2): 개발자가 되는 것과 관련된 기사는 PHP 중국어에 주목하세요. 웹사이트!