微信开发入门教程-- 公众平台服务器url配置

之前说过,公众平台测试号和个人号没太大区别,这里为了方便以测试号为例,先给大家讲解如何填写服务器配置,在公众号后台点击开发者工具里的接口测试申请系统。


在服务器配置里我们需要填写一个URL和Token,之前已经说过,这个URL就是我们申请到的服务器资源http://qiezijiang.sinaapp.com/。至于Token参数,可以理解为配对口令,即为了验证我们URL是否可用,双方如果使用的口令都一样,则配置成功,后面会给大家详细说明。大家可以自定义随便填写,只要满足“必须为英文或数字,长度为3-32字符。”这个条件即可,如下图所示。


但是现在还不能提交,因为我们只是在填写了服务器配置,还没有在服务端进行验证。打开index.php,默认的代码是显示“Hello,SAE!”,我们需要修改代码来验证。当然这部分代码,公众平台有给我们提供,在接入指南的第二步“验证服务器地址的有效性”下方有下载,下载下来直接使用(本帖附件中有提供这部分代码)。

把下载下来的示例代码直接拷贝替换掉index.php默认的代码,我们需要修改将默认的TOKEN值“weixin”修改为我们自己定义的“qiezijiang123”。

//define your token
define("TOKEN", "weixin");//修改为服务器配置里的Token值“qiezijiang123”
$wechatObj = new wechatCallbackapiTest();
$wechatObj->valid();

将代码commit以后,点击“提交”以后,就会看见出现配置成功的提示,这样,我们的服务器配置就验证成功了,接下来就可以正式进行接口开发工作。

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

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

加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信


检验signature的PHP示例代码:

private function checkSignature()
{
        $signature = $_GET["signature"];//获取GET请求中的参数"signature"
        $timestamp = $_GET["timestamp"];//获取GET请求中的参数"timestamp"
        $nonce = $_GET["nonce"];        //获取GET请求中的参数"nonce"
                        
        $token = TOKEN;//将代码中我们定义的TOKEN赋值给token
        $tmpArr = array($token, $timestamp, $nonce);//将以上三个参数放进数组
        sort($tmpArr, SORT_STRING);//将数组的元素当做字符串来处理,并按升序排序
        $tmpStr = implode( $tmpArr );//将排序好的数组元素重新组合成一个字符串
        $tmpStr = sha1( $tmpStr );//进行sha1加密
        
        if( $tmpStr == $signature ){//将组合的字符串和微信服务器传过来的参数"signature"进行对比
                return true;
        }else{
                return false;
        }
}

开发者通过检验signature对请求进行校验,若确认此次GET请求来自微信服务器,则原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

public function valid()
{
        $echoStr = $_GET["echostr"];

        //valid signature , option
        if($this->checkSignature()){
                echo $echoStr;//校验成功,返回随机字符串
                exit;
        }
}

总结一下,验证方法大概是这样的:微信服务器把我们在公众号里服务器配置的填写的“Token”和微信服务器携带的另外三个参数按一定方式拼接在一起(signature),另外在把那三个参数也单独作为参数,发送GET请求到我们填写的URL上。我们在服务器端通过获取微信服务器发送过来的GET请求中的4个参数,在服务端我们也定义相同值的TOKEN,把获取到的timestamp参数、nonce参数和我们定义的TOKEN按照给定的规则组合后,再同获取到的“signature”参数进行比较,在整个过程中都需要用到“Token”值。

以上步骤以后,如果你的服务器配置仍旧失败,除了开发者文档里有说明的错误码解释之外,还需要注意的是在调用验证方法之前不要有echo输出语句,SAE也许先进行实名认证。

更多微信开发教程,请访问微信开发者社区


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章