recherche

Maison  >  Questions et réponses  >  le corps du texte

javascript - Demandez conseil ! Concernant l'erreur JSSDK partagée par WeChat - signature invalide.

La signature a été générée et elle est la même que la signature générée par l'outil de test de signature WeChat. Lors de la numérisation du code QR pour accéder à la page, une signature invalide apparaît toujours. Comment le résoudre ? ! S'il vous plaît, donnez-moi quelques conseils !
Description de l'image

Généré par WeChat


Celui que vous avez généré avec WeChat

淡淡烟草味淡淡烟草味2827 Il y a quelques jours801

répondre à tous(3)je répondrai

  • 怪我咯

    怪我咯2017-05-24 11:35:32

    Je ne connais pas PHP...

    Vérifiez s'il s'agit d'un problème avec l'url ?

    répondre
    0
  • 世界只因有你

    世界只因有你2017-05-24 11:35:32

    <?php
    
    class JSSDK {
    
        private $appId;
        private $appSecret;
    
        public function __construct($appId, $appSecret) {
            $this->appId = $appId;
            $this->appSecret = $appSecret;
        }
    
        public function getSignPackage() {
            $jsapiTicket = getJsapiTicket();
            
            if($jsapiTicket&&$jsapiTicket<>''){
                    // 注意 URL 一定要动态获取,不能 hardcode.
                    $protocol = (!empty($_SERVER ['HTTPS']) && $_SERVER ['HTTPS'] !== 'off' || $_SERVER ['SERVER_PORT'] == 443) ? "https://" : "http://";
                    $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    
                    $timestamp = time();
                    $nonceStr = $this->createNonceStr();
                    // 这里参数的顺序要按照 key 值 ASCII 码升序排序
                    $string = "jsapi_ticket={$jsapiTicket}&noncestr={$nonceStr}&timestamp={$timestamp}&url={$url}";
          
                    $signature = sha1($string);
                    $signPackage = array(
                            "appId" => $this->appId,
                            "nonceStr" => $nonceStr,
                            "timestamp" => $timestamp,
                            "url" => $url,
                            "signature" => $signature,
                            "rawString" => $string
                        );
    
                    return $signPackage;
    
            }else{
                return  false;
            }
            
        }
    
        private function createNonceStr($length = 16) {
            $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            $str = "";
            for ($i = 0; $i < $length; $i ++) {
                $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
            }
            return $str;
        }
    
        private function httpGet($url) {
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 500);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($curl, CURLOPT_URL, $url);
    
            $res = curl_exec($curl);
            curl_close($curl);
    
            return $res;
        }
    
    }
    
    
    上面是开源的库,调用方法就算getSignPackage(),执行之后得到nonceStr、signature、timestamp
      $jssdk =new \JSSDK(C('APPID'), C('APPSECRET'));
                   $data=$jssdk->getSignPackage();
                   $this->assign('nonceStr', $data['nonceStr']);
                   $this->assign('signature', $data['signature']);
                   $this->assign('appid', C('APPID'));
                   $this->assign('timestamp', $data['timestamp']);
    我记得公众平台的后台有个jssdk的安全目录要设置的。

    répondre
    0
  • 我想大声告诉你

    我想大声告诉你2017-05-24 11:35:32

    Confirmez que l'appid dans la configuration est cohérent avec l'appid utilisé pour obtenir jsapi_ticket

    Le meilleur moyen est de télécharger l'outil de développement WeChat et de déboguer tous les paramètres côté ordinateur

    répondre
    0
  • Annulerrépondre