PHP微信定制开发-接口配置校验

纵观微信公众平台开发的各类书籍,基本上微信定制开发都是从微信消息开始的,主要是服务器被动回复消息这块为主,这个模块也算微信的核心,这次将以验证微信消息来自微信服务器为例,分享下我的代码

一  入口的切入点

我们知道做微信开发需要处理来自用户、微信服务器的各类的消息,查阅微信文档可总结出的规律是 验证消息来自微信服务器为GET请求,其他微信消息的推送是POST请求 , 根据这一规律我们就可以将校验和消息推送统一进行处理

二 代码的实现

1 php可以通过$_SERVER['REQUEST_METHOD']获取请求的类型

2 按照流程程序需要校验signature的有效性并返回正确signature

3 计算signature,php的步骤是  数组排序、把数组转成字符串、sha1计算出signature(非常重要)

对于第三部php还算比较简单,但是像java的话就比较复杂,这里先贴出php的算法

function checkSignature()
    {
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];

        $tmpArr = array(
            TOKEN,
            $timestamp,
            $nonce
        );
        sort($tmpArr, SORT_STRING);
        $tmpStr = implode($tmpArr);
        $tmpStr = sha1($tmpStr);

        if ($tmpStr) {
            return $tmpStr;
        } else {
            return "";
        }
    }

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

参数描述
signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp时间戳
nonce随机数
echostr随机字符串

这个是从微信开发文档上摘抄过来的,给大家做参考,详细的可查阅微信开发文档

function isValid()
    {
        $signature = $_GET["signature"];
        if ($signature == $this->checkSignature()) {
            return true;
        } else {
            return false;
        }
    }

上述两个方法我写到了名为WeixinHandler的类里面,TOKEN是定义好的常量

define("TOKEN", "weixinCourse");


// 步骤
// 1 判断请求方法,get请求一般为消息验证,post为其他消息交互
// 2 验证signature是否正确(消息来自微信服务器)
$handler = new WeixinHandler();
$reqMethod = strtolower($_SERVER["REQUEST_METHOD"]);
if ("get" == $reqMethod && !empty($_GET["echostr"])) {
    if ($handler->isValid()) {
        $echostr = $_GET["echostr"];
        echo $echostr;
        exit();
    }
} else {
    //判断消息类型,返回"你发送的是xxx消息"
    $handler->responseMessage();
}

responseMessage用来处理各类的消息,因为这次主要是入门,这个方法下次的博客分享会给出来,到这里校验消息来自微信服务器的功能已经完成了,但是还是需要注意一下几点

1 填写的URL需要外网可以访问且越简单越好,不建议url为带参数的形式;可使用花生壳、ngrok等

2 Token必须和程序定义的保持一致

java的消息校验可参考这个,因为本人是搞java的,就忍不住多啰嗦一下

https://blog.csdn.net/lyq8479/article/details/8944988

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值