Rumah  >  Soal Jawab  >  teks badan

javascript - Minta nasihat! Berkenaan ralat JSSDK yang dikongsi oleh WeChat - tandatangan tidak sah.

Tandatangan telah dijana, dan ia adalah sama dengan tandatangan yang dijana oleh alat ujian tandatangan WeChat Apabila mengimbas kod QR untuk mengakses halaman, tandatangan tidak sah masih muncul. ! Tolong beri saya nasihat!
Penerangan gambar

Dijana oleh WeChat


Yang anda hasilkan dengan WeChat

淡淡烟草味淡淡烟草味2727 hari yang lalu735

membalas semua(3)saya akan balas

  • 怪我咯

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

    Tidak biasa dengan php...

    Periksa sama ada ia bermasalah dengan url?

    balas
    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的安全目录要设置的。

    balas
    0
  • 我想大声告诉你

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

    Sahkan bahawa appid dalam konfigurasi adalah konsisten dengan appid yang digunakan untuk mendapatkan jsapi_ticket

    Cara terbaik ialah memuat turun alat pembangunan WeChat dan nyahpepijat semua parameter di sebelah komputer

    balas
    0
  • Batalbalas