[1] 微信公众号与sae的web应用之间的配置
2015-08-12 22:36
543 查看
第一步:申请sae账号,并新建web应用。
第二步:下载http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.20140819.zip压缩包,并上传到sae服务器中。
第三步:配置微信公众号接口:
输入接口配置信息,填写URL和Token。点击提交按钮。
※ 此时会发现配置不成功!
需要在代码中添加:header('content-type:text');
全部代码如下:
<?php
/**
* wechat php test
*/
//define your token
define("TOKEN", "hypo");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
header('content-type:text');
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;
}
}
}
?>
第二步:下载http://mp.weixin.qq.com/mpres/htmledition/res/wx_sample.20140819.zip压缩包,并上传到sae服务器中。
第三步:配置微信公众号接口:
输入接口配置信息,填写URL和Token。点击提交按钮。
※ 此时会发现配置不成功!
需要在代码中添加:header('content-type:text');
全部代码如下:
<?php
/**
* wechat php test
*/
//define your token
define("TOKEN", "hypo");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
//valid signature , option
if($this->checkSignature()){
header('content-type:text');
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;
}
}
}
?>
相关文章推荐
- 文件切割和文件合并
- 结合多线程、Socket的聊天小程序
- Android 联系人字母排序(仿微信)
- Android 高仿微信实时聊天 基于百度云推送
- 微信浏览器网页授权JS封装
- 微信应用系统
- 微信内置浏览器中的cookie很诡异呀
- 分享一个微信底部固定的菜单栏 超赞
- 微信公众开发-- 上传图片 "errcode":41005,"errmsg":"media data missing"
- C# 微信接口之推送模版消息
- 续【C#微信结合百度api获取当前用户的地理位置】代码详解
- 移动版&PC版微信登陆功能
- java对于微信平台语音接收以及处理,语音下载以及arm格式转换MP3
- Android 超高仿微信图片选择器 图片该这么加载
- 微信企业号开发步骤
- 微信公众平台开发 上传下载多媒体文件
- 微信公众平台开发 获取关注者列表
- 微信公众平台开发 获取用户基本信息
- 微信公众平台高级群发接口(转载)
- 微信公众平台开发 高级群发接口