快三跨度开奖结果_thinkphp5微信分享功能

浏览:254 发布日期:2019/09/19 分类:功能实现
快三跨度开奖结果_thinkphp5微信分享功能
一、config加入配置信息    'token'=>'gh_566bafc976e4',//微信公众号查询
    'wx_appid' => 'xxxxxxxxx',
    'wx_key' => 'xxxxxxxx',
二、再common.php加入以下代码//获取token
function get_token() {
    $token=config("app.token");
    session ( 'token', $token );
    return $token;
}
// 获取access_token,自动带缓存功能
function get_access_token($token = '') {
    empty ($token) && $token = get_token();
    $model = Db::name("access_token");
    $map['token'] = $token;
    $info = $model->where($map)->find();
    if(!$info)
    {
        $newaccess_token = getNowAccesstoken($token);
    }
    else
    {
        $nowtime = time();//现在时间
        $time = $nowtime - $info['lasttime'];
        $newaccess_token = $info['access_token'];
        if($time >= 1800){
            $newaccess_token = getNowAccesstoken($token);
            if($newaccess_token == 0){//重新再 调用一次
                $newaccess_token = getNowAccesstoken($token);
            }
        }
    }

    return $newaccess_token;
}
function getNowAccesstoken($token = ''){
    $nowtime = time();//现在时间
    empty ( $token ) && $token = get_token ();
    $info = get_token_appinfo ($token);
    if (empty ($info ['wx_appid'] ) || empty ($info['wx_appsecret'])) {
        return 0;
    }
    $url = 'http://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $info ['wx_appid'] . '&secret=' . $info ['wx_appsecret'];
    $ch1 = curl_init ();
    $timeout = 5;
    curl_setopt ( $ch1, CURLOPT_URL, $url );
    curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, $timeout );
    curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE );
    curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false );
    $accesstxt = curl_exec ( $ch1 );
    curl_close ( $ch1 );
    $tempArr = json_decode ($accesstxt, true);
    if (isset($tempArr['access_token'])) {
        $model = Db::name("access_token");
        $map['token'] = $token;
        //保存新access_token到数据库,更新最后时间
        $data = array(
            'access_token'=>$tempArr ['access_token'],
            'lasttime'=>$nowtime
        );
        $info=$model->where($map)->find();
        if($info)
        {
            $model->where($map)->update($data);
        }
        else
        {
            $data['token'] = $token;
            $model->where($map)->insert($data);
        }
        return $tempArr ['access_token'];
    }else{
        return 0;
    }
}
// 获取jsapi_ticket,判断是不过期
function getJsapiTicket($token = '') {
    empty ($token) && $token = get_token();
    $model = Db::name("jsapi_ticket");
    $map['token'] = $token;
    $info = $model->where($map)->find();
    if(!$info)
    {
        $new_jsapi_ticket = getNowJsapiTicket($token);
    }
    else
    {
        $nowtime = time();//现在时间
        $time = $nowtime - $info['lasttime'];
        $new_jsapi_ticket = $info['ticket'];
        if($time>=1800){
            $new_jsapi_ticket = getNowJsapiTicket($token);
            if($new_jsapi_ticket == 0){//重新再 调用一次
                $new_jsapi_ticket = getNowJsapiTicket($token);
            }
        }
    }

    return $new_jsapi_ticket;
}
//获取jsapi_ticket
function getNowJsapiTicket($token='')
{
    empty ($token) && $token = get_token();
    $access_token=get_access_token();
    $url='http://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' .$access_token. '&type=jsapi';
    $ch1 = curl_init ();
    $timeout = 5;
    curl_setopt ( $ch1, CURLOPT_URL, $url );
    curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );
    curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, $timeout );
    curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE );
    curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false );
    $accesstxt = curl_exec ( $ch1 );
    curl_close ( $ch1 );
    $tempArr = json_decode ($accesstxt, true);
    $ext=$tempArr['errmsg'];
    if ($ext=='ok') {
        $model = Db::name("jsapi_ticket");
        $map['token'] = $token;
        $nowtime=time();
        //保存新jsapi_ticket到数据库,更新最后时间
        $data = array(
            'ticket'=>$tempArr ['ticket'],
            'lasttime'=>$nowtime
        );
        $info=$model->where($map)->find();
        if($info)
        {
            $model->where($map)->update($data);
        }
        else
        {
            $data['token'] = $token;
            $model->where($map)->insert($data);
        }
        return $tempArr['ticket'];
    }
    else
    {
        return 0;
    }
}
// 获取公众号的信息
function get_token_appinfo() {
    $data=[
        'wx_appid'=>config("app.wx_appid"),
        'wx_appsecret'=>config("app.wx_appsecret")
    ];
    return $data;
}
//获取signature的值 获取签名值数组
function get_signature($url)
{
    //$url='http://'.$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
//    $protocol = (!empty($_SERVER['http']) && $_SERVER['http'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "http://" : "http://";
//    $url = "$protocol$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
    $ticket=getJsapiTicket();
    $noncestr=createNonceStr();
    $timestamp=time();
    $string='jsapi_ticket='.$ticket.'&noncestr='.$noncestr.'×tamp='.$timestamp.'&url='.$url;
    $signature = sha1($string);
    $signPackage = array(
        "appId"     =>config('app.wx_appid'),
        "nonceStr"  =>$noncestr,
        "timestamp" => $timestamp,
        "url"       => $url,
        "signature" => $signature,
        "rawString" => $string
    );
    write_log('signature','返回值:'.json_encode($signPackage));
    return  $signPackage;
}
//随机生成字符串
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;
}
三、导入数据库DROP TABLE IF EXISTS `w_access_token`;
CREATE TABLE `w_access_token` (
  `token` varchar(255) DEFAULT NULL,
  `access_token` varchar(255) DEFAULT NULL,
  `lasttime` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Table structure for w_jsapi_ticket
-- ----------------------------
DROP TABLE IF EXISTS `w_jsapi_ticket`;
CREATE TABLE `w_jsapi_ticket` (
  `token` varchar(255) DEFAULT NULL,
  `ticket` varchar(255) DEFAULT NULL,
  `lasttime` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
四、调用public function userService(){
      $signPackage=get_signature();
      $this->view->assign('signPackage', $signPackage);
      return $this->view->fetch();
  }
五、html页面代码<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>分享按钮测试</title>
</head>
<script src="/static/plugins/AdminLTE-2.4/bower_components/jquery/dist/jquery.min.js"></script>
<body>
<script src="http://res.wx.qq.com/open/js/jweixin-1.5.0.js"></script>
<script>
   // alert(location.href.split('#')[0]);
    var baseUrl = "http://aya.sxitdlc.com/";       // 项目地址
    var wxData = {
        "imgUrl" : baseUrl + 'share.jpg',  // 分享图标
        "link"   : baseUrl,                // 分享地址
        "title"  : '微信分享接口-分享标题',   // 分享标题
        "desc"   : '分享文案'               // 分享文案
    };
    wx.config({
        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: '{$signPackage.appId}', // 必填,公众号的唯一标识
        timestamp: '{$signPackage.timestamp}', // 必填,生成签名的时间戳
        nonceStr: '{$signPackage.nonceStr}', // 必填,生成签名的随机串
        signature: '{$signPackage.signature}',// 必填,签名,见附录1
        jsApiList: ['checkJsApi', 'updateAppMessageShareData', 'updateTimelineShareData']
    });
    wx.ready(function () {
        wx.updateAppMessageShareData({
            title: wxData.title,
            desc: wxData.desc,
            link: wxData.link,
            imgUrl: wxData.imgUrl,
            success: function () {
            }
        });
        wx.updateTimelineShareData({
            title: wxData.title,
            desc: wxData.desc,
            link: wxData.link,
            imgUrl: wxData.imgUrl,
            type: 'link',
            dataUrl: '',
            success: function () {
            }
        });
    });
</script>
</body>
</html>
六、效果图:
评论( 相关
后面还有条评论,点击查看>>