Heim  >  Artikel  >  Backend-Entwicklung  >  Beispiel-Tutorial für die WeChat-Entwicklung, um jsapi_ticket zu erhalten

Beispiel-Tutorial für die WeChat-Entwicklung, um jsapi_ticket zu erhalten

零下一度
零下一度Original
2017-07-20 17:28:232015Durchsuche

Instanz-Tutorial für die WeChat-Entwicklung, um jsapi_ticket zu erhalten

1. Erhalten Sie access_token

Tauschen Sie jsapi_ticket über access_token

3. Signaturalgorithmus

Die Regeln zur Signaturerstellung lauten wie folgt: Zu den an der Signatur beteiligten Feldern gehören Noncestr (zufällige Zeichenfolge), gültiges jsapi_ticket, Zeitstempel (Zeitstempel) und URL (URL des aktuellen Webs). Seite, nicht im Lieferumfang enthalten) # und die folgenden Teile). Nachdem Sie alle zu signierenden Parameter entsprechend dem ASCII-Code des Feldnamens von klein nach groß (lexikografische Reihenfolge) sortiert haben, verwenden Sie das URL-Schlüssel-Wert-Paar-Format (d. h. Schlüssel1=Wert1&Schlüssel2=Wert2...), um sie zu einem zusammenzufügen Zeichenfolge Zeichenfolge1. Hierbei ist zu beachten, dass alle Parameternamen Kleinbuchstaben sind. Führen Sie die SHA1-Verschlüsselung für String1 durch, verwenden Sie Originalwerte für Feldnamen und Feldwerte und führen Sie kein URL-Escape durch.

2. Spezifische Implementierung

1. Erhalten Sie access_token

/**
 * [getAccessToken description] 获取access_token
 * @return [type] [description] */private  function getAccessToken() {
    $data = $this->getFile($this->accessTokenFile);    if(time() - $data['time'] > 0){
        $url = "{$this->appID}&secret={$this->appsecret}";
        $re = $this->httpGet($url);
        $access_token = $re['access_token'];        if(isset($access_token)){
            $data['access_token']  = $access_token;
            $data['time'] = time() + 7200;
            $this->setFile($this->accessTokenFile,json_encode($data));
        }
    }else{
        $access_token = $data['access_token'];
    }   return $access_token;
}

Die Gültigkeitsdauer von access_token beträgt also 7200 Sekunden Sie können die Dateispeichermethode zum Speichern verwenden, um mehrere Anfragen zu vermeiden.

2. Holen Sie sich jsapi_ticket

/**
 * [getJsapiTicket description] 获取jsapi_ticket
 * @return [type] [description] */private function getJsapiTicket() {
    $access_token = $this->getAccessToken();
    $jsapi_ticket = $this->getFile($this->jsapiTicketFile);    if(time() - $jsapi_ticket['time'] > 0) {
        $url = "{$access_token}&type=jsapi";
        $re = $this->httpGet($url);
        $this->preArr($re);
        $jsapi_ticket = $re['ticket'];        if(isset($jsapi_ticket)){
            $data['jsapi_ticket'] = $jsapi_ticket;
            $data['time'] = time() + 7200;
            $this->setFile($this->jsapiTicketFile, json_encode($data));
        }
    }else{
        $jsapi_ticket = $jsapi_ticket['jsapi_ticket'];
    }   return $jsapi_ticket;
}

Austausch über access_token, Holen Sie sich jsapi_ticket , die Gültigkeitsdauer beträgt ebenfalls 7200s; key Das Format des Wertepaars (d. h. key1=value1&key2=value2...) wird in eine Zeichenfolge string1 gespleißt:

Signieren Sie string1 mit sha1, um eine Signatur zu erhalten:

Hinweise:

1 .Der für die Signatur verwendete Noncestr und Zeitstempel muss mit dem NonceStr und dem Zeitstempel in wx.config identisch sein.
/**
 * [getSignpackage description] 获取签名
 * @return [type] [description] */public function getSignpackage(){
    $jsapi_ticket = $this->getJsapiTicket();    // 注意 URL 一定要动态获取,不能 hardcode.$protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    $noncestr = $this->createNonceStr();
    $timestamp = time();

    $string1 = "jsapi_ticket={$jsapi_ticket}&noncestr={$noncestr}&timestamp={$timestamp}&url={$url}";
    $signature = sha1($string1);    
    $signPackage = array(        'appId'     => $this->appID,        'nonceStr'  => $noncestr,        'timestamp' => $timestamp,        'signature' => $signature,
    );    return $signPackage;
}
2. Die für die Signatur verwendete URL muss die vollständige URL der Seite sein, die die JS-Schnittstelle aufruft.

3. Aus Sicherheitsgründen müssen Entwickler die Signaturlogik serverseitig implementieren.

Das obige ist der detaillierte Inhalt vonBeispiel-Tutorial für die WeChat-Entwicklung, um jsapi_ticket zu erhalten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn