微信公众平台常用接口-消息交互原理分析
原创下面我们结合上一节的代码来分析一下微信公众平台的消息交互原理。下面的代码基于微信公众平台官方示例代码修改完善而成。
1 <?php
2 /*
3 方倍工作室 http://www.fangbei.org/
4 CopyRight 2013 www.doucube.com All Rights Reserved
5 */
6
7 define(「TOKEN」, 「weixin」);
8 $wechatObj = new wechatCallbackapiTest();
9 if (isset($_GET[『echostr』])) {
10 $wechatObj->valid();
11 }else{
12 $wechatObj->responseMsg();
13 }
14
15 class wechatCallbackapiTest
16 {
17 public function valid()
18 {
19 $echoStr = $_GET[「echostr」];
20 if($this->checkSignature()){
21 echo $echoStr;
22 exit;
23 }
24 }
25
26 private function checkSignature()
27 {
28 $signature = $_GET[「signature」];
29 $timestamp = $_GET[「timestamp」];
30 $nonce = $_GET[「nonce」];
31
32 $token = TOKEN;
33 $tmpArr = array($token, $timestamp, $nonce);
34 sort($tmpArr);
35 $tmpStr = implode( $tmpArr );
36 $tmpStr = sha1( $tmpStr );
37
38 if( $tmpStr == $signature ){
39 return true;
40 }else{
41 return false;
42 }
43 }
44
45 public function responseMsg()
46 {
47 $postStr = $GLOBALS[「HTTP_RAW_POST_DATA」];
48
49 if (!empty($postStr)){
50 $postObj = simplexml_load_string($postStr,
『SimpleXMLElement』, LIBXML_NOCDATA);
51 $fromUsername = $postObj->FromUserName;
52 $toUsername = $postObj->ToUserName;
53 $keyword = trim($postObj->Content);
54 $time = time();
55 $textTpl = 「
首先我们来看一下代码的结构。
第 2 行 ~ 第 5 行是注释部分。
第 7 行使用 define()函数定义常量,常量名称为 TOKEN,常量的值为 weixin,这个值就是在启用开发模式时填写的 Token。
第 15 行 ~ 第 75 行定义了一个类 wechatCallbackapiTest,并在类中定义了 3 个方法 valid()、checkSignature()和 responseMsg()。
第 8 行 ~ 第 13 行为程序执行语句。第 8 行实例化了一个类对象。在第 9 行中,判断是否有 GET 请求,是否有 echostr 变量,如果有则执行 valid()方法,否则执行 responseMsg()方法。
接下来分析微信消息交互流程。
在提交 URL 和 Token 申请验证的时候,微信服务器将发送 GET 请求到填写的 URL 上,并且带上四个参数(signature、timestamp、nonce、echostr),GET 请求如下所示:
signature=6e35c6f3d3279338781047dbffd09426b9ecdee3&echostr=5979420653038092664×tamp=1392001400&nonce=1392192345
上述请求参数说明如表 3-1 所示。
表 3-1 请求校验参数说明
这个 GET 请求是包含 echostr 变量的,所以执行 valid()方法,在该方法中,又调用了校验签名方法 checkSignature()方法。如果签名校验为真,则原样输出变量 $echoStr 的值。
加密/校验流程如下:
1)将 token、timestamp、nonce 三个参数进行字典序排序(第 33 行 ~ 第 34 行)。
2)将三个参数字符串拼接成一个字符串进行 sha1 加密(第 35 行 ~ 第 36 行)。
3)开发者获得加密后的字符串可与 signature 对比,标识该请求来源于微信,(第 38 行 ~ 第 42 行)。
而在发送问号的时候,微信服务器也会带上前面三个参数(signature、timestamp、nonce)访问开发者设置的 URL,同时还会将消息的 XML 数据包 POST 到 URL 上。XML 格式如下所示:
而消息请求不包含 echostr 变量,所以将执行响应消息 responseMsg()方法。
响应消息方法首先接收上述原始 POST 数据(第 47 行)。
然后将数据载入对象中,对象名为 SimpleXMLElement,LIBXML_NOCDATA 表示将 CDATA 合并为文本节点,代码中第 50 行实现此功能。
第 51 行 ~ 第 54 行,取得 XML 类对象的值,并赋给新的变量,注意发送方变为接收方,接收方变为发送方。
第 55 行 ~ 第 62 行,构造要回复的 XML 数据包。
第 63 行,判断发送过来的关键字是不是问号。
第 64 行 ~ 第 65 行,设置回复的消息类型为 text,内容为当前年月日时分秒。
第 66 行 ~ 第 67 行,封装回复的 XML 数据包,并且向微信服务器输出。XML 格式如下所示:
这样用户就会收到回复的消息,效果如图 3-26 所示。
版权保护: 本文由 李斯特 原创,转载请保留链接: https://www.wechatadd.com/artdet/8917
- 上一篇:自动回复当前时间
- 下一篇:微信公众平台常用接口-接收用户普通消息
阅读推荐
更多...- 重塑形象,不发讨人嫌的朋友圈 2022-07-16
- 小结:对发布的内容负责,客户业绩增长了100% 2023-04-01
- 让业绩高速增长!中间钟:与客户互动,以价值俘获人心 2023-04-14
- 总是卖弄专业性术语——销售技巧 2023-03-04
- 病毒式营销——《煎饼侠》傍上《钢铁侠》 2022-07-23
- 知识营销的特点是什么? 2022-06-30
- 登门槛效应:给用户铺台阶,让他心甘情愿买更多--销售的关键在哪里? 2023-05-20
- [微信创业]成功的微商人,微信创业卖海鲜 2023-07-12
- 微信上的创业机会及赚钱途径,微信上的创业机会 2023-07-09
- 电商软文的写作技巧,电商开展软文营销的步骤,建议收藏! 2023-02-16
- 微信营销:传统企业的新机遇与挑战 2024-01-20
- 备选签约法「销售技巧」 2023-03-02
- 顾客的喜好程度,决定价位浮动大小——销售技巧 2023-03-04
- 成功销售如何交换思维——销售的本质 2023-04-01
- 不要因为顾客说会「撞衫」就不卖了——销售技巧 2023-03-04
- 能力篇——销售应具有的心态 2023-03-04
- 成交后尽量避免客户反悔,不断提高您的销售技巧和业绩 2023-04-01
- 轻松解决粉丝的信任问题 2022-07-24