进入微信公众帐号测试号申请系统
申请测试账号https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
开发之前要申请微信接入,填写服务器配置,验证服务器地址的有效性。
必须拥有自己的服务器
因为我项目用的是tp5,用到了一系列诸如上传素材,关键字自动回复等功能,就以tp5为例说明。
公众号服务器配置URL: http(https)://域名/www.qixiao.ltd/index.php/wxindex
token:这个随意字符,但是需要注意的是需要跟验证代码中的token保持一致。
代码必须提交到服务器上!!切记!!
tp5代码如下
路由
控制器
话不多说直接上代码:
namespace app\api\controller\index;
use app\common\controller\Api;
use think\Db;
use think\Config;
use think\Validate;
use think\Request;
// 允许跨域
header('Access-Control-Allow-Origin:*');//允许跨域
header("Content-type: text/html; charset=utf-8");
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
header('Access-Control-Allow-Headers:x-requested-with,content-type,token');//浏览器页面ajax跨域请求会请求2次,第一次会发送OPTIONS预请求,不进行处理,直接exit返回,但因为下次发送真正的请求头部有带token,所以这里设置允许下次请求头带token否者下次请求无法成功
exit("ok");
}
public function index(){
$this->valid();
}
//微信验证
public function valid(){
$echoStr = $_GET["echostr"];
if($this->checkSignature()){
echo $echoStr;
exit;
}
}
/** 扫码回调*/
private function checkSignature()
{
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = Config::get('site.wxgzh_token');
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
然后在微信公众号进行配置:
点击提交,完事。
失败几点可能原因:1,填写的URL是否能访问到(测试方法,在wxtoken文件夹头部echo随机字符串,访问域名看能否正确输出)
2,公众平台填写的token跟代码文件define 的token是否一致
3,多提交几次,一般提交3-5次基本都会成功