关于PHP配置微信公众号服务器配置问题

作用

主要是用于当监听用户的各种动作。比如关注、取关、用户发送文本消息、链接、语音、视频消息等。
监听到这些时间,可以做出响应的反应

流程
  1. 登录微信公众号后台
  2. 左侧菜单栏中,设置与开发-基本配置-服务器配置。
  3. 修改配置,如图在这里插入图片描述
    解释一下:
    URL: 自己服务器的地址,一般是个GET请求方式的接口。
    TOKEN:自己随便写的,可以是123456。主要用于验签。
    EncodingAESKey:系统随机生成的,也是用于验签。
重点。代码示例如下.以tp框架为例
//定义路由
Route::any('subscribe', 'home/Wechat/subscribe');//这里定义的是any,其实get就可以了。

//控制器代码
public function subscribe(Request $request)
{
    //接收参数,验签的标识
    $echoStr = $request->param('echostr');
    if (!empty($echoStr)) {
        //不为空,去校验
        $this->valid($request->param());
        //必须要在主方法中echo;
        echo $echoStr;
        exit;
    } else {
    	//响应用户对公众号发送的消息
        $this->responseMsg($request->param()); //这个方法的代码详见另一篇文章
        exit;
    }
}

/**
 * Description:公众号服务器验签
 * @param $data
 * @return bool
 * @date 2024/4/26 9:40
 * @author zls
 */
public function valid($data)
{
    $echoStr = $data['echoStr'];
    $signature = $data['signature'];
    $timestamp = $data['timestamp'];
    $nonce = $data['nonce'];
    $token = "hsmjmessage";//公众号后台自定义

    $tmpArr = array($token, $timestamp, $nonce);

    sort($tmpArr, SORT_STRING);
    $tmpStr = implode($tmpArr);
    $tmpStr = sha1($tmpStr);

    if ($tmpStr == $signature) {
        return true;
        // 这里比较坑!!!
        // 不可以在调用的方法中echo $echoStr; 必须要在主方法中echo;
//            echo $echoStr;
//            exit;
    } else {
        Log::info("验签失败");
        return json(false);
    }
}
一些问题
  1. 如果报错什么服务器错误,那就是你接口中的代码有问题!自己打印Log,在服务器中排查即可。
  2. 如果报token校验错误,那就是在调用的方法中直接echo $echoStr;

多打印日志,官方文档不好找。

官方文档地址如下

官方文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值