在SAE搭建微信公众账号服务

让我们回到2014年11月,从公司请假回成都,在天府软件园B区旁边的小区里,那个10多平米的出租屋里,闲来无事,我想找个事情做一做,好让我这漂浮的心静下来。大约在半年前就申请了微信的一个公众账号,一直闲置着,终于决定再次着手搭建一个微信公众账号。SAE(Sina App Engine)是国内最早开始提供云服务的平台之一,而且几乎是免费的。所以希望能够通过SAE平台快速的搭建好一个微信公众账号。在一边摸索一边学习的情况下,小半天就搭好了一个简易的微信公众平台。今天,就利用SAE搭建微信公众平台的过程和大家一起分享。

一、注册微信公众账号

首先注册微信公众账号:http://mp.weixin.qq.com,点击注册,通过很简单的几步就能快速注册好公众账号,需要注意的是这里是需要注册一个新的微信号,而不是通过已有的私人微信号绑定。可能需要注册一个专用的邮箱。注册过程很简单,不赘述。

二、注册新浪SAE服务

注册SAE,访问http://sae.sina.com.cn,SAE整个的文档都比较完整,很好上手。注册完成后会送500云豆,合人民币5元。再申请实名认证,送云豆2000。对于一个刚上手的开发者来说完全够了。等应用开发好后,还可以申请开发者认证。每月有固定额度的云豆赠送,基本就不用花钱了。另外还有教育机构认证,公益组织认证等。同样十分简单,不赘述。

三、开启微信开发模式

登录公众平台后,点击高级功能。首先要关闭编辑模式,才能进入开发模式。我们需要一个网址作为接口,Token呢,就是相当于我们和微信之间约定的“密码”,以验证是微信平台的访问。

网址接入

公众平台用户提交信息后,微信服务器将发送GET请求到填写的URL上,并且带上四个参数:

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

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数:

加密/校验流程:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 

那么很明确我们接下来需要做的事情了:为微信提供一个接口。

四、在SAE创建应用

填好二级域名和应用名称等,选择好语言。这里我们使用PHP开发选择web应用。创建好应用之后,在代码管理中创建一个新的版本。而后我们可以选择编辑代码。能够实现在线编辑,根据个人喜好,可以通过SVN在本地开发然后CI到SAE服务,我个人就是这样做的。

在SAE创建好应用后,需要到微信公众账号开发者中心将应用信息进行授权配置!

假设我创建的应用名称为personal_app,则svn的地址为https://svn.sinaapp.com/personal_app,用户名和密码分别为SAE安全邮箱和安全密码

五、干货

<?php

define("TOKEN", "xxxxxxxx");
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET[‘echostr‘])) {
    $wechatObj->valid();
}else{
    $wechatObj->responseMsg();
}

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        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 );

        if( $tmpStr == $signature ){
            return true;
        }else{
            return false;
        }
    }
    public function responseMsg()
    {}}?>

responseMsg函数详细如下:

 1 function responseMsg()
 2 {
 3     $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
 4
 5     if (!empty($postStr)) {
 6         $postObj = simplexml_load_string($postStr, ‘SimpleXMLElement‘, LIBXML_NOCDATA);
 7         $fromUsername = $postObj->FromUserName;
 8         $toUsername = $postObj->ToUserName;
 9         $keyword = trim($postObj->Content);
10         $time = time();
11         $textTpl = "<xml>
12                     <ToUserName><![CDATA[%s]]></ToUserName>
13                     <FromUserName><![CDATA[%s]]></FromUserName>
14                     <CreateTime>%s</CreateTime>
15                     <MsgType><![CDATA[%s]]></MsgType>
16                     <Content><![CDATA[%s]]></Content>
17                     <FuncFlag>0</FuncFlag>
18                     </xml>";
19         if ($keyword == "date" || $keyword == "时间") {
20             $msgType = "text";
21             $contentStr = "现在时间是:\n".date("Y-m-d H:i:s", time());
22             $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
23             echo $resultStr;
24         } elseif (preg_match("/^0?(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$/", $keyword)){
25             $msgType = "text";
26             $phone_res = $this->mobilephone($keyword);
27             $contentStr = "号码归属地查询结果:"
28             ."\n".$keyword
29             ."\n归属地:".$phone_res->retData->province
30             ."\n运营商:".$phone_res->retData->carrier;
31
32             $contentStr = $contentStr
33             ."\n-------------------\nProvided by API store.";
34
35             $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
36             echo $resultStr;
37         } else {
38             $msgType = "text";
39             $contentStr = "感谢您关注【XXXXXXXXXX】"."\n"."微信号:XXXXXX"."\n"
40             ."目前平台功能如下:"
41             ."\n"."1. 当前时间,如输入:时间/date"
42             ."\n"."2. 手机号归属地查询,如输入13800138000"
43             ."\n"."更多内容,敬请期待...";
44             $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
45             echo $resultStr;
46         }
47     }else{
48         echo "";
49         exit;
50     }
51 }

其中mobilephone函数用来完成手机号码归属地查询功能。这是经过精简的一部分代码,目前公众账号已经实现了大大小小6个功能,后续还会继续改进!

感谢大家的阅读!

时间: 2024-10-06 05:41:56

在SAE搭建微信公众账号服务的相关文章

SAE 搭建微信公众平台

分享一下我老师大神的人工智能教程吧.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!http://www.captainbed.net 最近在玩微信公众账号,开发者模式需要验证,自己没有公网服务器,于是考虑通过免费的云服务器解决了 下面是通过新浪云SAE进行的微信公众平台开发者模式的验证方法. index.wsgi # coding: UTF-8 import sae import os import web from weixinInterface import

从Python爬虫到SAE云和微信公众号:二、新浪SAE上搭建微信服务

目的:用PHP在SAE上搭建一个微信公众号的服务器. 1.申请一个SAE云账号 SAE申请地址:http://sae.sina.com.cn/  可以使用微博账号登陆,SAE是新浪的云服务,时间也比较长了,功能比较多. 特点:免费使用,对于学习者而言已经够用了,长时间用充点云豆也花不了多少钱(最低每天10云豆消费),几十块钱(1元=100云豆)玩一年还是可以的. AWS:如果使用aws免费的空间,很容易用超免费额度,而且用超了额度不会停止,而是从信用卡扣费,以美元计价价格对于学习者而言非常昂贵!

在新浪SAE上搭建微信公众号的python应用

微信公众平台的开发者文档https://www.w3cschool.cn/weixinkaifawendang/ python,flask,SAE(新浪云),搭建开发微信公众账号http://www.oschina.net/code/snippet_1768500_36580 从零开始 Python 微信公众号开发https://zhuanlan.zhihu.com/p/21354943 新浪云应用http://www.sinacloud.com/doc/sae/python/ SAE Pyth

微信公众账号开发教程(二) 基础框架搭建

首先我们设计了模块层次图,当然图中只是给出一种实现方式,不局限于此.具体见下图. 主要功能介绍如下: 1)请求接口层.处理HTTP请求,及响应 2)分发层.由接口层传入请求,然后具体分析请求类型,分发至不同的处理器 3)业务逻辑层.这里是我们的具体业务逻辑了,根据请求,实现具体的业务逻辑. 4)数据层.我们在实现某个应用时可能需要访问数据,可以是数据库或者是文件.如果是简单应用,可能没有这一层. 其实,具体的应用可以在这个结构上去扩展,可以扩展消息对象层.业务对象层.数据访问层.功能管理层等.这

微信公众账号开发教程

微信公众账号开发教程 一.第1篇-引言 本文转载来自柳峰老师的博客,在这里非常感谢柳峰老师的分享和贡献! 内容方面,大概会涉及到: 1)前沿知识:微信公众帐号的分类.两种模式各自的特点和区别.开发模式的配置使用等: 2)API中各类消息的使用(我已经对api进行封装并打成了jar包,到时候会考虑分享出来): 3)微信公众帐号开发中的小技巧(如换行.通过代码发送表情.屏幕飘雪花.表情的接收识别.在Android和iOS上表现不一致等等): 4)与业务系统对接的方法(链接.短信等,除了技术讲解还会做

你知道怎么搭建微信公众平台管理吗,2000搭建属于自己的平台

微信占领了我们的生活,微信改变了我们的生活.公交车上刷微信,马桶上在刷微信,边吃饭边刷微信,工作一会儿就刷微信,甚至和朋友吃饭聚会也在刷微信,睡觉前的最后一个动作也在刷微信... 可见,微信现在占据了人们生活的很大一部分,而我们怎么能错过这个商机呢?新的营销时代,微信营销! 想了解微信公众平台管理系统吗http://chenxin.imicro.cc/ 爱微imicro微信公众平台管理系统,出售整套系统,包安装,建立和微企一样的平台,拥有属于你自己的站,你也可以给别人开代理账户,自己去运营赚钱.

使用python一步一步搭建微信公众平台(一)

最近无聊,想玩玩微信的公众平台,后来发现乐趣无穷啊~ 使用的工具,python 新浪SAE平台,微信的公众平台 你需要先在微信的公众平台与新浪SAE平台上各种注册,微信平台注册的时候需要你拍张手持身份证的照片,还有几天的审核期 微信公众平台:http://mp.weixin.qq.com 新浪SAE:http://sae.sina.com.cn/ 等待微信公众审核通过后,登录公众平台后,点击高级功能.将会看到需要提供一个接入信息: 微信接口配置 那么我们需要一个网址作为接口(这时就需要SAE上搭

微信公众账号开发教程(三) 实例入门:机器人

一.功能介绍 通过微信公众平台实现在线客服机器人功能.主要的功能包括:简单对话.查询天气等服务. 这里只是提供比较简单的功能,重在通过此实例来说明公众平台的具体研发过程.只是一个简单DEMO,如果需要的话可以在此基础上进行扩展. 当然后续我们还会推出比较复杂的应用实例. 二.具体实现 1.提供访问接口 这里不再赘述,参照上一章,微信公众账号开发教程(二) 基础框架搭建http://www.cnblogs.com/yank/p/3392394.html 2.签名认证和分发请求 这里不再赘述,参照上

微信公众平台开发(一) 申请微信公众账号

一.微信公众平台介绍 微信公众平台是腾讯公司在微信的基础上新增的功能模块,通过这一平台,个人和企业都可以打造一个微信的公众号,可以群发文字.图片.语音.视频.图文消息五个类别的内容. 二.注册微信公众号 1.注册地址: https://mp.weixin.qq.com/ 点击右上角的"立即注册"申请微信公众账号. 2.填写基本信息 3.激活邮箱账号 到邮箱中收取邮件,激活公众平台账号. 4.信息登记 通过邮箱激活后,填写基本信息.选择为"个人"后,后面只能选择&qu