ホームページ >バックエンド開発 >PHPチュートリアル >WeChat開発におけるjsapi_ticketの取得について

WeChat開発におけるjsapi_ticketの取得について

炎欲天舞
炎欲天舞オリジナル
2017-08-04 16:21:144132ブラウズ

1. 取得プロセス

1. access_token を取得します

2. access_token を jsapi_ticket に交換します

署名に含まれるフィールドには、noncestr (ランダムな文字列)、有効な jsapi_ticket、 timestamp (タイムスタンプ)、url (# とそれに続く部分を除く、現在の Web ページの URL)。署名されるすべてのパラメータをフィールド名の ASCII コードに従って小さいものから大きいもの (辞書順) に並べ替えた後、URL キーと値のペアの形式 (つまり、key1=value1&key2=value2...) を使用してそれらを連結します。文字列 string1。ここで、パラメータ名はすべて小文字であることに注意してください。 string1 に対して sha1 暗号化を実行し、フィールド名とフィールド値には元の値を使用し、URL エスケープは実行しません。

2. 具体的な実装方法

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

を取得するため、複数のリクエストを避けるためにファイルストレージに保存できます。

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

access_token を介して jsapi_ticket を取得します。有効期間も 7200 秒です。

3. 署名を生成します


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

URL キーと値のペア形式を使用します (つまり、key1= value)。 1&キー2 =value2...) 文字列 string1 に結合:

sha1 で string1 に署名し、署名を取得します:

注:

1。署名に使用される noncestr とタイムスタンプは、wx の nonceStr とタイムスタンプと同じである必要があります。構成。

2. 署名に使用される URL は、JS インターフェースを呼び出すページの完全な URL である必要があります。

3. セキュリティ上の理由から、開発者はサーバー側に署名ロジックを実装する必要があります

以上がWeChat開発におけるjsapi_ticketの取得についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。