收藏
回答

虚拟支付signature验证突然不一致

https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push.html

微信小程序虚拟支付成功后回调问题,昨天调试好回调时signature验证也通过了,今天什么都没做就又不能用了,微信推送过来的数据如下哦:"signature":"4f92ffeea05dade675b8e225c3e044b6ac200712","timestamp":"1774579072","nonce":"619899322",我服务器端生成的signature如下:<?php $signature=sha1($nonce.$timestamp.$Token);?> ,注:$Token是小程序后台开发管理->开发设置->推送消息->Token(令牌),$nonce和$timestamp是上面微信推送过来的,为什么本地生成的signature和推送的signature不一致?

回答关注问题邀请回答
收藏

3 个回答

  • 阿白
    阿白
    03-27

    $arr=array(

                    "timestamp"=>1774579072

                    ,"nonce"=>619899322

                    ,"token"=>'小程序后台设置的token'

                    );

                ksort($arr);

               

                $str=implode("",$arr);

                $signature_local=sha1($str);

    排序后也不行

    03-27
    有用
    回复 1
    • 阿白
      阿白
      03-27
      昨天还是一致的可以验证
      03-27
      回复
  • 智能回答 智能回答 本次回答由AI生成
    03-27
    有用
  • 渔佬
    渔佬
    03-27

    顺序问题,他文档里面不是要求你排序吗

    03-27
    有用
    回复 3
    • 阿白
      阿白
      03-27
      $arr=array(


                      "timestamp"=>1774579072


                      ,"nonce"=>619899322


                      ,"token"=>'小程序后台设置的token'


                      );


                  ksort($arr);


                 


                  $str=implode("",$arr);


                  $signature_local=sha1($str);


      排序后也不行
      03-27
      回复
    • 渔佬
      渔佬
      03-27回复阿白
      看着好像跟我写的一模一样,看不出啥问题
      String[] arr = new String[]{token, timestamp, nonce, encrypt};
              Arrays.sort(arr);
              String content = String.join("", arr);
              String sha1 = sha1HexLower(content);
              return toCheck.equalsIgnoreCase(sha1);
      03-27
      回复
    • 阿白
      阿白
      03-27
      可以了,应该是value排序,不写成key排序了
      03-27
      回复
登录 后发表内容