javascript - Minta nasihat! Berkenaan ralat JSSDK yang dikongsi oleh WeChat - tandatangan tidak sah.
淡淡烟草味
淡淡烟草味 2017-05-24 11:33:32
0
3
746

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

淡淡烟草味
淡淡烟草味

membalas semua(3)
刘奇

Tidak biasa dengan php...

Periksa sama ada ia bermasalah dengan 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的安全目录要设置的。
我想大声告诉你

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan