在使用php对接微信公众号自定义开发的时候 , 被一句话整得快崩溃了——“该公众号提供的服务出现故障 , 请稍后再试” 。 非常
微信公众号错误
可能的原因有:
一、php版本导致的
在开发中 , 这也是一个大概率导致上述问题的存在 , 现在php的版本有很多 , 但是对于微信开发程序来说 , 是有一定区别的 , 因为不同的版本 , 代码的书写也是不一样的 。
【英伟达|微信公众号调试时“该公众号提供的服务出现故障,请稍后再试”】一般我们在获取用户发来的信息的时候第一句都是:
$postStr = $GLOBALS[\"HTTP_RAW_POST_DATA\"
;
但是这句代码在php7及以上版本都可能获取不到值 , 导致公众号的接口文件不能反馈信息 , 从而导致“该公众号提供的服务出现故障 , 请稍后再试” , 你可以先把回复信息相关的代码都删除 , 单独留一个:
public function responseMsg(){ echo '';
然后在公众号里面随便发一个信息 , 如果服务器没有返回错误或者其他信息 , 那么就表示两种可能:
1、回复信息的代码错误;
2、接收用户信息的代码没有获取到值 。
针对第二个你可以试试把:
$postStr = $GLOBALS[\"HTTP_RAW_POST_DATA\"
;
改成
$postStr =file_get_contents('php://input');
二、微信公众号接入了第三方授权
这一个问题你可以先关闭第三方授权 , 然后试试 。
三、php代码错误
这一条也是大概率导致“该公众号提供的服务出现故障 , 请稍后再试”的原因所在 , 但是代码的错误千变万化 , 不同的人犯的错误均不一样 , 所以这里就不错列举了 , 这里提供一个正确的代码 , 共大家自行比对:
public function responseMsg() {
$postStr = $GLOBALS[\"HTTP_RAW_POST_DATA\"
;
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr 'SimpleXMLElement' LIBXML_NOCDATA);
$fromUsername = $postObj->FromUserName;
$toUsername = $postObj->ToUserName;
$keyword = trim($postObj->Content);
$time = time();
$textTpl = \"<xml> <ToUserName><![CDATA[%s
></ToUserName> <FromUserName><![CDATA[%s
></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s
></MsgType> <Content><![CDATA[%s
></Content> <FuncFlag>0</FuncFlag> </xml>\";
if(!empty( $keyword )) {
$msgType = \"text\";
$contentStr = \"Welcome to wechat world!\"; $resultStr = sprintf($textTpl $fromUsername $toUsername $time $msgType $contentStr);
echo $resultStr;
else{
echo \"Input something...\";
else {
echo \"\"; exit;
- iPhone手机|比微信支付宝方便?iPhone可充当收款码了:全新功能详解
- 内存条|搭载国产长鑫颗粒,高性价比之选,金百达内存条使用分享
- 数字|数字人民币会取代支付宝和微信支付吗
- ARM|变天了!x86架构最大对手崛起:ARM PC销售占比已达9.5%刷新纪录
- 英伟达|Web3基石—去中心化隐私网络 NYM
- 微信|微信朋友圈评论之 张新亮
- 工业互联网|共达电声:韩国三星电子大罢工目前对公司生产经营没有直接影响
- 流量|你贡献多少?春节7天移动互联网流入流量达434.9万TB
- 海能达|美司法部起诉海能达:与前摩托罗拉系统员工合谋窃取技术!
- 地磁暴|遭遇地磁暴,“星链”损失多达40颗卫星