大家都知道微信哈,但是不一定所有的人都玩过微信公众平台,因为公司在弄的原因,我最近两个月也在兼做这一个项目。
公司希望有一个微信公众账户,能对自己产品做到一定的推广作用。可是腾讯自己提供了官方的规则编辑很不好用并且还有限制,不如规则只能小于等于50条这样的。所以市场部门那边请我帮忙他们写一个后台将公众平台切换到开发模式中,今后只与我做的后台做交互;

进入到开发模式中可以阅读到官方文档http://mp.weixin.qq.com/wiki/index.php

懒得研究又想快速了解的可以听我大概总结一下:

普通微信用户发送一条消息背后产生的流程

1、一个普通用户输入消息可以有很多种类型(文本消息、图文消息、地理位置消息、链接消息、事件消息),消息经过您的手机到达移动联通电信的服务器然后转到腾讯的服务器上。

2、腾讯服务器接收到你的消息后,从他的服务器中发现你发送的消息是应该送给微信公众平台上,并且这个公众平台还是调到了开发模式上。腾讯服务器就从他的database中去获得你填入的 接口配置信息的URL 去request post一串数字到你自己在公网上架设的一台server上,比如像这样:

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[this is a test]]></Content><MsgId>1234567890123456</MsgId></xml>

Content是你发送的正文内容、MsgType是(文本消息、图文消息、地理位置消息、链接消息、事件消息)的任何一种。

3、你架设的那台server上接收到这个request之后,这里以php为后台开发语言

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
$postObj = simplexml_load_string($postStr);
$MsgType = $postObj->MsgType;
if($MsgType == "text")    //文本消息
{//do something
}
else if($MsgType == "image")    //圖片消息
{
}
else if($MsgType == "location")    //地理位置消息
{
}
else if($MsgType == "link")    //链接消息
{
}
else if($MsgType == "event")    //事件推送
{
}

具体针对什么类型的消息分别做不同的处理即可,只需带入参数$postObj用->访问内部的元素。

4、然后你自己的server上需要一个database,相应有什么关键字、来源是什么类型、是否精确匹配、回复什么内容 这几个栏位即可,从中抓到内容之后回复腾讯服务器上(5秒钟内如果不回复它的话本次消息就会失效,跟公众平台发消息将收不到任何消息),回复文本消息会是长得这样:

<xml><ToUserName><![CDATA[toUser]]></ToUserName><FromUserName><![CDATA[fromUser]]></FromUserName><CreateTime>12345678</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[content]]></Content><FuncFlag>0</FuncFlag>
</xml>

注意:这里的ToUserName 和FromUserName 与第2步中的是刚好相反的,CreateTime也是$CreateTime = time();获得到,FunFlag的意思是,标记此消息,一般会在没有找到回复规则的时候标记起来此条消息,这样人工登陆微信公众平台网站人工回复内容的时候就会很容易的看到它。

$ToUserName = $request->FromUserName;
$FromUserName = $request->ToUserName;
$CreateTime = time();
$MsgType = "text";
$Content = "你刚刚是不是说:\"" . $request->Content."\"?";
$responseXMLString=<<<STR
<xml>
<ToUserName><![CDATA[{$ToUserName}]]></ToUserName>
<FromUserName><![CDATA[{$FromUserName}]]></FromUserName>
<CreateTime>{$CreateTime}</CreateTime>
<MsgType><![CDATA[{$MsgType}]]></MsgType>
<Content><![CDATA[{$Content}]]></Content>
<FuncFlag>0</FuncFlag>
</xml>
STR;
//$responseXMLString  就是你回复给腾讯服务器的消息

5、腾讯服务器收到你的消息之后,它就知道你回复给用户的是text文本消息,并且内容是 : 你刚刚是不是说: (你说的原话)?

它就会在准确及时的会给发送微信的用户。一次消息就完成

图文消息也很简单:只是生成回复给腾讯的xml字串的时候要注意item只能有10条之内,并且最顶上最大的图是第一条记录。

说到这里还忘了一个必须要重视的东西:验证,因为腾讯需要确认这台服务器是不是当初你设置的这个地址,这样做的原意是 万一你的server被攻击了,或者域名被挟持了,它能够及时发现,不予以处理。

验证的规则有:

参数 描述
signature 微信加密签名
timestamp 时间戳
nonce 随机数
echostr 随机字符串

下面附上经过我改过的php验证代码:

if($echoStr != false)        //valid weixin
{$this->valid($this->input->get(NULL,false));return;
}
private function valid($request)
{if($this->checkSignature($request)){$this->output->set_output($request["echostr"]);}
}
private function checkSignature($request)
{$signature = $request["signature"];$timestamp = $request["timestamp"];$nonce = $request["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}
}

转载于:https://www.cnblogs.com/hyb1/archive/2013/04/27/3046653.html

微信公众平台API分析相关推荐

  1. 神卓互联内网穿透微信公众平台 API 实现微信登录

    神卓互联是一家专注于内网穿透和互联网软件开发的公司,其提供的内网穿透服务和微信开发能够满足众多企业和个人的需求.本文将介绍神卓互联的内网传统微信开发服务. 在内网中使用微信开发具有一定的困难,因为微信 ...

  2. 【转】微信公众平台API

    <?php /*** 微信公众平台API* * @author maojianlw@139.com* @link http://www.eaglephp.com*/ class WeixinCh ...

  3. 调用微信公众平台API免费给自己发消息

    素材: 注册 微信公众平台的订阅号 开通开发者中心功能,注册公众平台测试账号.获取到appID和appsecret 摘要: 使用Python 2.7 基于 微信'公众平台测试账号'的appID和app ...

  4. java微信公众平台开发接口_微信公众平台API的Java通讯实现

    微信公众平台 相信大家也不陌生,官方网站提供了一个简单的php程序Demo 因为微信平台采用HTTP方式承载微信的协议,而且不是双向通讯,也就是说只能由微信服务器主动请求我们的服务器.其实当你使用我开 ...

  5. 用 Rails 搭建微信公众平台 API

    微信 API 简介 先来看看 API 的工作流程和机制 微信公众平台的账户可以开启"开发模式"(在"高级功能"中),开启之后,用户发送微信到你的账户时,将有如下 ...

  6. 使用gson和httpclient呼叫微信公众平台API

    吐槽:微信api很无语.有一部分xml.有一部分json. 最近看如何调用微信公众平台json有关api更方便.终于找到了httpcliect和gson对. 假设你有一个更好的办法,请告诉我. 了解如 ...

  7. 微信公众平台服务器的官方示例代码,微信公众平台API接口(示例代码)

    简介 微信公众平台消息接口为开发者提供了一种新的消息处理方式.微信公众平台消息接口为开发者提供与用户进行消息交互的能力.对于成功接入消息接口的微信公众账号,当用户发消息给公众号,微信公众平台服务器会使 ...

  8. 微信公众平台API接口开发教程

    简介 微信公众平台消息接口为开发者提供了一种新的消息处理方式.微信公众平台消息接口为开发者提供与用户进行消息交互的能力.对于成功接入消息接口的微信公众账号,当用户发消息给公众号,微信公众平台服务器会使 ...

  9. 微信公众平台api下载php,微信公众平台消息接口PHP版

    使用前提条件:拥有一个公网上的HTTP服务器主机空间,具有创建目录.上传文件等权限.推荐新浪的SAE.http://sae.sina.com.cn/ 首先请注册微信公众平台的账号,注册地址:http: ...

  10. php微信公众平台API接口(thinkphp5)

    整合了微信公众号的接口.包括但不限于:获取access_token,自定义菜单,消息管理,用户管理等.持续更新...下一步增加微信支付和支付宝支付接口 更多详细信息和更新可访问项目github地址,请 ...

最新文章

  1. 一些算法入门应该明白的东西
  2. Vue+iview实现自定义格式导出Excel文件
  3. 环信快速集成,以及实际集成中遇到的坑
  4. 为什么我们不应该使用过多的线程
  5. 清北学堂Day 3 游记
  6. java直接选择排序_Java排序大法-直接选择排序
  7. Network in Network----Global Average Pooling
  8. 【031】◀▶ 一些心得体会总结
  9. 微信AES-128-CBC加密解密
  10. Springboot集成SpringData JPA
  11. html5轮播图代码效果图,JavaScript实现轮播图效果代码实例
  12. Wifi 破解原理及教程
  13. mysql实体完整性实现方法_mysql 完整性约束
  14. origin作图中的图中图(将原图中的某个区域放大)
  15. 从写作到演讲,虾米君不断尝试的 2021|年终回顾
  16. 2、Gantt 入门 (vue3 + ts)
  17. 招行一网通 java桥_招行一网通支付接入
  18. 使用74LS160设计六进制计数器
  19. 光网视与您相约安防工程高级管理人员培训--江苏站
  20. 计算机基础题选择题,计算机基础知识题库选择题.doc

热门文章

  1. 汉字无法被计算机替代作文,电脑能替代写字100字作文
  2. android开发显示专辑图片,android 完美获取音乐文件中的专辑图片并显示
  3. 北科大计通学院计算机专业双一流,计算机专业双一流高校名单-双一流大学计算机专业排名...
  4. MFC+opencv244眼部追踪的问题
  5. Jetpack架构组件库:Room
  6. amd 皓龙 服务器 芯片,AMD公布首款ARM架构皓龙A1100芯片细节
  7. 【vue3常见报错7】Uncaught TypeError - xxx is not a constructor
  8. 决定平民子弟前途命运的主要因素到底是什么?
  9. 【笔记】计算几何模板
  10. 了解扩散概率模型 (DPM)