微信callback服务器,微信获取token几个步骤一定不要错,否则坑的你不要不要的...

一、验证服务器

95a75b5b2146?clicktime=1578357897

95a75b5b2146?clicktime=1578357897

这里需要加入一下你的服务器ip地址

文件valid.php   该文件存放位置要和上图URL对应

include 'token.php';//包含一下第二点的token验证文件

define("TOKEN", "weixin"); //对应上图的Token

$wechatObj = new wechatCallbackapiTest();

$wechatObj->valid();   //调用微信验证类方法,该类只需执行一次,目的其实就是”证明你就是你“,你操作的是你自己的服务器

所以验证成功后,就可以注释掉这一行

//$wechatObj->valid();

class wechatCallbackapiTest{

public function valid()  {

$echoStr = $_GET["echostr"];

if($this->checkSignature()){

ob_clean();

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;

}

}

//下面第三点的代码需要放到这里,

}

二、每次客户端和服务器端交互前都会要求验证access_token

//token.php,------用来判断access_token是否有效并且保存access_token到本地文件中,避免反复失效

ps:access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

if(exists_token()){

if(expirse_token()){

//token过期,重新获取token

$token=get_token();

unlink('token.txt');

file_put_contents('token.txt',$token);

}else{

$token=file_get_contents('token.txt');

}

}else{

$token=get_token();

file_put_contents('token.txt',$token);

}

//判断文件是否存在

function exists_token(){

if(file_exists('token.txt')){

return true;

}else{

return false;

}

}

//或取token.txt的创建时间,并且与执行当前index.php的时间对比

function expirse_token(){

$ctime=filectime('token.txt');

$time=time();

$s=$time-$ctime;

echo "现在时间:$time 创建时间:$ctime 计算结果:$s";

if((time()-$ctime)>=7000){

return true;

}else{

return false;

}

}

function get_token(){

$appid = 'wxdbf86fa6a4c38a41';

$appsecret = '99d54a1936e35b88b40f5501cd5ca524';

$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$appsecret}";

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);

$data = curl_exec($ch);

curl_close($ch);

$obj=json_decode($data,true);

//file_put_contents('access.txt',$data);

return $obj['access_token'];

}

三、消息处理

//接下来就是处理微信和客户端的交互了

//启用微信服务器后,客户端所有的请求都会转向这里被执行(微信那边只是验证身份,和请求转发)

public function responseMsg(){

$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];

if (!empty($postStr)){

libxml_disable_entity_loader(true); //对信息模板进行错误处理

$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);//转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然后输出对象的键和元素

$event=$postObj->Event;//通过上步骤取到的对象获取相关事件属性、发送用户、接受用户、以及内容等信息

$fromUsername = $postObj->FromUserName;//发送用户

$toUsername = $postObj->ToUserName;//接收用户

$keyword = trim($postObj->Content); //内容

$time = time();//消息发送时间

$textTpl="

%s

"

95a75b5b2146?clicktime=1578357897

信息模板

//详见https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140453

//根据客户端发送过来的事件,做出不同的响应

if($event=="subscribe")

{

//subscribe(订阅),以下是一段示例代码,用户关注公众号后返回给用户一段友好信息,

$msgType = "text";

$contentStr ="你好!感谢您关注";

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

//上面$textTpl 是信息模板

echo $resultStr;

}else if($event=="unsubscribe"){

//unsubscribe(取消订阅)

}else if($event=="LOCATION"){

//获取地理位置事件

}

}

详情请查阅官方文档https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140454

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值