Maison >développement back-end >tutoriel php >Exemple de tutoriel de développement WeChat pour obtenir jsapi_ticket

Exemple de tutoriel de développement WeChat pour obtenir jsapi_ticket

零下一度
零下一度original
2017-07-20 17:28:232023parcourir

Tutoriel d'instance pour le développement de WeChat pour obtenir jsapi_ticket

1. Processus d'obtention

1. Obtenez access_token

2. 🎜 >

3. Algorithme de signature

Les règles de génération de signature sont les suivantes : les champs participant à la signature incluent noncestr (chaîne aléatoire), jsapi_ticket valide, timestamp (timestamp), url (URL du web actuel page, non incluse) # et ses parties suivantes). Après avoir trié tous les paramètres à signer selon le code ASCII du nom du champ de petit à grand (ordre lexicographique), utilisez le format de paire clé-valeur d'URL (c'est-à-dire key1=value1&key2=value2...) pour les fusionner en un chaîne chaîne1. Il convient de noter ici que tous les noms de paramètres sont en minuscules. Effectuez le cryptage sha1 sur string1, utilisez les valeurs d'origine pour les noms de champs et les valeurs de champ et n'effectuez pas d'échappement d'URL.

2. Implémentation spécifique

1. Obtenir 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;
}

La durée de validité d'access_token est de 7200s, donc Vous pouvez utiliser la méthode de stockage de fichiers pour enregistrer afin d'éviter plusieurs demandes ;

2. Obtenez 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;
}

Échangez via access_token, obtenez jsapi_ticket. , la période de validité est également de 7200 s ;

3. Générer une signature

/**
 * [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;
}

algorithme de signature,

utiliser l'URL. key Le format de la paire de valeurs (c'est-à-dire key1=value1&key2=value2...) est fusionné en une chaîne string1 :

Signez string1 avec sha1 pour obtenir la signature :

Notes :

1 Le noncestr et l'horodatage utilisés pour la signature doivent être les mêmes que le nonceStr et l'horodatage dans wx.config.

2. L'URL utilisée pour la signature doit être l'URL complète de la page appelant l'interface JS.

3. Pour des raisons de sécurité, les développeurs doivent implémenter une logique de signature côté serveur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn