ThinkPHP微信JSSDK的使用

記錄一下微信JSSDK的使用,第一次開發。

1.到微信公衆平臺->公衆號設置->功能設置->設置JS接口安全域名。


2.在需要使用JSSDK的頁面頭部引入JS文件 http://res.wx.qq.com/open/js/jweixin-1.2.0.js

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
3.在php中該頁面對應的方法裏獲取簽名數據

public function index(){
        //簽名數據
        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
        $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
        $qm = createName($url);
        $this->assign('qm',$qm);
        $this->display();
    }
(1)簽名數據方法放在Common目錄下function.php裏

function createName($url){
    $time = time();
    $nonoce = createNonceStr();
    $appid = C('APPID');//公衆號的APPID
    $jsapiTicket = jsapitkt();
    $str = "jsapi_ticket=$jsapiTicket&noncestr=$nonoce×tamp=$time&url=$url";
    $signature = sha1($str);
    return array(
        'appid'=>$appid,
        'timestamp'=>$time,
        'nonceStr'=>$nonoce,
        'signature'=>$signature
    );
}
/**
 * 生成隨機字符串
 * @param int $length //字符串長度
 * @return string
 */
function createNonceStr($length = 16) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    $str = "";
    for ($i = 0; $i < $length; $i++) {
        $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
    }
    return $str;
}
//獲取jsapi_ticket
function jsapitkt(){
    if(S('jsapitkt')){
        if (time() - S('jsapitkt')['time']>7000){
            $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.getToken().'&type=jsapi';
            $data = httpGet($url);
            $data['time'] = time();
            S('jsapitkt',$data);
        }
        return S('jsapitkt')['ticket'];
    }else{
        $url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.getToken().'&type=jsapi';
        $data = httpGet($url);
        $data['time'] = time();
        S('jsapitkt',$data);
        return S('jsapitkt')['ticket'];
    }
}
//獲取accesstoken
function getToken(){
    if(S('access_token')){
        if(time() - S('access_token')['time']>7000){
            $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.C('APPID').'&secret='.C('APPSECRET');
            $data = httpGet($url);
            $data['time'] = time();
            S('access_token',$data);
        }
        return S('access_token')['access_token'];
    }else{
        $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.C('APPID').'&secret='.C('APPSECRET');
        $data = httpGet($url);
        $data['time'] = time();
        S('access_token',$data);
        return S('access_token')['access_token'];
    }
}

/**
 * curl GET
 * @param $url //鏈接
 * @param string $data_type //返回數據類型,默認爲數組
 * @return array|bool
 */
function httpGet($url, $data_type='text'){
    $cl = curl_init();
    if(stripos($url, 'https://') !== FALSE) {
        curl_setopt($cl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($cl, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($cl, CURLOPT_SSLVERSION, 1);
    }
    curl_setopt($cl, CURLOPT_URL, $url);
    curl_setopt($cl, CURLOPT_RETURNTRANSFER, 1 );
    $content = curl_exec($cl);
    $status = curl_getinfo($cl);
    curl_close($cl);
    if (isset($status['http_code']) && $status['http_code'] == 200) {
        if ($data_type == 'json') {
            $content = json_decode($content);
        }
        return json_decode($content,true);
    } else {
        return FALSE;
    }
}
4.前端頁面通過config接口注入權限驗證配置。

wx.config({
            debug: true,
            appId: '{$qm.appid}',
            timestamp: '{$qm.timestamp}',
            nonceStr: '{$qm.nonceStr}',
            signature: '{$qm.signature}',
            jsApiList: ["chooseImage"]
        });
4.前端頁面通過config接口注入權限驗證配置。
wx.config({
            debug: true,
            appId: '{$qm.appid}',
            timestamp: '{$qm.timestamp}',
            nonceStr: '{$qm.nonceStr}',
            signature: '{$qm.signature}',
            jsApiList: ["chooseImage"]
        });
 5.成功則alert 成功信息






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章