一、进入官网注册账号
微信公众平台:https://mp.weixin.qq.com/
二、开始注册《订阅号》
- 按照以下步骤进行开发:
填写基本信息:
激活账号 :
选择注册的类型:
- -
完善个人信息:
完善公众号信息 :
三、配置基本信息
修改基本配置。
完善基本配置。此页面填写的 url 要让外网能访问到,否则验证不成功。如果你是本地开发没有线上服务器、url,你可以参考《使用 ngrok 让公网可以访问内网 》,然后你的本地服务器就可以当做线上服务器、ngrok 返回的 url 就可以做线上 url。
然后在本地服务器要用如下代码验证,上面填写的 url 要能直接访问到此代码文件:
<?php
//define your token
define("TOKEN", "跟你上面定义的token要一致");
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();
class wechatCallbackapiTest
{
public function valid()
{
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
private function checkSignature() //配置时验证URL有效性
{
// you must define TOKEN by yourself
if (!defined("TOKEN")) {
throw new Exception('TOKEN is not defined!');
}
$signature = $_GET["signature"]; //微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
$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;
}
}
public function responseMsg()
{
//5.6 之前:$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]
//5.6 之后:$postStr = file_get_contents('php://input')
$postStr = file_get_contents('php://input');
if (!empty($postStr)){
$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 ))
{
if($keyword == "?" || $keyword == "?")
{
$msgType = "text";
$contentStr = date("Y-m-d H:i:s",time());
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}else{
$msgType = "text";
$contentStr = "Welcome to wechat world!";
$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
echo $resultStr;
}
}else{
echo "Input something...";
}
}else{
file_put_contents("./10.txt",'error');
echo "";
exit;
}
}
}
?>