À propos de l'obtention de jsapi_ticket dans le développement WeChat

炎欲天舞
Libérer: 2023-03-14 16:04:01
original
4065 Les gens l'ont consulté

1. Processus d'obtention

1. Obtenir access_token

2. Échanger access_token pour jsapi_ticket

3. comme suit : Les champs participant à la signature incluent noncestr (chaîne aléatoire), jsapi_ticket valide, timestamp (timestamp), url (URL de la page Web actuelle, à l'exclusion de # et de 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 clé1=valeur1&clé2=valeur2...) pour les concaténer 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. Méthode de mise en œuvre 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 = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$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

L'heure de validité de access_token est 7200s, vous pouvez donc l'enregistrer par stockage de fichiers pour é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 = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$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 et obtenez jsapi_ticket, la période de validité est également de 7200s

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. ,

Utilisez le format de paire clé-valeur d'URL (c'est-à-dire key1=value1&key2=value2...) pour le diviser en chaîne string1 :

Signez string1 avec sha1 pour obtenir la signature :

Remarque :

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!