Exemple de tutoriel de développement WeChat pour obtenir jsapi_ticket

零下一度
Libérer: 2023-03-13 07:46:01
original
2008 Les gens l'ont consulté

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;
}
Copier après la connexion

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;
}
Copier après la connexion

É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;
}
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal