0

0

PHP微信开发:公众号对接教程

冰火之心

冰火之心

发布时间:2025-06-17 17:00:05

|

490人浏览过

|

来源于php中文网

原创

公众号对接核心在于验证服务器地址有效性并处理消息响应。1.准备备案域名、php服务器、appid、appsecret及自定义token;2.验证服务器地址时,微信发送get请求,开发者需用token、timestamp、nonce排序后sha1加密并与signature对比,成功则返回echostr;3.接收消息时解析post的xml数据,构建回复消息格式并根据关键词响应;4.获取openid可通过用户消息中的fromusername或网页授权流程获取;5.实现自定义菜单需先获取access_token,构造json菜单数据,再调用微信接口创建菜单;6.签名错误常见原因包括token不一致、参数排序错误、字符串排序方式不对、url不可达等,可逐一排查解决。

PHP微信开发:公众号对接教程

公众号对接,说白了,就是让你的PHP代码能跟微信服务器“聊”起来。核心在于验证服务器地址的有效性,然后根据用户发送的消息,做出相应的响应。

PHP微信开发:公众号对接教程

解决方案

  1. 准备工作:

    PHP微信开发:公众号对接教程
    • 一个备案过的域名(微信要求)。
    • 一个能跑PHP代码的服务器(废话,但还是要说)。
    • 微信公众号的开发者ID(AppID)和开发者密码(AppSecret),在公众号后台可以找到。
    • Token,自己随便设置一个,但要记住,后面要用到。
  2. 验证服务器地址的有效性:

    立即学习PHP免费学习笔记(深入)”;

    PHP微信开发:公众号对接教程

    这是第一步,也是最重要的一步。微信服务器会向你填写的URL发送一个GET请求,你需要按照微信的要求,返回一个特定的字符串。

    • Token: YOUR_TOKEN 替换成你在公众号后台设置的Token。
    • 排序: sort($tmpArr, SORT_STRING) 这里要注意,要按照字符串排序,否则可能验证失败。
    • SHA1加密: sha1($tmpStr) 使用SHA1算法加密。
    • 验证: $tmpStr == $signature 比较加密后的字符串和微信发送过来的signature。
    • 返回echostr: 验证成功,直接echo $echostr,然后exit,结束脚本。

    把这段代码放到你的服务器上,比如wechat.php,然后在公众号后台的“基本配置”中,填写你的URL(比如https://yourdomain.com/wechat.php),Token填写你设置的Token,点击提交。如果验证成功,微信会提示你配置成功。

  3. 接收和回复消息:

    验证服务器地址成功后,微信服务器就会把用户发送的消息推送到你的URL。你需要解析这些消息,然后根据消息类型,做出相应的回复。

    FromUserName;
            $toUsername = $postObj->ToUserName;
            $keyword = trim($postObj->Content);
            $time = time();
            $textTpl = "
                           
                           
                           %s
                           
                           
                           0
                           ";
    
            // 根据关键词回复消息
            if(!empty( $keyword )) {
                $contentStr = "你发送的消息是:".$keyword;
                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $contentStr);
                echo $resultStr;
            }else{
                echo "Input something...";
            }
    
        }else {
            echo "";
            exit;
        }
    } else {
        echo "";
        exit;
    }
    ?>
    • 获取POST数据: $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 微信服务器发送的消息是XML格式的,需要获取POST数据。
    • 解析XML数据: simplexml_load_string() 使用这个函数解析XML数据。
    • 获取消息内容: $postObj->Content 获取用户发送的消息内容。
    • 回复消息: 构建XML格式的回复消息,然后echo出去。
    • XML中需要使用这个包裹文本内容,防止被XML解析器错误解析。

如何获取用户openid?

OpenID是微信用户在公众号内的唯一标识。获取OpenID的方法主要有两种:

百家CMS微商城
百家CMS微商城

百家CMS微商城从诞生开始,就坚持着简单实用的原则,基于目前最流行的WEB2.0的架构(php+mysql),拥有成熟、稳定的微电商技术解决方案。基于完整的会员等级制度,完善的微商城购物流程,订单管理、优惠券、搜索、购物车等功能。采用跨平台机制,可同时对接微信公众号平台和支付宝服务窗,兼容微博、手机QQ等平台;丰富的支付方式、支持微信支付、支付宝支付、货到付款、余额支付、网银支付等。并且拥有完整的

下载
  1. 被动回复消息: 在接收到用户消息的时候,$postObj->FromUserName 就是用户的OpenID。 这是最简单直接的方法,但前提是用户必须主动给你的公众号发送消息。

  2. 通过网页授权获取: 这种方法可以让用户在网页上授权,然后获取用户的OpenID。 这种方法比较复杂,需要用到微信的OAuth2.0授权机制。 简单来说,你需要:

    • 构造一个授权链接,让用户点击。
    • 用户点击授权链接后,会跳转到微信的授权页面。
    • 用户授权后,微信会跳转到你设置的回调地址,并携带code参数。
    • 使用code参数,调用微信的接口,获取access_token和openid。

    具体步骤可以参考微信官方文档,搜索“网页授权获取用户基本信息”。

如何实现自定义菜单?

自定义菜单可以让用户更方便地使用公众号的功能。实现自定义菜单的步骤如下:

  1. 获取access_token: 调用微信的接口,获取access_token。 access_token是调用微信接口的凭证,有效期为2小时,需要定期刷新。

  2. 构造菜单数据: 按照微信的要求,构造JSON格式的菜单数据。

    {
        "button":[
        {
            "type":"click",
            "name":"今日歌曲",
            "key":"V1001_TODAY_MUSIC"
        },
        {
            "name":"菜单",
            "sub_button":[
            {
                "type":"view",
                "name":"搜索",
                "url":"http://www.soso.com/"
            },
            {
                "type":"miniprogram",
                "name":"wxa",
                "url":"http://mp.weixin.qq.com",
                "appid":"wx286b93c14b3xxxx",
                "pagepath":"pages/lunar/index"
            },
            {
                "type":"click",
                "name":"赞一下我们",
                "key":"V1001_GOOD"
            }]
        }]
    }
    • type 菜单类型,常用的有click点击事件)、view(跳转URL)、miniprogram(跳转小程序)。
    • name 菜单名称。
    • key click类型菜单的key值,用于在接收消息的时候区分不同的菜单。
    • url view类型菜单的URL。
    • appid miniprogram类型菜单的小程序appid。
    • pagepath miniprogram类型菜单的小程序页面路径。
  3. 调用接口创建菜单: 调用微信的接口,创建自定义菜单。

    • YOUR_ACCESS_TOKEN 替换成你获取的access_token。
    • $data 替换成你构造的JSON格式的菜单数据。
    • Content-Type: application/json 设置请求头,告诉微信服务器发送的是JSON数据。

遇到签名错误怎么办?

签名错误是微信公众号开发中常见的问题。通常是因为以下原因:

  1. Token错误: 检查你代码中的Token和公众号后台设置的Token是否一致。
  2. 参数顺序错误: 确保按照tokentimestampnonce的顺序排序。
  3. 字符串排序错误: 使用sort($tmpArr, SORT_STRING)进行字符串排序。
  4. 缓存问题: 有时候微信服务器会有缓存,导致签名验证失败。可以尝试清除微信服务器的缓存,或者等待一段时间再试。
  5. URL错误: 确保你填写的URL可以正常访问,并且能够正确处理微信服务器发送的GET请求。可以使用在线工具测试URL是否可用。

如果以上方法都不能解决问题,可以尝试打印出微信发送过来的参数和你的计算结果,进行对比,找出错误的原因。 另外,仔细检查你的代码,确保没有语法错误或者逻辑错误。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1830

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1215

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1108

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1396

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1229

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1439

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1303

2023.11.13

ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

81

2025.12.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号