Maison  >  Article  >  développement back-end  >  Exemple de partage de développement WeChat pour obtenir un TICKET JSAPI

Exemple de partage de développement WeChat pour obtenir un TICKET JSAPI

小云云
小云云original
2018-02-08 14:08:591979parcourir

Cet article présente principalement en détail les méthodes pertinentes pour obtenir JSAPI_TICKET dans le développement WeChat. Il a une certaine valeur de référence. Les amis intéressés peuvent s'y référer

1. 1. Obtenez access_token

2. Échangez access_token contre jsapi_ticket

3. Algorithme de signature

Les règles de génération de signature sont les suivantes : Les champs impliqués dans la signature incluent. noncestr (chaîne aléatoire), jsapi_ticket valide, timestamp (horodatage), 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


L'heure de validité de access_token est 7200s, vous pouvez donc l'enregistrer par stockage de fichiers pour éviter plusieurs demandes
/**
 * [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;
}

2 Obtenez jsapi_ticket


Échangez via access_token, obtenez jsapi_ticket. , la période de validité est également de 7200s
/**
 * [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;
}

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

use Le format de la paire clé-valeur de l'URL (c'est-à-dire key1=value1&key2=value2...) est épissé dans la chaîne string1 :

Signez la chaîne1 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.

Pour plus de détails, veuillez vous référer à : https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183

Recommandations associées :

À propos de WeChat Obtenez jsapi_ticket pendant le développement

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

WeChat jsapi pour le développement de WeChat sélectionne des images, télécharge des images , prévisualise et télécharge des images Méthode

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