微信有时候跳出微信小程序推送失败

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微信有时候跳出微信小程序推送失败相关的知识,希望对你有一定的参考价值。

参考技术A 原因:
1.第一种常见的原因
忘记在app.json文件中pages选项中注册
2.第二种常见原因
跳转路径写错
3.第三种原因
如果跳转的路径已经在app.json文件中的TabBar选项中注册,跳转方法需要用wx.switchTab方法来跳转
备注:前两种原因比较好发现,因为控制台中会有相应提示,第三种控制台不会报错,比较难发现。

微信小程序之消息推送配置(token验证失败的解决方案)

 

 

背景:微信小程序开发,准备使用模板消息做些事情,但是发现需要先在微信公众平台的开发——开发设置——消息推送做配置,然后我们后台人员就开始各种配置,但是一到验证token就报错,很是郁闷,然后各种排查,发现了最终原因,过程和代码如下:

很多网站给出的服务器代码如下:

//检查签名

/**
* 验证消息推送

*/
public function checkSignature()
{
  $signature = $_GET["signature"];
  $timestamp = $_GET["timestamp"];
  $nonce = $_GET["nonce"];

  $token = \'ziqin\';
  $tmpArr = array($token, $timestamp, $nonce);
  sort($tmpArr, SORT_STRING);
  $tmpStr = implode( $tmpArr );
  $tmpStr = sha1( $tmpStr );

  if ($tmpStr == $signature ) {
    echo $_GET["echostr"];
  } else {
    echo false;
  }
}

 以上代码看上去没问题,后台查看日志也是可以对应上的,但是一旦提交还是token校验失败,后台各种查资料,最终发现需要使用ob_clean();最终代码如下:

(在输出“echostr”前,清空缓存区,即在echo 前放置“ob_clean();”代码。

官方解释:ob_clean()  此函数用来丢弃输出缓冲区中的内容;)

//检查签名

/**
* 验证消息推送
*
*/
public function checkSignature()
{
  $signature = $_GET["signature"];
  $timestamp = $_GET["timestamp"];
  $nonce = $_GET["nonce"];

  $token = \'ziqin\';
  $tmpArr = array($token, $timestamp, $nonce);
  sort($tmpArr, SORT_STRING);
  $tmpStr = implode( $tmpArr );
  $tmpStr = sha1( $tmpStr );

  if ($tmpStr == $signature ) {
    ob_clean();
    echo $_GET["echostr"];
  } else {
    echo false;
  }
}

以上是正确配置方式!

微信官方对token校验的说明为:开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下: 1、将token、timestamp、nonce三个参数进行字典序排序 2、将三个参数字符串拼接成一个字符串进行sha1加密 3、开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。

以上是关于微信有时候跳出微信小程序推送失败的主要内容,如果未能解决你的问题,请参考以下文章

微信小程序之消息推送配置(token验证失败的解决方案)

微信小程序怎么实现消息推送

微信小程序登录获取openid有时候为啥第一次会失败,第二次才成功?

微信小程序 订阅消息及云函数轮询推送

uni-app 使用微信小程序消息推送

微信小程序:获取openid失败原因