微信物联网云服务

微信物联网开发原理图:

一、微信公众号与用户端的交互

1.你需要的东西

  • 申请到一个微信公众号,申请地址点这里,其中,订阅号的申请门槛较低,不需要实名认证,开放给开发者的接口权限也基本够用。
**我自己的公众号**
  • 自定义HTTP服务器
    1.本地服务器    需要申请公网IP和开通80端口,维护方便,但易受外界影响
    2.云服务器    由互联网公司提供,学生优惠性价比高
    3.Web服务器    例如百度的BAE和新浪的SAE,使用方便,本地需要安装Git或SVN
  • 开发的技术储备
      理论上来说,凡是能开发网站的语言都可以使用,如PHP、ASP、JSP(Java Serve Page)、ASP.NET、Node.JS、Python、Java等。由于PHP在服务器端开发十分普遍,微信官网提供的示例程序也是用PHP作为开发语言来介绍,因此,我选择PHP写代码。
      由于微信公众平台开发类似于网站开发,因此,将会使用到网站开发的相关技术知识,如HTTP协议、HTML、XML、JSON、数据库等。
      关于代码编辑器,有Sublime Text,Eclipse等。我使用的是Hbuilder。

2.自定义服务器上的部署

3.开发接口验证

微信公众平台技术文档

一个不错的PHP在线执行工具

<?php
define("TOKEN","weixin");       // 定义token
$wechatObj = new wechat_php();  // 生成类实例
$wechatObj->valid();        // 调用类的检验方法

// 定义一个操作微信公众帐号的类
class wechat_php
{
    // 定义公用校验方法
    public function valid()
    {
        $echoStr = $_GET["echostr"];    // 获取GET请求的参数echostr
        
        // 校验signature
        if($this->checkSignature ()) {  // 调用校验方法
            echo $echoStr;
            exit;
        }
    }
    
    // 校验方法
    private function checkSignature ()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];
        $token = TOKEN;
        $tmpArr = array($token, $timestamp, $nonce);    // 将三个参数保存到数组中
        sort($tmpArr);      // 对数组中三个数据进行排序
        $tmpStr = implode( $tmpArr );       // 将数组中三个数据组成一个字符串
        $tmpStr = sha1( $tmpStr );      // 对字符串进行SHA-1散列运算
        
        if( $tmpStr == $signature ) {       // 计算结果与$signature相等
            return true;        // 通过验证
        } else {
            return false;       // 未通过验证
        }
    }
}
?>

4.开始编写代码进行开发

例1:文本消息自动被动回复

<?php
$wechatObj = new wechat_php();
$wechatObj->GetTextMsg();

class wechat_php
{
    public function GetTextMsg()
    {
        $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
        
        if (!empty($postStr))
        {
            $postStr = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $fromUesrname = $postStr->FromUserName;
            $toUsername = $postStr->ToUserName;
            $msgType = $postStr->MsgType;
            $keyword = trim($postStr->Content);
            $time = time();
            
            $textTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                        <FuncFlag>0</FuncFlag>
                        </xml>";
            if (strtolower($msgType) != "text")
            {
                $msgType = "text";
                $contentStr = "我只接收文本信息!";
            }else{
                if(!empty( $keyword ))
                {
                    $msgType = "text";
                    $contentStr = "消息内容:" . $keyword . "\n";
                    $contentStr = $contentStr . "ToUserName:" . $toUsername . "\n";
                    $contentStr = $contentStr . "FromUserName:" . $fromUesrname;
                }else{
                    $contentStr = "请输入关键字...";
                }
            }
            $resultStr = sprintf($textTpl, $fromUesrname, $toUsername, $time, $msgType, $contentStr);
            ob_clean();
            echo $resultStr;
        }else{
            echo "";
            exit;
        }
    }
}
?>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,764评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,651评论 19 139
  • 微信开发 服务号功能 1、1个月(自然月)内仅可以发送4条群发消息。2、发给订阅用户(粉丝)的消息,会显示在对方的...
    wswenyue阅读 8,574评论 2 24
  • 我叫北北,十七岁。 一个人听着冷僻的歌,在不知名的地方任意地唱,一个人阅读,翻开手边记本任意记下一字一句,一个人乘...
    小欣然阅读 4,863评论 3 7
  • 今天我们亲爱的傲姐精心的组织了读书会踏春活动,邀请到了我们既和蔼可亲又温柔又美丽的聂老师,还有有思想有活力爱探究的...
    读书是最好的修行阅读 2,224评论 1 1