目录
一、申请微信公众账号
二、申请空间并上传代码
三、接入微信公众平台
四、发送一条微信信息并得到回复
没玩过微信公众账号的朋友看完之后也可以打造自己的微信公众号了。
下面是今天要实现的效果:
下面咱们来一步一步讲解。
马上动手来搭建我们的微信公众号吧!
一.申请微信公众账号
①.如果你还没有自己的微信公众号,赶紧去注册一个 点击这里去注册(是微信公众号哦,不是微信号)如果你已经申请了,请跳过着一步,直接看第二步。
点击上面的蓝色字体,跳转到如下页面。
② 填写基本信息,如下图所示
③到我们的邮箱所填写的邮箱去激活
④选择我们的公众号类型,如果我们只是个人拿来玩玩的话,我们选择订阅号就可以了,服务号是一个单位或组织申请的,如果你想玩服务号的话呢,也可以.直接花十几块钱在淘宝买一个(万能是淘宝\(^o^)/~)。
⑤最后一步
到这里我们的公众账号就注册好了。因为我之前注册过,所以身份证实名验证就不用了,一个身份证可以申请5个微信公众账号,之前实名认证的时候得等几天,如果你不想等,直接淘宝一个好了,到这里咱们的微信公众账号就注册号了
二.申请空间。
△ 什么是空间?
空间就是服务器或者虚拟主机,通俗一点讲就是咱们待会放代码的地方。如果想深入了解,请自行百度。
现在有很多免费的空间或者虚拟主机,比如新浪的SAE新浪云,百度的BAE,万网阿里云京东云各种云什么的。
貌似现在都不免费了( ⊙ o ⊙ )!。
咱们来申请一个新浪的SAE。
①点击新浪云跳转到注册页面。
用你的微博账号登录。登录之后填写基本信息。注意:要记住你填写的安全密码,后面会用到,这里有一张图我少截了。
注册成功之后点击进入用户中心,再点击导航栏上面的控制台,选择云应用SAE。
跳转到如下界面:点击创建新应用。
下面开始来创建我们的应用,也就是我们放代码的地方。域名你随意填,开发语言选PHP5.3。本篇主要用PHP开发。简单容易,快速上手。然后选择空应用。点击创建新应用。
到这里我们的空间就申请并创建好了。O(∩_∩)O哈哈~
三.接入微信公众平台。
首先我们来弄清楚微信公众号的通信原理。
当我们给微信公众账号发一个消息的时候,这个消息是去了哪里,最后回复的消息是怎么回到咱们的手机的。
看看下面这种图。
当我们发送一条消息出去的时候,这条消息首先到了微信的服务器,微信的服务器收到消息之后处理之后再转发到我们的微信公众平台,咱们的微信平台接收到消息之后再处理然后返回一条处理结果给微信公众平台,微信公众平台再发给我们手机客户端的微信。微信的服务器只是起的转发的作用。
那微信公众平台和我们的公众平台是怎么通信的呢.下面我们就来配置一下,把我们的微信公众账号接入微信公众平台。
①上传代码到新浪云SAE
登录到咱们的新浪云,点击之前创建好应用(图中画线的地方)。
点击代码管理
点击右边的创建一个新版本按钮
输入之前设置的安全密码。
跳转之后点击操作 选择上传代码包。(代码包在这里点击下载) 点击上传附件。 跳转之后咱们把这个链接给复制下来:
http://1.myiccmo.sinaapp.com/
到这里,代码上传完成。
②登录咱们之前注册号的微信公众账号。
点击开发者中心,
勾选我同意,成为开发者。
跳转之后往下拉,点击修改配置。到这里可能会跳转到资料不全跳转到不全资料界面。我们把资料补全再返回上一步。
设置地址的时候注意要设置到具体的地址,这一步的截图我就不贴了。
继续返回开发者中心,点击修改配置。
△注意: 这里的URL填刚才我们刚才复制的url。
Token填写:weixin(待会再解释为什么)。
EncodingAESKey:点击随机生成
消息加密方式:选择明文。然后提交。
这里需要注意的是,可能会出现Tonken验证失败。
为什么会出现这个情况呢?因为你的SAE没有实名认证,然后在验证接口的时候,sae给微信服务器多回复了一些js代码。那怎么解决这个问题呢。有两种办法:一.实名认证,2.最直接最快最有效的就是:在输出 $echoStr之前加上header('content-type:text')。
四 .万事具备,咱们来玩一把。
用咱们的微信关注咱们的微信公众号,咱们随便发送一条消息,它就会给咱们返回同样的消息。
今天就写到这里了,如果有什么问题,联系我:qq:648988391备注:iccmo,QQ群:429207338,定期分享资料。
下面是完整的代码:
<?php
/**
* wechat php test
*/
//define your token
define("TOKEN", "weixin");
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {
$wechatObj->valid();
}else{
$wechatObj->responseMsg();
}
class wechatCallbackapiTest
{
public function valid()
{
header('content-type:text');
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
public function responseMsg()
{
//get post data, May be due to the different environments
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
//extract post data
if (!empty($postStr)){
/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
the best way is to check the validity of xml by yourself */
libxml_disable_entity_loader(true);
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->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(!empty( $keyword ))
{
$msgType = "text";
$contentStr = "Welcome to wechat world!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
echo "Input something...";
}
}else {
echo "";
exit;
}
}
private function checkSignature()
{
// you must define TOKEN by yourself
if (!defined("TOKEN")) {
throw new Exception('TOKEN is not defined!');
}
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
// use SORT_STRING rule
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
}
?>