要进行公众号开发,首先第一步肯定是要把公众号接入到你的项目中,那么今天就来演示一下接入过程。
公众平台配置
进入微信公众平台,输入公众号的账号密码进行登录,选择左侧菜单靠下方位置的基本配置,然后点击修改配置。
此时需要填入URL、Token、EncodingAESKey和选择
URL:后台接入验证的脚本文件链接,这个链接要能访问到你项目中验证微信接入的逻辑代码的方法,以http://或https://开头。
Token:自定义字符串,要和代码中的Token一致。必须为英文或数字,长度为3-32字符。
EncodingAESKey:消息加密密钥,如果消息加解密方式选择安全模式,那么公众号和服务器进行的消息交互都需要加解密,这个起到秘钥的作用。点击后面的随机生成即可。
消息加解密方式:明文模式下,微信和服务器之间交互的消息不加密和解密。兼容模式下,加解密的操作可有可无。安全模式下,必须有加解密的业务代码,有关这部分的操作后面在讲解消息接收的文章时会有说明。
下面是一个填写好的示例图:
此时先不要点击提交,我们还需要在项目中进行配置。
项目验证代码
这里以Thinkphp框架进行演示,进入到Home模块Index控制器index方法(刚才公众平台填写的URL路径),代码如下:
class IndexController extends ComController
{
public function index()
{
define("TOKEN", "acier");
define("AppID", "wx4abf8a686084d2fd");
define("EncodingAESKey", "cMhGxj3Bq1Y9vcG93ef1pCWH4AUh2E3zXpLNHiF74CI");
$this->logger(' http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].(empty($_SERVER['QUERY_STRING'])?"":("?".$_SERVER['QUERY_STRING'])));
$this->valid();
}
//验证签名
public function valid()
{
$echoStr = $_GET["echostr"];
$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){
echo $echoStr;
exit;
}
}
//日志记录
private function logger($log_content)
{
if(isset($_SERVER['HTTP_APPNAME'])){ //SAE
sae_set_display_errors(false);
sae_debug($log_content);
sae_set_display_errors(true);
}else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL
$max_size = 500000;
$log_filename = "log.xml";
if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content."\r\n", FILE_APPEND);
}
}
}
此时返回到微信公众平台后台,当点击提交按钮后,微信服务器将发送GET请求到填写的服务器地址URL上,并携带signature、timestamp、nonce、echostr四个参数,按照官方示例代码,将token、timestamp、nonce三个参数进行字典序排序,然后将三个参数字符串拼接成一个字符串进行sha1加密,最后开发者获得加密后的字符串可与signature对比,若对比成功,原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
另外,当微信发过来消息时,logger方法会生成一个log.txt文件,将当前访问域名,当前执行脚本和GET传输时?后面的值获取到,并写入项目根目录,方面我们查阅。
$_SERVER[‘HTTP_HOST’]:网站的域名。
$_SERVER[“PHP_SELF”]:当前正在执行脚本的文件名。
$_SERVER[“QUERY_STRING”]:获取GET传输?后面的值。
微信接入的原理,主要是对signature请求进行校验,确认此次GET请求来自微信服务器,那么我们发现即使代码中不进行参数的字典排序等一系列操作,只要接收到echostr参数,不作任何处理并直接返回给微信服务器,这样也能成功接入。
发表评论
沙发空缺中,还不快抢~