javascript - Demandez conseil ! Concernant l'erreur JSSDK partagée par WeChat - signature invalide.
淡淡烟草味
淡淡烟草味 2017-05-24 11:33:32
0
3
730

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

淡淡烟草味
淡淡烟草味

répondre à tous(3)
刘奇

Je ne connais pas PHP...

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

世界只因有你
<?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的安全目录要设置的。
我想大声告诉你

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!