微信JS-SDK頁面的注入配置信息

<?php
/**
 * Created by PhpStorm.
 * Date: 2018/8/20
 * Time: 10:47
 */
include_once "BaseLib.php";
include_once "IndexLogin.php";
include_once "SendMessageLib.php";
class IndexShare extends BaseLib
{
    private $ci;
    function __construct()
    {
        $this->configName = "cms";
        parent::__construct();
        $this->ci= &get_instance();
    }

    /**
     * Notes:獲取微信JSSDK(H5專用)
     * Date: 2018/8/20
     * Time: 11:03
     * @param $url
     * @return array|bool
     */
    public function share_film_get_jssdk_conf($url,$conf = 'wechat')
    {
        if(empty($url)){return false;}
        $this->ci->load->config('services');
        //yjq 2018/9/5  電影節分享頁面需要配置不同的公衆號
        $config = $this->ci->config->item($conf);
        $time = time();

        $jsapi_ticket = $this->share_film_get_jsapi_ticket();
        $str = $this->share_film_get_char(18);

        $sign = "jsapi_ticket={$jsapi_ticket}&noncestr={$str}&timestamp={$time}&url=" . $url;
        $sign = sha1($sign);

        $data = array(
            'appid'=>$config['APPID'],
            'timestamp'=>$time,
            'nonceStr'=>$str,
            'signature'=>$sign
        );

        return $data;
    }

    /**
     * Notes:獲取jsapiticket
     * Date: 2018/8/20
     * Time: 15:09
     * @return string
     */
    protected function share_film_get_jsapi_ticket()
    {
        $this->ci->load->config('services');
        $config = $this->ci->config->item('wechat');
        $time = time();

        $this->ci->load->model('ClientJsticket');
        $where = "expiration_time > $time and appid='{$config['APPID']}'";
        $jsticket = $this->ci->ClientJsticket->getRow($where,'id,js_ticket');

        if(!empty($jsticket))
        {
            return $jsticket['js_ticket'];
        }
        $access_token = $this->share_film_get_access_token();
        if(empty($access_token)){return "";}

        $exp_time = $time+3600;
        $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token={$access_token}";
        $content = $this->urldispatchRequest($url);
        if(empty($content)){return "";}


        $set_data =array(
            'js_ticket'=>$content['ticket'],
            'create_time'=>time(),
            'expiration_time'=>$exp_time,
            'appid'=>$config['APPID']
        );
        $this->ci->ClientJsticket->add($set_data);

        return $content['ticket'];

    }

    /**
     * Notes:獲取access_token
     * Date: 2018/8/20
     * Time: 15:20
     * @return string
     */
    protected  function share_film_get_access_token()
    {
        $this->ci->load->config('services');
        $config = $this->ci->config->item('wechat');
        $time = time();

        $this->ci->load->model('ClientAccessToken');
        $where = "expiration_time > $time and appid='{$config['APPID']}'";
        $result = $this->ci->ClientAccessToken->getRow($where,'id,access_token');
        if(!empty($result)){return $result['access_token'];}

        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$config['APPID']}&secret={$config['APPSECRET']}";
        $content = $this->urldispatchRequest($url);
        if(empty($content['access_token'])){return "";}

        $exp_time = time()+3600;
        $set_data = array(
            'access_token'=>$content['access_token'],
            'create_time'=>time(),
            'expiration_time'=>$exp_time,
            'appid'=>$config['APPID']
        );
        $this->ci->ClientAccessToken->add($set_data);
        return $content['access_token'];
    }

    /**
     * Notes:獲取隨機字符串
     * Date: 2018/8/20
     * Time: 15:12
     * @param $length
     * @return string
     */
    protected function share_film_get_char($length)
    {
        $str = "";
        $strPol = "0123456789";
        $max = strlen($strPol) - 1;
        for ($i = 0; $i < $length; $i++) {
            $str .= $strPol[rand(0, $max)];
            //rand($min,$max)生成介於min和max兩個數之間的一個隨機整數
        }
        return $str;
    }

    /**
     * Notes:微信登錄獲取code
     * Date: 2018/8/22
     * Time: 14:45
     * @param $url
     */
    public function share_film_wechat_get_code($url)
    {
        $url = urlencode($url);

        $config = $this->ci->config->item('wechat');
        $direct_url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid={$config['APPID']}&redirect_uri=$url&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
        header('location:'.$direct_url);exit();
    }
    public function share_film_wechat_get_openid($code)
    {
        $config = $this->ci->config->item('wechat');
        $this->ci->load->library('Session');
        if(isset($_SESSION['user_data'])){
            return json_decode($_SESSION['user_data'],true);
        }

        $url='https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$config['APPID'].'&secret='.$config['APPSECRET'].'&code='.$code.'&grant_type=authorization_code';
        $result = $this->urldispatchRequest($url);


        if(!empty($result['openid']) && !empty($result['access_token'])){
            $userinfo=$this->share_film_wechat_get_userinfo($result['openid'],$result['access_token']);
            if(!empty($userinfo)){
                $this->ci->session->set_userdata('user_data',json_encode($userinfo));//保存session
                return $userinfo;
            }
            return false;
        }
        return false;
    }
    /**
     * Notes:微信獲取用戶信息
     * Date: 2018/8/22
     * Time: 14:49
     * @param $openid
     * @param $access_token
     * @return array
     */
    protected function share_film_wechat_get_userinfo($openid,$access_token)
    {
        $url = "https://api.weixin.qq.com/sns/userinfo?access_token=$access_token&openid=$openid&lang=zh_CN";
        $this->requestMethod="GET";

        $arr = $this->urldispatchRequest($url);

        if(!empty($arr['nickname']))
        {
            $rel['headimgurl'] = $arr['headimgurl'];
            $rel['nickname'] = $arr['nickname'];
            $rel['openid'] = $openid;
            return $rel;
        }
        return array();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章