diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..ea7cb0f --- /dev/null +++ b/.htaccess @@ -0,0 +1,9 @@ + + Options +FollowSymlinks + RewriteEngine On + + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^(.[a-zA-Z0-9\-\_]+).html$ index.php?mod=$1 [QSA,PT,L] + RewriteRule ^pay/(.*)$ pay.php?s=$1 [QSA,PT,L] + \ No newline at end of file diff --git a/SDK.zip b/SDK.zip new file mode 100644 index 0000000..b92f1e4 Binary files /dev/null and b/SDK.zip differ diff --git a/admin/ajax.php b/admin/ajax.php new file mode 100644 index 0000000..dda91aa --- /dev/null +++ b/admin/ajax.php @@ -0,0 +1,826 @@ +window.location.href='./login.php';"); +$act=isset($_GET['act'])?daddslashes($_GET['act']):null; + +if(strpos($_SERVER['HTTP_REFERER'],$_SERVER['HTTP_HOST'])===false)exit('{"code":403}'); + +@header('Content-Type: application/json; charset=UTF-8'); + +switch($act){ +case 'getcount': + $thtime=date("Y-m-d").' 00:00:00'; + $count1=$DB->getColumn("SELECT count(*) from pre_order"); + $count2=$DB->getColumn("SELECT count(*) from pre_user"); + + $paytype = []; + $rs = $DB->getAll("SELECT id,name,showname FROM pre_type WHERE status=1"); + foreach($rs as $row){ + $paytype[$row['id']] = $row['showname']; + } + unset($rs); + + $channel = []; + $rs = $DB->getAll("SELECT id,name FROM pre_channel WHERE status=1"); + foreach($rs as $row){ + $channel[$row['id']] = $row['name']; + } + unset($rs); + + $tongji_cachetime=getSetting('tongji_cachetime', true); + $tongji_cache = $CACHE->read('tongji'); + if($tongji_cachetime+3600>=time() && $tongji_cache){ + $array = unserialize($tongji_cache); + $result=["code"=>0,"type"=>"cache","paytype"=>$paytype,"channel"=>$channel,"count1"=>$count1,"count2"=>$count2,"usermoney"=>round($array['usermoney'],2),"settlemoney"=>round($array['settlemoney'],2),"order_today"=>$array['order_today'],"order"=>[]]; + }else{ + $usermoney=$DB->getColumn("SELECT SUM(money) FROM pre_user WHERE money!='0.00'"); + $settlemoney=$DB->getColumn("SELECT SUM(money) FROM pre_settle"); + + $today=date("Y-m-d"); + $rs=$DB->query("SELECT type,channel,money from pre_order where status=1 and date>='$today'"); + foreach($paytype as $id=>$type){ + $order_paytype[$id]=0; + } + foreach($channel as $id=>$type){ + $order_channel[$id]=0; + } + while($row = $rs->fetch()) + { + $order_paytype[$row['type']]+=$row['money']; + $order_channel[$row['channel']]+=$row['money']; + } + foreach($order_paytype as $k=>$v){ + $order_paytype[$k] = round($v,2); + } + foreach($order_channel as $k=>$v){ + $order_channel[$k] = round($v,2); + } + $allmoney=0; + foreach($order_paytype as $order){ + $allmoney+=$order; + } + $order_today['all']=round($allmoney,2); + $order_today['paytype']=$order_paytype; + $order_today['channel']=$order_channel; + + saveSetting('tongji_cachetime',time()); + $CACHE->save('tongji',serialize(["usermoney"=>$usermoney,"settlemoney"=>$settlemoney,"order_today"=>$order_today])); + + $result=["code"=>0,"type"=>"online","paytype"=>$paytype,"channel"=>$channel,"count1"=>$count1,"count2"=>$count2,"usermoney"=>round($usermoney,2),"settlemoney"=>round($settlemoney,2),"order_today"=>$order_today,"order"=>[]]; + } + for($i=1;$i<7;$i++){ + $day = date("Ymd", strtotime("-{$i} day")); + if($order_tongji = $CACHE->read('order_'.$day)){ + $result["order"][$day] = unserialize($order_tongji); + }else{ + break; + } + } + exit(json_encode($result)); +break; +case 'uploadimg': + if($_POST['do']=='upload'){ + $type = $_POST['type']; + $filename = $type.'_'.md5_file($_FILES['file']['tmp_name']).'.png'; + $fileurl = 'assets/img/Product/'.$filename; + if(copy($_FILES['file']['tmp_name'], ROOT.'assets/img/Product/'.$filename)){ + exit('{"code":0,"msg":"succ","url":"'.$fileurl.'"}'); + }else{ + exit('{"code":-1,"msg":"上传失败,请确保有本地写入权限"}'); + } + } + exit('{"code":-1,"msg":"null"}'); +break; +case 'setStatus': + $trade_no=trim($_GET['trade_no']); + $status=is_numeric($_GET['status'])?intval($_GET['status']):exit('{"code":200}'); + if($status==5){ + if($DB->exec("DELETE FROM pre_order WHERE trade_no='$trade_no'")) + exit('{"code":200}'); + else + exit('{"code":400,"msg":"删除订单失败!['.$DB->error().']"}'); + }else{ + if($DB->exec("update pre_order set status='$status' where trade_no='$trade_no'")!==false) + exit('{"code":200}'); + else + exit('{"code":400,"msg":"修改订单失败!['.$DB->error().']"}'); + } +break; +case 'order': + $trade_no=trim($_GET['trade_no']); + $row=$DB->getRow("select A.*,B.showname typename,C.name channelname from pre_order A,pre_type B,pre_channel C where trade_no='$trade_no' and A.type=B.id and A.channel=C.id limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前订单不存在或未成功选择支付通道!"}'); + $result=array("code"=>0,"msg"=>"succ","data"=>$row); + exit(json_encode($result)); +break; +case 'operation': + $status=is_numeric($_POST['status'])?intval($_POST['status']):exit('{"code":-1,"msg":"请选择操作"}'); + $checkbox=$_POST['checkbox']; + $i=0; + foreach($checkbox as $trade_no){ + if($status==4)$DB->exec("DELETE FROM pre_order WHERE trade_no='$trade_no'"); + elseif($status==3){ + $row=$DB->getRow("select uid,getmoney,status from pre_order where trade_no='$trade_no' limit 1"); + if($row && $row['status']==3 && $row['getmoney']>0){ + if(changeUserMoney($row['uid'], $row['getmoney'], true, '解冻订单', $trade_no)) + $DB->exec("update pre_order set status='1' where trade_no='$trade_no'"); + } + } + elseif($status==2){ + $row=$DB->getRow("select uid,getmoney,status from pre_order where trade_no='$trade_no' limit 1"); + if($row && $row['status']==1 && $row['getmoney']>0){ + if(changeUserMoney($row['uid'], $row['getmoney'], false, '冻结订单', $trade_no)) + $DB->exec("update pre_order set status='3' where trade_no='$trade_no'"); + } + } + else $DB->exec("update pre_order set status='$status' where trade_no='$trade_no' limit 1"); + $i++; + } + exit('{"code":0,"msg":"成功改变'.$i.'条订单状态"}'); +break; +case 'getmoney': //退款查询 + if(!$conf['admin_paypwd'])exit('{"code":-1,"msg":"你还未设置支付密码"}'); + $trade_no=trim($_POST['trade_no']); + $api=isset($_POST['api'])?intval($_POST['api']):0; + $row=$DB->getRow("select * from pre_order where trade_no='$trade_no' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前订单不存在!"}'); + if($row['status']!=1) + exit('{"code":-1,"msg":"只支持退款已支付状态的订单"}'); + if($api==1){ + if(!$row['api_trade_no']) + exit('{"code":-1,"msg":"接口订单号不存在"}'); + $channel = \lib\Channel::get($row['channel']); + if(!$channel){ + exit('{"code":-1,"msg":"当前支付通道信息不存在"}'); + } + if(\lib\Plugin::isrefund($channel['plugin'])==false){ + exit('{"code":-1,"msg":"当前支付通道不支持API退款"}'); + } + $money = $row['money']; + }else{ + $money = $row['getmoney']; + } + exit('{"code":0,"money":"'.$money.'"}'); +break; +case 'refund': //退款操作 + $trade_no=trim($_POST['trade_no']); + $row=$DB->getRow("select uid,getmoney,status from pre_order where trade_no='$trade_no' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前订单不存在!"}'); + if($row['status']!=1) + exit('{"code":-1,"msg":"只支持退款已支付状态的订单"}'); + if($row['getmoney']>0){ + changeUserMoney($row['uid'], $row['getmoney'], false, '订单退款', $trade_no); + $DB->exec("update pre_order set status='2' where trade_no='$trade_no'"); + } + exit('{"code":0,"msg":"已成功从UID:'.$row['uid'].'扣除'.$row['getmoney'].'元余额"}'); +break; +case 'apirefund': //API退款操作 + $trade_no=trim($_POST['trade_no']); + $paypwd=trim($_POST['paypwd']); + if($paypwd!=$conf['admin_paypwd']) + exit('{"code":-1,"msg":"支付密码输入错误!"}'); + $row=$DB->getRow("select uid,money,getmoney,status from pre_order where trade_no='$trade_no' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前订单不存在!"}'); + if($row['status']!=1) + exit('{"code":-1,"msg":"只支持退款已支付状态的订单"}'); + $message = null; + if(api_refund($trade_no, $message)){ + if($row['getmoney']>0){ + if(changeUserMoney($row['uid'], $row['getmoney'], false, '订单退款', $trade_no)){ + $addstr = ',并成功从UID:'.$row['uid'].'扣除'.$row['getmoney'].'元余额'; + } + $DB->exec("update pre_order set status='2' where trade_no='$trade_no'"); + } + exit('{"code":0,"msg":"API退款成功!退款金额¥'.$row['money'].$addstr.'"}'); + }else{ + exit('{"code":-1,"msg":"API退款失败:'.$message.'"}'); + } +break; +case 'freeze': //冻结订单 + $trade_no=trim($_POST['trade_no']); + $row=$DB->getRow("select uid,getmoney,status from pre_order where trade_no='$trade_no' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前订单不存在!"}'); + if($row['status']!=1) + exit('{"code":-1,"msg":"只支持冻结已支付状态的订单"}'); + if($row['getmoney']>0){ + changeUserMoney($row['uid'], $row['getmoney'], false, '订单冻结', $trade_no); + $DB->exec("update pre_order set status='3' where trade_no='$trade_no'"); + } + exit('{"code":0,"msg":"已成功从UID:'.$row['uid'].'冻结'.$row['getmoney'].'元余额"}'); +break; +case 'unfreeze': //解冻订单 + $trade_no=trim($_POST['trade_no']); + $row=$DB->getRow("select uid,getmoney,status from pre_order where trade_no='$trade_no' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前订单不存在!"}'); + if($row['status']!=3) + exit('{"code":-1,"msg":"只支持解冻已冻结状态的订单"}'); + if($row['getmoney']>0){ + changeUserMoney($row['uid'], $row['getmoney'], true, '订单解冻', $trade_no); + $DB->exec("update pre_order set status='1' where trade_no='$trade_no'"); + } + exit('{"code":0,"msg":"已成功为UID:'.$row['uid'].'恢复'.$row['getmoney'].'元余额"}'); +break; +case 'notify': + $trade_no=trim($_POST['trade_no']); + $row=$DB->getRow("select * from pre_order where trade_no='$trade_no' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前订单不存在!"}'); + $url=creat_callback($row); + if($row['notify']>0) + $DB->exec("update pre_order set notify=0 where trade_no='$trade_no'"); + exit('{"code":0,"url":"'.($_POST['isreturn']==1?$url['return']:$url['notify']).'"}'); +break; +case 'getPayType': + $id=intval($_GET['id']); + $row=$DB->getRow("select * from pre_type where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前支付方式不存在!"}'); + $result = ['code'=>0,'msg'=>'succ','data'=>$row]; + exit(json_encode($result)); +break; +case 'setPayType': + $id=intval($_GET['id']); + $status=intval($_GET['status']); + $row=$DB->getRow("select * from pre_type where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前支付方式不存在!"}'); + $sql = "UPDATE pre_type SET status='$status' WHERE id='$id'"; + if($DB->exec($sql))exit('{"code":0,"msg":"修改支付方式成功!"}'); + else exit('{"code":-1,"msg":"修改支付方式失败['.$DB->error().']"}'); +break; +case 'delPayType': + $id=intval($_GET['id']); + $row=$DB->getRow("select * from pre_type where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前支付方式不存在!"}'); + $row=$DB->getRow("select * from pre_channel where type='$id' limit 1"); + if($row) + exit('{"code":-1,"msg":"删除失败,存在使用该支付方式的支付通道"}'); + $sql = "DELETE FROM pre_type WHERE id='$id'"; + if($DB->exec($sql))exit('{"code":0,"msg":"删除支付方式成功!"}'); + else exit('{"code":-1,"msg":"删除支付方式失败['.$DB->error().']"}'); +break; +case 'savePayType': + if($_POST['action'] == 'add'){ + $name=trim($_POST['name']); + $showname=trim($_POST['showname']); + $device=intval($_POST['device']); + if(!preg_match('/^[a-zA-Z0-9]+$/',$name)){ + exit('{"code":-1,"msg":"调用值不符合规则"}'); + } + $row=$DB->getRow("select * from pre_type where name='$name' and device='$device' limit 1"); + if($row) + exit('{"code":-1,"msg":"同一个调用值+支持设备不能重复"}'); + $sql = "INSERT INTO pre_type (name, showname, device, status) VALUES ('{$name}','{$showname}',{$device},1)"; + if($DB->exec($sql))exit('{"code":0,"msg":"新增支付方式成功!"}'); + else exit('{"code":-1,"msg":"新增支付方式失败['.$DB->error().']"}'); + }else{ + $id=intval($_POST['id']); + $name=trim($_POST['name']); + $showname=trim($_POST['showname']); + $device=intval($_POST['device']); + if(!preg_match('/^[a-zA-Z0-9]+$/',$name)){ + exit('{"code":-1,"msg":"调用值不符合规则"}'); + } + $row=$DB->getRow("select * from pre_type where name='$name' and device='$device' and id<>$id limit 1"); + if($row) + exit('{"code":-1,"msg":"同一个调用值+支持设备不能重复"}'); + $sql = "UPDATE pre_type SET name='{$name}',showname='{$showname}',device='{$device}' WHERE id='$id'"; + if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改支付方式成功!"}'); + else exit('{"code":-1,"msg":"修改支付方式失败['.$DB->error().']"}'); + } +break; +case 'getPlugin': + $name = trim($_GET['name']); + $row=$DB->getRow("select * from pre_plugin where name='$name'"); + if($row){ + $result = ['code'=>0,'msg'=>'succ','data'=>$row]; + exit(json_encode($result)); + } + else exit('{"code":-1,"msg":"当前支付插件不存在!"}'); +break; +case 'getPlugins': + $typeid = intval($_GET['typeid']); + $type=$DB->getColumn("select name from pre_type where id='$typeid' limit 1"); + if(!$type) + exit('{"code":-1,"msg":"当前支付方式不存在!"}'); + $list=$DB->getAll("select name,showname from pre_plugin where types like '%$type%'"); + if($list){ + $result = ['code'=>0,'msg'=>'succ','data'=>$list]; + exit(json_encode($result)); + } + else exit('{"code":-1,"msg":"没有找到支持该支付方式的插件"}'); +break; +case 'getChannel': + $id=intval($_GET['id']); + $row=$DB->getRow("select * from pre_channel where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前支付通道不存在!"}'); + $result = ['code'=>0,'msg'=>'succ','data'=>$row]; + exit(json_encode($result)); +break; +case 'getChannels': + $typeid = intval($_GET['typeid']); + $type=$DB->getColumn("select name from pre_type where id='$typeid' limit 1"); + if(!$type) + exit('{"code":-1,"msg":"当前支付方式不存在!"}'); + $list=$DB->getAll("select id,name from pre_channel where type='$typeid' and status=1"); + if($list){ + $result = ['code'=>0,'msg'=>'succ','data'=>$list]; + exit(json_encode($result)); + } + else exit('{"code":-1,"msg":"没有找到支持该支付方式的通道"}'); +break; +case 'setChannel': + $id=intval($_GET['id']); + $status=intval($_GET['status']); + $row=$DB->getRow("select * from pre_channel where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前支付通道不存在!"}'); + if($status==1 && (empty($row['appid']) || empty($row['appkey']))){ + exit('{"code":-1,"msg":"请先配置好密钥后再开启"}'); + } + $sql = "UPDATE pre_channel SET status='$status' WHERE id='$id'"; + if($DB->exec($sql))exit('{"code":0,"msg":"修改支付通道成功!"}'); + else exit('{"code":-1,"msg":"修改支付通道失败['.$DB->error().']"}'); +break; +case 'delChannel': + $id=intval($_GET['id']); + $row=$DB->getRow("select * from pre_channel where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前支付通道不存在!"}'); + $sql = "DELETE FROM pre_channel WHERE id='$id'"; + if($DB->exec($sql))exit('{"code":0,"msg":"删除支付通道成功!"}'); + else exit('{"code":-1,"msg":"删除支付通道失败['.$DB->error().']"}'); +break; +case 'saveChannel': + if($_POST['action'] == 'add'){ + $name=trim($_POST['name']); + $rate=trim($_POST['rate']); + $type=intval($_POST['type']); + $plugin=trim($_POST['plugin']); + if(!preg_match('/^[0-9.]+$/',$rate)){ + exit('{"code":-1,"msg":"分成比例不符合规则"}'); + } + $row=$DB->getRow("select * from pre_channel where name='$name' limit 1"); + if($row) + exit('{"code":-1,"msg":"支付通道名称重复"}'); + $sql = "INSERT INTO pre_channel (name, rate, type, plugin) VALUES ('{$name}', '{$rate}', {$type}, '{$plugin}')"; + if($DB->exec($sql))exit('{"code":0,"msg":"新增支付通道成功!"}'); + else exit('{"code":-1,"msg":"新增支付通道失败['.$DB->error().']"}'); + }else{ + $id=intval($_POST['id']); + $name=trim($_POST['name']); + $rate=trim($_POST['rate']); + $type=intval($_POST['type']); + $plugin=trim($_POST['plugin']); + if(!preg_match('/^[0-9.]+$/',$rate)){ + exit('{"code":-1,"msg":"分成比例不符合规则"}'); + } + $row=$DB->getRow("select * from pre_channel where name='$name' and id<>$id limit 1"); + if($row) + exit('{"code":-1,"msg":"支付通道名称重复"}'); + $sql = "UPDATE pre_channel SET name='{$name}',rate='{$rate}',type='{$type}',plugin='{$plugin}' WHERE id='$id'"; + if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改支付通道成功!"}'); + else exit('{"code":-1,"msg":"修改支付通道失败['.$DB->error().']"}'); + } +break; +case 'channelInfo': + $id=intval($_GET['id']); + $row=$DB->getRow("select * from pre_channel where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前支付通道不存在!"}'); + $apptype = explode(',',$row['apptype']); + $plugin=$DB->getRow("select `inputs`,`select` from `pre_plugin` where `name`='{$row['plugin']}' limit 1"); + if(!$plugin) + exit('{"code":-1,"msg":"当前支付插件不存在!"}'); + $arr = explode(',',$plugin['inputs']); + $inputs = []; + foreach($arr as $item){ + $a = explode(':',$item); + $inputs[$a[0]] = $a[1]; + } + $data = ''; + $result=array("code"=>0,"msg"=>"succ","data"=>$data); + exit(json_encode($result)); +break; +case 'saveChannelInfo': + $id=intval($_GET['id']); + $appid=isset($_POST['appid'])?trim($_POST['appid']):null; + $appkey=isset($_POST['appkey'])?trim($_POST['appkey']):null; + $appsecret=isset($_POST['appsecret'])?trim($_POST['appsecret']):null; + $appurl=isset($_POST['appurl'])?trim($_POST['appurl']):null; + $appmchid=isset($_POST['appmchid'])?trim($_POST['appmchid']):null; + if(isset($_POST['isapptype'])){ + if(!isset($_POST['apptype']) || count($_POST['apptype'])<=0)exit('{"code":-1,"msg":"请至少选择一个可用的支付接口"}'); + $apptype=implode(',',$_POST['apptype']); + }else{ + $apptype=null; + } + $sql = "UPDATE pre_channel SET appid='{$appid}',appkey='{$appkey}',appsecret='{$appsecret}',appurl='{$appurl}',appmchid='{$appmchid}',apptype='{$apptype}' WHERE id='$id'"; + if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改支付密钥成功!"}'); + else exit('{"code":-1,"msg":"修改支付密钥失败['.$DB->error().']"}'); +break; +case 'getRoll': + $id=intval($_GET['id']); + $row=$DB->getRow("select * from pre_roll where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前轮询组不存在!"}'); + $result = ['code'=>0,'msg'=>'succ','data'=>$row]; + exit(json_encode($result)); +break; +case 'setRoll': + $id=intval($_GET['id']); + $status=intval($_GET['status']); + $row=$DB->getRow("select * from pre_roll where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前轮询组不存在!"}'); + if($status==1 && empty($row['info'])){ + exit('{"code":-1,"msg":"请先配置好支付通道后再开启"}'); + } + $sql = "UPDATE pre_roll SET status='$status' WHERE id='$id'"; + if($DB->exec($sql))exit('{"code":0,"msg":"修改轮询组成功!"}'); + else exit('{"code":-1,"msg":"修改轮询组失败['.$DB->error().']"}'); +break; +case 'delRoll': + $id=intval($_GET['id']); + $row=$DB->getRow("select * from pre_roll where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前轮询组不存在!"}'); + $sql = "DELETE FROM pre_roll WHERE id='$id'"; + if($DB->exec($sql))exit('{"code":0,"msg":"删除轮询组成功!"}'); + else exit('{"code":-1,"msg":"删除轮询组失败['.$DB->error().']"}'); +break; +case 'saveRoll': + if($_POST['action'] == 'add'){ + $name=trim($_POST['name']); + $type=intval($_POST['type']); + $kind=intval($_POST['kind']); + $row=$DB->getRow("select * from pre_roll where name='$name' limit 1"); + if($row) + exit('{"code":-1,"msg":"轮询组名称重复"}'); + $sql = "INSERT INTO pre_roll (name, type, kind) VALUES ('{$name}', {$type}, {$kind})"; + if($DB->exec($sql))exit('{"code":0,"msg":"新增轮询组成功!"}'); + else exit('{"code":-1,"msg":"新增轮询组失败['.$DB->error().']"}'); + }else{ + $id=intval($_POST['id']); + $name=trim($_POST['name']); + $type=intval($_POST['type']); + $kind=intval($_POST['kind']); + $row=$DB->getRow("select * from pre_roll where name='$name' and id<>$id limit 1"); + if($row) + exit('{"code":-1,"msg":"轮询组名称重复"}'); + $sql = "UPDATE pre_roll SET name='{$name}',type='{$type}',kind='{$kind}' WHERE id='$id'"; + if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改轮询组成功!"}'); + else exit('{"code":-1,"msg":"修改轮询组失败['.$DB->error().']"}'); + } +break; +case 'rollInfo': + $id=intval($_GET['id']); + $row=$DB->getRow("select * from pre_roll where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前轮询组不存在!"}'); + $list=$DB->getAll("select id,name from pre_channel where type='{$row['type']}' and status=1"); + if(!$list)exit('{"code":-1,"msg":"没有找到支持该支付方式的通道"}'); + if(!empty($row['info'])){ + $arr = explode(',',$row['info']); + $info = []; + foreach($arr as $item){ + $a = explode(':',$item); + $info[] = ['channel'=>$a[0], 'weight'=>$a[1]?$a[1]:1]; + } + }else{ + $info = null; + } + $result=array("code"=>0,"msg"=>"succ","channels"=>$list,"info"=>$info); + exit(json_encode($result)); +break; +case 'saveRollInfo': + $id=intval($_GET['id']); + $row=$DB->getRow("select * from pre_roll where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前轮询组不存在!"}'); + $list=$_POST['list']; + if(empty($list)) + exit('{"code":-1,"msg":"通道配置不能为空!"}'); + $info = ''; + foreach($list as $a){ + $info .= $row['kind']==1 ? $a['channel'].':'.$a['weight'].',' : $a['channel'].','; + } + $info = trim($info,','); + if(empty($info)) + exit('{"code":-1,"msg":"通道配置不能为空!"}'); + $sql = "UPDATE pre_roll SET info='{$info}' WHERE id='$id'"; + if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改轮询组成功!"}'); + else exit('{"code":-1,"msg":"修改轮询组失败['.$DB->error().']"}'); +break; +case 'getGroup': + $gid=intval($_GET['gid']); + $row=$DB->getRow("select * from pre_group where gid='$gid' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前用户组不存在!"}'); + $result = ['code'=>0,'msg'=>'succ','gid'=>$gid,'name'=>$row['name'],'info'=>json_decode($row['info'],true)]; + exit(json_encode($result)); +break; +case 'delGroup': + $gid=intval($_GET['gid']); + $row=$DB->getRow("select * from pre_group where gid='$gid' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前用户组不存在!"}'); + $sql = "DELETE FROM pre_group WHERE gid='$gid'"; + if($DB->exec($sql))exit('{"code":0,"msg":"删除用户组成功!"}'); + else exit('{"code":-1,"msg":"删除用户组失败['.$DB->error().']"}'); +break; +case 'saveGroup': + if($_POST['action'] == 'add'){ + $name=trim($_POST['name']); + $row=$DB->getRow("select * from pre_group where name='$name' limit 1"); + if($row) + exit('{"code":-1,"msg":"用户组名称重复"}'); + $info=$_POST['info']; + $info=json_encode($info); + $sql = "INSERT INTO pre_group (name, info) VALUES ('{$name}', '{$info}')"; + if($DB->exec($sql))exit('{"code":0,"msg":"新增用户组成功!"}'); + else exit('{"code":-1,"msg":"新增用户组失败['.$DB->error().']"}'); + }elseif($_POST['action'] == 'changebuy'){ + $gid=intval($_POST['gid']); + $status=intval($_POST['status']); + $sql = "UPDATE pre_group SET isbuy='{$status}' WHERE gid='$gid'"; + if($DB->exec($sql))exit('{"code":0,"msg":"修改上架状态成功!"}'); + else exit('{"code":-1,"msg":"修改上架状态失败['.$DB->error().']"}'); + }else{ + $gid=intval($_POST['gid']); + $name=trim($_POST['name']); + $row=$DB->getRow("select * from pre_group where name='$name' and gid<>$gid limit 1"); + if($row) + exit('{"code":-1,"msg":"用户组名称重复"}'); + $info=$_POST['info']; + $info=json_encode($info); + $sql = "UPDATE pre_group SET name='{$name}',info='{$info}' WHERE gid='$gid'"; + if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改用户组成功!"}'); + else exit('{"code":-1,"msg":"修改用户组失败['.$DB->error().']"}'); + } +break; +case 'saveGroupPrice': + $prices = $_POST['price']; + $sorts = $_POST['sort']; + foreach($prices as $gid=>$item){ + $price = trim($item); + $sort = trim($sorts[$gid]); + if(empty($price)||!is_numeric($price))exit('{"code":-1,"msg":"GID:'.$gid.'的售价填写错误"}'); + $DB->exec("UPDATE pre_group SET price='{$price}',sort='{$sort}' WHERE gid='$gid'"); + } + exit('{"code":0,"msg":"保存成功!"}'); +break; +case 'setUser': + $uid=intval($_GET['uid']); + $type=trim($_GET['type']); + $status=intval($_GET['status']); + if($type=='pay')$sql = "UPDATE pre_user SET pay='$status' WHERE uid='$uid'"; + elseif($type=='settle')$sql = "UPDATE pre_user SET settle='$status' WHERE uid='$uid'"; + elseif($type=='group')$sql = "UPDATE pre_user SET gid='$status' WHERE uid='$uid'"; + else $sql = "UPDATE pre_user SET status='$status' WHERE uid='$uid'"; + if($DB->exec($sql)!==false)exit('{"code":0,"msg":"修改用户成功!"}'); + else exit('{"code":-1,"msg":"修改用户失败['.$DB->error().']"}'); +break; +case 'resetUser': + $uid=intval($_GET['uid']); + $key = random(32); + $sql = "UPDATE pre_user SET `key`='$key' WHERE uid='$uid'"; + if($DB->exec($sql)!==false)exit('{"code":0,"msg":"重置密钥成功","key":"'.$key.'"}'); + else exit('{"code":-1,"msg":"重置密钥失败['.$DB->error().']"}'); +break; +case 'user_settle_info': + $uid=intval($_GET['uid']); + $rows=$DB->getRow("select * from pre_user where uid='$uid' limit 1"); + if(!$rows) + exit('{"code":-1,"msg":"当前用户不存在!"}'); + $data = '
结算方式
'; + $data .= '
结算账号
'; + $data .= '
真实姓名
'; + $data .= ''; + $result=array("code"=>0,"msg"=>"succ","data"=>$data,"pay_type"=>$rows['settle_id']); + exit(json_encode($result)); +break; +case 'user_settle_save': + $uid=intval($_POST['uid']); + $pay_type=trim(daddslashes($_POST['pay_type'])); + $pay_account=trim(daddslashes($_POST['pay_account'])); + $pay_name=trim(daddslashes($_POST['pay_name'])); + $sds=$DB->exec("update `pre_user` set `settle_id`='$pay_type',`account`='$pay_account',`username`='$pay_name' where `uid`='$uid'"); + if($sds!==false) + exit('{"code":0,"msg":"修改记录成功!"}'); + else + exit('{"code":-1,"msg":"修改记录失败!'.$DB->error().'"}'); +break; +case 'user_cert': + $uid=intval($_GET['uid']); + $rows=$DB->getRow("select cert,certno,certname,certtime from pre_user where uid='$uid' limit 1"); + if(!$rows) + exit('{"code":-1,"msg":"当前用户不存在!"}'); + $result = ['code'=>0,'msg'=>'succ','uid'=>$uid,'cert'=>$rows['cert'],'certno'=>$rows['certno'],'certname'=>$rows['certname'],'certtime'=>$rows['certtime']]; + exit(json_encode($result)); +break; +case 'recharge': + $uid=intval($_POST['uid']); + $do=$_POST['actdo']; + $rmb=floatval($_POST['rmb']); + $row=$DB->getRow("select uid,money from pre_user where uid='$uid' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前用户不存在!"}'); + if($do==1 && $rmb>$row['money'])$rmb=$row['money']; + if($do==0){ + changeUserMoney($uid, $rmb, true, '后台加款'); + }else{ + changeUserMoney($uid, $rmb, false, '后台扣款'); + } + exit('{"code":0,"msg":"succ"}'); +break; +case 'create_batch': + $count=$DB->getColumn("SELECT count(*) from pre_settle where status=0"); + if($count==0)exit('{"code":-1,"msg":"当前不存在待结算的记录"}'); + $batch=date("Ymd").rand(111,999); + $allmoney = 0; + $rs=$DB->query("SELECT * from pre_settle where status=0"); + while($row = $rs->fetch()) + { + $DB->exec("UPDATE pre_settle SET batch='$batch',status=2 WHERE id='{$row['id']}'"); + $allmoney+=$row['realmoney']; + } + $DB->exec("INSERT INTO `pre_batch` (`batch`, `allmoney`, `count`, `time`, `status`) VALUES ('{$batch}', '{$allmoney}', '{$count}', '{$date}', '0')"); + + exit('{"code":0,"msg":"succ","batch":"'.$batch.'","count":"'.$count.'","allmoney":"'.$allmoney.'"}'); +break; +case 'complete_batch': + $batch=trim($_POST['batch']); + $DB->exec("UPDATE pre_settle SET status=1 WHERE batch='$batch'"); + exit('{"code":0,"msg":"succ"}'); +break; +case 'setSettleStatus': + $id=intval($_GET['id']); + $status=intval($_GET['status']); + if($status==4){ + if($DB->exec("DELETE FROM pre_settle WHERE id='$id'")) + exit('{"code":200}'); + else + exit('{"code":400,"msg":"删除记录失败!['.$DB->error().']"}'); + }else{ + if($status==1){ + $sql = "update pre_settle set status='$status',endtime='$date',result=NULL where id='$id'"; + }else{ + $sql = "update pre_settle set status='$status',endtime=NULL where id='$id'"; + } + if($DB->exec($sql)!==false) + exit('{"code":200}'); + else + exit('{"code":400,"msg":"修改记录失败!['.$DB->error().']"}'); + } +break; +case 'opslist': + $status=$_POST['status']; + $checkbox=$_POST['checkbox']; + $i=0; + foreach($checkbox as $id){ + if($status==4){ + $sql = "DELETE FROM pre_settle WHERE id='$id'"; + }elseif($status==1){ + $sql = "update pre_settle set status='$status',endtime='$date',result=NULL where id='$id'"; + }else{ + $sql = "update pre_settle set status='$status',endtime=NULL where id='$id'"; + } + $DB->exec($sql); + $i++; + } + exit('{"code":0,"msg":"成功改变'.$i.'条记录状态"}'); +break; +case 'settle_result': + $id=intval($_POST['id']); + $row=$DB->getRow("select * from pre_settle where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前结算记录不存在!"}'); + $result = ['code'=>0,'msg'=>'succ','result'=>$row['result']]; + exit(json_encode($result)); +break; +case 'settle_setresult': + $id=intval($_POST['id']); + $result=trim($_POST['result']); + $row=$DB->getRow("select * from pre_settle where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前结算记录不存在!"}'); + $sds = $DB->exec("UPDATE pre_settle SET result='$result' WHERE id='$id'"); + if($sds!==false) + exit('{"code":0,"msg":"修改成功!"}'); + else + exit('{"code":-1,"msg":"修改失败!'.$DB->error().'"}'); +break; +case 'settle_info': + $id=intval($_GET['id']); + $rows=$DB->getRow("select * from pre_settle where id='$id' limit 1"); + if(!$rows) + exit('{"code":-1,"msg":"当前结算记录不存在!"}'); + $data = '
结算方式
'; + $data .= '
结算账号
'; + $data .= '
真实姓名
'; + $data .= ''; + $result=array("code"=>0,"msg"=>"succ","data"=>$data,"pay_type"=>$rows['type']); + exit(json_encode($result)); +break; +case 'settle_save': + $id=intval($_POST['id']); + $pay_type=trim(daddslashes($_POST['pay_type'])); + $pay_account=trim(daddslashes($_POST['pay_account'])); + $pay_name=trim(daddslashes($_POST['pay_name'])); + $sds=$DB->exec("update `pre_settle` set `type`='$pay_type',`account`='$pay_account',`username`='$pay_name' where `id`='$id'"); + if($sds!==false) + exit('{"code":0,"msg":"修改记录成功!"}'); + else + exit('{"code":-1,"msg":"修改记录失败!'.$DB->error().'"}'); +break; +case 'paypwd_check': + if(isset($_SESSION['paypwd']) && $_SESSION['paypwd']==$conf['admin_paypwd']) + exit('{"code":0,"msg":"ok"}'); + else + exit('{"code":-1,"msg":"error"}'); +break; +case 'paypwd_input': + $paypwd=trim($_POST['paypwd']); + if(!$conf['admin_paypwd'])exit('{"code":-1,"msg":"你还未设置支付密码"}'); + if($paypwd == $conf['admin_paypwd']){ + $_SESSION['paypwd'] = $paypwd; + exit('{"code":0,"msg":"ok"}'); + }else{ + exit('{"code":-1,"msg":"支付密码错误!"}'); + } +break; +case 'paypwd_reset': + unset($_SESSION['paypwd']); + exit('{"code":0,"msg":"ok"}'); +break; +case 'set': + foreach($_POST as $k=>$v){ + saveSetting($k, $v); + } + $ad=$CACHE->clear(); + if($ad)exit('{"code":0,"msg":"succ"}'); + else exit('{"code":-1,"msg":"修改设置失败['.$DB->error().']"}'); +break; +case 'setGonggao': + $id=intval($_GET['id']); + $status=intval($_GET['status']); + $sql = "UPDATE pre_anounce SET status='$status' WHERE id='$id'"; + if($DB->exec($sql))exit('{"code":0,"msg":"修改状态成功!"}'); + else exit('{"code":-1,"msg":"修改状态失败['.$DB->error().']"}'); +break; +case 'delGonggao': + $id=intval($_GET['id']); + $sql = "DELETE FROM pre_anounce WHERE id='$id'"; + if($DB->exec($sql))exit('{"code":0,"msg":"删除公告成功!"}'); + else exit('{"code":-1,"msg":"删除公告失败['.$DB->error().']"}'); +break; +case 'getServerIp': + $ip = getServerIp(); + exit('{"code":0,"ip":"'.$ip.'"}'); +break; +case 'epayurl': + $id = intval($_GET['id']); + $conf['payapi']=$id; + if($url = pay_api()){ + exit('{"code":0,"url":"'.$url.'"}'); + }else{ + exit('{"code":-1}'); + } +break; +case 'iptype': + $result = [ + ['name'=>'0_X_FORWARDED_FOR', 'ip'=>real_ip(0), 'city'=>get_ip_city(real_ip(0))], + ['name'=>'1_X_REAL_IP', 'ip'=>real_ip(1), 'city'=>get_ip_city(real_ip(1))], + ['name'=>'2_REMOTE_ADDR', 'ip'=>real_ip(2), 'city'=>get_ip_city(real_ip(2))] + ]; + exit(json_encode($result)); +break; +default: + exit('{"code":-4,"msg":"No Act"}'); +break; +} \ No newline at end of file diff --git a/admin/clean.php b/admin/clean.php new file mode 100644 index 0000000..ba65fc0 --- /dev/null +++ b/admin/clean.php @@ -0,0 +1,75 @@ +window.location.href='./login.php';"); +?> +
+
+clear(); +if(function_exists("opcache_reset"))@opcache_reset(); +showmsg('清理系统设置缓存成功!',1); +}elseif($mod=='cleanorder'){ +$DB->exec("DELETE FROM `pre_order` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-30 days"))."'"); +$DB->exec("OPTIMIZE TABLE `pre_order`"); +showmsg('删除30天前订单记录成功!',1); +}elseif($mod=='cleansettle'){ +$DB->exec("DELETE FROM `pre_settle` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-30 days"))."'"); +$DB->exec("OPTIMIZE TABLE `pre_settle`"); +showmsg('删除30天前结算记录成功!',1); +}elseif($mod=='cleanrecord'){ +$DB->exec("DELETE FROM `pre_record` WHERE date<'".date("Y-m-d H:i:s",strtotime("-30 days"))."'"); +$DB->exec("OPTIMIZE TABLE `pre_record`"); +showmsg('删除30天前资金明细成功!',1); +}elseif($mod=='cleanorderi' && $_POST['do']=='submit'){ +$days = intval($_POST['days']); +if($days<=0)showmsg('请确保每项不能为空',3); +$DB->exec("DELETE FROM `pre_order` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'"); +$DB->exec("OPTIMIZE TABLE `pre_order`"); +showmsg('删除订单记录成功!',1); +}elseif($mod=='cleansettlei' && $_POST['do']=='submit'){ +$days = intval($_POST['days']); +if($days<=0)showmsg('请确保每项不能为空',3); +$DB->exec("DELETE FROM `pre_settle` WHERE addtime<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'"); +$DB->exec("OPTIMIZE TABLE `pre_settle`"); +showmsg('删除结算记录成功!',1); +}elseif($mod=='cleanrecordi' && $_POST['do']=='submit'){ +$days = intval($_POST['days']); +if($days<=0)showmsg('请确保每项不能为空',3); +$DB->exec("DELETE FROM `pre_record` WHERE date<'".date("Y-m-d H:i:s",strtotime("-{$days} days"))."'"); +$DB->exec("OPTIMIZE TABLE `pre_record`"); +showmsg('删除资金明细成功!',1); +}else{ +?> +
+

系统数据清理

+
+清理设置缓存
+删除30天前订单记录
+删除30天前结算记录
+删除30天前资金明细
+

自定义清理:

+
+订单记录天前的订单记录  +

+
+结算记录天前的结算记录  +

+
+资金明细天前的订单记录  +

+
+ +
+ +
+
\ No newline at end of file diff --git a/admin/code.php b/admin/code.php new file mode 100644 index 0000000..8fbdeb5 --- /dev/null +++ b/admin/code.php @@ -0,0 +1,8 @@ +doimg(); +$_SESSION['vc_code'] = $_vc->getCode(); +?> \ No newline at end of file diff --git a/admin/download.php b/admin/download.php new file mode 100644 index 0000000..84a48e0 --- /dev/null +++ b/admin/download.php @@ -0,0 +1,42 @@ +window.location.href='./login.php';"); + +$batch=$_GET['batch']; +$allmoney=$_GET['allmoney']; +$data=''; +$rs=$DB->query("SELECT * from pre_settle where batch='$batch' order by type asc,id asc"); + +function display_type($type){ + if($type==1) + return '֧'; + elseif($type==2) + return '΢'; + elseif($type==3) + return 'QQǮ'; + elseif($type==4) + return 'п'; + else + return 1; +} + +$i=0; +while($row = $rs->fetch()) +{ + $i++; + $data.=$i.','.display_type($row['type']).','.$row['account'].','.mb_convert_encoding($row['username'], "GB2312", "UTF-8").','.$row['money'].',ʺ֧Զ'."\r\n"; +} + +$date=date("Ymd"); +$file="̻ˮ,տʽ,տ˺,տ,Ԫ,\r\n"; +$file.=$data; + +$file_name='pay_'.date("YmdHis").'.csv'; +$file_size=strlen($file); +header("Content-Description: File Transfer"); +header("Content-Type:application/force-download"); +header("Content-Length: {$file_size}"); +header("Content-Disposition:attachment; filename={$file_name}"); +echo $file; +?> \ No newline at end of file diff --git a/admin/glist.php b/admin/glist.php new file mode 100644 index 0000000..0542864 --- /dev/null +++ b/admin/glist.php @@ -0,0 +1,212 @@ +window.location.href='./login.php';"); +?> + +
+
+getAll("SELECT * FROM pre_type"); +foreach($rs as $row){ + $paytype[$row['id']] = $row['showname']; +} +unset($rs); + +function display_info($info){ + global $paytype; + $result = ''; + $arr = json_decode($info, true); + foreach($arr as $k=>$v){ + if($v['channel']==0)continue; + $result .= $paytype[$k].'('.$v['channel'].'):'.$v['rate'].','; + } + return substr($result,0,-1); +} + +$list = $DB->getAll("SELECT * FROM pre_group"); +?> + + +
+

系统共有 个用户组  新增

+
+ + + +'; +} +?> + +
GID用户组名称通道与费率操作
'.$res['gid'].''.$res['name'].''.display_info($res['info']).'编辑 删除
+
+ +
+
+
+ + \ No newline at end of file diff --git a/admin/gonggao.php b/admin/gonggao.php new file mode 100644 index 0000000..cc5741d --- /dev/null +++ b/admin/gonggao.php @@ -0,0 +1,169 @@ +window.location.href='./login.php';"); +?> + +
+
+getRow("select * from pre_anounce where id='$id' limit 1"); + if(!$rows) + showmsg('当前公告不存在!',3); +?> +
+

修改公告(ID:)

+
+
+
+
+
公告内容
+ +
+
+
+
+
排序
+ +
+
+ + +
+
+
+ +
+
+
+
+exec("INSERT INTO `pre_anounce` (`content`, `color`, `sort`, `addtime`, `status`) VALUES ('{$content}', '{$color}', '{$sort}', '{$date}', 1)"); +if($sds){ + showmsg('添加公告成功!

>>返回公告列表',1); +}else + showmsg('添加公告失败!
错误信息:'.$DB->error(),4); +} +} +elseif($my=='edit_submit'){ +$id=intval($_GET['id']); +$rows=$DB->getRow("select * from pre_anounce where id='$id' limit 1"); +if(!$rows) + showmsg('当前公告不存在!',3); +$content=$_POST['content']; +$sort=intval($_POST['sort']); +$color=trim($_POST['color']); +if(!$content || !$sort){ +showmsg('公告内容不能为空',3); +} else { +$sds=$DB->exec("UPDATE `pre_anounce` SET `content`='$content',`sort`='$sort',`color`='$color' WHERE `id`='$id'"); +if($sds!==false){ + showmsg('修改公告成功!

>>返回公告列表',1); +}else + showmsg('修改公告失败!
错误信息:'.$DB->error(),4); +} +}else{ +$list = $DB->getAll("SELECT * FROM pre_anounce ORDER BY sort ASC"); +?> +
+

添加公告

+
+
+
+
+
公告内容
+ +
+
+
+
+
排序
+ +
+
+ + +
+
+ +
+
+
+
+

已发公告

+
+ +
+  -  显示':'隐藏'?> 编辑 删除 +
+ +
+
+ +
+
+ + + \ No newline at end of file diff --git a/admin/group.php b/admin/group.php new file mode 100644 index 0000000..3f3f935 --- /dev/null +++ b/admin/group.php @@ -0,0 +1,133 @@ +window.location.href='./login.php';"); +?> + +
+
+getAll("SELECT * FROM pre_group WHERE isbuy=1 ORDER BY SORT ASC"); +$list2 = $DB->getAll("SELECT * FROM pre_group WHERE isbuy=0"); +?> +
+
+
用户组购买开关:已开启  点击关闭':'已关闭  点击开启';?>
+
+
+
+

可购买的用户组 (

+
+ + + +'; +} +if(count($list1)>0)echo ''; +?> + +
GID用户组名称售价排序操作
'.$res['gid'].''.$res['name'].'下架
保存全部
+
+
+
+

不可购买的用户组 (

+
+ + + +'; +} +?> + +
GID用户组名称操作
'.$res['gid'].''.$res['name'].'上架
+
+
+
+
+ + \ No newline at end of file diff --git a/admin/head.php b/admin/head.php new file mode 100644 index 0000000..e1f6cc2 --- /dev/null +++ b/admin/head.php @@ -0,0 +1,92 @@ + + + + + + + <?php echo $title ?> + + + + + + + + + + + + \ No newline at end of file diff --git a/admin/index.php b/admin/index.php new file mode 100644 index 0000000..12d903a --- /dev/null +++ b/admin/index.php @@ -0,0 +1,115 @@ +window.location.href='./login.php';"); +?> + +
+
+
+
+
+

后台管理首页

+
    +
  • 订单总数:
  • +
  • 商户数量:
  • +
  • 总计余额:元(1小时更新一次)
  • +
  • 结算总额:元(1小时更新一次)
  • +
  • 现在时间:
  • + +
+
+
+
+
+

管理员信息

+ +
+
+
+
+

支付方式收入统计(1小时更新一次)

+ + + + +
日期
+
+
+

支付通道收入统计(1小时更新一次)

+ + + + +
日期
+
+
+
+ \ No newline at end of file diff --git a/admin/log-table.php b/admin/log-table.php new file mode 100644 index 0000000..1169d34 --- /dev/null +++ b/admin/log-table.php @@ -0,0 +1,69 @@ +window.location.href='./login.php';"); + + +if(isset($_GET['value'])) { + $sql=" `{$_GET['column']}`='{$_GET['value']}'"; + $numrows=$DB->getColumn("SELECT count(*) from pre_log WHERE{$sql}"); + $con='包含 '.$_GET['value'].' 的共有 '.$numrows.' 条记录'; + $link='&my=search&column='.$_GET['column'].'&value='.$_GET['value']; +}else{ + $numrows=$DB->getColumn("SELECT count(*) from pre_log WHERE 1"); + $sql=" 1"; + $con='共有 '.$numrows.' 条记录'; +} +?> +
+ + + + +query("SELECT * FROM pre_log WHERE{$sql} order by id desc limit $offset,$pagesize"); +while($res = $rs->fetch()) +{ +echo ''; +} +?> + +
ID商户号操作类型操作IP时间
'.$res['id'].''.($res['uid']>0?''.$res['uid'].'':'管理员').''.$res['type'].''.$res['ip'].''.$res['date'].'
+
+'; diff --git a/admin/log.php b/admin/log.php new file mode 100644 index 0000000..b8db966 --- /dev/null +++ b/admin/log.php @@ -0,0 +1,69 @@ +window.location.href='./login.php';"); +?> +
+
+
+
+ + +
+
+ +
+ + +
+ +
+
+
+ + \ No newline at end of file diff --git a/admin/login.php b/admin/login.php new file mode 100644 index 0000000..248c59d --- /dev/null +++ b/admin/login.php @@ -0,0 +1,95 @@ +alert('验证码错误!');history.go(-1);"); + }elseif($_SESSION['pass_error']>5) { + @header('Content-Type: text/html; charset=UTF-8'); + exit(""); + }elseif($user==$conf['admin_user'] && $pass==$conf['admin_pwd']) { + //$city=get_ip_city($clientip); + $DB->exec("insert into `pre_log` (`uid`,`type`,`date`,`ip`,`city`) values (0,'登录后台','".$date."','".$clientip."','".$city."')"); + $session=md5($user.$pass.$password_hash); + $expiretime=time()+604800; + $token=authcode("{$user}\t{$session}\t{$expiretime}", 'ENCODE', SYS_KEY); + setcookie("admin_token", $token, time() + 604800); + @header('Content-Type: text/html; charset=UTF-8'); + exit(""); + }elseif ($pass != $conf['admin_pwd']) { + $_SESSION['pass_error']++; + @header('Content-Type: text/html; charset=UTF-8'); + exit(""); + } +}elseif(isset($_GET['logout'])){ + setcookie("admin_token", "", time() - 604800); + @header('Content-Type: text/html; charset=UTF-8'); + exit(""); +}elseif($islogin==1){ + exit(""); +} +$title='用户登录'; +include './head.php'; +?> + +
+
+
+

用户登陆

+
+
+
+ + +

+
+ + +

+ +
+ + + + + +

+ +
+
+
+
+
+
+
+
\ No newline at end of file diff --git a/admin/order-table.php b/admin/order-table.php new file mode 100644 index 0000000..3201437 --- /dev/null +++ b/admin/order-table.php @@ -0,0 +1,141 @@ +window.location.href='./login.php';"); + + +function display_status($status,$notify){ + if($status==1) + $msg = '已支付'; + elseif($status==2) + $msg = '已退款'; + elseif($status==3) + $msg = '已冻结'; + else + $msg = '未支付'; + if($notify==0 && $status>0) + $msg .= '
通知成功'; + elseif($status>0) + $msg .= '
通知失败'; + return $msg; +} +function display_operation($status, $trade_no){ + if($status==1) + $msg = '
  • 改未完成
  • API退款
  • 手动退款
  • 冻结订单
  • 重新通知
  • 删除订单
  • '; + elseif($status==2) + $msg = '
  • 改未完成
  • 改已完成
  • 重新通知
  • 删除订单
  • '; + elseif($status==3) + $msg = '
  • 解冻订单
  • 重新通知
  • 删除订单
  • '; + else + $msg = '
  • 改已完成
  • 重新通知
  • 删除订单
  • '; + return $msg; +} + +$paytype = []; +$paytypes = []; +$rs = $DB->getAll("SELECT * FROM pre_type"); +foreach($rs as $row){ + $paytype[$row['id']] = $row['showname']; + $paytypes[$row['id']] = $row['name']; +} +unset($rs); + +$sqls=""; +$links=''; +if(isset($_GET['uid']) && !empty($_GET['uid'])) { + $uid = intval($_GET['uid']); + $sqls.=" AND A.`uid`='$uid'"; + $links.='&uid='.$uid; +} +if(isset($_GET['type']) && $_GET['type']>0) { + $type = intval($_GET['type']); + $sqls.=" AND A.`type`='$type'"; + $links.='&type='.$type; +}elseif(isset($_GET['channel']) && $_GET['channel']>0) { + $channel = intval($_GET['channel']); + $sqls.=" AND A.`channel`='$channel'"; + $links.='&channel='.$channel; +} +if(isset($_GET['dstatus']) && $_GET['dstatus']>0) { + $dstatus = intval($_GET['dstatus']); + $sqls.=" AND A.status={$dstatus}"; + $links.='&dstatus='.$dstatus; +} +if(isset($_GET['value']) && !empty($_GET['value'])) { + if($_GET['column']=='name'){ + $sql=" A.`{$_GET['column']}` like '%{$_GET['value']}%'"; + }elseif($_GET['column']=='addtime'){ + $kws = explode('>',$_GET['value']); + $sql=" AND A.`addtime`>='{$kws[0]}' AND A.`addtime`<='{$kws[1]}'"; + }else{ + $sql=" A.`{$_GET['column']}`='{$_GET['value']}'"; + } + $sql.=$sqls; + $numrows=$DB->getColumn("SELECT count(*) from pre_order A WHERE{$sql}"); + $con='包含 '.$_GET['value'].' 的共有 '.$numrows.' 条订单'; + $link='&column='.$_GET['column'].'&value='.$_GET['value'].$links; +}else{ + $sql=" 1"; + $sql.=$sqls; + $numrows=$DB->getColumn("SELECT count(*) from pre_order A WHERE{$sql}"); + $con='共有 '.$numrows.' 条订单'; + $link=$links; +} +?> +
    +
    + + + + +query("SELECT A.*,B.plugin FROM pre_order A LEFT JOIN pre_channel B ON A.channel=B.id WHERE{$sql} order by trade_no desc limit $offset,$pagesize"); +while($res = $rs->fetch()) +{ +echo ''; +} +?> + +
    系统订单号
    商户订单号
    商户号
    网站域名
    商品名称
    订单金额
    实际支付
    商户分成
    支付方式(通道ID)
    支付插件
    创建时间
    完成时间
    支付状态
    通知状态
    操作
    '.$res['trade_no'].'
    '.$res['out_trade_no'].'
    '.$res['uid'].'
    '.$res['domain'].'
    '.$res['name'].'
    '.$res['money'].'
    '.$res['realmoney'].'
    '.$res['getmoney'].'
    '.$paytype[$res['type']].'('.$res['channel'].')
    '.$res['plugin'].'
    '.$res['addtime'].'
    '.$res['endtime'].'
    '.display_status($res['status'], $res['notify']).'
    + 全选  + + +
    +
    +'; diff --git a/admin/order.php b/admin/order.php new file mode 100644 index 0000000..d8a7f25 --- /dev/null +++ b/admin/order.php @@ -0,0 +1,431 @@ +window.location.href='./login.php';"); + +$type_select = ''; +$rs = $DB->getAll("SELECT * FROM pre_type"); +foreach($rs as $row){ + $type_select .= ''; +} +unset($rs); +?> + +
    +
    + +
    +
    + + +
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    + + +
    + +
    +getRow("SHOW TABLES LIKE 'pay_order_old'")){echo '历史订单查询';}?> +
    + +
    +
    +
    + + + \ No newline at end of file diff --git a/admin/order_old.php b/admin/order_old.php new file mode 100644 index 0000000..612059b --- /dev/null +++ b/admin/order_old.php @@ -0,0 +1,123 @@ +window.location.href='./login.php';"); +?> + +
    +
    +getRow("SHOW TABLES LIKE 'pay_order_old'")){ + showmsg('历史订单表不存在'); +} + +$my=isset($_GET['my'])?$_GET['my']:null; + +echo '
    +
    + + +
    +
    + +
    + +
    '; + +if($my=='search') { + if($_GET['column']=='name'){ + $sql=" `{$_GET['column']}` like '%{$_GET['value']}%'"; + }else{ + $sql=" `{$_GET['column']}`='{$_GET['value']}'"; + } + $numrows=$DB->getColumn("SELECT count(*) from pay_order_old WHERE{$sql}"); + $con='包含 '.$_GET['value'].' 的共有 '.$numrows.' 条订单'; + $link='&my=search&column='.$_GET['column'].'&value='.$_GET['value']; +}else{ + $numrows=$DB->getColumn("SELECT count(*) from pay_order_old WHERE 1"); + $sql=" 1"; + $con='共有 '.$numrows.' 条订单'; +} +echo $con; +?> +
    + + + +query("SELECT * FROM pay_order_old WHERE{$sql} order by trade_no desc limit $offset,$pagesize"); +while($res = $rs->fetch()) +{ + $url=creat_callback($res); +echo ''; +} +?> + +
    订单号/商户订单号商户号/网站域名商品名称/金额支付方式创建时间/完成时间支付状态
    '.$res['trade_no'].'
    '.$res['out_trade_no'].'
    '.$res['pid'].'
    '.$res['domain'].'
    '.$res['name'].'
    ¥'.$res['money'].'
    '.$res['type'].''.$res['addtime'].'
    '.$res['endtime'].'
    '.($res['status']==1?'已完成':'未完成').'
    +
    +'; +$first=1; +$prev=$page-1; +$next=$page+1; +$last=$pages; +if ($page>1) +{ +echo '
  • 首页
  • '; +echo '
  • «
  • '; +} else { +echo '
  • 首页
  • '; +echo '
  • «
  • '; +} +for ($i=1;$i<$page;$i++) +echo '
  • '.$i .'
  • '; +echo '
  • '.$page.'
  • '; +if($pages>=10)$s=10; +else $s=$pages; +for ($i=$page+1;$i<=$s;$i++) +echo '
  • '.$i .'
  • '; +echo ''; +if ($page<$pages) +{ +echo '
  • »
  • '; +echo '
  • 尾页
  • '; +} else { +echo '
  • »
  • '; +echo '
  • 尾页
  • '; +} +echo''; +#分页 +?> +
    +
    \ No newline at end of file diff --git a/admin/pay_channel.php b/admin/pay_channel.php new file mode 100644 index 0000000..41b00b3 --- /dev/null +++ b/admin/pay_channel.php @@ -0,0 +1,315 @@ +window.location.href='./login.php';"); +?> +
    +
    +getAll("SELECT * FROM pre_type"); +foreach($rs as $row){ + $paytype[$row['id']] = $row['showname']; + $type_select .= ''; +} +unset($rs); + +$list = $DB->getAll("SELECT * FROM pre_channel"); +?> + + +
    +

    系统共有 个支付通道  新增

    +
    + + + +'; +} +?> + +
    ID显示名称分成比例支付方式支付插件状态操作
    '.$res['id'].''.$res['name'].''.$res['rate'].''.$paytype[$res['type']].''.$res['plugin'].''.($res['status']==1?'已开启':'已关闭').'配置密钥 编辑 删除 订单
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/admin/pay_plugin.php b/admin/pay_plugin.php new file mode 100644 index 0000000..75844e7 --- /dev/null +++ b/admin/pay_plugin.php @@ -0,0 +1,42 @@ +window.location.href='./login.php';"); +?> +
    +
    +alert('刷新插件列表成功!');history.go(-1);"); +}else{ +$list = \lib\Plugin::getAll(); +?> +
    +

    系统共有 个支付插件 刷新插件列表

    +
    + + + +'; +} +?> + +
    插件名称插件描述插件作者包含的支付方式
    '.$res['name'].''.$res['showname'].''.$res['author'].' +'.$res['types'].'
    +
    + +
    + +
    +
    \ No newline at end of file diff --git a/admin/pay_roll.php b/admin/pay_roll.php new file mode 100644 index 0000000..45a8443 --- /dev/null +++ b/admin/pay_roll.php @@ -0,0 +1,309 @@ +window.location.href='./login.php';"); +?> + +
    +
    +getAll("SELECT * FROM pre_type"); +foreach($rs as $row){ + $paytype[$row['id']] = $row['showname']; + $type_select .= ''; +} +unset($rs); +$rolltype = ['顺序轮询','随机轮询']; + +$list = $DB->getAll("SELECT * FROM pre_roll"); +?> + + +
    +

    系统共有 个轮询组  新增

    +
    + + + +'; +} +?> + +
    ID显示名称支付方式轮询方式轮询规则状态操作
    '.$res['id'].''.$res['name'].''.$paytype[$res['type']].''.$rolltype[$res['kind']].''.$res['info'].''.($res['status']==1?'已开启':'已关闭').'配置通道 编辑 删除
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/admin/pay_type.php b/admin/pay_type.php new file mode 100644 index 0000000..433ffda --- /dev/null +++ b/admin/pay_type.php @@ -0,0 +1,207 @@ +window.location.href='./login.php';"); +?> +
    +
    +getAll("SELECT * FROM pre_type"); +?> + + +
    +

    系统共有 个支付方式  新增

    +
    + + + +'; +} +?> + +
    调用值名称支持设备状态操作
    '.$res['name'].''.$res['showname'].''.display_device($res['device']).''.($res['status']==1?'已开启':'已关闭').'编辑 删除
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/admin/record-table.php b/admin/record-table.php new file mode 100644 index 0000000..dc5fda1 --- /dev/null +++ b/admin/record-table.php @@ -0,0 +1,69 @@ +window.location.href='./login.php';"); + + +if(isset($_GET['value']) && !empty($_GET['value'])) { + $sql=" `{$_GET['column']}`='{$_GET['value']}'"; + $numrows=$DB->getColumn("SELECT count(*) from pre_record WHERE{$sql}"); + $con='包含 '.$_GET['value'].' 的共有 '.$numrows.' 条记录'; + $link='&my=search&column='.$_GET['column'].'&value='.$_GET['value']; +}else{ + $numrows=$DB->getColumn("SELECT count(*) from pre_record WHERE 1"); + $sql=" 1"; + $con='共有 '.$numrows.' 条记录'; +} +?> +
    + + + + +query("SELECT * FROM pre_record WHERE{$sql} order by id desc limit $offset,$pagesize"); +while($res = $rs->fetch()) +{ +echo ''; +} +?> + +
    商户号操作类型变更金额变更前金额变更后金额时间关联订单号
    '.$res['uid'].''.($res['action']==2?''.$res['type'].'':''.$res['type'].'').''.($res['action']==2?'- ':'+ ').$res['money'].''.$res['oldmoney'].''.$res['newmoney'].''.$res['date'].''.($res['trade_no']?''.$res['trade_no'].'':'无').'
    +
    +'; diff --git a/admin/record.php b/admin/record.php new file mode 100644 index 0000000..83b0ed7 --- /dev/null +++ b/admin/record.php @@ -0,0 +1,69 @@ +window.location.href='./login.php';"); +?> +
    +
    +
    +
    + + +
    +
    + +
    + + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/admin/risk-table.php b/admin/risk-table.php new file mode 100644 index 0000000..63eee43 --- /dev/null +++ b/admin/risk-table.php @@ -0,0 +1,69 @@ +window.location.href='./login.php';"); + + +if(isset($_GET['value']) && !empty($_GET['value'])) { + $sql=" `{$_GET['column']}`='{$_GET['value']}'"; + $numrows=$DB->getColumn("SELECT count(*) from pre_risk WHERE{$sql}"); + $con='包含 '.$_GET['value'].' 的共有 '.$numrows.' 条记录'; + $link='&my=search&column='.$_GET['column'].'&value='.$_GET['value']; +}else{ + $numrows=$DB->getColumn("SELECT count(*) from pre_risk WHERE 1"); + $sql=" 1"; + $con='共有 '.$numrows.' 条记录'; +} +?> +
    + + + + +query("SELECT * FROM pre_risk WHERE{$sql} order by id desc limit $offset,$pagesize"); +while($res = $rs->fetch()) +{ +echo ''; +} +?> + +
    ID商户号风控类型风控网址风控内容时间
    '.$res['id'].''.$res['uid'].'关键词屏蔽'.$res['url'].''.$res['content'].''.$res['date'].'
    +
    +'; diff --git a/admin/risk.php b/admin/risk.php new file mode 100644 index 0000000..f72d88b --- /dev/null +++ b/admin/risk.php @@ -0,0 +1,69 @@ +window.location.href='./login.php';"); +?> +
    +
    +
    +
    + + +
    +
    + +
    + + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/admin/set.php b/admin/set.php new file mode 100644 index 0000000..750e5d5 --- /dev/null +++ b/admin/set.php @@ -0,0 +1,828 @@ +window.location.href='./login.php';"); +?> +
    +
    +'网站信息','pay'=>'支付与结算','transfer'=>'企业付款','oauth'=>'快捷登录','certificate'=>'实名认证','template'=>'首页模板','gonggao'=>'公告与排版','mail'=>'邮箱与短信','upimg'=>'LOGO设置','iptype'=>'IP地址','cron'=>'计划任务','account'=>'修改密码']; +?> + + +
    +

    网站信息配置

    +
    +
    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    必须以http://或https://开头,以/结尾,填错会导致订单无法回调
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    +
    + +
    +

    +
    +
    + +
    +

    +
    + +
    +

    +
    +
    +
    + +
    +

    +
    +
    + +
    +

    +
    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    +

    +
    +
    +
    +
    +
    + +clear(); + if($ad)showmsg('修改成功!',1); + else showmsg('修改失败!
    '.$DB->error(),4); +}elseif($mod=='account_n' && $_POST['do']=='submit'){ + $user=$_POST['user']; + $oldpwd=$_POST['oldpwd']; + $newpwd=$_POST['newpwd']; + $newpwd2=$_POST['newpwd2']; + if($user==null)showmsg('用户名不能为空!',3); + saveSetting('admin_user',$user); + if(!empty($newpwd) && !empty($newpwd2)){ + if($oldpwd!=$conf['admin_pwd'])showmsg('旧密码不正确!',3); + if($newpwd!=$newpwd2)showmsg('两次输入的密码不一致!',3); + saveSetting('admin_pwd',$newpwd); + } + $ad=$CACHE->clear(); + if($ad)showmsg('修改成功!请重新登录',1); + else showmsg('修改失败!
    '.$DB->error(),4); +}elseif($mod=='account'){ +?> +
    +

    管理员账号配置

    +
    +
    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    +

    +
    +
    +
    +
    +
    +
    +

    支付密码修改

    +
    +
    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    +

    +
    +
    +
    +
    + +
    + + +
    +

    首页模板设置

    +
    +

    当前使用模板:

    +
    +
    + +
    +
    +

    模板名称:

    +
    +
    +
    +

    更换模板:

    +
    + +
    +
    +
    + +
    +
    +
    + +
    +

    用户IP地址获取设置

    +
    +
    +
    + +
    +
    +
    +

    +
    +
    +
    +
    + +
    + +getAll("SELECT * FROM pre_channel WHERE plugin='wxpay'"); +?> +
    +

    支付与结算配置

    +
    +
    +

    支付配置

    +
    + +
    +

    +
    + +
    +

    +
    + +
    多个关键词用|隔开。如果触发屏蔽会在风控记录里面显示
    +

    +
    + +
    +

    +
    + +
    支持变量值:[name]原商品名称,[time]时间戳,[qq]当前商户的联系QQ
    +

    +
    + +
    适用于网站有多个绑定域名,由于支付宝官方限制域名,使用未登记域名会有违约风险,填写指定网址后,使用支付宝支付都会跳转到该网址再跳转到支付宝。必须以http://或https://开头,以/结尾,留空则使用当前网址
    +

    +
    + +
    适用于网站有多个绑定域名,由于微信公众号只能授权一个域名,填写指定网址后,使用微信公众号支付或获取openid都会跳转到该网址再跳转到微信。必须以http://或https://开头,以/结尾,留空则使用当前网址
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    请先添加支付插件为wxpay的支付通道
    只需开通服务号即可使用(可以不开通微信支付)
    +

    +

    结算配置

    +
    + +
    +

    +
    + +
    该选项只适用于手动申请结算
    +

    +
    + +
    +

    +
    + +
    %
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    +

    +
    +
    +
    +
    +
    + +
    +

    其他公告与排版设置

    +
    +
    +
    + +
    +

    +
    + +
    +

    + +
    +
    +getAll("SELECT * FROM pre_channel WHERE plugin='alipay'"); + $wxpay_channel = $DB->getAll("SELECT * FROM pre_channel WHERE plugin='wxpay'"); + $qqpay_channel = $DB->getAll("SELECT * FROM pre_channel WHERE plugin='qqpay'"); +?> +
    +

    企业付款配置

    +
    +
    +
    + +
    +

    +
    + +
    +

    +
    + +
    请先添加支付插件为alipay的支付通道
    +

    +
    + +
    请先添加支付插件为wxpay的支付通道
    请将API证书放置于/plugins/wxpay/cert/文件夹
    +

    +
    + +
    请先添加支付插件为qqpay的支付通道
    请将API证书放置于/plugins/qqpay/cert/文件夹
    +

    +
    +
    + +
    +

    +
    + +
    +

    +
    +
    +

    +
    +
    +
    +
    +
    + +getAll("SELECT * FROM pre_channel WHERE plugin='alipay'"); +?> +
    +

    实名认证接口配置

    +
    +
    +
    + +
    请先添加支付插件为alipay的支付通道,需要申请支付宝身份验证接口
    +

    +
    +
    + +
    开启后商户必须实名认证,才能正常使用支付接口收款
    +

    +
    + +
    由于支付宝身份验证接口是1元/次,所以你可以设置实名认证收费,认证成功从商户余额扣除,如果是付费注册商户建议改为免认证费
    +

    +
    +
    +

    +
    +
    +
    +
    +
    + +getAll("SELECT * FROM pre_channel WHERE plugin='alipay'"); + $wxpay_channel = $DB->getAll("SELECT * FROM pre_channel WHERE plugin='wxpay'"); +?> +
    +

    快捷登录配置

    +
    +
    +
    + +
    申请地址,回调地址填写:
    +

    +
    +
    + +
    +

    +
    + +
    +

    +
    +
    + +
    请先添加支付插件为alipay的支付通道
    申请地址,应用内添加功能"获取会员信息",授权回调地址填写:
    +

    +
    + +
    请先添加支付插件为wxpay的支付通道
    需要有服务号,在公众号后台配置网页授权域名:
    +

    +
    +

    +
    +
    +
    +
    +
    + +
    来自:'.$siteurl); + if($result==1) + showmsg('邮件发送成功!',1); + else + showmsg('邮件发送失败!'.$result,3); + } + else + showmsg('您还未设置邮箱!',3); +}elseif($mod=='mail'){ +?> +
    +

    发信邮箱设置

    +
    +
    +
    + +
    +

    +
    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    +
    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    +
    + +
    +

    + +
    +
    + +
    + +
    +

    短信接口设置

    +
    +
    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    必须是已添加、并通过审核的短信签名。
    +

    +
    + +
    +

    +
    + +
    +

    +
    + +
    +

    +
    +

    +

    +
    +
    +
    + +
    + + +
    +

    计划任务设置

    +
    +
    +
    + +
    +

    +
    +

    +
    +
    +
    +
    +
    +
    +

    计划任务列表

    +
    +

    以下网址每天0点定时访问一次即可,也可以设置1分钟一次的定时任务。

    +

    订单统计任务

    +
  • cron.php?do=order&key=
  • +
    +

    自动生成结算任务

    +
  • cron.php?do=settle&key=
  • +
    +
    + +

    更改首页LOGO

    +
    '; +if($_POST['s']==1){ +if(copy($_FILES['file']['tmp_name'], ROOT.'assets/img/logo.png')){ + echo "成功上传文件!
    (可能需要清空浏览器缓存才能看到效果,按Ctrl+F5即可一键刷新缓存)"; +}else{ + echo "上传失败,可能没有文件写入权限"; +} +} +echo '


    现在的图片:
    '; +echo '
    '; +} +?> +
    +
    + + \ No newline at end of file diff --git a/admin/settle.php b/admin/settle.php new file mode 100644 index 0000000..e0d44ec --- /dev/null +++ b/admin/settle.php @@ -0,0 +1,179 @@ +window.location.href='./login.php';"); +?> + +
    +
    +
    +

    批量结算操作 生成结算批次

    + + + +query("SELECT * FROM pre_batch order by time desc limit $offset,$pagesize"); +while($res = $rs->fetch()) +{ +echo ''; +} +?> + +
    批次号总金额总数量生成时间操作
    '.$res['batch'].''.$res['allmoney'].''.$res['count'].''.$res['time'].'结算列表 下载CSV 批量转账 改为完成
    +
      '; +$first=1; +$prev=$page-1; +$next=$page+1; +$last=$pages; +if ($page>1) +{ +echo '
    • 首页
    • '; +echo '
    • «
    • '; +} else { +echo '
    • 首页
    • '; +echo '
    • «
    • '; +} +for ($i=1;$i<$page;$i++) +echo '
    • '.$i .'
    • '; +echo '
    • '.$page.'
    • '; +if($pages>=10)$sss=$page+10;else $sss=$pages; +for ($i=$page+1;$i<=$sss;$i++) +echo '
    • '.$i .'
    • '; +echo ''; +if ($page<$pages) +{ +echo '
    • »
    • '; +echo '
    • 尾页
    • '; +} else { +echo '
    • »
    • '; +echo '
    • 尾页
    • '; +} +echo'
    '; +#分页 +?> + +
    +
    + + + \ No newline at end of file diff --git a/admin/slist-table.php b/admin/slist-table.php new file mode 100644 index 0000000..14a4330 --- /dev/null +++ b/admin/slist-table.php @@ -0,0 +1,102 @@ +window.location.href='./login.php';"); + +function display_type($type){ + if($type==1) + return '支付宝'; + elseif($type==2) + return '微信'; + elseif($type==3) + return 'QQ钱包'; + elseif($type==4) + return '银行卡'; + else + return 1; +} + +function display_status($status, $id){ + if($status==1) + return '已完成'; + elseif($status==2) + return '正在结算'; + elseif($status==3) + return '结算失败'; + else + return '待结算'; +} + +if(isset($_GET['batch']) && !empty($_GET['batch'])) { + $sql=" `batch`='{$_GET['batch']}'"; + $numrows=$DB->getColumn("SELECT count(*) from pre_settle WHERE{$sql}"); + $con='批次号 '.$_GET['batch'].' 共有 '.$numrows.' 条结算记录'; + $link='&my=search&column='.$_GET['column'].'&value='.$_GET['value']; +}elseif(isset($_GET['value']) && !empty($_GET['value'])) { + $sql=" `{$_GET['column']}`='{$_GET['value']}'"; + $numrows=$DB->getColumn("SELECT count(*) from pre_settle WHERE{$sql}"); + $con='包含 '.$_GET['value'].' 的共有 '.$numrows.' 条结算记录'; + $link='&my=search&column='.$_GET['column'].'&value='.$_GET['value']; +}else{ + $numrows=$DB->getColumn("SELECT count(*) from pre_settle WHERE 1"); + $sql=" 1"; + $con='共有 '.$numrows.' 条结算记录'; +} +?> +
    +
    + + + + +query("SELECT * FROM pre_settle WHERE{$sql} order by id desc limit $offset,$pagesize"); +while($res = $rs->fetch()) +{ +echo ''; +} +?> + +
    ID商户号结算方式结算账号/姓名结算金额/实际到账添加时间完成时间状态操作
    '.$res['id'].''.$res['uid'].''.display_type($res['type']).($res['auto']!=1?'[手动]':null).''.$res['account'].' '.$res['username'].''.$res['money'].' / '.$res['realmoney'].''.$res['addtime'].''.$res['endtime'].''.display_status($res['status'],$res['id']).'
    +  全选  + + +
    +
    +'; diff --git a/admin/slist.php b/admin/slist.php new file mode 100644 index 0000000..b315e78 --- /dev/null +++ b/admin/slist.php @@ -0,0 +1,252 @@ +window.location.href='./login.php';"); +?> + +
    +
    + +
    +
    + + +
    +
    + +
    + + 批量结算 + +
    + +
    +
    +
    + + \ No newline at end of file diff --git a/admin/sso.php b/admin/sso.php new file mode 100644 index 0000000..495508b --- /dev/null +++ b/admin/sso.php @@ -0,0 +1,16 @@ +window.location.href='./login.php';"); + +$uid=intval($_GET['uid']); + +$userrow=$DB->getRow("select * from pre_user where uid='$uid' limit 1"); +if(!$userrow)sysmsg('ǰûڣ'); + +$session=md5($uid.$userrow['key'].$password_hash); +$expiretime=time()+604800; +$token=authcode("{$uid}\t{$session}\t{$expiretime}", 'ENCODE', SYS_KEY); +setcookie("user_token", $token, time() + 604800, '/user'); + +exit(""); diff --git a/admin/transfer.php b/admin/transfer.php new file mode 100644 index 0000000..28bcd1c --- /dev/null +++ b/admin/transfer.php @@ -0,0 +1,159 @@ +window.location.href='./login.php';"); +?> +
    +
    +10)showmsg('QQ号码格式错误',3); + $name = trim($_POST['name']); + $money = trim($_POST['money']); + $desc = trim($_POST['desc']); + if(!empty($desc))$conf['transfer_desc']=$desc; + $channel = \lib\Channel::get($conf['transfer_qqpay']); + if(!$channel)showmsg('当前支付通道信息不存在',4); + $result = transferToQQ($channel, $out_biz_no, $qq, $name, $money); + }else{ + showmsg('参数错误',4); + } + + if($result['code']==0 && $result['ret']==1){ + $result='转账成功!转账单据号:'.$result['orderid'].' 支付时间:'.$result['paydate']; + showmsg($result,1); + }else{ + $result='转账失败 '.$result['msg']; + showmsg($result,4); + } +} + +$out_biz_no = date("YmdHis").rand(11111,99999); +?> + +
    +

    企业付款

    +
    + +
    + +
    +
    +
    交易号
    + +
    +
    +
    支付宝账号
    + +
    +
    +
    支付宝姓名
    + +
    +
    +
    转账金额
    + +
    +
    +
    付款方姓名
    + +
    +
    +
    支付密码
    + +
    +

    +
    + +
    +
    +
    交易号
    + +
    +
    +
    Openid
    + +
    +
    +
    真实姓名
    + +
    +
    +
    转账金额
    + +
    +
    +
    转账备注
    + +
    +
    +
    支付密码
    + +
    +

    +
    + Openid获取地址,在微信打开:user/openid.php + +
    +
    +
    交易号
    + +
    +
    +
    收款方QQ
    + +
    +
    +
    真实姓名
    + +
    +
    +
    转账金额
    + +
    +
    +
    转账备注
    + +
    +
    +
    支付密码
    + +
    +

    +
    + +
    +
    + +
    +
    +
    \ No newline at end of file diff --git a/admin/transfer_alipay.php b/admin/transfer_alipay.php new file mode 100644 index 0000000..6f8ba99 --- /dev/null +++ b/admin/transfer_alipay.php @@ -0,0 +1,170 @@ +window.location.href='./login.php';"); +?> +
    +getRow("SELECT * from pre_batch where batch='$batch'"); + if(!$row)showmsg('批次号不存在'); + $list=$DB->getAll("SELECT * FROM pre_settle WHERE batch='{$batch}' and type=1"); + +?> + +
    +
    +
    +
    +
    +
    全选
    +
    点此开始转账
    +
    总金额
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + '; + foreach($list as $row) { + echo ''; + } + ?> + +
    ID商户ID结算账号结算姓名金额操作
    总共'.count($list).'个记录,已经处理0个记录!
    '.$row['id'].''.$row['pid'].''.$row['account'].''.$row['username'].''.$row['money'].''.($row['transfer_status']!=1?'立即转账':'已完成').'
    结果'.($row['transfer_status']==1?'支付宝转账单据号:'.$row['transfer_result'].' 支付时间:'.$row['transfer_date']:$row['transfer_result']).'
    +
    +
    +
    + + \ No newline at end of file diff --git a/admin/transfer_alipay_do.php b/admin/transfer_alipay_do.php new file mode 100644 index 0000000..567f41b --- /dev/null +++ b/admin/transfer_alipay_do.php @@ -0,0 +1,45 @@ +window.location.href='./login.php';"); + +$channel = \lib\Channel::get($conf['transfer_alipay']); +if(!$channel)exit('{"code":-1,"msg":"当前支付通道信息不存在"}'); + + +$id = isset($_POST['id'])?intval($_POST['id']):exit('{"code":-1,"msg":"ID不能为空"}'); + +if(!isset($_SESSION['paypwd']) || $_SESSION['paypwd']!==$conf['admin_paypwd'])exit('{"code":-1,"msg":"支付密码错误,请返回重新进入该页面"}'); + +$row=$DB->getRow("SELECT * FROM pre_settle WHERE id='{$id}' limit 1"); + +if(!$row)exit('{"code":-1,"msg":"记录不存在"}'); + +if($row['type']!=1)exit('{"code":-1,"msg":"该记录不是支付宝结算"}'); + +if($row['transfer_status']==1)exit('{"code":0,"ret":2,"result":"支付宝转账单据号:'.$row['transfer_result'].' 支付时间:'.$row['transfer_date'].'"}'); + +$out_biz_no = date("Ymd").'000'.$id; + +$result = transferToAlipay($channel, $out_biz_no, $row['account'], $row['username'], $row['money']); + +if($result['code']==0 && $result['ret']==1){ + $data['code']=0; + $data['ret']=1; + $data['msg']='success'; + $data['result']='支付宝转账单据号:'.$result['orderid'].' 支付时间:'.$result['paydate']; + $DB->exec("update `pre_settle` set `status`='1',`endtime`='$date',`transfer_status`='1',`transfer_result`='".$result['orderid']."',`transfer_date`='".$result['paydate']."' where `id`='$id'"); +} elseif($result['code']==0 && $result['ret']==0) { + $data['code']=0; + $data['ret']=0; + $data['msg']='fail'; + $data['result']='转账失败 ['.$result['sub_code'].']'.$result['sub_msg']; + $DB->exec("update `pre_settle` set `transfer_status`='2',`transfer_result`='".$data['result']."' where `id`='$id'"); + if($result['sub_code'] == 'PAYEE_NOT_EXIST' || $result['sub_code'] == 'PERM_AML_NOT_REALNAME_REV' || $result['sub_code'] == 'PAYEE_USER_INFO_ERROR' || $result['sub_code'] == 'PAYEE_ACC_OCUPIED' || $result['sub_code'] == 'PERMIT_NON_BANK_LIMIT_PAYEE'){ + $DB->exec("update `pre_settle` set `status`='3',`result`='".$result['sub_msg']."' where `id`='$id'"); + } +} else { + $data['code']=-1; + $data['msg']=$result['msg']; +} +echo json_encode($data); diff --git a/admin/transfer_qq.php b/admin/transfer_qq.php new file mode 100644 index 0000000..1f39479 --- /dev/null +++ b/admin/transfer_qq.php @@ -0,0 +1,172 @@ +window.location.href='./login.php';"); +?> +
    +getRow("SELECT * from pre_batch where batch='$batch'"); + if(!$row)showmsg('批次号不存在'); + $list=$DB->getAll("SELECT * FROM pre_settle WHERE batch='{$batch}' and type=3"); + +?> + +
    +
    +
    +
    +
    +
    全选
    +
    点此开始转账
    +
    总金额
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + '; + foreach($list as $row) { + echo ''; + } + ?> + +
    ID商户IDQQ号码姓名金额操作
    总共'.count($list).'个记录,已经处理0个记录!
    '.$row['id'].''.$row['pid'].''.$row['account'].''.$row['username'].''.$row['money'].''.($row['transfer_status']!=1?'立即转账':'已完成').'
    结果'.($row['transfer_status']==1?'QQ订单号:'.$row['transfer_result'].' 支付时间:'.$row['transfer_date']:$row['transfer_result']).'
    +
    +
    + +
    + + + \ No newline at end of file diff --git a/admin/transfer_qq_do.php b/admin/transfer_qq_do.php new file mode 100644 index 0000000..e767972 --- /dev/null +++ b/admin/transfer_qq_do.php @@ -0,0 +1,53 @@ +window.location.href='./login.php';"); + +$channel = \lib\Channel::get($conf['transfer_qqpay']); +if(!$channel)exit('{"code":-1,"msg":"当前支付通道信息不存在"}'); + +$id = isset($_POST['id'])?intval($_POST['id']):exit('{"code":-1,"msg":"ID不能为空"}'); + +if(!isset($_SESSION['paypwd']) || $_SESSION['paypwd']!==$conf['admin_paypwd'])exit('{"code":-1,"msg":"支付密码错误,请返回重新进入该页面"}'); + +$row=$DB->getRow("SELECT * FROM pre_settle WHERE id='{$id}' limit 1"); + +if(!$row)exit('{"code":-1,"msg":"记录不存在"}'); + +if($row['type']!=3)exit('{"code":-1,"msg":"该记录不是QQ结算"}'); + +if($row['transfer_status']==1)exit('{"code":0,"ret":2,"result":"QQ订单号:'.$row['transfer_result'].' 支付时间:'.$row['transfer_date'].'"}'); + +if (!is_numeric($row['account']) || strlen($row['account'])<6 || strlen($row['account'])>10) { + $a = array(); + $a['code']=0; + $a['ret']=0; + $a['msg']='fail'; + $a['result']='QQ号格式错误'; + exit(json_encode($a)); +} + +$out_biz_no = date("Ymd").'000'.$id; + +$result = transferToQQ($channel, $out_biz_no, $row['account'], $row['username'], $row['money']); + +if($result['code']==0 && $result['ret']==1){ + $data['code']=0; + $data['ret']=1; + $data['msg']='success'; + $data['result']='QQ订单号:'.$result["orderid"].' 支付时间:'.$result["paydate"]; + $DB->exec("update `pre_settle` set `status`='1',`endtime`='$date',`transfer_status`='1',`transfer_result`='".$result["orderid"]."',`transfer_date`='".$result["paydate"]."' where `id`='$id'"); +} elseif($result['code']==0 && $result['ret']==0) { + $data['code']=0; + $data['ret']=0; + $data['msg']='fail'; + $data['result']='转账失败 ['.$result["sub_code"].']'.$result["sub_msg"]; + $DB->exec("update `pre_settle` set `transfer_status`='2',`transfer_result`='".$data['result']."' where `id`='$id'"); + if($result["sub_code"]=='REALNAME_CHECK_ERROR' || $result["sub_code"]=='RE_USER_NAME_CHECK_ERROR' || $result["sub_code"]=='TRANSFER_FAIL' || $result["sub_code"]=='TRANSFER_FEE_LIMIT_ERROR'){ + $DB->exec("update `pre_settle` set `status`='3',`result`='".$result["sub_msg"]."' where `id`='$id'"); + } +}else{ + $data['code']=-1; + $data['result']=$result["msg"]; +} + +echo json_encode($data); diff --git a/admin/transfer_wx.php b/admin/transfer_wx.php new file mode 100644 index 0000000..243edb7 --- /dev/null +++ b/admin/transfer_wx.php @@ -0,0 +1,170 @@ +window.location.href='./login.php';"); +?> +
    +getRow("SELECT * from pre_batch where batch='$batch' limit 1"); + if(!$row)showmsg('批次号不存在'); + $list=$DB->getAll("SELECT * FROM pre_settle WHERE batch='{$batch}' and type=2"); + +?> + +
    +
    +
    +
    +
    +
    全选
    +
    点此开始转账
    +
    总金额
    +
    +
    +
    +
    +
    + +
    + + + + + + + + + + + '; + foreach($list as $row) { + echo ''; + } + ?> + +
    ID商户IDOpenId姓名金额操作
    总共'.count($list).'个记录,已经处理0个记录!
    '.$row['id'].''.$row['pid'].''.$row['account'].''.$row['username'].''.$row['money'].''.($row['transfer_status']!=1?'立即转账':'已完成').'
    结果'.($row['transfer_status']==1?'微信订单号:'.$row['transfer_result'].' 支付时间:'.$row['transfer_date']:$row['transfer_result']).'
    +
    +
    +
    + + \ No newline at end of file diff --git a/admin/transfer_wx_do.php b/admin/transfer_wx_do.php new file mode 100644 index 0000000..313cfd4 --- /dev/null +++ b/admin/transfer_wx_do.php @@ -0,0 +1,45 @@ +window.location.href='./login.php';"); + +$channel = \lib\Channel::get($conf['transfer_wxpay']); +if(!$channel)exit('{"code":-1,"msg":"当前支付通道信息不存在"}'); + + +$id = isset($_POST['id'])?intval($_POST['id']):exit('{"code":-1,"msg":"ID不能为空"}'); + +if(!isset($_SESSION['paypwd']) || $_SESSION['paypwd']!==$conf['admin_paypwd'])exit('{"code":-1,"msg":"支付密码错误,请返回重新进入该页面"}'); + +$row=$DB->getRow("SELECT * FROM pre_settle WHERE id='{$id}' limit 1"); + +if(!$row)exit('{"code":-1,"msg":"记录不存在"}'); + +if($row['type']!=2)exit('{"code":-1,"msg":"该记录不是微信结算"}'); + +if($row['transfer_status']==1)exit('{"code":0,"ret":2,"result":"微信订单号:'.$row['transfer_result'].' 支付时间:'.$row['transfer_date'].'"}'); + +$out_biz_no = date("Ymd").'000'.$id; + +$result = transferToWeixin($channel, $out_biz_no, $row['account'], $row['username'], $row['money']); + +if($result['code']==0 && $result['ret']==1){ + $data['code']=0; + $data['ret']=1; + $data['msg']='success'; + $data['result']='微信订单号:'.$result["orderid"].' 支付时间:'.$result["paydate"]; + $DB->exec("update `pre_settle` set `status`='1',`endtime`='$date',`transfer_status`='1',`transfer_result`='".$result["orderid"]."',`transfer_date`='".$result["paydate"]."' where `id`='$id'"); +} elseif($result['code']==0 && $result['ret']==0) { + $data['code']=0; + $data['ret']=0; + $data['msg']='fail'; + $data['result']='转账失败 ['.$result['sub_code'].']'.$result['sub_msg']; + $DB->exec("update `pre_settle` set `transfer_status`='2',`transfer_result`='".$data['result']."' where `id`='$id'"); + if($result["sub_code"]=='OPENID_ERROR' || $result["sub_code"]=='NAME_MISMATCH' || $result["sub_code"]=='V2_ACCOUNT_SIMPLE_BAN'){ + $DB->exec("update `pre_settle` set `status`='3',`result`='".$result["sub_msg"]."' where `id`='$id'"); + } +} else { + $data['code']=-1; + $data['msg']=$result['msg']; +} +echo json_encode($data); diff --git a/admin/ulist-table.php b/admin/ulist-table.php new file mode 100644 index 0000000..768ec8e --- /dev/null +++ b/admin/ulist-table.php @@ -0,0 +1,76 @@ +window.location.href='./login.php';"); + + +$usergroup = [0=>'默认用户组']; +$rs = $DB->getAll("SELECT * FROM pre_group"); +foreach($rs as $row){ + $usergroup[$row['gid']] = $row['name']; +} +unset($rs); + +if(isset($_GET['value']) && !empty($_GET['value'])) { + $sql=" `{$_GET['column']}`='{$_GET['value']}'"; + $numrows=$DB->getColumn("SELECT count(*) from pre_user WHERE{$sql}"); + $con='包含 '.$_GET['value'].' 的共有 '.$numrows.' 个商户'; + $link='&my=search&column='.$_GET['column'].'&value='.$_GET['value']; +}else{ + $numrows=$DB->getColumn("SELECT count(*) from pre_user WHERE 1"); + $sql=" 1"; + $con='共有 '.$numrows.' 个商户'; +} +?> +
    + + + + +query("SELECT * FROM pre_user WHERE{$sql} order by uid desc limit $offset,$pagesize"); +while($res = $rs->fetch()) +{ +echo ''; +} +?> + +
    商户号/用户组余额结算账号/姓名联系方式域名/添加时间状态操作
    '.$res['uid'].'[查看密钥]
    '.$usergroup[$res['gid']].'
    '.$res['money'].''.($res['settle_id']==2?'WX:':null).($res['settle_id']==3?'QQ:':null).$res['account'].'
    '.$res['username'].'
    QQ:'.$res['qq'].'
    '.($res['phone']?$res['phone']:$res['email']).'
    '.$res['url'].'
    '.$res['addtime'].'
    '.($res['status']==1?'正常':'封禁').' '.($res['cert']==1?'已实名':'未实名').'
    '.($res['pay']==1?'支付':'支付').' '.($res['settle']==1?'结算':'结算').'
    编辑 登录 删除
    订单 结算 明细
    +
    +'; diff --git a/admin/ulist.php b/admin/ulist.php new file mode 100644 index 0000000..7f9ba9d --- /dev/null +++ b/admin/ulist.php @@ -0,0 +1,329 @@ +window.location.href='./login.php';"); + +$select = ''; +$rs = $DB->getAll("SELECT * FROM pre_group"); +foreach($rs as $row){ + $select .= ''; +} +unset($rs); +?> + +
    +
    + +
    +
    + + +
    +
    + +
    +  添加商户 + +
    + +
    +
    +
    + + + \ No newline at end of file diff --git a/admin/uset.php b/admin/uset.php new file mode 100644 index 0000000..168fe28 --- /dev/null +++ b/admin/uset.php @@ -0,0 +1,267 @@ +window.location.href='./login.php';"); +?> +
    +
    +getAll("SELECT * FROM pre_group"); +foreach($rs as $row){ + $usergroup[$row['gid']] = $row['name']; + $select.=''; +} +unset($rs); + +$my=isset($_GET['my'])?$_GET['my']:null; + +if($my=='add') +{ +echo '
    +

    添加商户

    '; +echo '
    '; +echo '
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    '; +echo '
    >>返回商户列表'; +echo '
    '; +} +elseif($my=='edit') +{ +$uid=intval($_GET['uid']); +$row=$DB->getRow("select * from pre_user where uid='$uid' limit 1"); +if(!$row)showmsg('该商户不存在',4); +echo '
    +

    修改商户信息

    '; +echo '
    '; +echo '
    +
    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +'; +echo '
    >>返回商户列表'; +echo '
    +'; +} +elseif($my=='add_submit') +{ +$gid=$_POST['gid']; +$settle_id=$_POST['settle_id']; +$account=$_POST['account']; +$username=$_POST['username']; +$money='0.00'; +$url=$_POST['url']; +$email=$_POST['email']; +$qq=$_POST['qq']; +$phone=$_POST['phone']; +$certno=$_POST['certno']; +$certname=$_POST['certname']; +$cert=$_POST['cert']; +$mode=$_POST['mode']; +$pay=$_POST['pay']; +$settle=$_POST['settle']; +$status=$_POST['status']; +if($account==NULL or $username==NULL){ +showmsg('保存错误,请确保加*项都不为空!',3); +} else { +$key = random(32); +$sds=$DB->exec("INSERT INTO `pre_user` (`gid`, `key`, `account`, `username`, `money`, `url`, `addtime`, `settle_id`, `phone`, `email`, `qq`, `certno`, `certname`, `cert`, `mode`, `pay`, `settle`, `status`) VALUES ('{$gid}', '{$key}', '{$account}', '{$username}', '{$money}', '{$url}', '{$date}', '{$settle_id}', '{$phone}', '{$email}', '{$qq}', '{$certno}', '{$certname}', '{$cert}', '{$mode}', '{$pay}', '{$settle}', '{$status}')"); +$uid=$DB->lastInsertId(); +if($sds){ + if(!empty($_POST['pwd'])){ + $pwd = getMd5Pwd(trim($_POST['pwd']), $uid); + $DB->exec("update `pre_user` set `pwd` ='{$pwd}' where `uid`='$uid'"); + } + showmsg('添加商户成功!商户ID:'.$uid.'
    密钥:'.$key.'

    >>返回商户列表',1); +}else + showmsg('添加商户失败!
    错误信息:'.$DB->error(),4); +} +} +elseif($my=='edit_submit') +{ +$uid=$_GET['uid']; +$rows=$DB->getRow("select * from pre_user where uid='$uid' limit 1"); +if(!$rows) + showmsg('当前商户不存在!',3); +$gid=$_POST['gid']; +$settle_id=$_POST['settle_id']; +$account=$_POST['account']; +$username=$_POST['username']; +$money=$_POST['money']; +$url=$_POST['url']; +$email=$_POST['email']; +$qq=$_POST['qq']; +$phone=$_POST['phone']; +$certno=$_POST['certno']; +$certname=$_POST['certname']; +$cert=$_POST['cert']; +$mode=$_POST['mode']; +$pay=$_POST['pay']; +$settle=$_POST['settle']; +$status=$_POST['status']; +if($account==NULL or $username==NULL){ +showmsg('保存错误,请确保加*项都不为空!',3); +} else { +$sql="update `pre_user` set `gid` ='$gid',`account` ='{$account}',`username` ='{$username}',`settle_id` ='$settle_id',`money` ='{$money}',`url` ='{$url}',`email` ='$email',`qq` ='$qq',`phone` ='$phone',`certno` ='$certno',`certname` ='$certname',`cert` ='$cert',`mode` ='$mode',`pay` ='$pay',`settle` ='$settle',`status` ='$status' where `uid`='$uid'"; +if(!empty($_POST['pwd'])){ + $pwd = getMd5Pwd(trim($_POST['pwd']), $uid); + $sqs=$DB->exec("update `pre_user` set `pwd` ='{$pwd}' where `uid`='$uid'"); +} +if($DB->exec($sql)!==false||$sqs) + showmsg('修改商户信息成功!

    >>返回商户列表',1); +else + showmsg('修改商户信息失败!'.$DB->error(),4); +} +} +elseif($my=='delete') +{ +$uid=$_GET['uid']; +$sql="DELETE FROM pre_user WHERE uid='$uid'"; +if($DB->exec($sql)) + exit(""); +else + exit(""); +} +?> +
    +
    diff --git a/api.php b/api.php new file mode 100644 index 0000000..235624f --- /dev/null +++ b/api.php @@ -0,0 +1,168 @@ +getRow("SELECT * FROM pre_user WHERE uid='{$pid}' limit 1"); + if($row && $row['status']==1 && $row['apply']==1){ + $type=0; + $key = random(32); + $sds=$DB->exec("INSERT INTO `pre_user` (`key`, `url`, `addtime`, `pay`, `settle`, `status`, `upuid`) VALUES ('{$key}', '{$url}', '{$date}', '1', '1', '1', '{$row['uid']}')"); + $pid=$DB->lastInsertId(); + + if($sds){ + $result=array("code"=>1,"msg"=>"添加支付商户成功!","pid"=>$pid,"key"=>$key,"type"=>$type); + }else{ + $result=array("code"=>-1,"msg"=>"添加支付商户失败!"); + } + }else{ + $result=array("code"=>-1,"msg"=>"当前商户没有权限"); + } +} +elseif($act=='query') +{ + $pid=intval($_GET['pid']); + $key=daddslashes($_GET['key']); + $row=$DB->getRow("SELECT * FROM pre_user WHERE uid='{$pid}' limit 1"); + if($row){ + if($key==$row['key']){ + $orders=$DB->getColumn("SELECT count(*) from pre_order WHERE uid={$pid}"); + + $lastday=date("Y-m-d",strtotime("-1 day")).' 00:00:00'; + $today=date("Y-m-d").' 00:00:00'; + $order_today=$DB->query("SELECT sum(money) from pre_order where uid={$pid} and status=1 and endtime>='$today'")->fetchColumn(); + + $order_lastday=$DB->query("SELECT sum(money) from pre_order where uid={$pid} and status=1 and endtime>='$lastday' and endtime<'$today'")->fetchColumn(); + + //$settle_money=$DB->query("SELECT sum(money) from pre_settle where uid={$pid} and status=1")->fetchColumn(); + + $result=array("code"=>1,"pid"=>$pid,"key"=>$key,"type"=>$row['settle_id'],"active"=>$row['status'],"money"=>$row['money'],"account"=>$row['account'],"username"=>$row['username'],"settle_money"=>$conf['settle_money'],"settle_fee"=>$conf['settle_fee'],"money_rate"=>$conf['money_rate'],"orders"=>$orders,"order_today"=>$order_today,"order_lastday"=>$order_lastday); + }else{ + $result=array("code"=>-2,"msg"=>"KEY校验失败"); + } + }else{ + $result=array("code"=>-3,"msg"=>"PID不存在"); + } +} +elseif($act=='change') +{ + $pid=intval($_GET['pid']); + $key=daddslashes($_GET['key']); + $stype=daddslashes($_GET['type']); + $account=daddslashes($_GET['account']); + $username=daddslashes($_GET['username']); + $row=$DB->query("SELECT * FROM pre_user WHERE uid='{$pid}' limit 1")->fetch(); + if($row){ + if($key==$row['key']){ + if($account==null || $username==null){ + $result=array("code"=>-1,"msg"=>"保存错误,请确保每项都不为空!"); + }elseif($row['settle']!=2 && !empty($row['account']) && !empty($row['username']) && $row['account']!=$account){ + $result=array("code"=>-1,"msg"=>"为保障您的资金安全,暂不支持直接修改结算账号信息,如需修改请进入商户中心".$siteurl); + }else{ + $sds=$DB->exec("update `pre_user` set `account`='{$account}',`username`='{$username}',`settle_id`='{$stype}',`url`='{$url}' where uid='{$pid}' limit 1"); + if($sds>=0){ + $result=array("code"=>1,"msg"=>"修改收款账号成功!","pid"=>$pid,"key"=>$key,"type"=>$type); + }else{ + $result=array("code"=>-1,"msg"=>"修改收款账号失败!"); + } + } + }else{ + $result=array("code"=>-2,"msg"=>"KEY校验失败"); + } + }else{ + $result=array("code"=>-3,"msg"=>"PID不存在"); + } +} +elseif($act=='settle') +{ + $pid=intval($_GET['pid']); + $key=daddslashes($_GET['key']); + $limit=$_GET['limit']?intval($_GET['limit']):10; + if($limit>50)$limit=50; + $row=$DB->query("SELECT * FROM pre_user WHERE uid='{$pid}' limit 1")->fetch(); + if($row){ + if($key==$row['key']){ + $rs=$DB->query("SELECT * FROM pre_settle WHERE uid='{$pid}' order by id desc limit {$limit}"); + while($row=$rs->fetch()){ + $data[]=$row; + } + if($rs){ + $result=array("code"=>1,"msg"=>"查询结算记录成功!","pid"=>$pid,"key"=>$key,"type"=>$type,"data"=>$data); + }else{ + $result=array("code"=>-1,"msg"=>"查询结算记录失败!"); + } + }else{ + $result=array("code"=>-2,"msg"=>"KEY校验失败"); + } + }else{ + $result=array("code"=>-3,"msg"=>"PID不存在"); + } +} +elseif($act=='order') +{ + $pid=intval($_GET['pid']); + $key=daddslashes($_GET['key']); + $row=$DB->query("SELECT * FROM pre_user WHERE uid='{$pid}' limit 1")->fetch(); + if($row){ + if($key==$row['key']){ + if(isset($_GET['trade_no'])){ + $trade_no=daddslashes($_GET['trade_no']); + $row=$DB->query("SELECT * FROM pre_order WHERE uid='{$pid}' and trade_no='{$trade_no}' limit 1")->fetch(); + }elseif(isset($_GET['out_trade_no'])){ + $out_trade_no=daddslashes($_GET['out_trade_no']); + $row=$DB->query("SELECT * FROM pre_order WHERE uid='{$pid}' and out_trade_no='{$out_trade_no}' limit 1")->fetch(); + }else{ + exit('{"code":-4,"msg":"参数不完整"}'); + } + if($row){ + $result=array("code"=>1,"msg"=>"查询订单号成功!","trade_no"=>$row['trade_no'],"out_trade_no"=>$row['out_trade_no'],"type"=>$row['type'],"pid"=>$row['pid'],"addtime"=>$row['addtime'],"endtime"=>$row['endtime'],"name"=>$row['name'],"money"=>$row['money'],"status"=>$row['status']); + }else{ + $result=array("code"=>-1,"msg"=>"订单号不存在"); + } + }else{ + $result=array("code"=>-2,"msg"=>"KEY校验失败"); + } + }else{ + $result=array("code"=>-3,"msg"=>"PID不存在"); + } +} +elseif($act=='orders') +{ + $pid=intval($_GET['pid']); + $key=daddslashes($_GET['key']); + $limit=$_GET['limit']?intval($_GET['limit']):10; + if($limit>50)$limit=50; + $row=$DB->query("SELECT * FROM pre_user WHERE uid='{$pid}' limit 1")->fetch(); + if($row){ + if($key==$row['key']){ + $rs=$DB->query("SELECT * FROM pre_order WHERE uid='{$pid}' order by trade_no desc limit {$limit}"); + while($row=$rs->fetch()){ + $data[]=$row; + } + if($rs){ + $result=array("code"=>1,"msg"=>"查询订单记录成功!","data"=>$data); + }else{ + $result=array("code"=>-1,"msg"=>"查询订单记录失败!"); + } + }else{ + $result=array("code"=>-2,"msg"=>"KEY校验失败"); + } + }else{ + $result=array("code"=>-3,"msg"=>"PID不存在"); + } +} +else +{ + $result=array("code"=>-5,"msg"=>"No Act!"); +} + +echo json_encode($result); + +?> \ No newline at end of file diff --git a/assets/css/alipay-pay.png b/assets/css/alipay-pay.png new file mode 100644 index 0000000..7f9145d Binary files /dev/null and b/assets/css/alipay-pay.png differ diff --git a/assets/css/alipay_pay.css b/assets/css/alipay_pay.css new file mode 100644 index 0000000..0c3ce98 --- /dev/null +++ b/assets/css/alipay_pay.css @@ -0,0 +1 @@ +@charset "UTF-8";html{font-size:62.5%;font-family:'helvetica neue',tahoma,arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,hr{margin:0;padding:0}body{line-height:1.333;font-size:12px}h1,h2,h3,h4,h5,h6{font-size:100%;font-family:arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}input,textarea,select,button{font-size:12px;font-weight:normal}input[type="button"],input[type="submit"],select,button{cursor:pointer}table{border-collapse:collapse;border-spacing:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}li{list-style:none}caption,th{text-align:left}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}fieldset,img,a img,iframe{border-width:0;border-style:none}img{-ms-interpolation-mode:bicubic}textarea{overflow-y:auto}legend{color:#000}a:link,a:visited{text-decoration:none}hr{height:0}label{cursor:pointer}.clearfix:after{content:"\200B";display:block;height:0;clear:both}.clearfix{*zoom:1}a{color:#328CE5}a:hover{color:#2b8ae8;text-decoration:none}a.hit{color:#C06C6C}a:focus{outline:none}.hit{color:#8DC27E}.txt_auxiliary{color:#A2A2A2}.clear{*zoom:1}.clear:before,.clear:after{content:"";display:table}.clear:after{clear:both}body,.body{background:#f7f7f7;height:100%}.mod-title{height:60px;line-height:60px;text-align:center;border-bottom:1px solid #ddd;background:#fff}.mod-title .ico-wechat{display:inline-block;width:41px;height:36px;background:url("./alipay-pay.png") 0 -115px no-repeat;vertical-align:middle;margin-right:7px}.mod-title .text{font-size:20px;color:#333;font-weight:normal;vertical-align:middle}.mod-ct{width:610px;padding:0 135px;margin:0 auto;margin-top:15px;background:#fff url("./wave.png") top center repeat-x;text-align:center;color:#333;border:1px solid #e5e5e5;border-top:none}.mod-ct .order{font-size:20px;padding-top:30px}.mod-ct .amount{font-size:48px;margin-top:20px}.mod-ct .qr-image{margin-top:30px}.mod-ct .qr-image img{width:230px;height:230px}.mod-ct .detail{margin-top:60px;padding-top:25px}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./alipay-pay.png") -25px -100px no-repeat}.mod-ct .detail .detail-ct{display:none;font-size:14px;text-align:right;line-height:28px}.mod-ct .detail .detail-ct dt{float:left}.mod-ct .detail-open{border-top:1px solid #e5e5e5}.mod-ct .detail .arrow{padding:6px 34px;border:1px solid #e5e5e5}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./alipay-pay.png") -25px -100px no-repeat}.mod-ct .detail-open .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./alipay-pay.png") 0 -100px no-repeat}.mod-ct .detail-open .detail-ct{display:block}.mod-ct .tip{margin-top:40px;border-top:1px dashed #e5e5e5;padding:30px 0;position:relative}.mod-ct .tip .ico-scan{display:inline-block;width:56px;height:55px;background:url("./alipay-pay.png") 0 0 no-repeat;vertical-align:middle;*display:inline;*zoom:1}.mod-ct .tip .tip-text{display:inline-block;vertical-align:middle;text-align:left;margin-left:23px;font-size:16px;line-height:28px;*display:inline;*zoom:1}.mod-ct .tip .dec{display:inline-block;width:22px;height:45px;background:url("./alipay-pay.png") 0 -55px no-repeat;position:absolute;top:-23px}.mod-ct .tip .dec-left{background-position:0 -55px;left:-136px}.mod-ct .tip .dec-right{background-position:-25px -55px;right:-136px}.foot{text-align:center;margin:30px auto;color:#888888;font-size:12px;line-height:20px;font-family:"simsun"}.foot .link{color:#0071ce} \ No newline at end of file diff --git a/assets/css/bootstrap.min.css b/assets/css/bootstrap.min.css new file mode 100644 index 0000000..f4f211c --- /dev/null +++ b/assets/css/bootstrap.min.css @@ -0,0 +1,11 @@ +/*! + * bootswatch v3.4.1 + * Homepage: http://bootswatch.com + * Copyright 2012-2019 Thomas Park + * Licensed under MIT + * Based on Bootstrap +*//*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{color:#000 !important;text-shadow:none !important;background:transparent !important;box-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:"Glyphicons Halflings";src:url("../fonts/glyphicons-halflings-regular.eot");src:url("../fonts/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/glyphicons-halflings-regular.woff2") format("woff2"),url("../fonts/glyphicons-halflings-regular.woff") format("woff"),url("../fonts/glyphicons-halflings-regular.ttf") format("truetype"),url("../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:"Glyphicons Halflings";font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{box-sizing:border-box}*:before,*:after{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#555555;background-color:#ffffff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#2fa4e7;text-decoration:none}a:hover,a:focus{color:#157ab5;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#ffffff;border:1px solid #dddddd;border-radius:4px;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eeeeee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:500;line-height:1.2;color:#317eac}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#999999}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#999999}.text-primary{color:#2fa4e7}a.text-primary:hover,a.text-primary:focus{color:#178acc}.text-success{color:#468847}a.text-success:hover,a.text-success:focus{color:#356635}.text-info{color:#3a87ad}a.text-info:hover,a.text-info:focus{color:#2d6987}.text-warning{color:#c09853}a.text-warning:hover,a.text-warning:focus{color:#a47e3c}.text-danger{color:#b94a48}a.text-danger:hover,a.text-danger:focus{color:#953b39}.bg-primary{color:#fff;background-color:#2fa4e7}a.bg-primary:hover,a.bg-primary:focus{background-color:#178acc}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eeeeee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eeeeee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#999999}blockquote footer:before,blockquote small:before,blockquote .small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eeeeee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:""}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:"\00A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#ffffff;background-color:#333333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #cccccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*="col-"]{padding-right:0;padding-left:0}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0%}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0%}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0%}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0%}}table{background-color:transparent}table col[class*="col-"]{position:static;display:table-column;float:none}table td[class*="col-"],table th[class*="col-"]{position:static;display:table-cell;float:none}caption{padding-top:8px;padding-bottom:8px;color:#999999;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #dddddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #dddddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #dddddd}.table .table{background-color:#ffffff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #dddddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #dddddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #dddddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#555555;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type="search"]{box-sizing:border-box;-webkit-appearance:none;appearance:none}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="radio"][disabled],input[type="checkbox"][disabled],input[type="radio"].disabled,input[type="checkbox"].disabled,fieldset[disabled] input[type="radio"],fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:9px;font-size:14px;line-height:1.42857143;color:#555555}.form-control{display:block;width:100%;height:38px;padding:8px 12px;font-size:14px;line-height:1.42857143;color:#555555;background-color:#ffffff;background-image:none;border:1px solid #cccccc;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#999999;opacity:1}.form-control:-ms-input-placeholder{color:#999999}.form-control::-webkit-input-placeholder{color:#999999}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eeeeee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:38px}input[type="date"].input-sm,input[type="time"].input-sm,input[type="datetime-local"].input-sm,input[type="month"].input-sm,.input-group-sm input[type="date"],.input-group-sm input[type="time"],.input-group-sm input[type="datetime-local"],.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,input[type="time"].input-lg,input[type="datetime-local"].input-lg,input[type="month"].input-lg,.input-group-lg input[type="date"],.input-group-lg input[type="time"],.input-group-lg input[type="datetime-local"],.input-group-lg input[type="month"]{line-height:54px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:34px;padding-top:9px;padding-bottom:9px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:54px;line-height:54px}textarea.input-lg,select[multiple].input-lg{height:auto}.form-group-lg .form-control{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:54px;line-height:54px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:54px;min-height:38px;padding:15px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:47.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:38px;height:38px;line-height:38px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:54px;height:54px;line-height:54px}.input-sm+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#468847}.has-success .form-control{border-color:#468847;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#356635;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #7aba7b}.has-success .input-group-addon{color:#468847;background-color:#dff0d8;border-color:#468847}.has-success .form-control-feedback{color:#468847}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#c09853}.has-warning .form-control{border-color:#c09853;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#a47e3c;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #dbc59e}.has-warning .input-group-addon{color:#c09853;background-color:#fcf8e3;border-color:#c09853}.has-warning .form-control-feedback{color:#c09853}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#b94a48}.has-error .form-control{border-color:#b94a48;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#953b39;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #d59392}.has-error .input-group-addon{color:#b94a48;background-color:#f2dede;border-color:#b94a48}.has-error .form-control-feedback{color:#b94a48}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#959595}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:9px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:29px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:9px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:15px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:8px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn:active:focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn.active.focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#555555;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;filter:alpha(opacity=65);opacity:0.65;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#555555;background-color:#ffffff;border-color:rgba(0,0,0,0.1)}.btn-default:focus,.btn-default.focus{color:#555555;background-color:#e6e6e6;border-color:rgba(0,0,0,0.1)}.btn-default:hover{color:#555555;background-color:#e6e6e6;border-color:rgba(0,0,0,0.1)}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#555555;background-color:#e6e6e6;background-image:none;border-color:rgba(0,0,0,0.1)}.btn-default:active:hover,.btn-default.active:hover,.open>.dropdown-toggle.btn-default:hover,.btn-default:active:focus,.btn-default.active:focus,.open>.dropdown-toggle.btn-default:focus,.btn-default:active.focus,.btn-default.active.focus,.open>.dropdown-toggle.btn-default.focus{color:#555555;background-color:#d4d4d4;border-color:rgba(0,0,0,0.1)}.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled.focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default.focus{background-color:#ffffff;border-color:rgba(0,0,0,0.1)}.btn-default .badge{color:#ffffff;background-color:#555555}.btn-primary{color:#ffffff;background-color:#2fa4e7;border-color:#2fa4e7}.btn-primary:focus,.btn-primary.focus{color:#ffffff;background-color:#178acc;border-color:#105b87}.btn-primary:hover{color:#ffffff;background-color:#178acc;border-color:#1684c2}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#ffffff;background-color:#178acc;background-image:none;border-color:#1684c2}.btn-primary:active:hover,.btn-primary.active:hover,.open>.dropdown-toggle.btn-primary:hover,.btn-primary:active:focus,.btn-primary.active:focus,.open>.dropdown-toggle.btn-primary:focus,.btn-primary:active.focus,.btn-primary.active.focus,.open>.dropdown-toggle.btn-primary.focus{color:#ffffff;background-color:#1474ac;border-color:#105b87}.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled.focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary.focus{background-color:#2fa4e7;border-color:#2fa4e7}.btn-primary .badge{color:#2fa4e7;background-color:#ffffff}.btn-success{color:#ffffff;background-color:#73a839;border-color:#73a839}.btn-success:focus,.btn-success.focus{color:#ffffff;background-color:#59822c;border-color:#324919}.btn-success:hover{color:#ffffff;background-color:#59822c;border-color:#547a29}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#ffffff;background-color:#59822c;background-image:none;border-color:#547a29}.btn-success:active:hover,.btn-success.active:hover,.open>.dropdown-toggle.btn-success:hover,.btn-success:active:focus,.btn-success.active:focus,.open>.dropdown-toggle.btn-success:focus,.btn-success:active.focus,.btn-success.active.focus,.open>.dropdown-toggle.btn-success.focus{color:#ffffff;background-color:#476723;border-color:#324919}.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled.focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success.focus{background-color:#73a839;border-color:#73a839}.btn-success .badge{color:#73a839;background-color:#ffffff}.btn-info{color:#ffffff;background-color:#033c73;border-color:#033c73}.btn-info:focus,.btn-info.focus{color:#ffffff;background-color:#022241;border-color:#000000}.btn-info:hover{color:#ffffff;background-color:#022241;border-color:#011d37}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#ffffff;background-color:#022241;background-image:none;border-color:#011d37}.btn-info:active:hover,.btn-info.active:hover,.open>.dropdown-toggle.btn-info:hover,.btn-info:active:focus,.btn-info.active:focus,.open>.dropdown-toggle.btn-info:focus,.btn-info:active.focus,.btn-info.active.focus,.open>.dropdown-toggle.btn-info.focus{color:#ffffff;background-color:#01101f;border-color:#000000}.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled.focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info.focus{background-color:#033c73;border-color:#033c73}.btn-info .badge{color:#033c73;background-color:#ffffff}.btn-warning{color:#ffffff;background-color:#dd5600;border-color:#dd5600}.btn-warning:focus,.btn-warning.focus{color:#ffffff;background-color:#aa4200;border-color:#5e2400}.btn-warning:hover{color:#ffffff;background-color:#aa4200;border-color:#a03e00}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#ffffff;background-color:#aa4200;background-image:none;border-color:#a03e00}.btn-warning:active:hover,.btn-warning.active:hover,.open>.dropdown-toggle.btn-warning:hover,.btn-warning:active:focus,.btn-warning.active:focus,.open>.dropdown-toggle.btn-warning:focus,.btn-warning:active.focus,.btn-warning.active.focus,.open>.dropdown-toggle.btn-warning.focus{color:#ffffff;background-color:#863400;border-color:#5e2400}.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled.focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning.focus{background-color:#dd5600;border-color:#dd5600}.btn-warning .badge{color:#dd5600;background-color:#ffffff}.btn-danger{color:#ffffff;background-color:#c71c22;border-color:#c71c22}.btn-danger:focus,.btn-danger.focus{color:#ffffff;background-color:#9a161a;border-color:#570c0f}.btn-danger:hover{color:#ffffff;background-color:#9a161a;border-color:#911419}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#ffffff;background-color:#9a161a;background-image:none;border-color:#911419}.btn-danger:active:hover,.btn-danger.active:hover,.open>.dropdown-toggle.btn-danger:hover,.btn-danger:active:focus,.btn-danger.active:focus,.open>.dropdown-toggle.btn-danger:focus,.btn-danger:active.focus,.btn-danger.active.focus,.open>.dropdown-toggle.btn-danger.focus{color:#ffffff;background-color:#7b1115;border-color:#570c0f}.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled.focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger.focus{background-color:#c71c22;border-color:#c71c22}.btn-danger .badge{color:#c71c22;background-color:#ffffff}.btn-link{font-weight:400;color:#2fa4e7;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#157ab5;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#999999;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition-property:height, visibility;transition-duration:0.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#ffffff;background-clip:padding-box;border:1px solid #cccccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,0.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#ffffff;text-decoration:none;background-color:#2fa4e7}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#ffffff;text-decoration:none;background-color:#2fa4e7;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#999999}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#999999;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:54px;padding:14px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:54px;line-height:54px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:8px 12px;font-size:14px;font-weight:400;line-height:1;color:#555555;text-align:center;background-color:#eeeeee;border:1px solid #cccccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:14px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eeeeee}.nav>li.disabled>a{color:#999999}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#999999;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eeeeee;border-color:#2fa4e7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #dddddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555555;cursor:default;background-color:#ffffff;border:1px solid #dddddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #dddddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #dddddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#ffffff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#ffffff;background-color:#2fa4e7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #dddddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #dddddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#ffffff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:15px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 15px;margin-right:-15px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:6px;margin-bottom:6px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:4px;border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:6px;margin-bottom:6px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}}@media (min-width:768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#2fa4e7;border-color:#1995dc}.navbar-default .navbar-brand{color:#ffffff}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#ffffff;background-color:none}.navbar-default .navbar-text{color:#dddddd}.navbar-default .navbar-nav>li>a{color:#ffffff}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#ffffff;background-color:#178acc}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#ffffff;background-color:#178acc}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#dddddd;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#ffffff;background-color:#178acc}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#ffffff}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:#178acc}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#178acc}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#dddddd;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#178acc}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#178acc}.navbar-default .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#1995dc}.navbar-default .navbar-link{color:#ffffff}.navbar-default .navbar-link:hover{color:#ffffff}.navbar-default .btn-link{color:#ffffff}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#ffffff}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#dddddd}.navbar-inverse{background-color:#033c73;border-color:#022f5a}.navbar-inverse .navbar-brand{color:#ffffff}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#ffffff;background-color:none}.navbar-inverse .navbar-text{color:#ffffff}.navbar-inverse .navbar-nav>li>a{color:#ffffff}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#ffffff;background-color:#022f5a}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#ffffff;background-color:#022f5a}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#cccccc;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#ffffff;background-color:#022f5a}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#022f5a}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#022f5a}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#ffffff}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#ffffff;background-color:#022f5a}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#ffffff;background-color:#022f5a}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#cccccc;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#022f5a}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#022f5a}.navbar-inverse .navbar-toggle .icon-bar{background-color:#ffffff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#022a50}.navbar-inverse .navbar-link{color:#ffffff}.navbar-inverse .navbar-link:hover{color:#ffffff}.navbar-inverse .btn-link{color:#ffffff}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#ffffff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#cccccc}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#cccccc;content:"/\00a0"}.breadcrumb>.active{color:#999999}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:8px 12px;margin-left:-1px;line-height:1.42857143;color:#2fa4e7;text-decoration:none;background-color:#ffffff;border:1px solid #dddddd}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{z-index:2;color:#157ab5;background-color:#eeeeee;border-color:#dddddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:3;color:#999999;cursor:default;background-color:#f5f5f5;border-color:#dddddd}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#999999;cursor:not-allowed;background-color:#ffffff;border-color:#dddddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:14px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#ffffff;border:1px solid #dddddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eeeeee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#999999;cursor:not-allowed;background-color:#ffffff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#ffffff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#ffffff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#999999}.label-default[href]:hover,.label-default[href]:focus{background-color:#808080}.label-primary{background-color:#2fa4e7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#178acc}.label-success{background-color:#73a839}.label-success[href]:hover,.label-success[href]:focus{background-color:#59822c}.label-info{background-color:#033c73}.label-info[href]:hover,.label-info[href]:focus{background-color:#022241}.label-warning{background-color:#dd5600}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#aa4200}.label-danger{background-color:#c71c22}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#9a161a}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;line-height:1;color:#ffffff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#2fa4e7;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#ffffff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#2fa4e7;background-color:#ffffff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eeeeee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{padding-right:15px;padding-left:15px;border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#ffffff;border:1px solid #dddddd;border-radius:4px;transition:border .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#2fa4e7}.thumbnail .caption{padding:9px;color:#555555}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#356635}.alert-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#2d6987}.alert-warning{color:#c09853;background-color:#fcf8e3;border-color:#fbeed5}.alert-warning hr{border-top-color:#f8e5be}.alert-warning .alert-link{color:#a47e3c}.alert-danger{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.alert-danger hr{border-top-color:#e6c1c7}.alert-danger .alert-link{color:#953b39}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#ffffff;text-align:center;background-color:#2fa4e7;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#73a839}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#033c73}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#dd5600}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#c71c22}.progress-striped .progress-bar-danger{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#ffffff;border:1px solid #dddddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#999999;cursor:not-allowed;background-color:#eeeeee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#999999}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#ffffff;background-color:#2fa4e7;border-color:#2fa4e7}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e6f4fc}a.list-group-item,button.list-group-item{color:#555555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333333}a.list-group-item:hover,button.list-group-item:hover,a.list-group-item:focus,button.list-group-item:focus{color:#555555;text-decoration:none;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#468847;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#468847}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,button.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:focus{color:#468847;background-color:#d0e9c6}a.list-group-item-success.active,button.list-group-item-success.active,a.list-group-item-success.active:hover,button.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active:focus{color:#fff;background-color:#468847;border-color:#468847}.list-group-item-info{color:#3a87ad;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#3a87ad}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,button.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:focus{color:#3a87ad;background-color:#c4e3f3}a.list-group-item-info.active,button.list-group-item-info.active,a.list-group-item-info.active:hover,button.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active:focus{color:#fff;background-color:#3a87ad;border-color:#3a87ad}.list-group-item-warning{color:#c09853;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#c09853}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,button.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:focus{color:#c09853;background-color:#faf2cc}a.list-group-item-warning.active,button.list-group-item-warning.active,a.list-group-item-warning.active:hover,button.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active:focus{color:#fff;background-color:#c09853;border-color:#c09853}.list-group-item-danger{color:#b94a48;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#b94a48}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,button.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:focus{color:#b94a48;background-color:#ebcccc}a.list-group-item-danger.active,button.list-group-item-danger.active,a.list-group-item-danger.active:hover,button.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active:focus{color:#fff;background-color:#b94a48;border-color:#b94a48}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#ffffff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #dddddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-right:15px;padding-left:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #dddddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #dddddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #dddddd}.panel-default{border-color:#dddddd}.panel-default>.panel-heading{color:#555555;background-color:#f5f5f5;border-color:#dddddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#dddddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#555555}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#dddddd}.panel-primary{border-color:#dddddd}.panel-primary>.panel-heading{color:#ffffff;background-color:#2fa4e7;border-color:#dddddd}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#dddddd}.panel-primary>.panel-heading .badge{color:#2fa4e7;background-color:#ffffff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#dddddd}.panel-success{border-color:#dddddd}.panel-success>.panel-heading{color:#468847;background-color:#73a839;border-color:#dddddd}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#dddddd}.panel-success>.panel-heading .badge{color:#73a839;background-color:#468847}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#dddddd}.panel-info{border-color:#dddddd}.panel-info>.panel-heading{color:#3a87ad;background-color:#033c73;border-color:#dddddd}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#dddddd}.panel-info>.panel-heading .badge{color:#033c73;background-color:#3a87ad}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#dddddd}.panel-warning{border-color:#dddddd}.panel-warning>.panel-heading{color:#c09853;background-color:#dd5600;border-color:#dddddd}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#dddddd}.panel-warning>.panel-heading .badge{color:#dd5600;background-color:#c09853}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#dddddd}.panel-danger{border-color:#dddddd}.panel-danger>.panel-heading{color:#b94a48;background-color:#c71c22;border-color:#dddddd}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#dddddd}.panel-danger>.panel-heading .badge{color:#c71c22;background-color:#b94a48}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#dddddd}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000000;text-shadow:0 1px 0 #ffffff;filter:alpha(opacity=20);opacity:0.2}.close:hover,.close:focus{color:#000000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:0.5}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);transform:translate(0, -25%);transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#ffffff;background-clip:padding-box;border:1px solid #999999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,0.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:0.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:20px}.modal-footer{padding:20px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:0.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.top-left .tooltip-arrow{right:5px;bottom:0;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000000}.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;background-color:#000000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.42857143;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:14px;background-color:#ffffff;background-clip:padding-box;border:1px solid #cccccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999999;border-top-color:rgba(0,0,0,0.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#ffffff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999999;border-right-color:rgba(0,0,0,0.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#ffffff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999999;border-bottom-color:rgba(0,0,0,0.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#ffffff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#ffffff}.popover-title{padding:8px 14px;margin:0;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:rgba(0,0,0,0);filter:alpha(opacity=50);opacity:0.5}.carousel-control.left{background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0, rgba(0,0,0,0.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0, rgba(0,0,0,0.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#ffffff;text-decoration:none;outline:0;filter:alpha(opacity=90);opacity:0.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:"\2039"}.carousel-control .icon-next:before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #ffffff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#ffffff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#ffffff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-header:before,.modal-header:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-header:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width:767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width:767px){.visible-xs-block{display:block !important}}@media (max-width:767px){.visible-xs-inline{display:inline !important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline !important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline !important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width:1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width:1200px){.visible-lg-block{display:block !important}}@media (min-width:1200px){.visible-lg-inline{display:inline !important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width:767px){.hidden-xs{display:none !important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none !important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none !important}}@media (min-width:1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}.navbar{background-image:linear-gradient(#54b4eb, #2fa4e7 60%, #1d9ce5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff54b4eb', endColorstr='#ff1d9ce5', GradientType=0);background-repeat:no-repeat;border-bottom:1px solid #178acc;-webkit-filter:none;filter:none;box-shadow:0 1px 10px rgba(0,0,0,0.1)}.navbar-default .badge{background-color:#fff;color:#2fa4e7}.navbar-inverse{background-image:linear-gradient(#04519b, #044687 60%, #033769);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff04519b', endColorstr='#ff033769', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border-bottom:1px solid #022241}.navbar-inverse .badge{background-color:#fff;color:#033c73}.navbar .navbar-nav>li>a,.navbar-brand{text-shadow:0 1px 0 rgba(0,0,0,0.1)}@media (max-width:767px){.navbar .dropdown-header{color:#fff}.navbar .dropdown-menu a{color:#fff}}.btn{text-shadow:0 1px 0 rgba(0,0,0,0.1)}.btn .caret{border-top-color:#fff}.btn-default{background-image:linear-gradient(#fff, #fff 60%, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff5f5f5', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border-bottom:1px solid #e6e6e6}.btn-default:hover{color:#555555}.btn-default .caret{border-top-color:#555555}.btn-default{background-image:linear-gradient(#fff, #fff 60%, #f5f5f5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff5f5f5', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border-bottom:1px solid #e6e6e6}.btn-primary{background-image:linear-gradient(#54b4eb, #2fa4e7 60%, #1d9ce5);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff54b4eb', endColorstr='#ff1d9ce5', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border-bottom:1px solid #178acc}.btn-success{background-image:linear-gradient(#88c149, #73a839 60%, #699934);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff88c149', endColorstr='#ff699934', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border-bottom:1px solid #59822c}.btn-info{background-image:linear-gradient(#04519b, #033c73 60%, #02325f);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff04519b', endColorstr='#ff02325f', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border-bottom:1px solid #022241}.btn-warning{background-image:linear-gradient(#ff6707, #dd5600 60%, #c94e00);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffff6707', endColorstr='#ffc94e00', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border-bottom:1px solid #aa4200}.btn-danger{background-image:linear-gradient(#e12b31, #c71c22 60%, #b5191f);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe12b31', endColorstr='#ffb5191f', GradientType=0);background-repeat:no-repeat;-webkit-filter:none;filter:none;border-bottom:1px solid #9a161a}.panel-primary .panel-heading,.panel-success .panel-heading,.panel-warning .panel-heading,.panel-danger .panel-heading,.panel-info .panel-heading,.panel-primary .panel-title,.panel-success .panel-title,.panel-warning .panel-title,.panel-danger .panel-title,.panel-info .panel-title{color:#fff} \ No newline at end of file diff --git a/assets/css/jd-pay.png b/assets/css/jd-pay.png new file mode 100644 index 0000000..ba9f82c Binary files /dev/null and b/assets/css/jd-pay.png differ diff --git a/assets/css/jd_pay.css b/assets/css/jd_pay.css new file mode 100644 index 0000000..f1788d3 --- /dev/null +++ b/assets/css/jd_pay.css @@ -0,0 +1 @@ +@charset "UTF-8";html{font-size:62.5%;font-family:'helvetica neue',tahoma,arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,hr{margin:0;padding:0}body{line-height:1.333;font-size:12px}h1,h2,h3,h4,h5,h6{font-size:100%;font-family:arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}input,textarea,select,button{font-size:12px;font-weight:normal}input[type="button"],input[type="submit"],select,button{cursor:pointer}table{border-collapse:collapse;border-spacing:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}li{list-style:none}caption,th{text-align:left}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}fieldset,img,a img,iframe{border-width:0;border-style:none}img{-ms-interpolation-mode:bicubic}textarea{overflow-y:auto}legend{color:#000}a:link,a:visited{text-decoration:none}hr{height:0}label{cursor:pointer}.clearfix:after{content:"\200B";display:block;height:0;clear:both}.clearfix{*zoom:1}a{color:#328CE5}a:hover{color:#2b8ae8;text-decoration:none}a.hit{color:#C06C6C}a:focus{outline:none}.hit{color:#8DC27E}.txt_auxiliary{color:#A2A2A2}.clear{*zoom:1}.clear:before,.clear:after{content:"";display:table}.clear:after{clear:both}body,.body{background:#f7f7f7;height:100%}.mod-title{height:60px;line-height:60px;text-align:center;border-bottom:1px solid #ddd;background:#fff}.mod-title .ico-wechat{display:inline-block;width:41px;height:36px;background:url("./jd-pay.png") 0 -115px no-repeat;vertical-align:middle;margin-right:7px}.mod-title .text{font-size:20px;color:#333;font-weight:normal;vertical-align:middle}.mod-ct{width:610px;padding:0 135px;margin:0 auto;margin-top:15px;background:#fff url("./wave.png") top center repeat-x;text-align:center;color:#333;border:1px solid #e5e5e5;border-top:none}.mod-ct .order{font-size:20px;padding-top:30px}.mod-ct .amount{font-size:48px;margin-top:20px}.mod-ct .qr-image{margin-top:30px}.mod-ct .qr-image img{width:230px;height:230px}.mod-ct .detail{margin-top:60px;padding-top:25px}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./jd-pay.png") -25px -100px no-repeat}.mod-ct .detail .detail-ct{display:none;font-size:14px;text-align:right;line-height:28px}.mod-ct .detail .detail-ct dt{float:left}.mod-ct .detail-open{border-top:1px solid #e5e5e5}.mod-ct .detail .arrow{padding:6px 34px;border:1px solid #e5e5e5}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./jd-pay.png") -25px -100px no-repeat}.mod-ct .detail-open .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./jd-pay.png") 0 -100px no-repeat}.mod-ct .detail-open .detail-ct{display:block}.mod-ct .tip{margin-top:40px;border-top:1px dashed #e5e5e5;padding:30px 0;position:relative}.mod-ct .tip .ico-scan{display:inline-block;width:56px;height:55px;background:url("./jd-pay.png") 0 0 no-repeat;vertical-align:middle;*display:inline;*zoom:1}.mod-ct .tip .tip-text{display:inline-block;vertical-align:middle;text-align:left;margin-left:23px;font-size:16px;line-height:28px;*display:inline;*zoom:1}.mod-ct .tip .dec{display:inline-block;width:22px;height:45px;background:url("./jd-pay.png") 0 -55px no-repeat;position:absolute;top:-23px}.mod-ct .tip .dec-left{background-position:0 -55px;left:-136px}.mod-ct .tip .dec-right{background-position:-25px -55px;right:-136px}.foot{text-align:center;margin:30px auto;color:#888888;font-size:12px;line-height:20px;font-family:"simsun"}.foot .link{color:#0071ce} \ No newline at end of file diff --git a/assets/css/main12.css b/assets/css/main12.css new file mode 100644 index 0000000..015d76e --- /dev/null +++ b/assets/css/main12.css @@ -0,0 +1,235 @@ +@charset "utf-8"; + +/* 导航 */ +.navBD12{ border-bottom:1px solid #89c1ed;} +.nav12{ height:60px; padding-top:14px;} +.nav12-left{ float:left;} +.nav12-right{ float:right;} +.show-xs{ display:none;} + +/* 订单金额 */ +.order-amount12{ width:1010px; height:88px; padding:20px 35px; background:#fff; margin-top:35px;} +.order-amount12 span{ font-size:16px; color:#434343;} +.order-amount12-left{ float:left;} +.order-amount12-left span{ line-height:30px;} +.order-amount12-right{ float:right; line-height:50px;} +.order-amount12-right strong{ font-size:30px; color:#e94832; font-weight:normal;} + + + + +/*支付方式*/ +.PayMethod12{ width:1010px; padding:35px 35px; background:#fff; margin-top:36px;} +.PayMethod12 h2{ font-size:16px; height:30px; line-height:30px; margin-bottom:20px;} +.PayMethod12 ul{ overflow:hidden;} +.PayMethod12 ul li{ width:120px; height:38px; padding: 20px 0 0 30px; margin-bottom:35px; margin-right:60px; float:left; cursor:pointer; border:1px solid #d8d8d8;} +.PayMethod12 ul li.active{ border-color:#1a8ae1;} +.PayMethod12 ul li img{ float:left; margin-right:16px; width:20px; height:20px; } +.PayMethod12 ul li span{ float:left; position:relative; color:#323232;} +.immediate_pay{ display:block; + width:165px; + height:54px; + line-height:54px; + background:#1a8ae1; + font-size:18px; + color:#fff; + text-align:center; + cursor:pointer; + } +.immediate_button{ display:block; + width:165px; + height:54px; + line-height:54px; + background:#1a8ae1; + font-size:18px; + color:#fff; + text-align:center; + cursor:pointer; + } +/*立即支付*/ +.immediate-pay12{ height:54px; background:#fff; margin-top:40px;} +.immediate-pay12-left{ float:left; line-height:50px; margin-left:35px;} +.immediate-pay12-left a { font-size: 18px;color: #1a8ae1;cursor: pointer;} +.immediate-pay12-right{ float:right;} +.immediate-pay12-right span{ float:left; margin:14px 24px 0 0;} +.immediate-pay12-right span strong{ font-size:18px; color:#e94832;} +.immediate-pay12-right .immediate_pay{ float:right;} + +/*充值卡*/ +.card12{ padding:24px 35px; width:1010px; background:#fff; margin-top:36px;} +.card12-type{ overflow:hidden; height:74px; border-bottom:1px solid #dedede;} +.card12-type li{ width:141px; height:46px; line-height:46px; text-align:center; border:1px solid #dedede; float:left; margin-right:48px; cursor:pointer;} +.card12-type li.active{ border-color:#1a8ae1;} +.card12-money{ overflow:hidden; margin-top:22px; height:74px; border-bottom:1px solid #dedede;} +.card12-money li{ width:76px; height:46px; line-height:46px; text-align:center; border:1px solid #dedede; float:left; margin-right:48px; cursor:pointer;} +.card12-money li.active02{ border-color:#1a8ae1;} +.card12-tips{ font-size:14px; line-height:50px;} +.card12-tips span{ color:#cc2023;} +.card12-input{ margin-top:10px;} +.card12-input li{ overflow:hidden; margin-bottom:25px;} +.card12-input li span{ float:left; font-size:20px; width:80px; line-height:36px;} +.card12-input li input{ float:left; width:260px; padding-left:13px; height:36px; line-height:36px; border:1px solid #d8d8d8;} + +/*微信支付*/ +.wechart-pay12{ padding:35px 318px; width:444px; overflow:hidden;} +.wechart-pay12 dl{ float:left;} +.wechart-pay12 dl p{ font-size:14px; color:#989898; text-align:center; height:20px} +.wechart-pay12-moblie{ float:right; width:170px; margin-top:16px;} +.wechart-pay12-moblie img{ width:100%;} + +/* 产品体验首页 */ +.product_experience12 header{ background:url(../images/indexbg12.jpg) no-repeat; height:282px; padding-top:7rem; background-size:100%;} +.product_experience12 .opTit01{ font-size:32px; color:#fff; margin-top:0;} +.product_experience12 .Internet_increment_service10{ position:absolute; top:220px; left:50%; margin-left:-540px;} +.product_experience12-menu{ height:140px; margin-bottom:70px;} +.product_experience12-menu ol li{ height:140px;} +.product_experience12-menu ol li dl{ width:245px; margin:0 auto; overflow:hidden;} +.product_experience12-menu ol li dl dt{ float:left;} +.product_experience12-menu ol li dl dd{ float:right; line-height:140px;} +.product_experience12-menu ol li .dt01{ width:50px; height:57px; margin-top:42px; background:url(../images/product_experience12-h5.png) no-repeat;} +.product_experience12-menu ol li .dt02{ width:56px; height:49px; margin-top:42px; background:url(../images/product_experience12-pc.png) no-repeat;} +.product_experience12-menu ol li .dt03{ width:57px; height:57px; margin-top:42px; background:url(../images/product_experience12-app.png) no-repeat;} +.product_experience12-menu ol li.active .dt01{ width:50px; height:57px; background:url(../images/product_experience12-h5color.png) no-repeat;} +.product_experience12-menu ol li.active .dt02{ width:56px; height:49px; background:url(../images/product_experience12-pccolor.png) no-repeat;} +.product_experience12-menu ol li.active .dt03{ width:57px; height:57px; background:url(../images/product_experience12-appcolor.png) no-repeat;} +.product_experience12-menu{ box-shadow:0 5px 4px 1px #ebe9e9;} +.product_experience12-menu ol li.active dd{ color:#1a8ae1;} +.product_experience12-menu ol li.active{ background-color:transparent;} +.product_experience12-main01{ width:625px; margin:0 auto; display:none;} +.product_experience12-main01 dl{ overflow:hidden;} +.product_experience12-main01 dl dt{ float:left;} +.product_experience12-main01 dl dd{ float:right;} +.product_experience12-main01 dl dd h2{ font-size:22px; margin-bottom:12px;} +.product_experience12-main01 dl dd h3{ font-size:24px;} +.product_experience12-main01 dl dd p{ font-size:14px; color:#a1a1a1;} +.product_experience12-main01 .immediate_pay{ width:135px; height:42px; line-height:42px; color:#fff;} +.product_experience12-main01 .immediate_button{ width:135px; height:42px; line-height:42px;} +.product_experience12-main01 .immediate_pay:hover{ color:#fff;} +.product_experience12-main01 .immediate_button:hover{ color:#fff;} +.product_experience12-main02{ width:710px; text-align:center;} +.product_experience12-main02 dl{ width:345px;} +.product_experience12-main02 dl.andr{ float:left;} +.product_experience12-main02 dl.ios{ float:right;} +.product_experience12-main02 dl dt{ float:none;} +.product_experience12-main02 dl dd{ float:none; font-size:18px; color:#a1a1a1; line-height:60px;} +.product_experience12-main03{ width:320px; margin:0 auto; text-align:center;} +.product_experience12-main03 dl dt{ float:none;} +.product_experience12-main03 dl dd{ float:none;} + +/*支付成功&&失败*/ +.paystument12{ padding:25px 360px; width:360px; background:#fff; text-align:center; display:none;} +.paystument12 h3{ font-size:18px; margin-top:20px;} +.paystument12 h3 span{ font-size:18px;} +.paystument12 h3 a{ font-size:18px; color:#e84832;} + +.paystument13{ padding:1px 360px; width:360px; background:#fff; text-align:left; display:none;} +.paystument12 h4{ font-size:16px; margin-top:20px;} +.paystument12 h4 span{ font-size:16px;} +.paystument12 h4 a{ font-size:16px; color:#e84832;} + +.Return_experienceBtn{width:150px;height:45px;line-height:45px; margin:195px auto 270px;font-size:16px;} + +/*弹窗*/ +.pay_sure12{ width:100%; height:100%; position:fixed; left:0; top:0; z-index:99999; background:rgba(0%,0%,0%,0.3); display:none;} +.pay_sure12 .pay_sure12-main{width:400px; + height:220px; + position:absolute; + left:50%; + margin-left:-200px; + top:15%; + background:#fff; + box-sizing:border-box; + text-align:center; + } +.pay_sure12-main h2{ height:45px; line-height:45px; margin-bottom:20px; text-align:center; background:#f4f4f4; font-size:18px;} +.pay_sure12-main h3,.pay_sure12-main p{ font-size:12px; color:#989898;} +.pay_sure12-main .h3-01{ font-size:15px; color:#323232;} +.pay_sure12-main h3 strong{ color:#989898;font-size:12px;font-weight:normal;} +.pay_sure12-btngroup{ width:250px; margin:20px auto 10px; overflow:hidden;} +.pay_sure12-btngroup a.immediate_pay{ float:left;} +.pay_sure12-btngroup a.immediate_button{ float:left;} +.pay_sure12-btngroup a.immediate_payComplate{ margin-right:50px; width:100px; height:34px; line-height:34px;font-size:13px;} +.pay_sure12-btngroup a.immediate_payChange{ background-color:#f4f4f4; color:#323232; width:100px; height:34px; line-height:34px;font-size:13px;} + +/*底部*/ +.footer12{ text-align:center; color:#cbcbcb; margin-top:50px; margin-bottom:50px;clear:both;} + + +/*首页弹窗*/ +.mt_agree{ width:100%; height:100%; position:fixed; left:0; top:0; z-index:99999; background:rgba(0%,0%,0%,0.3); display:none;} +.mt_agree .mt_agree_main{width:500px; + margin-left:-250px; + height:auto; + position:absolute; + left:50%; + top:15%; + background:#fff; + padding:2%; + box-sizing:border-box; } +.mt_agree h2{ text-align:center; font-size:20px; line-height:50px; border-bottom:1px solid #0568a4;} +.mt_agree p{ font-size:16px; text-align:center; line-height:50px;} +.mt_agree a.close_btn{ display:block; + width:30%; + height:50px; + line-height:50px; + margin:20px auto; + background:#0568a4; + color:#fff; + font-size:18px; + text-align:center; + text-decoration:none; + border-radius:30px; + } + + + +@media screen and (max-height:900px){ + .navBD12{ margin-bottom:16px;} + .card12{ margin-top:0; padding:20px 35px;} + .immediate-pay12{ margin-top:16px;} + .order-amount12{ padding:16px 35px; margin-top:16px;} + .card12-input .card12-input-password{ margin-bottom:0;} + .PayMethod12{ margin-top:16px;} + .product_experience12-menu{ height:120px;} + .product_experience12-menu ol li{ height:120px;} + .product_experience12-menu ol li .dt01{ margin-top:32px;} + .product_experience12-menu ol li .dt02{ margin-top:32px;} + .product_experience12-menu ol li .dt03{ margin-top:32px;} + .product_experience12-menu ol li dl dd{ line-height:120px;} + .product_experience12 .Internet_increment_service10{ top:200px;} + .product_experience12 .opTit01{ margin-top:-10px;} + .product_experience12-menu{ margin-bottom:60px;} + .Return_experienceBtn{ margin:120px auto;} +} + +@media screen and (max-width:768px){ + .w1080{width:100%;} + .order-amount12{width:auto;} + .PayMethod12{width:auto;margin-top:0;} + .PayMethod12 ul li{margin-bottom:20px;} + .nav12-left{margin-left:16px;} + .nav12-left .hidden-xs{display:none;} + .nav12-right{float:left;margin-left:16px;} + .order-amount12-right{float:left;} + .PayMethod12 ul li{width:87%;float:none;} + .immediate-pay12-right{float:left;padding-left:15px;} + .PayMethod12 h2{clear:both;} + .show-lg{ display:none;} + .show-xs{ display:block;} + .wechart-pay12{width:100%; padding:16px;box-sizing:border-box;} + .wechart-pay12 dl{transform:scale(0.7)} + .wechart-pay12-moblie{width: 40%;margin-top: 50px;float:left;} + .card12{width:auto;clear:both;} + .card12-type{width:100%;} + .card12-type li{width:30%;margin-right:6px;font-size:14px;} + .card12-money{width:100%;height:150px;} + .card12-money li{ width:28%;margin:5px;} + .card12-tips{line-height:30px;} + .card12-input li input{width:90%;} + .immediate-pay12-right{margin:24px;} + .immediate_pay{width:120px;} + .immediate-pay12{height:auto;overflow:hidden;} + .paystument12{width:auto;padding:20px;box-sizing:border-box;} + .order-amount12{height:130px;margin-bottom:12px;} + .PayMethod12 ul li{ height:28px; padding: 10px 0 0 30px;} +} \ No newline at end of file diff --git a/assets/css/mqq-pay.png b/assets/css/mqq-pay.png new file mode 100644 index 0000000..948ea71 Binary files /dev/null and b/assets/css/mqq-pay.png differ diff --git a/assets/css/mqq_pay.css b/assets/css/mqq_pay.css new file mode 100644 index 0000000..698c785 --- /dev/null +++ b/assets/css/mqq_pay.css @@ -0,0 +1 @@ +@charset "UTF-8";html{font-size:62.5%;font-family:'helvetica neue',tahoma,arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,hr{margin:0;padding:0}body{line-height:1.333;font-size:12px}h1,h2,h3,h4,h5,h6{font-size:100%;font-family:arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}input,textarea,select,button{font-size:12px;font-weight:normal}input[type="button"],input[type="submit"],select,button{cursor:pointer}table{border-collapse:collapse;border-spacing:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}li{list-style:none}caption,th{text-align:left}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}fieldset,img,a img,iframe{border-width:0;border-style:none}img{-ms-interpolation-mode:bicubic}textarea{overflow-y:auto}legend{color:#000}a:link,a:visited{text-decoration:none}hr{height:0}label{cursor:pointer}.clearfix:after{content:"\200B";display:block;height:0;clear:both}.clearfix{*zoom:1}a{color:#328CE5}a:hover{color:#2b8ae8;text-decoration:none}a.hit{color:#C06C6C}a:focus{outline:none}.hit{color:#8DC27E}.txt_auxiliary{color:#A2A2A2}.clear{*zoom:1}.clear:before,.clear:after{content:"";display:table}.clear:after{clear:both}body,.body{background:#f7f7f7;height:100%}.mod-title{height:60px;line-height:60px;text-align:center;border-bottom:1px solid #ddd;background:#fff}.mod-title .ico-wechat{display:inline-block;width:41px;height:36px;background:url("./mqq-pay.png") 0 -115px no-repeat;vertical-align:middle;margin-right:7px}.mod-title .text{font-size:20px;color:#333;font-weight:normal;vertical-align:middle}.mod-ct{width:610px;padding:0 135px;margin:0 auto;margin-top:15px;background:#fff url("./wave.png") top center repeat-x;text-align:center;color:#333;border:1px solid #e5e5e5;border-top:none}.mod-ct .order{font-size:20px;padding-top:30px}.mod-ct .amount{font-size:48px;margin-top:20px}.mod-ct .qr-image{margin-top:30px}.mod-ct .qr-image img{width:230px;height:230px}.mod-ct .detail{margin-top:60px;padding-top:25px}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./mqq-pay.png") -25px -100px no-repeat}.mod-ct .detail .detail-ct{display:none;font-size:14px;text-align:right;line-height:28px}.mod-ct .detail .detail-ct dt{float:left}.mod-ct .detail-open{border-top:1px solid #e5e5e5}.mod-ct .detail .arrow{padding:6px 34px;border:1px solid #e5e5e5}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./mqq-pay.png") -25px -100px no-repeat}.mod-ct .detail-open .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./mqq-pay.png") 0 -100px no-repeat}.mod-ct .detail-open .detail-ct{display:block}.mod-ct .tip{margin-top:40px;border-top:1px dashed #e5e5e5;padding:30px 0;position:relative}.mod-ct .tip .ico-scan{display:inline-block;width:56px;height:55px;background:url("./mqq-pay.png") 0 0 no-repeat;vertical-align:middle;*display:inline;*zoom:1}.mod-ct .tip .tip-text{display:inline-block;vertical-align:middle;text-align:left;margin-left:23px;font-size:16px;line-height:28px;*display:inline;*zoom:1}.mod-ct .tip .dec{display:inline-block;width:22px;height:45px;background:url("./mqq-pay.png") 0 -55px no-repeat;position:absolute;top:-23px}.mod-ct .tip .dec-left{background-position:0 -55px;left:-136px}.mod-ct .tip .dec-right{background-position:-25px -55px;right:-136px}.foot{text-align:center;margin:30px auto;color:#888888;font-size:12px;line-height:20px;font-family:"simsun"}.foot .link{color:#0071ce} \ No newline at end of file diff --git a/assets/css/reset.css b/assets/css/reset.css new file mode 100644 index 0000000..b4f6f96 --- /dev/null +++ b/assets/css/reset.css @@ -0,0 +1,116 @@ +@charset "utf-8"; +/* CSS Document */ + +body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, /* structural elements 结构元素 */ dl, dt, dd, ul, ol, li, /* list elements 列表元素 */ pre, /* text formatting elements 文本格式元素 */ fieldset, lengend, button, input, textarea, /* form elements 表单元素 */ th, td { /* table elements 表格元素 */ margin: 0; padding: 0; } +html,body{ width:100%; height:100%; color:#6e6e6e; font-family:'微软雅黑'} +/* 设置默认字体 */ +body, button, input, select, textarea { /* for ie */ /*font: 12px/1 Tahoma, Helvetica, Arial, "宋体", sans-serif;*/ +font: 14px/1 Tahoma, Helvetica, Arial, "微软雅黑", sans-serif,; /* 用 ascii 字符表示,使得在任何编码下都无问题 */ } +h1 { font-size: 18px; /* 18px / 12px = 1.5 */ font-family:'微软雅黑'} +h2 { font-size: 24px; font-weight:normal; color:#323232; font-family:'微软雅黑'} +h3 { font-size: 14px; font-weight:normal; font-family:'微软雅黑' } +h4, h5, h6 { font-size: 100%; font-weight:normal; font-family:'微软雅黑' } +p{ font-size:14px; line-height:34px; font-family:'微软雅黑'}/* 段落默认字号和行高 */ +address, cite, dfn, em, var { font-style: normal; } /* 将斜体扶正 */ +code, kbd, pre, samp, tt { font-family: "Courier New", Courier, monospace; } /* 统一等宽字体 */ +small { font-size: 12px; } /* 小于 12px 的中文很难阅读,让 small 正常化 */ +/* 重置列表元素 */ +ul, ol { list-style: none; font-family:'微软雅黑' } +select{ border-style:none;} +/* 重置文本格式元素 */ +a { text-decoration: none; color:#6e6e6e; font-size:14px; outline:none; font-family:'微软雅黑'} +span{ font-size:14px; font-family:'微软雅黑'} +a:hover { text-decoration: none; } +abbr[title], acronym[title] { /* 注:1.ie6 不支持 abbr; 2.这里用了属性选择符,ie6 下无效果 */ border-bottom: 1px dotted; cursor: help; } +q:before, q:after { content: ''; } +/* 重置表单元素 */ +input{ border:none;} +legend { color: #000; } /* for ie6 */ +fieldset, img { border: none; } /* img 搭车:让链接里的 img 无边框 */ +/* 注:optgroup 无法扶正 */ +button, input, select, textarea { font-size: 100%; /* 使得表单元素在 ie 下能继承字体大小 */ } +/* 重置表格元素 */ +table { border-collapse: collapse; border-spacing: 0; width:100%;} +/* 重置 hr */ +hr { border: none; height: 1px; } +/* 让非ie浏览器默认也显示垂直滚动条,防止因滚动条引起的闪烁 */ +html { overflow-y: scroll;} +*:focus {outline: none;} +/* 版心 */ +.w100{ width:100%; /*min-width:1080px;*/ clear:both;} +.w1200{ width:1200px; margin:0 auto;} +.w1300{ width:1300px; margin:0 auto;} +.w1000{ width:1000px; margin:0 auto;} +.w1080{ width:1080px; margin:0 auto;} +/*常用样式*/ +.fl{ float:left;} +.fr{ float:right;} +.tc{ text-align:center;} +.tr{ text-align:right;} +.tl{ text-align:left;} +.f12{ font-size:12px;} +.f14{ font-size:14px;} +.f15{ font-size:15px;} +.f16{ font-size:16px;} +.f18{ font-size:18px;} +.f20{ font-size:20px; color:#323232;} +.f22{ font-size:22px;} +.f24{ font-size:24px; color:#323232;} +.f36{ font-size:36px; color:#323232;} +.fc{ color:#d2151a;} +.l24{ line-height:24px;} +.f30{ font-size:30px; color:#323232;} +.f32{ font-size:32px; color:#323232;} +.l36{ line-height:36px;} +.t2{ text-indent:2em;} +.mt14{ margin-top:14px;} +.mt20{ margin-top:20px;} +.t_ul{ text-decoration:underline;} +.lh24{ line-height:24px;} +.lh32{ line-height:32px;} +.blue{ color:#0568a4;} +.blue_ul{ color:#0568a4; font-size:16px; text-decoration:underline;} +.blue_ul02{ color:#fff; font-size:16px; text-decoration:underline;} +.red{ color:#e20000; font-size:14px;} +.ma{ margin:0 auto;} +select { + /*Chrome和Firefox里面的边框是不一样的,所以复写了一下*/ + border: solid 1px #f8f9fb; + + /*很关键:将默认的select选择框样式清除*/ + appearance:none; + -moz-appearance:none; + -webkit-appearance:none; + + /*在选择框的最右侧中间显示小箭头图片*/ + background:url(../images/arrawdown.png) no-repeat scroll 90% center; + + + /*为下拉小箭头留出一点位置,避免被文字覆盖*/ + padding-right: 14px; +}/* 重置文本格式元素 */ +.mt_userMessage select{ background:url(../images/arrawdown02.png) no-repeat scroll right center;} + +/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ +::-webkit-scrollbar +{ + width: 6px; + height: 6px; + background-color: #F5F5F5; +} + +/*定义滚动条轨道 内阴影+圆角*/ +::-webkit-scrollbar-track +{ + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); + border-radius: 10px; + background-color: #F5F5F5; +} + +/*定义滑块 内阴影+圆角*/ +::-webkit-scrollbar-thumb +{ + border-radius: 10px; + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3); + background-color: #ccc; +} \ No newline at end of file diff --git a/assets/css/wave.png b/assets/css/wave.png new file mode 100644 index 0000000..6fbe24f Binary files /dev/null and b/assets/css/wave.png differ diff --git a/assets/css/wechat-pay.png b/assets/css/wechat-pay.png new file mode 100644 index 0000000..a961359 Binary files /dev/null and b/assets/css/wechat-pay.png differ diff --git a/assets/css/wechat_pay.css b/assets/css/wechat_pay.css new file mode 100644 index 0000000..fc09306 --- /dev/null +++ b/assets/css/wechat_pay.css @@ -0,0 +1 @@ +@charset "UTF-8";html{font-size:62.5%;font-family:'helvetica neue',tahoma,arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,hr{margin:0;padding:0}body{line-height:1.333;font-size:12px}h1,h2,h3,h4,h5,h6{font-size:100%;font-family:arial,'hiragino sans gb','microsoft yahei','Simsun',sans-serif}input,textarea,select,button{font-size:12px;font-weight:normal}input[type="button"],input[type="submit"],select,button{cursor:pointer}table{border-collapse:collapse;border-spacing:0}address,caption,cite,code,dfn,em,th,var{font-style:normal;font-weight:normal}li{list-style:none}caption,th{text-align:left}q:before,q:after{content:''}abbr,acronym{border:0;font-variant:normal}sup{vertical-align:text-top}sub{vertical-align:text-bottom}fieldset,img,a img,iframe{border-width:0;border-style:none}img{-ms-interpolation-mode:bicubic}textarea{overflow-y:auto}legend{color:#000}a:link,a:visited{text-decoration:none}hr{height:0}label{cursor:pointer}.clearfix:after{content:"\200B";display:block;height:0;clear:both}.clearfix{*zoom:1}a{color:#328CE5}a:hover{color:#2b8ae8;text-decoration:none}a.hit{color:#C06C6C}a:focus{outline:none}.hit{color:#8DC27E}.txt_auxiliary{color:#A2A2A2}.clear{*zoom:1}.clear:before,.clear:after{content:"";display:table}.clear:after{clear:both}body,.body{background:#f7f7f7;height:100%}.mod-title{height:60px;line-height:60px;text-align:center;border-bottom:1px solid #ddd;background:#fff}.mod-title .ico-wechat{display:inline-block;width:41px;height:36px;background:url("./wechat-pay.png") 0 -115px no-repeat;vertical-align:middle;margin-right:7px}.mod-title .text{font-size:20px;color:#333;font-weight:normal;vertical-align:middle}.mod-ct{width:610px;padding:0 135px;margin:0 auto;margin-top:15px;background:#fff url("./wave.png") top center repeat-x;text-align:center;color:#333;border:1px solid #e5e5e5;border-top:none}.mod-ct .order{font-size:20px;padding-top:30px}.mod-ct .amount{font-size:48px;margin-top:20px}.mod-ct .qr-image{margin-top:30px}.mod-ct .qr-image img{width:230px;height:230px}.mod-ct .detail{margin-top:60px;padding-top:25px}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./wechat-pay.png") -25px -100px no-repeat}.mod-ct .detail .detail-ct{display:none;font-size:14px;text-align:right;line-height:28px}.mod-ct .detail .detail-ct dt{float:left}.mod-ct .detail-open{border-top:1px solid #e5e5e5}.mod-ct .detail .arrow{padding:6px 34px;border:1px solid #e5e5e5}.mod-ct .detail .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./wechat-pay.png") -25px -100px no-repeat}.mod-ct .detail-open .arrow .ico-arrow{display:inline-block;width:20px;height:11px;background:url("./wechat-pay.png") 0 -100px no-repeat}.mod-ct .detail-open .detail-ct{display:block}.mod-ct .tip{margin-top:40px;border-top:1px dashed #e5e5e5;padding:30px 0;position:relative}.mod-ct .tip .ico-scan{display:inline-block;width:56px;height:55px;background:url("./wechat-pay.png") 0 0 no-repeat;vertical-align:middle;*display:inline;*zoom:1}.mod-ct .tip .tip-text{display:inline-block;vertical-align:middle;text-align:left;margin-left:23px;font-size:16px;line-height:28px;*display:inline;*zoom:1}.mod-ct .tip .dec{display:inline-block;width:22px;height:45px;background:url("./wechat-pay.png") 0 -55px no-repeat;position:absolute;top:-23px}.mod-ct .tip .dec-left{background-position:0 -55px;left:-136px}.mod-ct .tip .dec-right{background-position:-25px -55px;right:-136px}.foot{text-align:center;margin:30px auto;color:#888888;font-size:12px;line-height:20px;font-family:"simsun"}.foot .link{color:#0071ce} \ No newline at end of file diff --git a/assets/font/elephant.ttf b/assets/font/elephant.ttf new file mode 100644 index 0000000..2763d31 Binary files /dev/null and b/assets/font/elephant.ttf differ diff --git a/assets/icon/alipay.ico b/assets/icon/alipay.ico new file mode 100644 index 0000000..539c0ca Binary files /dev/null and b/assets/icon/alipay.ico differ diff --git a/assets/icon/bank.ico b/assets/icon/bank.ico new file mode 100644 index 0000000..2c048a4 Binary files /dev/null and b/assets/icon/bank.ico differ diff --git a/assets/icon/jdpay.ico b/assets/icon/jdpay.ico new file mode 100644 index 0000000..681a56c Binary files /dev/null and b/assets/icon/jdpay.ico differ diff --git a/assets/icon/qqpay.ico b/assets/icon/qqpay.ico new file mode 100644 index 0000000..7097f55 Binary files /dev/null and b/assets/icon/qqpay.ico differ diff --git a/assets/icon/tenpay.ico b/assets/icon/tenpay.ico new file mode 100644 index 0000000..145a345 Binary files /dev/null and b/assets/icon/tenpay.ico differ diff --git a/assets/icon/wechat.ico b/assets/icon/wechat.ico new file mode 100644 index 0000000..3ed86a5 Binary files /dev/null and b/assets/icon/wechat.ico differ diff --git a/assets/icon/wxpay.ico b/assets/icon/wxpay.ico new file mode 100644 index 0000000..3ed86a5 Binary files /dev/null and b/assets/icon/wxpay.ico differ diff --git a/assets/img/NoImg.png b/assets/img/NoImg.png new file mode 100644 index 0000000..2bd4f38 Binary files /dev/null and b/assets/img/NoImg.png differ diff --git a/assets/img/alipay.gif b/assets/img/alipay.gif new file mode 100644 index 0000000..e452d24 Binary files /dev/null and b/assets/img/alipay.gif differ diff --git a/assets/img/load.gif b/assets/img/load.gif new file mode 100644 index 0000000..f8fba1a Binary files /dev/null and b/assets/img/load.gif differ diff --git a/assets/img/loading.gif b/assets/img/loading.gif new file mode 100644 index 0000000..5bb90fd Binary files /dev/null and b/assets/img/loading.gif differ diff --git a/assets/img/logo.png b/assets/img/logo.png new file mode 100644 index 0000000..2a923a4 Binary files /dev/null and b/assets/img/logo.png differ diff --git a/assets/img/mqq_logo.png b/assets/img/mqq_logo.png new file mode 100644 index 0000000..9e7fcab Binary files /dev/null and b/assets/img/mqq_logo.png differ diff --git a/assets/img/qq.png b/assets/img/qq.png new file mode 100644 index 0000000..535522b Binary files /dev/null and b/assets/img/qq.png differ diff --git a/assets/img/qqpay.jpg b/assets/img/qqpay.jpg new file mode 100644 index 0000000..8ab52b8 Binary files /dev/null and b/assets/img/qqpay.jpg differ diff --git a/assets/img/tenpay.gif b/assets/img/tenpay.gif new file mode 100644 index 0000000..1be2d0d Binary files /dev/null and b/assets/img/tenpay.gif differ diff --git a/assets/img/user.png b/assets/img/user.png new file mode 100644 index 0000000..d9a8ddb Binary files /dev/null and b/assets/img/user.png differ diff --git a/assets/img/weixin.gif b/assets/img/weixin.gif new file mode 100644 index 0000000..de09a03 Binary files /dev/null and b/assets/img/weixin.gif differ diff --git a/assets/img/wx.png b/assets/img/wx.png new file mode 100644 index 0000000..8440d48 Binary files /dev/null and b/assets/img/wx.png differ diff --git a/assets/img/wxwappay.png b/assets/img/wxwappay.png new file mode 100644 index 0000000..9875626 Binary files /dev/null and b/assets/img/wxwappay.png differ diff --git a/assets/js/jquery-qrcode.min.js b/assets/js/jquery-qrcode.min.js new file mode 100644 index 0000000..f718c22 --- /dev/null +++ b/assets/js/jquery-qrcode.min.js @@ -0,0 +1,2 @@ +/*! jquery-qrcode v0.14.0 - https://larsjung.de/jquery-qrcode/ */ +!function(r){"use strict";function t(t,e,n,o){function a(r,t){return r-=o,t-=o,0>r||r>=c||0>t||t>=c?!1:f.isDark(r,t)}function i(r,t,e,n){var o=u.isDark,a=1/l;u.isDark=function(i,u){var f=u*a,c=i*a,l=f+a,g=c+a;return o(i,u)&&(r>l||f>e||t>g||c>n)}}var u={},f=r(n,e);f.addData(t),f.make(),o=o||0;var c=f.getModuleCount(),l=f.getModuleCount()+2*o;return u.text=t,u.level=e,u.version=n,u.moduleCount=l,u.isDark=a,u.addBlank=i,u}function e(r,e,n,o,a){n=Math.max(1,n||1),o=Math.min(40,o||40);for(var i=n;o>=i;i+=1)try{return t(r,e,i,a)}catch(u){}}function n(r,t,e){var n=e.size,o="bold "+e.mSize*n+"px "+e.fontname,a=w("")[0].getContext("2d");a.font=o;var i=a.measureText(e.label).width,u=e.mSize,f=i/n,c=(1-f)*e.mPosX,l=(1-u)*e.mPosY,g=c+f,s=l+u,v=.01;1===e.mode?r.addBlank(0,l-v,n,s+v):r.addBlank(c-v,l-v,g+v,s+v),t.fillStyle=e.fontcolor,t.font=o,t.fillText(e.label,c*n,l*n+.75*e.mSize*n)}function o(r,t,e){var n=e.size,o=e.image.naturalWidth||1,a=e.image.naturalHeight||1,i=e.mSize,u=i*o/a,f=(1-u)*e.mPosX,c=(1-i)*e.mPosY,l=f+u,g=c+i,s=.01;3===e.mode?r.addBlank(0,c-s,n,g+s):r.addBlank(f-s,c-s,l+s,g+s),t.drawImage(e.image,f*n,c*n,u*n,i*n)}function a(r,t,e){w(e.background).is("img")?t.drawImage(e.background,0,0,e.size,e.size):e.background&&(t.fillStyle=e.background,t.fillRect(e.left,e.top,e.size,e.size));var a=e.mode;1===a||2===a?n(r,t,e):(3===a||4===a)&&o(r,t,e)}function i(r,t,e,n,o,a,i,u){r.isDark(i,u)&&t.rect(n,o,a,a)}function u(r,t,e,n,o,a,i,u,f,c){i?r.moveTo(t+a,e):r.moveTo(t,e),u?(r.lineTo(n-a,e),r.arcTo(n,e,n,o,a)):r.lineTo(n,e),f?(r.lineTo(n,o-a),r.arcTo(n,o,t,o,a)):r.lineTo(n,o),c?(r.lineTo(t+a,o),r.arcTo(t,o,t,e,a)):r.lineTo(t,o),i?(r.lineTo(t,e+a),r.arcTo(t,e,n,e,a)):r.lineTo(t,e)}function f(r,t,e,n,o,a,i,u,f,c){i&&(r.moveTo(t+a,e),r.lineTo(t,e),r.lineTo(t,e+a),r.arcTo(t,e,t+a,e,a)),u&&(r.moveTo(n-a,e),r.lineTo(n,e),r.lineTo(n,e+a),r.arcTo(n,e,n-a,e,a)),f&&(r.moveTo(n-a,o),r.lineTo(n,o),r.lineTo(n,o-a),r.arcTo(n,o,n-a,o,a)),c&&(r.moveTo(t+a,o),r.lineTo(t,o),r.lineTo(t,o-a),r.arcTo(t,o,t+a,o,a))}function c(r,t,e,n,o,a,i,c){var l=r.isDark,g=n+a,s=o+a,v=e.radius*a,h=i-1,d=i+1,w=c-1,m=c+1,y=l(i,c),T=l(h,w),p=l(h,c),B=l(h,m),A=l(i,m),E=l(d,m),k=l(d,c),M=l(d,w),C=l(i,w);y?u(t,n,o,g,s,v,!p&&!C,!p&&!A,!k&&!A,!k&&!C):f(t,n,o,g,s,v,p&&C&&T,p&&A&&B,k&&A&&E,k&&C&&M)}function l(r,t,e){var n,o,a=r.moduleCount,u=e.size/a,f=i;for(e.radius>0&&e.radius<=.5&&(f=c),t.beginPath(),n=0;a>n;n+=1)for(o=0;a>o;o+=1){var l=e.left+o*u,g=e.top+n*u,s=u;f(r,t,e,l,g,s,n,o)}if(w(e.fill).is("img")){t.strokeStyle="rgba(0,0,0,0.5)",t.lineWidth=2,t.stroke();var v=t.globalCompositeOperation;t.globalCompositeOperation="destination-out",t.fill(),t.globalCompositeOperation=v,t.clip(),t.drawImage(e.fill,0,0,e.size,e.size),t.restore()}else t.fillStyle=e.fill,t.fill()}function g(r,t){var n=e(t.text,t.ecLevel,t.minVersion,t.maxVersion,t.quiet);if(!n)return null;var o=w(r).data("qrcode",n),i=o[0].getContext("2d");return a(n,i,t),l(n,i,t),o}function s(r){var t=w("").attr("width",r.size).attr("height",r.size);return g(t,r)}function v(r){return w("").attr("src",s(r)[0].toDataURL("image/png"))}function h(r){var t=e(r.text,r.ecLevel,r.minVersion,r.maxVersion,r.quiet);if(!t)return null;var n,o,a=r.size,i=r.background,u=Math.floor,f=t.moduleCount,c=u(a/f),l=u(.5*(a-c*f)),g={position:"relative",left:0,top:0,padding:0,margin:0,width:a,height:a},s={position:"absolute",padding:0,margin:0,width:c,height:c,"background-color":r.fill},v=w("
    ").data("qrcode",t).css(g);for(i&&v.css("background-color",i),n=0;f>n;n+=1)for(o=0;f>o;o+=1)t.isDark(n,o)&&w("
    ").css(s).css({left:l+o*c,top:l+n*c}).appendTo(v);return v}function d(r){return m&&"canvas"===r.render?s(r):m&&"image"===r.render?v(r):h(r)}var w=window.jQuery,m=function(){var r=document.createElement("canvas");return!(!r.getContext||!r.getContext("2d"))}(),y={render:"canvas",minVersion:1,maxVersion:40,ecLevel:"L",left:0,top:0,size:200,fill:"#000",background:null,text:"no text",radius:0,quiet:0,mode:0,mSize:.1,mPosX:.5,mPosY:.5,label:"no label",fontname:"sans",fontcolor:"#000",image:null};w.fn.qrcode=function(r){var t=w.extend({},y,r);return this.each(function(r,e){"canvas"===e.nodeName.toLowerCase()?g(e,t):w(e).append(d(t))})}}(function(){var r=function(){function r(t,e){if("undefined"==typeof t.length)throw new Error(t.length+"/"+e);var n=function(){for(var r=0;re;e+=1){t[e]=new Array(r);for(var n=0;r>n;n+=1)t[e][n]=null}return t}(v),T(0,0),T(v-7,0),T(0,v-7),A(),B(),k(r,t),l>=7&&E(r),null==d&&(d=D(l,g,w)),M(d,t)},T=function(r,t){for(var e=-1;7>=e;e+=1)if(!(-1>=r+e||r+e>=v))for(var n=-1;7>=n;n+=1)-1>=t+n||t+n>=v||(e>=0&&6>=e&&(0==n||6==n)||n>=0&&6>=n&&(0==e||6==e)||e>=2&&4>=e&&n>=2&&4>=n?s[r+e][t+n]=!0:s[r+e][t+n]=!1)},p=function(){for(var r=0,t=0,e=0;8>e;e+=1){y(!0,e);var n=a.getLostPoint(m);(0==e||r>n)&&(r=n,t=e)}return t},B=function(){for(var r=8;v-8>r;r+=1)null==s[r][6]&&(s[r][6]=r%2==0);for(var t=8;v-8>t;t+=1)null==s[6][t]&&(s[6][t]=t%2==0)},A=function(){for(var r=a.getPatternPosition(l),t=0;t=i;i+=1)for(var u=-2;2>=u;u+=1)-2==i||2==i||-2==u||2==u||0==i&&0==u?s[n+i][o+u]=!0:s[n+i][o+u]=!1}},E=function(r){for(var t=a.getBCHTypeNumber(l),e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);s[Math.floor(e/3)][e%3+v-8-3]=n}for(var e=0;18>e;e+=1){var n=!r&&1==(t>>e&1);s[e%3+v-8-3][Math.floor(e/3)]=n}},k=function(r,t){for(var e=g<<3|t,n=a.getBCHTypeInfo(e),o=0;15>o;o+=1){var i=!r&&1==(n>>o&1);6>o?s[o][8]=i:8>o?s[o+1][8]=i:s[v-15+o][8]=i}for(var o=0;15>o;o+=1){var i=!r&&1==(n>>o&1);8>o?s[8][v-o-1]=i:9>o?s[8][15-o-1+1]=i:s[8][15-o-1]=i}s[v-8][8]=!r},M=function(r,t){for(var e=-1,n=v-1,o=7,i=0,u=a.getMaskFunction(t),f=v-1;f>0;f-=2)for(6==f&&(f-=1);;){for(var c=0;2>c;c+=1)if(null==s[n][f-c]){var l=!1;i>>o&1));var g=u(n,f-c);g&&(l=!l),s[n][f-c]=l,o-=1,-1==o&&(i+=1,o=7)}if(n+=e,0>n||n>=v){n-=e,e=-e;break}}},C=function(t,e){for(var n=0,o=0,i=0,u=new Array(e.length),f=new Array(e.length),c=0;c=0?d.getAt(w):0}}for(var m=0,s=0;ss;s+=1)for(var c=0;cs;s+=1)for(var c=0;c8*s)throw new Error("code length overflow. ("+c.getLengthInBits()+">"+8*s+")");for(c.getLengthInBits()+4<=8*s&&c.put(0,4);c.getLengthInBits()%8!=0;)c.putBit(!1);for(;;){if(c.getLengthInBits()>=8*s)break;if(c.put(o,8),c.getLengthInBits()>=8*s)break;c.put(i,8)}return C(c,n)};return m.addData=function(r){var t=c(r);w.push(t),d=null},m.isDark=function(r,t){if(0>r||r>=v||0>t||t>=v)throw new Error(r+","+t);return s[r][t]},m.getModuleCount=function(){return v},m.make=function(){y(!1,p())},m.createTableTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e="";e+='";for(var o=0;o';e+=""}return e+="",e+="
    "},m.createImgTag=function(r,t){r=r||2,t="undefined"==typeof t?4*r:t;var e=m.getModuleCount()*r+2*t,n=t,o=e-t;return h(e,e,function(t,e){if(t>=n&&o>t&&e>=n&&o>e){var a=Math.floor((t-n)/r),i=Math.floor((e-n)/r);return m.isDark(i,a)?0:1}return 1})},m};t.stringToBytes=function(r){for(var t=new Array,e=0;ea)t.push(a);else{var i=e[r.charAt(o)];"number"==typeof i?(255&i)==i?t.push(i):(t.push(i>>>8),t.push(255&i)):t.push(n)}}return t}};var e={MODE_NUMBER:1,MODE_ALPHA_NUM:2,MODE_8BIT_BYTE:4,MODE_KANJI:8},n={L:1,M:0,Q:3,H:2},o={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7},a=function(){var t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],n=1335,a=7973,u=21522,f={},c=function(r){for(var t=0;0!=r;)t+=1,r>>>=1;return t};return f.getBCHTypeInfo=function(r){for(var t=r<<10;c(t)-c(n)>=0;)t^=n<=0;)t^=a<n;n+=1)e=e.multiply(r([1,i.gexp(n)],0));return e},f.getLengthInBits=function(r,t){if(t>=1&&10>t)switch(r){case e.MODE_NUMBER:return 10;case e.MODE_ALPHA_NUM:return 9;case e.MODE_8BIT_BYTE:return 8;case e.MODE_KANJI:return 8;default:throw new Error("mode:"+r)}else if(27>t)switch(r){case e.MODE_NUMBER:return 12;case e.MODE_ALPHA_NUM:return 11;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 10;default:throw new Error("mode:"+r)}else{if(!(41>t))throw new Error("type:"+t);switch(r){case e.MODE_NUMBER:return 14;case e.MODE_ALPHA_NUM:return 13;case e.MODE_8BIT_BYTE:return 16;case e.MODE_KANJI:return 12;default:throw new Error("mode:"+r)}}},f.getLostPoint=function(r){for(var t=r.getModuleCount(),e=0,n=0;t>n;n+=1)for(var o=0;t>o;o+=1){for(var a=0,i=r.isDark(n,o),u=-1;1>=u;u+=1)if(!(0>n+u||n+u>=t))for(var f=-1;1>=f;f+=1)0>o+f||o+f>=t||(0!=u||0!=f)&&i==r.isDark(n+u,o+f)&&(a+=1);a>5&&(e+=3+a-5)}for(var n=0;t-1>n;n+=1)for(var o=0;t-1>o;o+=1){var c=0;r.isDark(n,o)&&(c+=1),r.isDark(n+1,o)&&(c+=1),r.isDark(n,o+1)&&(c+=1),r.isDark(n+1,o+1)&&(c+=1),(0==c||4==c)&&(e+=3)}for(var n=0;t>n;n+=1)for(var o=0;t-6>o;o+=1)r.isDark(n,o)&&!r.isDark(n,o+1)&&r.isDark(n,o+2)&&r.isDark(n,o+3)&&r.isDark(n,o+4)&&!r.isDark(n,o+5)&&r.isDark(n,o+6)&&(e+=40);for(var o=0;t>o;o+=1)for(var n=0;t-6>n;n+=1)r.isDark(n,o)&&!r.isDark(n+1,o)&&r.isDark(n+2,o)&&r.isDark(n+3,o)&&r.isDark(n+4,o)&&!r.isDark(n+5,o)&&r.isDark(n+6,o)&&(e+=40);for(var l=0,o=0;t>o;o+=1)for(var n=0;t>n;n+=1)r.isDark(n,o)&&(l+=1);var g=Math.abs(100*l/t/t-50)/5;return e+=10*g},f}(),i=function(){for(var r=new Array(256),t=new Array(256),e=0;8>e;e+=1)r[e]=1<e;e+=1)r[e]=r[e-4]^r[e-5]^r[e-6]^r[e-8];for(var e=0;255>e;e+=1)t[r[e]]=e;var n={};return n.glog=function(r){if(1>r)throw new Error("glog("+r+")");return t[r]},n.gexp=function(t){for(;0>t;)t+=255;for(;t>=256;)t-=255;return r[t]},n}(),u=function(){var r=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12,7,37,13],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,43,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,3,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,55,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,45,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]],t=function(r,t){var e={};return e.totalCount=r,e.dataCount=t,e},e={},o=function(t,e){switch(e){case n.L:return r[4*(t-1)+0];case n.M:return r[4*(t-1)+1];case n.Q:return r[4*(t-1)+2];case n.H:return r[4*(t-1)+3];default:return}};return e.getRSBlocks=function(r,e){var n=o(r,e);if("undefined"==typeof n)throw new Error("bad rs block @ typeNumber:"+r+"/errorCorrectLevel:"+e);for(var a=n.length/3,i=new Array,u=0;a>u;u+=1)for(var f=n[3*u+0],c=n[3*u+1],l=n[3*u+2],g=0;f>g;g+=1)i.push(t(c,l));return i},e}(),f=function(){var r=new Array,t=0,e={};return e.getBuffer=function(){return r},e.getAt=function(t){var e=Math.floor(t/8);return 1==(r[e]>>>7-t%8&1)},e.put=function(r,t){for(var n=0;t>n;n+=1)e.putBit(1==(r>>>t-n-1&1))},e.getLengthInBits=function(){return t},e.putBit=function(e){var n=Math.floor(t/8);r.length<=n&&r.push(0),e&&(r[n]|=128>>>t%8),t+=1},e},c=function(r){var n=e.MODE_8BIT_BYTE,o=t.stringToBytes(r),a={};return a.getMode=function(){return n},a.getLength=function(r){return o.length},a.write=function(r){for(var t=0;t>>8)},t.writeBytes=function(r,e,n){e=e||0,n=n||r.length;for(var o=0;n>o;o+=1)t.writeByte(r[o+e])},t.writeString=function(r){for(var e=0;e0&&(t+=","),t+=r[e];return t+="]"},t},g=function(){var r=0,t=0,e=0,n="",o={},a=function(r){n+=String.fromCharCode(i(63&r))},i=function(r){if(0>r);else{if(26>r)return 65+r;if(52>r)return 97+(r-26);if(62>r)return 48+(r-52);if(62==r)return 43;if(63==r)return 47}throw new Error("n:"+r)};return o.writeByte=function(n){for(r=r<<8|255&n,t+=8,e+=1;t>=6;)a(r>>>t-6),t-=6},o.flush=function(){if(t>0&&(a(r<<6-t),r=0,t=0),e%3!=0)for(var o=3-e%3,i=0;o>i;i+=1)n+="="},o.toString=function(){return n},o},s=function(r){var t=r,e=0,n=0,o=0,a={};a.read=function(){for(;8>o;){if(e>=t.length){if(0==o)return-1;throw new Error("unexpected end of file./"+o)}var r=t.charAt(e);if(e+=1,"="==r)return o=0,-1;r.match(/^\s$/)||(n=n<<6|i(r.charCodeAt(0)),o+=6)}var a=n>>>o-8&255;return o-=8,a};var i=function(r){if(r>=65&&90>=r)return r-65;if(r>=97&&122>=r)return r-97+26;if(r>=48&&57>=r)return r-48+52;if(43==r)return 62;if(47==r)return 63;throw new Error("c:"+r)};return a},v=function(r,t){var e=r,n=t,o=new Array(r*t),a={};a.setPixel=function(r,t,n){o[t*e+r]=n},a.write=function(r){r.writeString("GIF87a"),r.writeShort(e),r.writeShort(n),r.writeByte(128),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(0),r.writeByte(255),r.writeByte(255),r.writeByte(255),r.writeString(","),r.writeShort(0),r.writeShort(0),r.writeShort(e),r.writeShort(n),r.writeByte(0);var t=2,o=u(t);r.writeByte(t);for(var a=0;o.length-a>255;)r.writeByte(255),r.writeBytes(o,a,255),a+=255;r.writeByte(o.length-a),r.writeBytes(o,a,o.length-a),r.writeByte(0),r.writeString(";")};var i=function(r){var t=r,e=0,n=0,o={};return o.write=function(r,o){if(r>>>o!=0)throw new Error("length over");for(;e+o>=8;)t.writeByte(255&(r<>>=8-e,n=0,e=0;n=r<0&&t.writeByte(n)},o},u=function(r){for(var t=1<u;u+=1)a.add(String.fromCharCode(u));a.add(String.fromCharCode(t)),a.add(String.fromCharCode(e));var c=l(),g=i(c);g.write(t,n);var s=0,v=String.fromCharCode(o[s]);for(s+=1;sa;a+=1)for(var i=0;r>i;i+=1)o.setPixel(i,a,e(i,a));var u=l();o.write(u);for(var f=g(),c=u.toByteArray(),s=0;sn?t.push(n):2048>n?t.push(192|n>>6,128|63&n):55296>n||n>=57344?t.push(224|n>>12,128|n>>6&63,128|63&n):(e++,n=65536+((1023&n)<<10|1023&r.charCodeAt(e)),t.push(240|n>>18,128|n>>12&63,128|n>>6&63,128|63&n))}return t}return t(r)}}(r),r}()); \ No newline at end of file diff --git a/assets/js/qcloud_util.js b/assets/js/qcloud_util.js new file mode 100644 index 0000000..75c5a41 --- /dev/null +++ b/assets/js/qcloud_util.js @@ -0,0 +1,197 @@ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
    a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
    "+""+"
    ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
    t
    ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
    ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

    ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
    ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
    ","
    "],thead:[1,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],col:[2,"","
    "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
    ","
    "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test&&$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof(r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
    ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); +(function($,document,undefined){var pluses=/\+/g;function raw(s){return s;} +function decoded(s){return decodeURIComponent(s.replace(pluses,' '));} +var config=$.cookie=function(key,value,options){if(value!==undefined){options=$.extend({},config.defaults,options);if(value===null){options.expires=-1;} +if(typeof options.expires==='number'){var days=options.expires,t=options.expires=new Date();t.setDate(t.getDate()+days);} +value=config.json?JSON.stringify(value):String(value);return(document.cookie=[encodeURIComponent(key),'=',config.raw?value:encodeURIComponent(value),options.expires?'; expires='+options.expires.toUTCString():'',options.path?'; path='+options.path:'',options.domain?'; domain='+options.domain:'',options.secure?'; secure':''].join(''));} +var decode=config.raw?raw:decoded;var cookies=document.cookie.split('; ');for(var i=0,l=cookies.length;i)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');");return data?fn(data):fn;};$.tmpl2=function(str,param){if(!str){return'';} +if(!/\W/.test(str)){return arguments.callee.call(this,document.getElementById(str).innerHTML.replace(/[\r\t\n]/g," "),param);} +param=param||{};var fn=['var __=[];'];var re=/([\s\S]*?)(?:(?:<%([^=][\s\S]*?)%>)|(?:<%=([\s\S]+?)%>)|$)/gm;re.lastIndex=0;var m=re.exec(str||'');while(m&&(m[1]||m[2]||m[3])){m[1]&&fn.push('__.push(\'',m[1],'\');');m[2]&&fn.push(m[2]);m[3]&&fn.push('__.push(qcloud.util.htmlEncode(',m[3],'));');m=re.exec(str);} +fn.push('return __.join(\'\');');var args=[],argv=[];for(var key in param){args.push(key);argv.push(param[key]);} +fn=new Function(args.join(','),fn.join(''));return fn.apply(null,argv);};})(jQuery);jQuery.fn.floatdiv=function(obj){obj.location=obj.location||"middle";obj.isShowCover=obj.isShowCover||false;obj.confirm_callback=obj.confirm_callback||function(){};obj.close_callback=obj.close_callback||function(){};obj.timeToLive=obj.timeToLive||0;obj.isClickClose=obj.isClickClose||false;var isIE6=false;var timeoutId;if($.browser.msie&&$.browser.version=="6.0"){$("html").css("overflow-x","auto").css("overflow-y","hidden");isIE6=true;};var $xBtns=null,$okBtns=null,$closeBtns=null;function getBrowserHeight(){if($.browser.msie){return document.compatMode=="CSS1Compat"?document.documentElement.clientHeight:document.body.clientHeight;}else{return self.innerHeight;}} +function getBrowserWidth(){if($.browser.msie){return document.compatMode=="CSS1Compat"?document.documentElement.clientWidth:document.body.clientWidth;}else{return self.innerWidth;}} +return this.each(function(){var loc;if(obj.location==undefined||obj.location.constructor==String){switch(obj.location){case("rightbottom"):loc={right:"0px",bottom:"0px"};break;case("leftbottom"):loc={left:"0px",bottom:"0px"};break;case("lefttop"):loc={left:"0px",top:"0px"};break;case("righttop"):loc={right:"0px",top:"0px"};break;case("middle"):var l=0;var t=0;var windowWidth,windowHeight;windowWidth=getBrowserWidth();windowHeight=getBrowserHeight();l=Math.floor(windowWidth/2-$(this).width()/2+$(document).scrollLeft());t=Math.floor(windowHeight/2-$(this).height()/2+$(document).scrollTop());loc={left:l+"px",top:t+"px"};break;default:loc={right:"0px",bottom:"0px"};break;}}else{if(obj.location.centerTop){var l=0;var windowWidth;windowWidth=getBrowserWidth();l=Math.floor(windowWidth/2-$(this).width()/2+$(document).scrollLeft());loc={left:l+"px",top:obj.location.centerTop+"px"};} +else{loc=obj.location;}} +$(this).css("z-index",obj.zIndex||"8999").css(loc).css("position","fixed");if(isIE6){if(loc.right!=undefined){if($(this).css("right")==null||$(this).css("right")==""){$(this).css("right","18px");}} +$(this).css("position","absolute");} +var _this=this;var oldWith=$(_this).width(),oldHeight=$(_this).height();$xBtns=$(this).find(".ico_x,.qz_dialog_btn_close,.close").unbind().bind("click",function(event){event.preventDefault();$(_this).fadeOut("fast");$(this).unbind("click");$closeBtns.unbind("click");$okBtns.unbind("click");$("#mask_div").length>0&&$("#mask_div").remove();(obj.close_callback)();return false;});$closeBtns=$(this).find(".btn_gray2,.bt_tip_normal.bt_tip,.btn_close,.close").unbind().bind("click",function(event){event.preventDefault();$(_this).slideUp("fast");$(this).unbind("click");$xBtns.unbind("click");$okBtns.unbind("click");$("#mask_div").length>0&&$("#mask_div").remove();(obj.close_callback)();return false;}) +$okBtns=$(this).find(".btn_blue,.bt_tip_hit.bt_tip,.btn_submit").unbind().bind("click",function(event){event.preventDefault();var isHold=(obj.confirm_callback)(this);if($(this).hasClass("not_close")){return false;} +if(!isHold){$(_this).slideUp("fast");$("#mask_div").length>0&&$("#mask_div").remove();} +return false;});if(obj.isShowCover){$("#mask_div").length>0&&$("#mask_div").remove();$("body").append("
    ");$("body").find("#mask_div").width($(window).width()).height(($(window).height()>$(document).height()?$(window).height():$(document).height())).css({position:"fixed",_position:"absolute",top:"0px",left:"0px",display:"block",background:"#000",filter:"alpha(opacity=50)",opacity:"0.6",zIndex:999});} +if(obj.isClickClose){$("#mask_div").bind("click",function(evt){var $msgbox=$("#qcloud_tips");$msgbox.length>0&&$msgbox.closeFloatDiv();timeoutId&&clearTimeout(timeoutId);evt.stopPropagation();});} +$(_this).find("div.hd").draggit($(_this));if(obj.timeToLive>0){timeoutId=setTimeout(function(){$(_this).fadeOut("slow");$("#mask_div").length>0&&$("#mask_div").remove();},obj.timeToLive);} +var resizeFun=function(){var l=0,t=0,windowWidth=getBrowserWidth(),windowHeight=getBrowserHeight();l=Math.floor(windowWidth/2-oldWith/2+$(document).scrollLeft());t=Math.floor(windowHeight/2-oldHeight/2+$(document).scrollTop());loc={left:l+"px",top:t+"px"};$(_this).css(loc);$("#mask_div").length>0&&$("#mask_div").width($(window).width()).height(($(window).height()>$(document).height()?$(window).height():$(document).height())).css({opacity:"0.6",top:"0px",left:"0px",position:"absolute",zIndex:999});};var resizer1,resizer2;$(window).resize(function(){if(obj.location=="middle"){clearTimeout(resizer1);resizer1=setTimeout(resizeFun,10);}});$(window).scroll(function(){if(obj.location=="middle"){clearTimeout(resizer2);resizer2=setTimeout(resizeFun,10);}});});};jQuery.fn.closeFloatDiv=function(){$(this).each(function(index,el){$(el).fadeOut("slow");$(el).find(".ico_x").unbind("click");$(el).find(".btn_normal").unbind("click");$(el).find(".btn_blue").unbind("click");$("#mask_div").length>0&&$("#mask_div").remove();});return this;};jQuery.fn.draggit=function(el,callbackObj){var thisdiv=this,thistarget=$(el?el:this),relX,relY,targetw=thistarget.width(),targeth=thistarget.height(),docw,doch,originPos,captureEl,ismousedown=false;thistarget.css('position','absolute');thisdiv.bind('mousedown',function(e){var pos=originPos=$(el).offset();var srcX=pos.left;var srcY=pos.top;captureEl=this;docw=$('body').width();doch=Math.max($(window).height(),$('body').height());relX=e.pageX-srcX;relY=e.pageY-srcY;if(document.body.setCapture){document.body.setCapture();}else if(window.captureEvents){window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);} +ismousedown=true;e.preventDefault();if("function"==typeof callbackObj.start){callbackObj.start(captureEl);}});$(document).bind('mousemove',function(e){if(ismousedown){targetw=thistarget.width();targeth=thistarget.height();var maxX=docw-targetw-10,maxY=doch-targeth-10,mouseX=e.pageX,mouseY=e.pageY,diffX=mouseX-relX,diffY=mouseY-relY;if("function"==typeof callbackObj.drag){callbackObj.drag(captureEl,diffX-originPos.left,diffY-originPos.top);} +if(diffX<0)diffX=0;if(diffY<0)diffY=0;if(diffX>maxX)diffX=maxX;if(diffY>maxY)diffY=maxY;$(el).css('top',(diffY)+'px');$(el).css('left',(diffX)+'px');}});$(document).bind('mouseup',function(e){if(!ismousedown||!captureEl){return;} +if(document.body.releaseCapture){document.body.releaseCapture();}else if(window.captureEvents){window.captureEvents(Event.MOUSEMOVE|Event.MOUSEUP);} +ismousedown=false;if("function"==typeof callbackObj.stop){callbackObj.stop(captureEl);}});return this;};(function($){$.getACSRFToken=function(){var skey=$.cookie("skey"),hash=5381;if(!skey){return;} +for(var i=0,len=skey.length;i1){if(parseInt(m[1],10)!=parseInt(cur_uin,10)){qcloud.util.showTips({type:"info",text:"您的登录态发生变化,3秒后跳转到首页"});setTimeout(function(){window.location.replace(MAIN_DOMAIN);},3000);return;}}} +if(!opt.url){return;} +return $.ajax({url:opt.url,dataType:'json',data:opt.data,cache:false,success:function(ret){if(ret&&ret.retcode==0){if(opt.url){TCISD.valueStat4({cgi:opt.reportCgi||opt.url,type:1,time:(new Date()-st),code:0});} +opt.sucCb(ret);}else{if(opt.url){TCISD.valueStat4({cgi:opt.reportCgi||opt.url,type:2,time:(new Date()-st),code:ret.retcode});} +var needRelocation=0,toLocation="",loc="",dm="";if(ret.retcode==7&&!opt.noJump){needRelocation=1;dm=MAIN_DOMAIN||"";loc="首页";}else if(ret.retcode==8){needRelocation=1;toLocation="/welcome.php";dm=MANAGE_DOMAIN||"";loc="注册页";}else if(ret.retcode==9){needRelocation=1;toLocation="/index.php";dm=MANAGE_DOMAIN||"";loc="资源完善页"} +if(needRelocation==1){qcloud.util.showTips({type:"info",text:ret.errmsg+",5秒后跳转到"+loc});setTimeout(function(){window.location.replace(dm+toLocation);},5000);}else{opt.errCb(ret);}}},error:function(code){if(opt.url){TCISD.valueStat4({cgi:opt.reportCgi||opt.url,type:3,time:(new Date()-st),code:500});}},complete:function(){opt.complete&&opt.complete();}});};$.jsonPost=function(opt){var st=new Date(),opt=opt||{};opt.url=opt.url||"";opt.data=$.extend({mc_gtk:$.getACSRFToken()||"",is_iniframe:$.isInIframe||"0"},opt.data||{});opt.sucCb=opt.sucCb||function(){};opt.errCb=opt.errCb||function(){};var cur=cur_uin||"",uin=$.cookie("uin");if(!!cur&&!!uin){var m=/^o([0-9]*)/.exec(uin);if(m.length>1){if(parseInt(m[1],10)!=parseInt(cur_uin,10)){qcloud.util.showTips({type:"info",text:"您的登录态发生变化,3秒后跳转到首页"});setTimeout(function(){window.location.replace("http://"+window.location.host);},3000);return;}}} +if(!opt.url){return;} +$.ajax({url:opt.url,dataType:'json',type:"post",data:opt.data,cache:false,success:function(ret){if(!ret){opt.errCb(ret);} +else{if(ret.retcode==0){if(opt.url){TCISD.valueStat4({cgi:opt.reportCgi||opt.url,type:1,time:(new Date()-st),code:0});} +opt.sucCb(ret);}else{if(opt.url){TCISD.valueStat4({cgi:opt.reportCgi||opt.url,type:2,time:(new Date()-st),code:ret.retcode});} +var needRelocation=0,toLocation="",loc="",dm="";if(ret.retcode==7){needRelocation=1;dm=MAIN_DOMAIN||"";loc="首页";}else if(ret.retcode==8){needRelocation=1;toLocation="/welcome.php";dm=MANAGE_DOMAIN||"";loc="注册页";}else if(ret.retcode==9){needRelocation=1;toLocation="/index.php";dm=MANAGE_DOMAIN||"";loc="资源完善页"} +if(needRelocation==1){qcloud.util.showTips({type:"info",text:ret.errmsg+",5秒后跳转到"+loc});setTimeout(function(){window.location.replace(dm+toLocation);},5000);}else{opt.errCb(ret);}}}},error:function(code){if(opt.url){TCISD.valueStat4({cgi:opt.reportCgi||opt.url,type:3,time:(new Date()-st),code:500});}}});};})(jQuery);!(function($){$.fn.pagination=function(maxentries,opts){opts=jQuery.extend({items_per_page:10,num_display_entries:10,current_page:0,num_edge_entries:0,link_to:"javascript:void(0)",prev_text:"Prev",next_text:"Next",ellipse_text:"...",prev_show_always:true,next_show_always:true,callback:function(){return false;}},opts||{});return this.each(function(){function numPages(){return Math.ceil(maxentries/opts.items_per_page);} +function getInterval(){var ne_half=Math.ceil(opts.num_display_entries/2);var np=numPages();var upper_limit=np-opts.num_display_entries;var start=current_page>ne_half?Math.max(Math.min(current_page-ne_half,upper_limit),0):0;var end=current_page>ne_half?Math.min(current_page+ne_half,np):Math.min(opts.num_display_entries,np);return[start,end];} +function pageSelected(page_id,evt){current_page=page_id;drawLinks();var continuePropagation=opts.callback(page_id,panel);if(!continuePropagation){if(evt.stopPropagation){evt.stopPropagation();} +else{evt.cancelBubble=true;}} +return continuePropagation;} +function drawLinks(){var list=panel.empty();var interval=getInterval();var np=numPages();var getClickHandler=function(page_id){return function(evt){return pageSelected(page_id,evt);}} +var appendItem=function(page_id,appendopts){var lstItem="";page_id=page_id<0?0:(page_id'+appendopts.text+'').attr('href',opts.link_to.replace(/__id__/,page_id)).unbind().bind("click",getClickHandler(page_id));}else{lstItem=jQuery(''+appendopts.text+'').attr('href',opts.link_to.replace(/__id__/,page_id)).unbind().bind("click",getClickHandler(page_id));}}else if(page_id==current_page){var clazz=' current';lstItem=jQuery(""+(appendopts.text)+"")} +else{lstItem=jQuery(""+(appendopts.text)+"").attr('href',opts.link_to.replace(/__id__/,page_id)).unbind().bind("click",getClickHandler(page_id));} +if(appendopts.classes){lstItem.addClass(appendopts.classes);} +list.append(lstItem);} +if(opts.prev_text&&(current_page>0||opts.prev_show_always)){appendItem(current_page-1,{text:opts.prev_text,side:true});} +if(interval[0]>0&&opts.num_edge_entries>0){var end=Math.min(opts.num_edge_entries,interval[0]);for(var i=0;i"+opts.ellipse_text+"").appendTo(list);}} +for(var i=interval[0];i0){if(np-opts.num_edge_entries>interval[1]&&opts.ellipse_text){jQuery(""+opts.ellipse_text+"").appendTo(list);} +var begin=Math.max(np-opts.num_edge_entries,interval[1]);for(var i=begin;i0){pageSelected(current_page-1);return true;} +else{return false;}} +this.nextPage=function(){if(current_page0){noDelay?pvSender.doSend():(timer=setTimeout(pvSender.doSend,5000));}}},getUrl:function(list){var item=list[0];var data={dm:escape(item.dm),url:escape(item.url),rdm:escape(item.rdm),rurl:escape(item.rurl),pgv_pvid:pvSender.getId(),sds:Math.random()};var ext=[];for(var i=1;i1){d=t[1];}else{d=(Math.round(Math.random()*2147483647)*(new Date().getUTCMilliseconds()))%10000000000;document.cookie="pgv_pvid="+d+"; path=/; domain=qq.com; expires=Sun, 18 Jan 2038 00:00:00 GMT;";} +h=document.cookie.match(TCISD.pv._cookieSSID);if(!h){f=(Math.round(Math.random()*2147483647)*(new Date().getUTCMilliseconds()))%10000000000;document.cookie="pgv_info=ssid=s"+f+"; path=/; domain=qq.com;";} +return d;}};TCISD.pv.send=function(sDomain,path,opts){sDomain=sDomain||location.hostname||"-";path=path||location.pathname;opts=opts||{};opts.referURL=opts.referURL||document.referrer;var t,d,r;t=opts.referURL.split(TCISD.pv._urlSpliter);t=t[0];t=t.split("/");d=t[2]||"-";r="/"+t.slice(3).join("/");opts.referDomain=opts.referDomain||d;opts.referPath=opts.referPath||r;pvSender.send(sDomain,path,opts.referDomain,opts.referPath);};})();TCISD.pv._urlSpliter=/[\?\#]/;TCISD.pv._cookieP=/(?:^|;+|\s+)pgv_pvid=([^;]*)/i;TCISD.pv._cookieSSID=/(?:^|;+|\s+)pgv_info=([^;]*)/i;TCISD.pv.config={webServerInterfaceURL:window.location.protocol=='https:'?'https://h5s.qzone.qq.com/proxy/domain/pingfore.qq.com/pingd':'http://pingfore.qq.com/pingd'};window.TCISD=window.TCISD||{};TCISD.createTimeStat=function(statName,flagArr,standardData){var _s=TCISD.TimeStat,t,instance;flagArr=flagArr||_s.config.defaultFlagArray;t=flagArr.join("_");statName=statName||t;if(instance=_s._instances[statName]){return instance;}else{return(new _s(statName,t,standardData));}};TCISD.markTime=function(timeStampSeq,statName,flagArr,timeObj){var ins=TCISD.createTimeStat(statName,flagArr);ins.mark(timeStampSeq,timeObj);return ins;};TCISD.TimeStat=function(statName,flags,standardData){var _s=TCISD.TimeStat;this.sName=statName;this.flagStr=flags;this.timeStamps=[null];this.zero=_s.config.zero;if(standardData){this.standard=standardData;} +_s._instances[statName]=this;_s._count++;};TCISD.TimeStat.prototype.getData=function(seq){var r={},t,d;if(seq&&(t=this.timeStamps[seq])){d=new Date();d.setTime(this.zero.getTime());r.zero=d;d=new Date();d.setTime(t.getTime());r.time=d;r.duration=t-this.zero;if(this.standard&&(d=this.standard.timeStamps[seq])){r.delayRate=(r.duration-d)/d;}}else{r.timeStamps=TCISD.TimeStat._cloneData(this.timeStamps);} +return r;};TCISD.TimeStat._cloneData=function(obj){if((typeof obj)=='object'){var res=obj.sort?[]:{};for(var i in obj){res[i]=TCISD.TimeStat._cloneData(obj[i]);} +return res;}else if((typeof obj)=='function'){return Object;} +return obj;};TCISD.TimeStat.prototype.mark=function(seq,timeObj){seq=seq||this.timeStamps.length;this.timeStamps[Math.min(Math.abs(seq),99)]=timeObj||(new Date());return this;};TCISD.TimeStat.prototype.merge=function(baseTimeStat){var x,y;if(baseTimeStat&&(typeof(baseTimeStat.timeStamps)=="object")&&baseTimeStat.timeStamps.length){this.timeStamps=baseTimeStat.timeStamps.concat(this.timeStamps.slice(1));}else{return this;} +if(baseTimeStat.standard&&(x=baseTimeStat.standard.timeStamps)){if(!this.standard){this.standard={};} +if(!(y=this.standard.timeStamps)){y=this.standard.timeStamps={};} +for(var key in x){if(!y[key]){y[key]=x[key];}}} +return this;};TCISD.TimeStat.prototype.setZero=function(od){if(typeof(od)!="object"||typeof(od.getTime)!="function"){od=new Date();} +this.zero=od;return this;};TCISD.TimeStat.prototype.report=function(baseURL){var _s=TCISD.TimeStat,url=[],t,z;if((t=this.timeStamps).length<1){return this;} +url.push((baseURL&&baseURL.split("?")[0])||_s.config.webServerInterfaceURL);url.push("?");z=this.zero;for(var i=1,len=t.length;i1&&(Math.random()*opts.reportRate)>1)){return;} +url.push((opts.reportURL||_c.webServerInterfaceURL),"?");url.push("flag1=",statId,"&","flag2=",resultType,"&","flag3=",returnValue,"&","1=",(TCISD.valueStat.config.reportAll?1:opts.reportRate),"&","2=",opts.duration,"&");if(typeof opts.extendField!='undefined'){url.push("4=",opts.extendField,"&");} +if(_s.pluginList&&_s.pluginList.length){for(var i=0,len=_s.pluginList.length;i-1){t=tag.split("|");tag=t[0];domain=t[1];} +if(tag){return{tag:tag,domain:domain};} +return null;};TCISD.hotClick.config=TCISD.hotClick.config||{webServerInterfaceURL:window.location.protocol=='https:'?'https://h5s.qzone.qq.com/proxy/domain/pinghot.qq.com/pingd':'http://pinghot.qq.com/pingd',reportRate:1,domain:null,url:null};TCISD.hotClick._reportRate=typeof TCISD.hotClick._reportRate=='undefined'?-1:TCISD.hotClick._reportRate;TCISD.hotClick.isReport=function(){var _s=TCISD.hotClick,rate;if(_s._reportRate!=-1){return _s._reportRate;} +rate=Math.round(_s.config.reportRate);if(rate>1&&(Math.random()*rate)>1){return(_s._reportRate=0);} +return(_s._reportRate=1);};TCISD.hotClick.setConfig=function(opt){opt=opt||{};var _sc=TCISD.hotClick.config,doc=opt.doc||document,w=doc.parentWindow||doc.defaultView;if(opt.domain){w._hotClick_params.domain=opt.domain;} +if(opt.url){w._hotClick_params.url=opt.url;} +if(opt.reportRate){w._hotClick_params.reportRate=opt.reportRate;}};TCISD.hotAddRule=function(handler,opt){opt=opt||{};var _s=TCISD.hotClick,doc=opt.doc||document,w=doc.parentWindow||doc.defaultView;if(!w._hotClick_params){return;} +w._hotClick_params.rules.push(handler);return w._hotClick_params.rules;};TCISD.hotClickWatch=function(opt){opt=opt||{};var _s=TCISD.hotClick,w,l,doc;doc=opt.doc=opt.doc||document;w=doc.parentWindow||doc.defaultView;if(l=doc._hotClick_init){return;} +l=true;if(!w._hotClick_params){w._hotClick_params={};w._hotClick_params.rules=[_s.defaultRule];} +_s.setConfig(opt);w.QZFL.event.addEvent(doc,"click",_s.click,[doc]);};if(typeof(window.TCISD)=='undefined'){window.TCISD={};} +TCISD.stringStat=function(dataId,hashValue,opts){setTimeout(function(){TCISD.stringStat.send(dataId,hashValue,opts);},0);};TCISD.stringStat.send=function(dataId,hashValue,opts){var _s=TCISD.stringStat,_c=_s.config,t=_c.defaultParams,url=[],isPost=false,htmlParam,sd;dataId=dataId||t.dataId;opts=opts||t;isPost=(opts.method&&opts.method=='post')?true:false;if(typeof(hashValue)!="object"){return;} +for(var i in hashValue){if(hashValue[i].length&&hashValue[i].length>1024){hashValue[i]=hashValue[i].substring(0,1024);}} +if(typeof(opts.reportRate)!='number'){opts.reportRate=1;} +opts.reportRate=Math.round(Math.max(opts.reportRate,1));if(opts.reportRate>1&&(Math.random()*opts.reportRate)>1){return;} +if(isPost&&QZFL.FormSender){hashValue.dataId=dataId;hashValue.sds=Math.random();var sd=new QZFL.FormSender(_c.webServerInterfaceURL,'post',hashValue,'UTF-8');sd.send();}else{htmlParam=TCISD.stringStat.genHttpParamString(hashValue);url.push(_c.webServerInterfaceURL,'?');url.push('dataId=',dataId);url.push('&',htmlParam,'&');url.push('ted=',Math.random());QZFL.pingSender(url.join(''));}};TCISD.stringStat.config={webServerInterfaceURL:'http://s.isdspeed.qq.com/cgi-bin/s.fcg',defaultParams:{dataId:1,reportRate:1,method:'get'}};TCISD.stringStat.genHttpParamString=function(o){var res=[];for(var k in o){res.push(k+'='+window.encodeURIComponent(o[k]));} +return res.join('&');};TCISD.performanceTimeStat=function(flags,delay){setTimeout(function(){var performance=window.performance||window.webkitPerformance||window.msPerformance;if(!performance||!window.TCISD){return;} +var list=[performance.timing.navigationStart,performance.timing.unloadEventStart,performance.timing.unloadEventEnd,performance.timing.redirectStart,performance.timing.redirectEnd,performance.timing.fetchStart,performance.timing.domainLookupStart,performance.timing.domainLookupEnd,performance.timing.connectStart,performance.timing.connectEnd,performance.timing.requestStart,performance.timing.responseStart,performance.timing.responseEnd,performance.timing.domLoading,performance.timing.domInteractive,performance.timing.domContentLoadedEventStart,performance.timing.domContentLoadedEventEnd,performance.timing.domComplete,performance.timing.loadEventStart,performance.timing.loadEventEnd];var o=new TCISD.TimeStat(null,flags.join('_')),length=list.length;o.zero=new Date(list[0]);for(var i=1;i-1)?"chrome":!!($.browser.mozilla)?"firefox":"";if(!!window.JS_ONLINE_FLAG&&pathname&&!!bType&&qcloud_oz_stat_page_list.hasOwnProperty(host)){if(qcloud_oz_stat_page_list[host].hasOwnProperty(pathname)){setTimeout(function(){TCISD.performanceTimeStat(qcloud_oz_stat_page_list[host][pathname][bType]);},10);}}});window.qcloud=window.qcloud||{};window.qcloud.util=window.qcloud.util||{};var tmpDiv=document.createElement("div");qcloud.util.htmlEncode=function(str){(tmpDiv.textContent!=null)?(tmpDiv.textContent=str):(tmpDiv.innerText=str);var output=tmpDiv.innerHTML;return output;} +qcloud.util.timeStat=function(flag1,flag2,flag3,timeStamps,delay){if(!!window.JS_ONLINE_FLAG){setTimeout(function(){var o=new TCISD.TimeStat(null,[flag1,flag2,flag3].join('_'));o.zero=timeStamps[0];o.timeStamps=timeStamps;o.report();},delay||0);}};qcloud.util.getUrlParam=function(name){var reg=new RegExp("(^|&)"+name+"=([^&]*)(&|$)"),r=window.location.search.substr(1).match(reg);if(r!=null){return $("
    ").text(decodeURIComponent(r[2])).html();} +return null;};qcloud.util.jsFormSender=function(path,params,method,target){var method=method||"post";var target=target||"_self";var form=document.createElement("form");form.setAttribute("method",method);form.setAttribute("action",path);form.setAttribute("target",target);form.style.display="none";for(var key in params){if(params.hasOwnProperty(key)){if(Object.prototype.toString.apply(params[key])!=='[object Array]'){var hiddenField=document.createElement("input");hiddenField.setAttribute("type","hidden");hiddenField.setAttribute("name",key);hiddenField.setAttribute("value",params[key]);form.appendChild(hiddenField);}else{for(var index in params[key]){var hiddenField=document.createElement("input");hiddenField.setAttribute("type","hidden");hiddenField.setAttribute("name",key);hiddenField.setAttribute("value",params[key][index]);form.appendChild(hiddenField);}}}} +document.body.appendChild(form);form.submit();setTimeout(function(){document.body.removeChild(form);},2000);};qcloud.util.showLoginBox=function(opt){var opt=opt||{},opt=$.extend({s_url:encodeURIComponent(opt.s_url||window.location.href),s_uin:opt.uin||'',enable_qlogin:opt.enable_qlogin||'0'},opt) +var loginBoxStr=[''].join("");$("#qcloud_loginbox_pop").length>0&&$("#qcloud_loginbox_pop").remove();$("body").append($.tmpl(loginBoxStr,opt));return $("#qcloud_loginbox_pop").floatdiv({isShowCover:true}).show();};function ptlogin2_onResize(width,height){$("#qcloud_loginbox_pop").height(height);$("#loginframe").height(height);$("#qcloud_loginbox_pop").floatdiv({isShowCover:true});} +function ptlogin2_onClose(){$("#qcloud_loginbox_pop").fadeOut(function(){$("#mask_div").hide();$("#mask_div").remove();$("#qcloud_loginbox_pop").remove();});} +qcloud.util.checkLoginStatus=function(opt){var opt=opt||{};$.jsonGetter({url:"http://passport.qcloud.com/index/isLogin?callback=?",data:{},sucCb:function(ret){opt.loginedCall&&opt.loginedCall(ret.data.uin);},errCb:function(ret){opt.unloginCall&&opt.unloginCall();}});};qcloud.util._infoTmpl=[''].join("");qcloud.util.showMsgBox=function(opt){var _that=this,opt=opt||{};opt=$.extend({type:"info",title:"",text:""},opt);$("#pop_info").length>0&&$("#pop_info").remove();$("body").append($.tmpl(_that._infoTmpl,opt));return $("#pop_info").floatdiv($.extend({isShowCover:true},opt)).show();};qcloud.util.showTips=function(option){var option=option||{};option=$.extend({text:"成功",type:"succeed",location:"middle",isShowCover:true,timeToLive:2000,isClickClose:true},option);var htmlStrs=[];htmlStrs.push('');$("#qcloud_tips").length>0&&$("#qcloud_tips").remove();$("body").append(htmlStrs.join(''));return $("#qcloud_tips").floatdiv(option).css("display","block");};qcloud.util.removeTips=function(){$("#qcloud_tips").remove();$("#mask_div").remove();};qcloud.util.validateCdbPwd=function(val){if(!val){return false;} +var regs=[/[a-zA-Z]+/,/[0-9]+/,/[\!\@\#\$\%\^\*\(\)]+/];var strength=0;$.each(regs,function(index,reg){if(val.match(reg)){strength++;}});var otherRegs=[/[\-\+\<\>\?\.\&\_\=\"\'\`\~\,\;\:\{\[\]\}\/\\\|]+/];var beOk=true;$.each(otherRegs,function(index,reg){if(val.match(reg)){beOk=false;}});return strength>=2&&(val.length>7&&val.length<17)&&beOk;};qcloud.util.validateEmail=function(email){return/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))$/i.test(email);};qcloud.util.validateMobile=function(mobile){return/^1[3|4|5|7|8]\d{9}$/.test(mobile);};qcloud.util.validateIDCard=function(IDCard){return/^\d{17}[\dxX]$/.test(IDCard);};qcloud.util.validatePassport=function(passport){return/^[0-9a-zA-Z]+$/i.test(passport);};qcloud.util.validateBusinessLicence=function(licence){return/^[0-9A-Za-z-]{8,20}$/.test(licence);};qcloud.util.validateName=function(name){return/^[a-zA-Z·\u4e00-\u9fa5\s+]{2,30}$/.test($.trim(name));};qcloud.util.validateCompanyName=function(name){return/^[^<>\'\"]{2,30}$/.test($.trim(name));};qcloud.util.validateOrganizationCode=function(code){return/^[\dA-Z]{8}-[\dA-Z]$/.test($.trim(code));};qcloud.util.validateCxxName=function(name){return/^[^'"<>&]{1,60}$/.test($.trim(name));};qcloud.util.validateBizName=function(name){return/^[^<>\'\"]{2,20}$/.test($.trim(name));};qcloud.util.validateUrl=function(name){var strRegex='^((https|http|ftp|rtsp|mms)?://)' ++'?(([0-9a-z_!~*\'().&=+$%-]+: )?[0-9a-z_!~*\'().&=+$%-]+@)?' ++'(([0-9]{1,3}.){3}[0-9]{1,3}' ++'|' ++'([0-9a-z_!~*\'()-]+.)*' ++'([0-9a-z][0-9a-z-]{0,61})?[0-9a-z].' ++'[a-z]{2,6})' ++'(:[0-9]{1,4})?' ++'((/?)|' ++'(/[0-9a-zA-Z_!~*\'().;?:@&=+$,%#-]+)+/?)$';var re=new RegExp(strRegex);if(re.test(name)){return(true);}else{return(false);}};qcloud.util.addManageCenterHistory=function(name,url){var key='manage_history';var key1='manage_history_'+ cur_uin;var history=qcloud.util.storage.getItem(key)||$.cookie(key1);var historyList=[],tmpList=[];if(history){historyList=$.parseJSON(history);} +historyList.push({url:(url||window.location.href).split('?')[0].split('#')[0],name:name});for(var i=historyList.length- 1;i>=0;i--){if(tmpList.length>0){var isInArray=false;for(var j in tmpList){if(historyList[i]['url']==tmpList[j]['url']){isInArray=true;break;}} +if(!isInArray){tmpList.push(historyList[i]);}}else{tmpList.push(historyList[i]);}} +historyList=[];for(var i=tmpList.length- 1;i>=0;i--){historyList.push(tmpList[i]);} +qcloud.util.storage.setItem(key,$.toJSON(historyList),{expires:365,path:'/',domain:COOKIE_DOMAIN});};qcloud.util.storage=(function(){if(!!window.localStorage){return window.localStorage;}else if(!!window.ActiveXObject){var dbName='localDB';var db=(document.documentElement||document.body);db.addBehavior("#default#userdata");db.load(dbName);return{getItem:function(k){db.load(dbName);return db.getAttribute(k);},setItem:function(k,v){try{db.load(dbName);db.setAttribute(k,v);db.save(dbName);return true}catch(err){return false}}}}else{return{getItem:function(){},setItem:function(){}}}})();$("#btn_qcloud_login").click(function(event){qcloud.util.showLoginBox({});});$("#username").mouseover(function(event){$("#logout_a").show();});$("#login_info").mouseleave(function(event){$("#logout_a").hide();});$("#customer_serv_btn.login-op").mouseover(function(event){$("#customer_serv_btn.log-service").show();var box=$("#customer_serv_btn");if(!box.attr('mailinit')){$("").attr({rel:"stylesheet",type:"text/css",href:(CSS_DOMAIN_NEW?CSS_DOMAIN_NEW:(CSS_DOMAIN+'/../proj_qcloud_v2'))+"/css/home/email.css?v=20140723"}).appendTo("head");var html=[''].join('');$(html).appendTo(document.body);$("#customer_serv_btn ._mail").click(function(){$('#service-mail').floatdiv({isShowCover:true}).show();});$('#service-mail-close, #service-mail .tc-close-btn').click(function(){$('#service-mail').closeFloatDiv().hide();});box.attr('mailinit','1')}});$("#customer_serv_btn").mouseleave(function(event){$("#customer_serv_btn .log-service").hide();});var $currLi=$(".mod_nav ul.first_nav li.current");$("a.pro_service").closest("li").mouseenter(function(event){var _t=this;$(".mod_nav ul.first_nav li.current").removeClass("current");$(_t).addClass("current");$('#navProList').css('width','143px');$(".mod_secondary_menu.pro_service").stop(true,true).slideDown();}).mouseleave(function(event){$(".mod_nav ul.first_nav li.current").removeClass("current");$currLi.addClass("current");$(".mod_secondary_menu").stop(true,true).slideUp();});$('#navProList ul.second_nav li').mouseenter(function(){$('#navProList').css('width','345px');var procls=$(this).attr('procls');$('#navProList ul.mod_third_menu li').hide();$('#navProList ul.mod_third_menu li[procls='+procls+']').show();$('#navProList div.third_area').show();});$("a.wiki").closest("li").mouseenter(function(event){var _t=this;$(".mod_nav ul.first_nav li.current").removeClass("current");$(_t).addClass("current");$('#ID_m_wiki').css('width','143px');$(".mod_secondary_menu.wiki").stop(true,true).slideDown();}).mouseleave(function(event){$(".mod_nav ul.first_nav li.current").removeClass("current");$currLi.addClass("current");$(".mod_secondary_menu").stop(true,true).slideUp();});$('#ID_m_wiki ul.second_nav li').mouseenter(function(){$('#ID_m_wiki').css('width','345px');var procls=$(this).attr('procls');$('#ID_m_wiki ul.mod_third_menu li').hide();$('#ID_m_wiki ul.mod_third_menu li[procls='+procls+']').show();$('#ID_m_wiki div.third_area').show();});if('act.qcloud.com'!=location.host){if($('#message_num').length>0){if(!window.MANAGE_DOMAIN){MANAGE_DOMAIN='http://manage.qcloud.com'} +$.ajax({type:"get",async:false,url:MANAGE_DOMAIN+"/ajax/messages/msgSmryJsonp.php",dataType:"jsonp",jsonp:"callback",data:{mc_gtk:$.getACSRFToken()},success:function(ret){if(ret&&ret.retcode==0){var msgSummary=ret.data;$('#message_num').text(msgSummary['unread']).show();}}});}} +$('[_t_nav]').hover(function(){var _nav=$(this).attr('_t_nav');clearTimeout(qcloud[_nav+'_timer']);qcloud[_nav+'_timer']=setTimeout(function(){$('[_t_nav]').each(function(){$(this)[_nav==$(this).attr('_t_nav')?'addClass':'removeClass']('nav-up-selected');});$('#'+_nav).stop(true,true).slideDown(200);},150);},function(){var _nav=$(this).attr('_t_nav');clearTimeout(qcloud[_nav+'_timer']);qcloud[_nav+'_timer']=setTimeout(function(){$('[_t_nav]').removeClass('nav-up-selected');$('#'+_nav).stop(true,true).slideUp(200);},150);});(function(){var $video=$(['
    ','
    ','','
    '].join('')).appendTo(document.body);var inited=false;var play=function(id,opts){opts=opts||{w:720,h:380,id:'video-dialog'};var video=new tvp.VideoInfo();video.setVid(id);var player=new tvp.Player(opts.w,opts.h);player.setCurVideo(video);player.addParam("autoplay","1");player.addParam("flashskin","http://imgcache.qq.com/minivideo_v1/vd/res/skins/TencentPlayerMiniSkin.swf");player.write(opts.id);if('video-dialog'==opts.id){oV.floatdiv({isShowCover:true}).show();}};$(document).on('click','[_video_id]',function(){var id=$(this).attr('_video_id'),opts=null;if('video_index'==this.id){opts={w:1200,h:320,id:'video_index'};} +if(!inited){$.ajax({url:'http://qzonestyle.gtimg.cn/tencentvideo_v1/js/tvp/tvp.player.js',dataType:'script',success:function(){inited=true;play(id,opts);}});}else{play(id,opts);}}).on('click','#close_video_btn',function(){$video.closeFloatDiv().hide();$('#video-dialog').html('');});})();$(function(){var $cartNum=$('#shop_cart_num');if($cartNum.length&&$.cookie('uin')&&$.cookie('skey')){$.jsonGetter({url:"/ajax/shoppingcart/getShoppingCartRecs.php",data:{},sucCb:function(ret){var num=(ret.data&&ret.data.cartTotalNum)||0;$cartNum.text('1'==$cartNum.attr('_bracket')?('('+num+')'):num);},errCb:function(ret){}});}});$(function(){var timer=null;var $service=$('.mod-service');$service.attr('_top','100').attr('_bottom','380');$(window).on('resize',function(){clearTimeout(timer);timer=setTimeout(function(){var _top=parseInt($service.attr('_top'),10);var _bottom=parseInt($service.attr('_bottom'),10);var winHeight=$(window).height();var docHeight=$(document).height();var scrollTop=$(window).scrollTop();var scrollBottom=$(window).scrollTop();var elHeight=$service.height();if(_top&&winHeight/2+scrollTop-70-15<_top){$service.css('margin-top',_top+15-winHeight/2-scrollTop+'px');}else if(_bottom&&docHeight'+''+''+'

    冻结时长用于计算购买云服务时的冻结费用,固定为30天。

    '+'
    ';var feeTips='
    '+''+''+''+'

    为确保您的权益,购买云服务时需冻结一定的费用,即为冻结费用,对应计算公式为:所购买云服务日费用*冻结时长。

    '+'
    ';var prepaidDurationTips='
    '+''+''+''+'

    购买的云服务到期之前可以使用的时长。

    '+'
    ';var prepaidFeeTips='
    '+''+''+''+'

    用于购买云服务,从可用余额里一次性支付的费用。

    '+'
    ';$('.ico.ico_question.duration').click(function(event){event.stopPropagation();var _this=this;var pos=$(_this).offset();if($('.error_tips.duration').length>0){$('.error_tips.duration').remove();}else{$("body").append(durationTips);$('.error_tips.duration').css({top:pos.top-$('.error_tips.duration').height()-35,left:pos.left-Math.floor($('.error_tips.duration').width()/2)-4}).show();}});$('.ico.ico_question.fee').click(function(event){event.stopPropagation();var _this=this;var pos=$(_this).offset();if($('.error_tips.fee').length>0){$('.error_tips.fee').remove();}else{$("body").append(feeTips);$('.error_tips.fee').css({top:pos.top-$('.error_tips.fee').height()-35,left:pos.left-Math.floor($('.error_tips.fee').width()/2)-4}).show();}});$('.ico.ico_question.prepaid_duration').click(function(event){event.stopPropagation();var _this=this;var pos=$(_this).offset();if($('.error_tips.duration').length>0){$('.error_tips.duration').remove();}else{$("body").append(prepaidDurationTips);$('.error_tips.duration').css({top:pos.top-$('.error_tips.duration').height()-35,left:pos.left-Math.floor($('.error_tips.duration').width()/2)-4}).show();}});$('.ico.ico_question.prepaid_fee').click(function(event){event.stopPropagation();var _this=this;var pos=$(_this).offset();if($('.error_tips.fee').length>0){$('.error_tips.fee').remove();}else{$("body").append(prepaidFeeTips);$('.error_tips.fee').css({top:pos.top-$('.error_tips.fee').height()-35,left:pos.left-Math.floor($('.error_tips.fee').width()/2)-4}).show();}});qcloud.util.removeAllQuestionTip=function(){$('.error_tips').remove();};(function(){if(window.JS_ONLINE_FLAG&&window.TCISD){TCISD.pv('www.qcloud.com');} +if(top!=window||window.frameElement){var a=document.createElement('a');a.href=document.referrer;if(!/(qq|qcloud)\.com/i.test(a.hostname)){top.location.href=self.location.href;} +else if(window.iframeInit){window.iframeInit();}}})();qcloud.util.queryFlowResult=function(opt){var taskId=opt.taskId,taskType=opt.taskType,moduleId=opt.moduleId,fnSuc=opt.fnSuc,fnErr=opt.fnErr;if(!taskId||!taskType||!moduleId){return;} +var regionId=opt.regionId||1;$.jsonGetter({url:'/ajax/GetFlowStatusByTaskId.php',data:{taskId:taskId,taskType:taskType,moduleId:moduleId,regionId:opt.regionId},sucCb:function(ret){if(ret.data.status==0){fnSuc&&fnSuc(ret.data);}else if(ret.data.status==2){setTimeout(function(){qcloud.util.queryFlowResult(opt);},2000);}else if(ret.data.status==1){fnErr&&fnErr(ret.data);}else{qcloud.util.showTips({type:"error",text:"系统繁忙,请稍后重试(status:"+ret.data.status+")"});}},errCb:function(ret){qcloud.util.showTips({type:"error",text:"系统繁忙,请稍后重试(code:"+ret.retcode+")"});}});};qcloud.util.pagerV2=function(total,current_page,items_per_page,callback){var $pa=$(".mod_page_v2");var maxPage=Math.ceil(total/items_per_page),prePage=Math.max(1,current_page-1),nextPage=Math.min(maxPage,current_page-0+1);if(maxPage>1){var preClass=nextClass='';if(current_page==1){preClass='page_pre_disable';} +if(current_page==maxPage){nextClass='page_next_disable';} +var pageHtml=['/',maxPage,'页','上一页','下一页'].join("");$pa.html(pageHtml);$pa.find('a').unbind().bind('click',function(){var page=$(this).attr('page');if(page!=current_page&&callback){callback(page);}});$pa.find('.input_style').unbind().bind('keydown',function(e){var e=e||window.event;if(!(e.which==8||e.which==13)&&!(e.which>=48&&e.which<=57)&&!(e.which>=96&&e.which<=105)){e.preventDefault();return false;} +if(e.which==13){var page=this.value;page=Math.min(maxPage,Math.max(1,page));this.value=page;if(page!=current_page&&callback&&typeof callback=='function'){callback(page);}}});}else{var pageHtml='1/1页';$pa.html(pageHtml);}};qcloud.util.reportQcloudScreen=function(){};qcloud.util.reportConsoleScreen=function(){if("undefined"!==typeof window.screen){TCISD.valueStat4({domain:"www.qcloud.com",cgi:"/qcloud_console_screen_pixel",type:1,code:screen.width+'0'+screen.height});}};qcloud.util.showLeftNav=function(){$('#btn_hide_left_nav').show();$('#mod_content_wrapper').css('margin-left','210px');$('#slide_nav_min').hide();$('#slide_nav').show();window.qcloudTable&&qcloudTable.adjustWidth();};qcloud.util.hideLeftNav=function(){$('#btn_hide_left_nav').hide();$('#mod_content_wrapper').css('margin-left','14px');$('#slide_nav_min').show();$('#slide_nav').hide();window.qcloudTable&&qcloudTable.adjustWidth();};qcloud.util.selectText=function(input,startIndex,stopIndex){if(input.setSelectionRange){input.setSelectionRange(startIndex,stopIndex);}else if(input.createTextRange){var range=input.createTextRange();range.collapse(true);range.moveStart("character",startIndex);range.moveEnd("character",stopIndex-startIndex);range.select();}};qcloud.util.formValidate=(function(){var isPlaceholder=false,emptyFn=function(){},waterMark={show:emptyFn,hide:emptyFn};if("placeholder"in document.createElement("input")){isPlaceholder=true;} +if(!isPlaceholder){waterMark={show:function(input){input._focused=false;$(input).val($(input).attr('_water_mark')||$(input).attr('placeholder')).css('color','#999');},hide:function(input){if(!input._focused){input._focused=true;$(input).val('').css('color','#000');}}};} +return function(form,vFn,sucFn,errFn,notKeyUp){var vo;if(!arguments[0]){return;} +if(1==arguments.length){vo=arguments[0];}else{vo={form:form,vFn:vFn,sucFn:sucFn,errFn:errFn,notKeyUp:notKeyUp};} +var _validate=function(status){var input=this,val=input.value,st=status||{};if(st.isOnBlur&&/^\s*$/.test(val)){waterMark.show(input);} +if(vo.vFn(val,st,input)){vo.sucFn(val,st,input);return true;}else{vo.errFn(val,st,input);return false;}};vo.form.validateAll=function(){var ret=true;$('[_validate]',this).each(function(){if(this.disabled){return;} +waterMark.hide(this);if(!_validate.call(this,{isOnSubmit:true})){ret=false;}});return ret;};$('[_validate]',vo.form).each(function(){$(this).focus(function(){waterMark.hide(this);});$(this).blur(function(){_validate.call(this,{isOnBlur:true});});if(!vo.notKeyUp){$(this).keyup(function(){_validate.call(this,{isKeyUp:true});});}});};})();qcloud.util.cutStr=function(str,len,suffix){suffix=suffix===undefined?"...":suffix;var uReg=/[^\x00-\xff]/g;if(uReg.test(str)){var uLen=str.replace(uReg,"**").length,one,newStr,accLen=0;if(uLen>len){newStr=[];for(var i=0;i=len){break;} +newStr[i]=one;} +newStr.push(suffix);return newStr.join("");} +else{return str}} +else{if(str.length>len){return str.substr(0,len)+suffix;} +else return str;}} +qcloud.util.countTimeLength=function(interval,date1,date2){var objInterval={'D':1000*60*60*24,'H':1000*60*60,'M':1000*60,'S':1000,'T':1};interval=interval.toUpperCase();var dt1=Date.parse(date1.replace(/-/g,"/"));var dt2=Date.parse(date2.replace(/-/g,"/"));try{return((dt2-dt1)/objInterval[interval]).toFixed(2);}catch(e){return e.message;}};qcloud.util.tabView=function(config){this.config=config||{};this.container=config.container||null;if(!this.container)return;this.changeTimeout=config.changeTimeout||30000;this.syncChange=config.syncChange||false;this.stopAutoWhenHover=config.stopAutoWhenHover||true;this.intervalId=0;this.currentClassName=config.currentClassName||'current';this.tabChangeType=(config.tabChangeType&&config.tabChangeType=='hover')?'hover':'click';this.tabTagName=config.tabTagName||'li';this.currentIndex=config.currentIndex||0;this.isAllowClickCurTab=config.isAllowClickCurTab||false;this.prevButton=config.prevButton||null;this.nextButton=config.nextButton||null;this.panelShow=(typeof(config.panelShow)=='function')?config.panelShow:function(panel){panel.show();};this.panelHide=(typeof(config.panelHide)=='function')?config.panelHide:function(panel){panel.hide();};this.onMouseEnterTab=(typeof(config.onMouseEnterTab)=='function')?config.onMouseEnterTab:function(){};this.onMouseLeaveTab=(typeof(config.onMouseLeaveTab)=='function')?config.onMouseLeaveTab:function(){};this.onClickTab=(typeof(config.onClickTab)=='function')?config.onClickTab:function(){};this.beforeChangeTab=(typeof(config.beforeChangeTab)=='function')?config.beforeChangeTab:function(){};this.afterChangeTab=(typeof(config.afterChangeTab)=='function')?config.afterChangeTab:function(){};this.onTabAutoChange=(typeof(config.onTabAutoChange)=='function')?config.onTabAutoChange:function(){};this.onClickPrevOrNextChange=(typeof(config.onClickPrevOrNextChange)=='function')?config.onClickPrevOrNextChange:function(){};if(config.tabs.length>0){this.tabs=config.tabs;}else{this.tabs=$(this.container).children(this.tabTagName);} +if(config.tabPanels&&config.tabPanels.length>0){this.tabPanels=config.tabPanels;} +qcloud.util.tabView.prototype.syncChangeTab=function(){if(!this.syncChange){return;} +if(this.intervalId>0){window.clearInterval(this.intervalId);} +var $this=this;if(!this.tabPanels||!this.tabPanels instanceof Array){return;} +if(this.stopAutoWhenHover){this.tabPanels.each(function(){$(this).unbind('mouseover');$(this).unbind('mouseout');$(this).mouseover(function(e){e.stopPropagation();if($this.intervalId>0){window.clearInterval($this.intervalId);}}).mouseout(function(e){e.stopPropagation();$this.syncChangeTab();});});} +this.intervalId=window.setInterval(function(){var index=$this.getCurrentIndex();var tabs=$this.tabs;if((index+1)>=tabs.length){$this.currentIndex=0;}else{$this.currentIndex=index+1;} +$this.setCurrent($this.currentIndex);$this.onTabAutoChange($this.currentIndex);},this.changeTimeout);} +qcloud.util.tabView.prototype.setCurrent=function(index){var tabs=this.tabs;if(!tabs||index<-1||index>=tabs.length)return;for(var i=0;i=tabs.length){thisObj.currentIndex=0;}else{thisObj.currentIndex=index+1;} +thisObj.setCurrent(thisObj.currentIndex);thisObj.onClickPrevOrNextChange(thisObj.currentIndex);});this.prevButton.click(function(e){e.preventDefault();var index=thisObj.getCurrentIndex();var tabs=thisObj.tabs;if(index===0){thisObj.currentIndex=tabs.length-1;}else{thisObj.currentIndex=index-1;} +thisObj.setCurrent(thisObj.currentIndex);thisObj.onClickPrevOrNextChange(thisObj.currentIndex);});}};this.initEventsListener();this.syncChangeTab();};;(function(){var location=window.location,pathname=location.pathname,m_domain=location.protocol+"//"+location.host;var w=$(".sevice_board").width()+5;if(pathname!="/app_security.php"){setTimeout(function(){$(".mod_customer_service").fadeIn(500);},1000);} +$(".sevice_btn_back").click(function(){$(".sevice_board").animate({right:-w},1000,function(){$(".sevice_board").css("display","none");$(".ico.sevice_btn").fadeIn();});});$(".ico.sevice_btn").click(function(){$(".ico.sevice_btn").css("display","none");$(".sevice_board").css({right:-w,display:"block"});$(".sevice_board").animate({right:0},1000,function(){window.TCISD&&window.TCISD.hotClick("right_help.qcloud","www.qcloud.com");});});})();function clickReport(elem){window.TCISD&&window.TCISD.hotClick($(elem).attr("hotrep"),"www.qcloud.com");return true;};$(document).on('click','[hotrep]',function(){if(!this.onclick){clickReport(this);}});$(document).ready(function(){var projectId=$.cookie("projectId")||'0';var regionId=$.cookie("regionId")||'1';$("#qcloud_project_list").change(function(){$.removeCookie("projectId",{'path':'/','domain':COOKIE_DOMAIN});$.cookie("projectId",$(this).val(),{'path':'/','domain':COOKIE_DOMAIN});}).val(projectId);$("#qcloud_region_list").change(function(){$.removeCookie("regionId",{'path':'/','domain':COOKIE_DOMAIN});$.cookie("regionId",$(this).val(),{'path':'/','domain':COOKIE_DOMAIN});}).val(regionId);if($("#qcloud_project_list").length>0){$.removeCookie("projectId",{'path':'/','domain':COOKIE_DOMAIN});$.cookie("projectId",$("#qcloud_project_list").val(),{'path':'/','domain':COOKIE_DOMAIN});} +if($("#qcloud_region_list").length>0){$.removeCookie("regionId",{'path':'/','domain':COOKIE_DOMAIN});$.cookie("regionId",$("#qcloud_region_list").val(),{'path':'/','domain':COOKIE_DOMAIN});}}); \ No newline at end of file diff --git a/assets/layer/layer.js b/assets/layer/layer.js new file mode 100644 index 0000000..12cb6b5 --- /dev/null +++ b/assets/layer/layer.js @@ -0,0 +1,2 @@ +/*! layer-v3.1.1 Web弹层组件 MIT License http://layer.layui.com/ By 贤心 */ + ;!function(e,t){"use strict";var i,n,a=e.layui&&layui.define,o={getPath:function(){var e=document.currentScript?document.currentScript.src:function(){for(var e,t=document.scripts,i=t.length-1,n=i;n>0;n--)if("interactive"===t[n].readyState){e=t[n].src;break}return e||t[i].src}();return e.substring(0,e.lastIndexOf("/")+1)}(),config:{},end:{},minIndex:0,minLeft:[],btn:["确定","取消"],type:["dialog","page","iframe","loading","tips"],getStyle:function(t,i){var n=t.currentStyle?t.currentStyle:e.getComputedStyle(t,null);return n[n.getPropertyValue?"getPropertyValue":"getAttribute"](i)},link:function(t,i,n){if(r.path){var a=document.getElementsByTagName("head")[0],s=document.createElement("link");"string"==typeof i&&(n=i);var l=(n||t).replace(/\.|\//g,""),f="layuicss-"+l,c=0;s.rel="stylesheet",s.href=r.path+t,s.id=f,document.getElementById(f)||a.appendChild(s),"function"==typeof i&&!function u(){return++c>80?e.console&&console.error("layer.css: Invalid"):void(1989===parseInt(o.getStyle(document.getElementById(f),"width"))?i():setTimeout(u,100))}()}}},r={v:"3.1.1",ie:function(){var t=navigator.userAgent.toLowerCase();return!!(e.ActiveXObject||"ActiveXObject"in e)&&((t.match(/msie\s(\d+)/)||[])[1]||"11")}(),index:e.layer&&e.layer.v?1e5:0,path:o.getPath,config:function(e,t){return e=e||{},r.cache=o.config=i.extend({},o.config,e),r.path=o.config.path||r.path,"string"==typeof e.extend&&(e.extend=[e.extend]),o.config.path&&r.ready(),e.extend?(a?layui.addcss("modules/layer/"+e.extend):o.link("theme/"+e.extend),this):this},ready:function(e){var t="layer",i="",n=(a?"modules/layer/":"theme/")+"default/layer.css?v="+r.v+i;return a?layui.addcss(n,e,t):o.link(n,e,t),this},alert:function(e,t,n){var a="function"==typeof t;return a&&(n=t),r.open(i.extend({content:e,yes:n},a?{}:t))},confirm:function(e,t,n,a){var s="function"==typeof t;return s&&(a=n,n=t),r.open(i.extend({content:e,btn:o.btn,yes:n,btn2:a},s?{}:t))},msg:function(e,n,a){var s="function"==typeof n,f=o.config.skin,c=(f?f+" "+f+"-msg":"")||"layui-layer-msg",u=l.anim.length-1;return s&&(a=n),r.open(i.extend({content:e,time:3e3,shade:!1,skin:c,title:!1,closeBtn:!1,btn:!1,resize:!1,end:a},s&&!o.config.skin?{skin:c+" layui-layer-hui",anim:u}:function(){return n=n||{},(n.icon===-1||n.icon===t&&!o.config.skin)&&(n.skin=c+" "+(n.skin||"layui-layer-hui")),n}()))},load:function(e,t){return r.open(i.extend({type:3,icon:e||0,resize:!1,shade:.01},t))},tips:function(e,t,n){return r.open(i.extend({type:4,content:[e,t],closeBtn:!1,time:3e3,shade:!1,resize:!1,fixed:!1,maxWidth:210},n))}},s=function(e){var t=this;t.index=++r.index,t.config=i.extend({},t.config,o.config,e),document.body?t.creat():setTimeout(function(){t.creat()},30)};s.pt=s.prototype;var l=["layui-layer",".layui-layer-title",".layui-layer-main",".layui-layer-dialog","layui-layer-iframe","layui-layer-content","layui-layer-btn","layui-layer-close"];l.anim=["layer-anim-00","layer-anim-01","layer-anim-02","layer-anim-03","layer-anim-04","layer-anim-05","layer-anim-06"],s.pt.config={type:0,shade:.3,fixed:!0,move:l[1],title:"信息",offset:"auto",area:"auto",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,anim:0,isOutAnim:!0,icon:-1,moveType:1,resize:!0,scrollbar:!0,tips:2},s.pt.vessel=function(e,t){var n=this,a=n.index,r=n.config,s=r.zIndex+a,f="object"==typeof r.title,c=r.maxmin&&(1===r.type||2===r.type),u=r.title?'
    '+(f?r.title[0]:r.title)+"
    ":"";return r.zIndex=s,t([r.shade?'
    ':"",'
    '+(e&&2!=r.type?"":u)+'
    '+(0==r.type&&r.icon!==-1?'':"")+(1==r.type&&e?"":r.content||"")+'
    '+function(){var e=c?'':"";return r.closeBtn&&(e+=''),e}()+""+(r.btn?function(){var e="";"string"==typeof r.btn&&(r.btn=[r.btn]);for(var t=0,i=r.btn.length;t'+r.btn[t]+"";return'
    '+e+"
    "}():"")+(r.resize?'':"")+"
    "],u,i('
    ')),n},s.pt.creat=function(){var e=this,t=e.config,a=e.index,s=t.content,f="object"==typeof s,c=i("body");if(!t.id||!i("#"+t.id)[0]){switch("string"==typeof t.area&&(t.area="auto"===t.area?["",""]:[t.area,""]),t.shift&&(t.anim=t.shift),6==r.ie&&(t.fixed=!1),t.type){case 0:t.btn="btn"in t?t.btn:o.btn[0],r.closeAll("dialog");break;case 2:var s=t.content=f?t.content:[t.content||"http://layer.layui.com","auto"];t.content='';break;case 3:delete t.title,delete t.closeBtn,t.icon===-1&&0===t.icon,r.closeAll("loading");break;case 4:f||(t.content=[t.content,"body"]),t.follow=t.content[1],t.content=t.content[0]+'',delete t.title,t.tips="object"==typeof t.tips?t.tips:[t.tips,!0],t.tipsMore||r.closeAll("tips")}if(e.vessel(f,function(n,r,u){c.append(n[0]),f?function(){2==t.type||4==t.type?function(){i("body").append(n[1])}():function(){s.parents("."+l[0])[0]||(s.data("display",s.css("display")).show().addClass("layui-layer-wrap").wrap(n[1]),i("#"+l[0]+a).find("."+l[5]).before(r))}()}():c.append(n[1]),i(".layui-layer-move")[0]||c.append(o.moveElem=u),e.layero=i("#"+l[0]+a),t.scrollbar||l.html.css("overflow","hidden").attr("layer-full",a)}).auto(a),i("#layui-layer-shade"+e.index).css({"background-color":t.shade[1]||"#000",opacity:t.shade[0]||t.shade}),2==t.type&&6==r.ie&&e.layero.find("iframe").attr("src",s[0]),4==t.type?e.tips():e.offset(),t.fixed&&n.on("resize",function(){e.offset(),(/^\d+%$/.test(t.area[0])||/^\d+%$/.test(t.area[1]))&&e.auto(a),4==t.type&&e.tips()}),t.time<=0||setTimeout(function(){r.close(e.index)},t.time),e.move().callback(),l.anim[t.anim]){var u="layer-anim "+l.anim[t.anim];e.layero.addClass(u).one("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend",function(){i(this).removeClass(u)})}t.isOutAnim&&e.layero.data("isOutAnim",!0)}},s.pt.auto=function(e){var t=this,a=t.config,o=i("#"+l[0]+e);""===a.area[0]&&a.maxWidth>0&&(r.ie&&r.ie<8&&a.btn&&o.width(o.innerWidth()),o.outerWidth()>a.maxWidth&&o.width(a.maxWidth));var s=[o.innerWidth(),o.innerHeight()],f=o.find(l[1]).outerHeight()||0,c=o.find("."+l[6]).outerHeight()||0,u=function(e){e=o.find(e),e.height(s[1]-f-c-2*(0|parseFloat(e.css("padding-top"))))};switch(a.type){case 2:u("iframe");break;default:""===a.area[1]?a.maxHeight>0&&o.outerHeight()>a.maxHeight?(s[1]=a.maxHeight,u("."+l[5])):a.fixed&&s[1]>=n.height()&&(s[1]=n.height(),u("."+l[5])):u("."+l[5])}return t},s.pt.offset=function(){var e=this,t=e.config,i=e.layero,a=[i.outerWidth(),i.outerHeight()],o="object"==typeof t.offset;e.offsetTop=(n.height()-a[1])/2,e.offsetLeft=(n.width()-a[0])/2,o?(e.offsetTop=t.offset[0],e.offsetLeft=t.offset[1]||e.offsetLeft):"auto"!==t.offset&&("t"===t.offset?e.offsetTop=0:"r"===t.offset?e.offsetLeft=n.width()-a[0]:"b"===t.offset?e.offsetTop=n.height()-a[1]:"l"===t.offset?e.offsetLeft=0:"lt"===t.offset?(e.offsetTop=0,e.offsetLeft=0):"lb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=0):"rt"===t.offset?(e.offsetTop=0,e.offsetLeft=n.width()-a[0]):"rb"===t.offset?(e.offsetTop=n.height()-a[1],e.offsetLeft=n.width()-a[0]):e.offsetTop=t.offset),t.fixed||(e.offsetTop=/%$/.test(e.offsetTop)?n.height()*parseFloat(e.offsetTop)/100:parseFloat(e.offsetTop),e.offsetLeft=/%$/.test(e.offsetLeft)?n.width()*parseFloat(e.offsetLeft)/100:parseFloat(e.offsetLeft),e.offsetTop+=n.scrollTop(),e.offsetLeft+=n.scrollLeft()),i.attr("minLeft")&&(e.offsetTop=n.height()-(i.find(l[1]).outerHeight()||0),e.offsetLeft=i.css("left")),i.css({top:e.offsetTop,left:e.offsetLeft})},s.pt.tips=function(){var e=this,t=e.config,a=e.layero,o=[a.outerWidth(),a.outerHeight()],r=i(t.follow);r[0]||(r=i("body"));var s={width:r.outerWidth(),height:r.outerHeight(),top:r.offset().top,left:r.offset().left},f=a.find(".layui-layer-TipsG"),c=t.tips[0];t.tips[1]||f.remove(),s.autoLeft=function(){s.left+o[0]-n.width()>0?(s.tipLeft=s.left+s.width-o[0],f.css({right:12,left:"auto"})):s.tipLeft=s.left},s.where=[function(){s.autoLeft(),s.tipTop=s.top-o[1]-10,f.removeClass("layui-layer-TipsB").addClass("layui-layer-TipsT").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left+s.width+10,s.tipTop=s.top,f.removeClass("layui-layer-TipsL").addClass("layui-layer-TipsR").css("border-bottom-color",t.tips[1])},function(){s.autoLeft(),s.tipTop=s.top+s.height+10,f.removeClass("layui-layer-TipsT").addClass("layui-layer-TipsB").css("border-right-color",t.tips[1])},function(){s.tipLeft=s.left-o[0]-10,s.tipTop=s.top,f.removeClass("layui-layer-TipsR").addClass("layui-layer-TipsL").css("border-bottom-color",t.tips[1])}],s.where[c-1](),1===c?s.top-(n.scrollTop()+o[1]+16)<0&&s.where[2]():2===c?n.width()-(s.left+s.width+o[0]+16)>0||s.where[3]():3===c?s.top-n.scrollTop()+s.height+o[1]+16-n.height()>0&&s.where[0]():4===c&&o[0]+16-s.left>0&&s.where[1](),a.find("."+l[5]).css({"background-color":t.tips[1],"padding-right":t.closeBtn?"30px":""}),a.css({left:s.tipLeft-(t.fixed?n.scrollLeft():0),top:s.tipTop-(t.fixed?n.scrollTop():0)})},s.pt.move=function(){var e=this,t=e.config,a=i(document),s=e.layero,l=s.find(t.move),f=s.find(".layui-layer-resize"),c={};return t.move&&l.css("cursor","move"),l.on("mousedown",function(e){e.preventDefault(),t.move&&(c.moveStart=!0,c.offset=[e.clientX-parseFloat(s.css("left")),e.clientY-parseFloat(s.css("top"))],o.moveElem.css("cursor","move").show())}),f.on("mousedown",function(e){e.preventDefault(),c.resizeStart=!0,c.offset=[e.clientX,e.clientY],c.area=[s.outerWidth(),s.outerHeight()],o.moveElem.css("cursor","se-resize").show()}),a.on("mousemove",function(i){if(c.moveStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1],l="fixed"===s.css("position");if(i.preventDefault(),c.stX=l?0:n.scrollLeft(),c.stY=l?0:n.scrollTop(),!t.moveOut){var f=n.width()-s.outerWidth()+c.stX,u=n.height()-s.outerHeight()+c.stY;af&&(a=f),ou&&(o=u)}s.css({left:a,top:o})}if(t.resize&&c.resizeStart){var a=i.clientX-c.offset[0],o=i.clientY-c.offset[1];i.preventDefault(),r.style(e.index,{width:c.area[0]+a,height:c.area[1]+o}),c.isResize=!0,t.resizing&&t.resizing(s)}}).on("mouseup",function(e){c.moveStart&&(delete c.moveStart,o.moveElem.hide(),t.moveEnd&&t.moveEnd(s)),c.resizeStart&&(delete c.resizeStart,o.moveElem.hide())}),e},s.pt.callback=function(){function e(){var e=a.cancel&&a.cancel(t.index,n);e===!1||r.close(t.index)}var t=this,n=t.layero,a=t.config;t.openLayer(),a.success&&(2==a.type?n.find("iframe").on("load",function(){a.success(n,t.index)}):a.success(n,t.index)),6==r.ie&&t.IE6(n),n.find("."+l[6]).children("a").on("click",function(){var e=i(this).index();if(0===e)a.yes?a.yes(t.index,n):a.btn1?a.btn1(t.index,n):r.close(t.index);else{var o=a["btn"+(e+1)]&&a["btn"+(e+1)](t.index,n);o===!1||r.close(t.index)}}),n.find("."+l[7]).on("click",e),a.shadeClose&&i("#layui-layer-shade"+t.index).on("click",function(){r.close(t.index)}),n.find(".layui-layer-min").on("click",function(){var e=a.min&&a.min(n);e===!1||r.min(t.index,a)}),n.find(".layui-layer-max").on("click",function(){i(this).hasClass("layui-layer-maxmin")?(r.restore(t.index),a.restore&&a.restore(n)):(r.full(t.index,a),setTimeout(function(){a.full&&a.full(n)},100))}),a.end&&(o.end[t.index]=a.end)},o.reselect=function(){i.each(i("select"),function(e,t){var n=i(this);n.parents("."+l[0])[0]||1==n.attr("layer")&&i("."+l[0]).length<1&&n.removeAttr("layer").show(),n=null})},s.pt.IE6=function(e){i("select").each(function(e,t){var n=i(this);n.parents("."+l[0])[0]||"none"===n.css("display")||n.attr({layer:"1"}).hide(),n=null})},s.pt.openLayer=function(){var e=this;r.zIndex=e.config.zIndex,r.setTop=function(e){var t=function(){r.zIndex++,e.css("z-index",r.zIndex+1)};return r.zIndex=parseInt(e[0].style.zIndex),e.on("mousedown",t),r.zIndex}},o.record=function(e){var t=[e.width(),e.height(),e.position().top,e.position().left+parseFloat(e.css("margin-left"))];e.find(".layui-layer-max").addClass("layui-layer-maxmin"),e.attr({area:t})},o.rescollbar=function(e){l.html.attr("layer-full")==e&&(l.html[0].style.removeProperty?l.html[0].style.removeProperty("overflow"):l.html[0].style.removeAttribute("overflow"),l.html.removeAttr("layer-full"))},e.layer=r,r.getChildFrame=function(e,t){return t=t||i("."+l[4]).attr("times"),i("#"+l[0]+t).find("iframe").contents().find(e)},r.getFrameIndex=function(e){return i("#"+e).parents("."+l[4]).attr("times")},r.iframeAuto=function(e){if(e){var t=r.getChildFrame("html",e).outerHeight(),n=i("#"+l[0]+e),a=n.find(l[1]).outerHeight()||0,o=n.find("."+l[6]).outerHeight()||0;n.css({height:t+a+o}),n.find("iframe").css({height:t})}},r.iframeSrc=function(e,t){i("#"+l[0]+e).find("iframe").attr("src",t)},r.style=function(e,t,n){var a=i("#"+l[0]+e),r=a.find(".layui-layer-content"),s=a.attr("type"),f=a.find(l[1]).outerHeight()||0,c=a.find("."+l[6]).outerHeight()||0;a.attr("minLeft");s!==o.type[3]&&s!==o.type[4]&&(n||(parseFloat(t.width)<=260&&(t.width=260),parseFloat(t.height)-f-c<=64&&(t.height=64+f+c)),a.css(t),c=a.find("."+l[6]).outerHeight(),s===o.type[2]?a.find("iframe").css({height:parseFloat(t.height)-f-c}):r.css({height:parseFloat(t.height)-f-c-parseFloat(r.css("padding-top"))-parseFloat(r.css("padding-bottom"))}))},r.min=function(e,t){var a=i("#"+l[0]+e),s=a.find(l[1]).outerHeight()||0,f=a.attr("minLeft")||181*o.minIndex+"px",c=a.css("position");o.record(a),o.minLeft[0]&&(f=o.minLeft[0],o.minLeft.shift()),a.attr("position",c),r.style(e,{width:180,height:s,left:f,top:n.height()-s,position:"fixed",overflow:"hidden"},!0),a.find(".layui-layer-min").hide(),"page"===a.attr("type")&&a.find(l[4]).hide(),o.rescollbar(e),a.attr("minLeft")||o.minIndex++,a.attr("minLeft",f)},r.restore=function(e){var t=i("#"+l[0]+e),n=t.attr("area").split(",");t.attr("type");r.style(e,{width:parseFloat(n[0]),height:parseFloat(n[1]),top:parseFloat(n[2]),left:parseFloat(n[3]),position:t.attr("position"),overflow:"visible"},!0),t.find(".layui-layer-max").removeClass("layui-layer-maxmin"),t.find(".layui-layer-min").show(),"page"===t.attr("type")&&t.find(l[4]).show(),o.rescollbar(e)},r.full=function(e){var t,a=i("#"+l[0]+e);o.record(a),l.html.attr("layer-full")||l.html.css("overflow","hidden").attr("layer-full",e),clearTimeout(t),t=setTimeout(function(){var t="fixed"===a.css("position");r.style(e,{top:t?0:n.scrollTop(),left:t?0:n.scrollLeft(),width:n.width(),height:n.height()},!0),a.find(".layui-layer-min").hide()},100)},r.title=function(e,t){var n=i("#"+l[0]+(t||r.index)).find(l[1]);n.html(e)},r.close=function(e){var t=i("#"+l[0]+e),n=t.attr("type"),a="layer-anim-close";if(t[0]){var s="layui-layer-wrap",f=function(){if(n===o.type[1]&&"object"===t.attr("conType")){t.children(":not(."+l[5]+")").remove();for(var a=t.find("."+s),r=0;r<2;r++)a.unwrap();a.css("display",a.data("display")).removeClass(s)}else{if(n===o.type[2])try{var f=i("#"+l[4]+e)[0];f.contentWindow.document.write(""),f.contentWindow.close(),t.find("."+l[5])[0].removeChild(f)}catch(c){}t[0].innerHTML="",t.remove()}"function"==typeof o.end[e]&&o.end[e](),delete o.end[e]};t.data("isOutAnim")&&t.addClass("layer-anim "+a),i("#layui-layer-moves, #layui-layer-shade"+e).remove(),6==r.ie&&o.reselect(),o.rescollbar(e),t.attr("minLeft")&&(o.minIndex--,o.minLeft.push(t.attr("minLeft"))),r.ie&&r.ie<10||!t.data("isOutAnim")?f():setTimeout(function(){f()},200)}},r.closeAll=function(e){i.each(i("."+l[0]),function(){var t=i(this),n=e?t.attr("type")===e:1;n&&r.close(t.attr("times")),n=null})};var f=r.cache||{},c=function(e){return f.skin?" "+f.skin+" "+f.skin+"-"+e:""};r.prompt=function(e,t){var a="";if(e=e||{},"function"==typeof e&&(t=e),e.area){var o=e.area;a='style="width: '+o[0]+"; height: "+o[1]+';"',delete e.area}var s,l=2==e.formType?'":function(){return''}(),f=e.success;return delete e.success,r.open(i.extend({type:1,btn:["确定","取消"],content:l,skin:"layui-layer-prompt"+c("prompt"),maxWidth:n.width(),success:function(e){s=e.find(".layui-layer-input"),s.focus(),"function"==typeof f&&f(e)},resize:!1,yes:function(i){var n=s.val();""===n?s.focus():n.length>(e.maxlength||500)?r.tips("最多输入"+(e.maxlength||500)+"个字数",s,{tips:1}):t&&t(n,i,s)}},e))},r.tab=function(e){e=e||{};var t=e.tab||{},n="layui-this",a=e.success;return delete e.success,r.open(i.extend({type:1,skin:"layui-layer-tab"+c("tab"),resize:!1,title:function(){var e=t.length,i=1,a="";if(e>0)for(a=''+t[0].title+"";i"+t[i].title+"";return a}(),content:'
      '+function(){var e=t.length,i=1,a="";if(e>0)for(a='
    • '+(t[0].content||"no content")+"
    • ";i'+(t[i].content||"no content")+"";return a}()+"
    ",success:function(t){var o=t.find(".layui-layer-title").children(),r=t.find(".layui-layer-tabmain").children();o.on("mousedown",function(t){t.stopPropagation?t.stopPropagation():t.cancelBubble=!0;var a=i(this),o=a.index();a.addClass(n).siblings().removeClass(n),r.eq(o).show().siblings().hide(),"function"==typeof e.change&&e.change(o)}),"function"==typeof a&&a(t)}},e))},r.photos=function(t,n,a){function o(e,t,i){var n=new Image;return n.src=e,n.complete?t(n):(n.onload=function(){n.onload=null,t(n)},void(n.onerror=function(e){n.onerror=null,i(e)}))}var s={};if(t=t||{},t.photos){var l=t.photos.constructor===Object,f=l?t.photos:{},u=f.data||[],d=f.start||0;s.imgIndex=(0|d)+1,t.img=t.img||"img";var y=t.success;if(delete t.success,l){if(0===u.length)return r.msg("没有图片")}else{var p=i(t.photos),h=function(){u=[],p.find(t.img).each(function(e){var t=i(this);t.attr("layer-index",e),u.push({alt:t.attr("alt"),pid:t.attr("layer-pid"),src:t.attr("layer-src")||t.attr("src"),thumb:t.attr("src")})})};if(h(),0===u.length)return;if(n||p.on("click",t.img,function(){var e=i(this),n=e.attr("layer-index");r.photos(i.extend(t,{photos:{start:n,data:u,tab:t.tab},full:t.full}),!0),h()}),!n)return}s.imgprev=function(e){s.imgIndex--,s.imgIndex<1&&(s.imgIndex=u.length),s.tabimg(e)},s.imgnext=function(e,t){s.imgIndex++,s.imgIndex>u.length&&(s.imgIndex=1,t)||s.tabimg(e)},s.keyup=function(e){if(!s.end){var t=e.keyCode;e.preventDefault(),37===t?s.imgprev(!0):39===t?s.imgnext(!0):27===t&&r.close(s.index)}},s.tabimg=function(e){if(!(u.length<=1))return f.start=s.imgIndex-1,r.close(s.index),r.photos(t,!0,e)},s.event=function(){s.bigimg.hover(function(){s.imgsee.show()},function(){s.imgsee.hide()}),s.bigimg.find(".layui-layer-imgprev").on("click",function(e){e.preventDefault(),s.imgprev()}),s.bigimg.find(".layui-layer-imgnext").on("click",function(e){e.preventDefault(),s.imgnext()}),i(document).on("keyup",s.keyup)},s.loadi=r.load(1,{shade:!("shade"in t)&&.9,scrollbar:!1}),o(u[d].src,function(n){r.close(s.loadi),s.index=r.open(i.extend({type:1,id:"layui-layer-photos",area:function(){var a=[n.width,n.height],o=[i(e).width()-100,i(e).height()-100];if(!t.full&&(a[0]>o[0]||a[1]>o[1])){var r=[a[0]/o[0],a[1]/o[1]];r[0]>r[1]?(a[0]=a[0]/r[0],a[1]=a[1]/r[0]):r[0]'+(u[d].alt||
    '+(u.length>1?'':"")+'
    '+(u[d].alt||"")+""+s.imgIndex+"/"+u.length+"
    ",success:function(e,i){s.bigimg=e.find(".layui-layer-phimg"),s.imgsee=e.find(".layui-layer-imguide,.layui-layer-imgbar"),s.event(e),t.tab&&t.tab(u[d],e),"function"==typeof y&&y(e)},end:function(){s.end=!0,i(document).off("keyup",s.keyup)}},t))},function(){r.close(s.loadi),r.msg("当前图片地址异常
    是否继续查看下一张?",{time:3e4,btn:["下一张","不看了"],yes:function(){u.length>1&&s.imgnext(!0,!0)}})})}},o.run=function(t){i=t,n=i(e),l.html=i("html"),r.open=function(e){var t=new s(e);return t.index}},e.layui&&layui.define?(r.ready(),layui.define("jquery",function(t){r.path=layui.cache.dir,o.run(layui.$),e.layer=r,t("layer",r)})):"function"==typeof define&&define.amd?define(["jquery"],function(){return o.run(e.jQuery),r}):function(){o.run(e.jQuery),r.ready()}()}(window); \ No newline at end of file diff --git a/assets/layer/mobile/layer.js b/assets/layer/mobile/layer.js new file mode 100644 index 0000000..f9cf693 --- /dev/null +++ b/assets/layer/mobile/layer.js @@ -0,0 +1,2 @@ +/*! layer mobile-v2.0.0 Web弹层组件 MIT License http://layer.layui.com/mobile By 贤心 */ + ;!function(e){"use strict";var t=document,n="querySelectorAll",i="getElementsByClassName",a=function(e){return t[n](e)},s={type:0,shade:!0,shadeClose:!0,fixed:!0,anim:"scale"},l={extend:function(e){var t=JSON.parse(JSON.stringify(s));for(var n in e)t[n]=e[n];return t},timer:{},end:{}};l.touch=function(e,t){e.addEventListener("click",function(e){t.call(this,e)},!1)};var r=0,o=["layui-m-layer"],c=function(e){var t=this;t.config=l.extend(e),t.view()};c.prototype.view=function(){var e=this,n=e.config,s=t.createElement("div");e.id=s.id=o[0]+r,s.setAttribute("class",o[0]+" "+o[0]+(n.type||0)),s.setAttribute("index",r);var l=function(){var e="object"==typeof n.title;return n.title?'

    '+(e?n.title[0]:n.title)+"

    ":""}(),c=function(){"string"==typeof n.btn&&(n.btn=[n.btn]);var e,t=(n.btn||[]).length;return 0!==t&&n.btn?(e=''+n.btn[0]+"",2===t&&(e=''+n.btn[1]+""+e),'
    '+e+"
    "):""}();if(n.fixed||(n.top=n.hasOwnProperty("top")?n.top:100,n.style=n.style||"",n.style+=" top:"+(t.body.scrollTop+n.top)+"px"),2===n.type&&(n.content='

    '+(n.content||"")+"

    "),n.skin&&(n.anim="up"),"msg"===n.skin&&(n.shade=!1),s.innerHTML=(n.shade?"
    ':"")+'
    "+l+'
    '+n.content+"
    "+c+"
    ",!n.type||2===n.type){var d=t[i](o[0]+n.type),y=d.length;y>=1&&layer.close(d[0].getAttribute("index"))}document.body.appendChild(s);var u=e.elem=a("#"+e.id)[0];n.success&&n.success(u),e.index=r++,e.action(n,u)},c.prototype.action=function(e,t){var n=this;e.time&&(l.timer[n.index]=setTimeout(function(){layer.close(n.index)},1e3*e.time));var a=function(){var t=this.getAttribute("type");0==t?(e.no&&e.no(),layer.close(n.index)):e.yes?e.yes(n.index):layer.close(n.index)};if(e.btn)for(var s=t[i]("layui-m-layerbtn")[0].children,r=s.length,o=0;odiv{line-height:22px;padding-top:7px;margin-bottom:20px;font-size:14px}.layui-m-layerbtn{display:box;display:-moz-box;display:-webkit-box;width:100%;height:50px;line-height:50px;font-size:0;border-top:1px solid #D0D0D0;background-color:#F2F2F2}.layui-m-layerbtn span{display:block;-moz-box-flex:1;box-flex:1;-webkit-box-flex:1;font-size:14px;cursor:pointer}.layui-m-layerbtn span[yes]{color:#40AFFE}.layui-m-layerbtn span[no]{border-right:1px solid #D0D0D0;border-radius:0 0 0 5px}.layui-m-layerbtn span:active{background-color:#F6F6F6}.layui-m-layerend{position:absolute;right:7px;top:10px;width:30px;height:30px;border:0;font-weight:400;background:0 0;cursor:pointer;-webkit-appearance:none;font-size:30px}.layui-m-layerend::after,.layui-m-layerend::before{position:absolute;left:5px;top:15px;content:'';width:18px;height:1px;background-color:#999;transform:rotate(45deg);-webkit-transform:rotate(45deg);border-radius:3px}.layui-m-layerend::after{transform:rotate(-45deg);-webkit-transform:rotate(-45deg)}body .layui-m-layer .layui-m-layer-footer{position:fixed;width:95%;max-width:100%;margin:0 auto;left:0;right:0;bottom:10px;background:0 0}.layui-m-layer-footer .layui-m-layercont{padding:20px;border-radius:5px 5px 0 0;background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn{display:block;height:auto;background:0 0;border-top:none}.layui-m-layer-footer .layui-m-layerbtn span{background-color:rgba(255,255,255,.8)}.layui-m-layer-footer .layui-m-layerbtn span[no]{color:#FD482C;border-top:1px solid #c2c2c2;border-radius:0 0 5px 5px}.layui-m-layer-footer .layui-m-layerbtn span[yes]{margin-top:10px;border-radius:5px}body .layui-m-layer .layui-m-layer-msg{width:auto;max-width:90%;margin:0 auto;bottom:-150px;background-color:rgba(0,0,0,.7);color:#fff}.layui-m-layer-msg .layui-m-layercont{padding:10px 20px} \ No newline at end of file diff --git a/assets/layer/theme/default/icon-ext.png b/assets/layer/theme/default/icon-ext.png new file mode 100644 index 0000000..bbbb669 Binary files /dev/null and b/assets/layer/theme/default/icon-ext.png differ diff --git a/assets/layer/theme/default/icon.png b/assets/layer/theme/default/icon.png new file mode 100644 index 0000000..3e17da8 Binary files /dev/null and b/assets/layer/theme/default/icon.png differ diff --git a/assets/layer/theme/default/layer.css b/assets/layer/theme/default/layer.css new file mode 100644 index 0000000..820b4a9 --- /dev/null +++ b/assets/layer/theme/default/layer.css @@ -0,0 +1 @@ +.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}html #layuicss-layer{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+"px")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;border-radius:2px;box-shadow:1px 1px 50px rgba(0,0,0,.3)}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.1);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-load{background:url(loading-1.gif) center center no-repeat #eee}.layui-layer-ico{background:url(icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-move{display:none;position:fixed;*position:absolute;left:0;top:0;width:100%;height:100%;cursor:move;opacity:0;filter:alpha(opacity=0);background-color:#fff;z-index:2147483647}.layui-layer-resize{position:absolute;width:15px;height:15px;right:0;bottom:0;cursor:se-resize}.layer-anim{-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}@-webkit-keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-00{-webkit-animation-name:layer-bounceIn;animation-name:layer-bounceIn}@-webkit-keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:layer-zoomInDown;animation-name:layer-zoomInDown}@-webkit-keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes layer-fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:layer-fadeInUpBig;animation-name:layer-fadeInUpBig}@-webkit-keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes layer-zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:layer-zoomInLeft;animation-name:layer-zoomInLeft}@-webkit-keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes layer-rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:layer-rollIn;animation-name:layer-rollIn}@keyframes layer-fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:layer-fadeIn;animation-name:layer-fadeIn}@-webkit-keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes layer-shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:layer-shake;animation-name:layer-shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:1px -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 15px 12px;pointer-events:auto;user-select:none;-webkit-user-select:none}.layui-layer-btn a{height:28px;line-height:28px;margin:5px 5px 0;padding:0 15px;border:1px solid #dedede;background-color:#fff;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.8}.layui-layer-btn .layui-layer-btn0{border-color:#1E9FFF;background-color:#1E9FFF;color:#fff}.layui-layer-btn-l{text-align:left}.layui-layer-btn-c{text-align:center}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:8px 15px;font-size:12px;_float:left;border-radius:2px;box-shadow:1px 1px 3px rgba(0,0,0,.2);background-color:#000;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#000}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:5px;border-bottom-style:solid;border-bottom-color:#000}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:5px 10px 10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#fff;border-color:#E9E7E7;color:#333}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95;border-color:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:230px;height:36px;margin:0 auto;line-height:30px;padding-left:10px;border:1px solid #e6e6e6;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px;padding:6px 10px}.layui-layer-prompt .layui-layer-content{padding:20px}.layui-layer-prompt .layui-layer-btn{padding-top:0}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;overflow:hidden;cursor:pointer}.layui-layer-tab .layui-layer-title span.layui-this{height:43px;border-left:1px solid #eee;border-right:1px solid #eee;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.layui-this{display:block}.layui-layer-photos{-webkit-animation-duration:.8s;animation-duration:.8s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}@-webkit-keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes layer-bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:layer-bounceOut;animation-name:layer-bounceOut;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}@media screen and (max-width:1100px){.layui-layer-iframe{overflow-y:auto;-webkit-overflow-scrolling:touch}} \ No newline at end of file diff --git a/assets/layer/theme/default/loading-0.gif b/assets/layer/theme/default/loading-0.gif new file mode 100644 index 0000000..6f3c953 Binary files /dev/null and b/assets/layer/theme/default/loading-0.gif differ diff --git a/assets/layer/theme/default/loading-1.gif b/assets/layer/theme/default/loading-1.gif new file mode 100644 index 0000000..db3a483 Binary files /dev/null and b/assets/layer/theme/default/loading-1.gif differ diff --git a/assets/layer/theme/default/loading-2.gif b/assets/layer/theme/default/loading-2.gif new file mode 100644 index 0000000..5bb90fd Binary files /dev/null and b/assets/layer/theme/default/loading-2.gif differ diff --git a/cashier.php b/cashier.php new file mode 100644 index 0000000..6378031 --- /dev/null +++ b/cashier.php @@ -0,0 +1,115 @@ +getRow("SELECT * FROM pre_order WHERE trade_no='{$trade_no}' limit 1"); +if(!$row)sysmsg('该订单号不存在,请返回来源地重新发起请求!'); +if($row['status']==1)sysmsg('该订单已完成支付,请勿重复支付'); +$gid = $DB->getColumn("SELECT gid FROM pre_user WHERE uid='{$row['uid']}' limit 1"); +$paytype = \lib\Channel::getTypes($gid); +?> + + + +收银台 | <?php echo $sitename?$sitename:$conf['sitename']?> + + + + + + + + + +
    +

    当前支付方式暂时关闭维护,请更换其他方式支付

    +
    + +
    +
      +
    • + 商品名称: + +
    • +
    • + 订单号: + +
    • +
    • + 创建时间: + +
    • +
    +
    + 订单金额: + + +
    +
    + + +
    +
    +

    支付方式

    +
      + +
    • + + +
    • + +
    +
    +
    + +
    +
    + 需支付: + 立即支付 +
    +
    +
    +
    +

    提示信息

    +

    + 确定 +
    +
    + +
    +

    +
    + + + + + \ No newline at end of file diff --git a/cron.php b/cron.php new file mode 100644 index 0000000..f5a339b --- /dev/null +++ b/cron.php @@ -0,0 +1,108 @@ +=strtotime(date("Y-m-d").' 00:00:00'))exit('自动生成结算列表今日已完成'); + $rs=$DB->query("SELECT * from pre_user where money>={$conf['settle_money']} and account is not null and username is not null and settle=1 and status=1"); + $i=0; + $allmoney=0; + while($row = $rs->fetch()) + { + $i++; + if($conf['settle_rate']>0){ + $fee=round($row['money']*$conf['settle_rate']/100,2); + if($fee<$conf['settle_fee_min'])$fee=$conf['settle_fee_min']; + if($fee>$conf['settle_fee_max'])$fee=$conf['settle_fee_max']; + $realmoney=$row['money']-$fee; + }else{ + $realmoney=$row['money']; + } + if($DB->exec("INSERT INTO `pre_settle` (`uid`, `type`, `username`, `account`, `money`, `realmoney`, `addtime`, `status`) VALUES ('{$row['uid']}', '{$row['settle_id']}', '{$row['username']}', '{$row['account']}', '{$row['money']}', '{$realmoney}', '{$date}', '0')")){ + changeUserMoney($row['uid'], $row['money'], false, '自动结算'); + $allmoney+=$realmoney; + } + } + saveSetting('settle_time', $date); + exit('自动生成结算列表成功 allmony='.$allmoney.' num='.$i); + }else{ + exit('自动生成结算列表未开启'); + } +} +elseif($_GET['do']=='order'){ + $order_time=getSetting('order_time', true); + if(strtotime($order_time)>=strtotime(date("Y-m-d").' 00:00:00'))exit('订单统计与清理任务今日已完成'); + + $thtime=date("Y-m-d H:i:s",time()-3600*24); + + $CACHE->clean(); + $DB->exec("delete from pre_order where status=0 and addtime<'{$thtime}'"); + + $day = date("Ymd", strtotime("-1 day")); + + $paytype = []; + $rs = $DB->getAll("SELECT id,name,showname FROM pre_type WHERE status=1"); + foreach($rs as $row){ + $paytype[$row['id']] = $row['showname']; + } + unset($rs); + + $channel = []; + $rs = $DB->getAll("SELECT id,name FROM pre_channel WHERE status=1"); + foreach($rs as $row){ + $channel[$row['id']] = $row['name']; + } + unset($rs); + + $lastday=date("Y-m-d",strtotime("-1 day")); + $today=date("Y-m-d"); + + $rs=$DB->query("SELECT type,channel,money from pre_order where status=1 and date>='$lastday' and date<'$today'"); + foreach($paytype as $id=>$type){ + $order_paytype[$id]=0; + } + foreach($channel as $id=>$type){ + $order_channel[$id]=0; + } + while($row = $rs->fetch()) + { + $order_paytype[$row['type']]+=$row['money']; + $order_channel[$row['channel']]+=$row['money']; + } + foreach($order_paytype as $k=>$v){ + $order_paytype[$k] = round($v,2); + } + foreach($order_channel as $k=>$v){ + $order_channel[$k] = round($v,2); + } + $allmoney=0; + foreach($order_paytype as $money){ + $allmoney+=$money; + } + + $order_lastday['all']=$allmoney; + $order_lastday['paytype']=$order_paytype; + $order_lastday['channel']=$order_channel; + + $CACHE->save('order_'.$day, serialize($order_lastday)); + + saveSetting('order_time', $date); + exit($day.'订单统计与清理任务执行成功'); +} \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..05a65cf Binary files /dev/null and b/favicon.ico differ diff --git a/getshop.php b/getshop.php new file mode 100644 index 0000000..101a7f5 --- /dev/null +++ b/getshop.php @@ -0,0 +1,18 @@ +getRow("SELECT * FROM ".DBQZ."_order WHERE trade_no='{$trade_no}' limit 1"); +if($row['status']>=1){ + $url=creat_callback($row); + exit('{"code":1,"msg":"付款成功","backurl":"'.$url['return'].'"}'); +}else{ + exit('{"code":-1,"msg":"未付款"}'); +} + +?> \ No newline at end of file diff --git a/includes/.htaccess b/includes/.htaccess new file mode 100644 index 0000000..3418e55 --- /dev/null +++ b/includes/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/includes/360safe/360webscan.php b/includes/360safe/360webscan.php new file mode 100644 index 0000000..300882c --- /dev/null +++ b/includes/360safe/360webscan.php @@ -0,0 +1,152 @@ +|<.*(data|src)=data:text\\/html.*>|\\b(alert\\(|confirm\\(|expression\\(|prompt\\(|benchmark\s*?\(.*\)|sleep\s*?\(.*\)|\\b(group_)?concat[\\s\\/\\*]*?\\([^\\)]+?\\)|\bcase[\s\/\*]*?when[\s\/\*]*?\([^\)]+?\)|load_file\s*?\\()|<[a-z]+?\\b[^>]*?\\bon([a-z]{4,})\s*?=|^\\+\\/v(8|9)|\\b(and|or)\\b\\s*?([\\(\\)'\"\\d]+?=[\\(\\)'\"\\d]+?|[\\(\\)'\"a-zA-Z]+?=[\\(\\)'\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.*\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)|UPDATE\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE)@{0,2}(\\(.+\\)|\\s+?.+?\\s+?|(`|'|\").*?(`|'|\"))FROM(\\(.+\\)|\\s+?.+?|(`|'|\").*?(`|'|\"))|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)|<.*(iframe|frame|style|embed|object|frameset|meta|xml)"; +//post拦截规则 +$postfilter = "<.*=(&#\\d+?;?)+?>|<.*data=data:text\\/html.*>|\\b(alert\\(|confirm\\(|expression\\(|prompt\\(|benchmark\s*?\(.*\)|sleep\s*?\(.*\)|\\b(group_)?concat[\\s\\/\\*]*?\\([^\\)]+?\\)|\bcase[\s\/\*]*?when[\s\/\*]*?\([^\)]+?\)|load_file\s*?\\()|<[^>]*?\\b(onerror|onmousemove|onload|onclick|onmouseover)\\b|\\b(and|or)\\b\\s*?([\\(\\)'\"\\d]+?=[\\(\\)'\"\\d]+?|[\\(\\)'\"a-zA-Z]+?=[\\(\\)'\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.*\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)|UPDATE\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE)(\\(.+\\)|\\s+?.+?\\s+?|(`|'|\").*?(`|'|\"))FROM(\\(.+\\)|\\s+?.+?|(`|'|\").*?(`|'|\"))|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)|<.*(iframe|frame|style|embed|object|frameset|meta|xml)"; +//cookie拦截规则 +$cookiefilter = "benchmark\s*?\(.*\)|sleep\s*?\(.*\)|load_file\s*?\\(|\\b(and|or)\\b\\s*?([\\(\\)'\"\\d]+?=[\\(\\)'\"\\d]+?|[\\(\\)'\"a-zA-Z]+?=[\\(\\)'\"a-zA-Z]+?|>|<|\s+?[\\w]+?\\s+?\\bin\\b\\s*?\(|\\blike\\b\\s+?[\"'])|\\/\\*.*\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)|UPDATE\s*(\(.+\)\s*|@{1,2}.+?\s*|\s+?.+?|(`|'|\").*?(`|'|\")\s*)SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE)@{0,2}(\\(.+\\)|\\s+?.+?\\s+?|(`|'|\").*?(`|'|\"))FROM(\\(.+\\)|\\s+?.+?|(`|'|\").*?(`|'|\"))|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)"; +//referer获取 +$webscan_referer = empty($_SERVER['HTTP_REFERER']) ? array() : array('HTTP_REFERER'=>$_SERVER['HTTP_REFERER']); + +/** + * 关闭用户错误提示 + */ +function webscan_error() { + if (ini_get('display_errors')) { + ini_set('display_errors', '0'); + } +} + +/** + * 数据统计回传 + */ +function webscan_slog($logs) { + //日志记录 + return true; +} +/** + * 参数拆分 + */ +function webscan_arr_foreach($arr) { + static $str; + static $keystr; + if (!is_array($arr)) { + return $arr; + } + foreach ($arr as $key => $val ) { + $keystr=$keystr.$key; + if (is_array($val)) { + + webscan_arr_foreach($val); + } else { + + $str[] = $val.$keystr; + } + } + return implode($str); +} + +/** + * 防护提示页 + */ +function webscan_pape(){ + $pape=<< + + +输入内容存在危险字符,安全起见,已被本站拦截 + + + +
    +
    +
    +
    返回上一页
    +
    +
    + + +HTML; + echo $pape; +} + +/** + * 攻击检查拦截 + */ +function webscan_StopAttack($StrFiltKey,$StrFiltValue,$ArrFiltReq,$method) { + $StrFiltValue=webscan_arr_foreach($StrFiltValue); + if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1){ + webscan_slog(array('ip' => $_SERVER["REMOTE_ADDR"],'time'=>strftime("%Y-%m-%d %H:%M:%S"),'page'=>$_SERVER["PHP_SELF"],'method'=>$method,'rkey'=>$StrFiltKey,'rdata'=>$StrFiltValue,'user_agent'=>$_SERVER['HTTP_USER_AGENT'],'request_url'=>$_SERVER["REQUEST_URI"])); + exit(webscan_pape()); + } + if (preg_match("/".$ArrFiltReq."/is",$StrFiltKey)==1){ + webscan_slog(array('ip' => $_SERVER["REMOTE_ADDR"],'time'=>strftime("%Y-%m-%d %H:%M:%S"),'page'=>$_SERVER["PHP_SELF"],'method'=>$method,'rkey'=>$StrFiltKey,'rdata'=>$StrFiltKey,'user_agent'=>$_SERVER['HTTP_USER_AGENT'],'request_url'=>$_SERVER["REQUEST_URI"])); + exit(webscan_pape()); + } + +} +/** + * 拦截目录白名单 + */ +function webscan_white($webscan_white_name,$webscan_white_url=array()) { + $url_path=$_SERVER['SCRIPT_NAME']; + $url_var=$_SERVER['QUERY_STRING']; + if (preg_match("/".$webscan_white_name."/is",$url_path)==1&&!empty($webscan_white_name)) { + return false; + } + foreach ($webscan_white_url as $key => $value) { + if(!empty($url_var)&&!empty($value)){ + if (stristr($url_path,$key)&&stristr($url_var,$value)) { + return false; + } + } + elseif (empty($url_var)&&empty($value)) { + if (stristr($url_path,$key)) { + return false; + } + } + + } + + return true; +} + +if ($webscan_switch&&webscan_white($webscan_white_directory,$webscan_white_url)) { + if ($webscan_get) { + foreach($_GET as $key=>$value) { + webscan_StopAttack($key,$value,$getfilter,"GET"); + } + } + if ($webscan_post) { + foreach($_POST as $key=>$value) { + webscan_StopAttack($key,$value,$postfilter,"POST"); + } + } + if ($webscan_cookie) { + foreach($_COOKIE as $key=>$value) { + webscan_StopAttack($key,$value,$cookiefilter,"COOKIE"); + } + } + if ($webscan_referre) { + foreach($webscan_referer as $key=>$value) { + webscan_StopAttack($key,$value,$postfilter,"REFERRER"); + } + } +} + +?> diff --git a/includes/360safe/webscan_cache.php b/includes/360safe/webscan_cache.php new file mode 100644 index 0000000..6fc2260 --- /dev/null +++ b/includes/360safe/webscan_cache.php @@ -0,0 +1,14 @@ + 'mod=admin-set'); +?> \ No newline at end of file diff --git a/includes/ValidateCode.class.php b/includes/ValidateCode.class.php new file mode 100644 index 0000000..965444a --- /dev/null +++ b/includes/ValidateCode.class.php @@ -0,0 +1,75 @@ +font = ROOT_PATH.'/../assets/font/elephant.ttf'; + } + + //生成随机码 + private function createCode() { + $_len = strlen($this->charset)-1; + for ($i=0;$i<$this->codelen;$i++) { + $this->code .= $this->charset[mt_rand(0,$_len)]; + } + } + + //生成背景 + private function createBg() { + $this->img = imagecreatetruecolor($this->width, $this->height); + $color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255)); + imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color); + } + + //生成文字 + private function createFont() { + $_x = $this->width / $this->codelen; + for ($i=0;$i<$this->codelen;$i++) { + $this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); + imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]); + } + } + + //生成线条、雪花 + private function createLine() { + for ($i=0;$i<6;$i++) { + $color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); + imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color); + } + for ($i=0;$i<100;$i++) { + $color = imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)); + imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color); + } + } + + //输出 + private function outPut() { + header('Content-type:image/png'); + imagepng($this->img); + imagedestroy($this->img); + } + + //对外生成 + public function doimg() { + $this->createBg(); + $this->createCode(); + $this->createLine(); + $this->createFont(); + $this->outPut(); + } + + //获取验证码 + public function getCode() { + return strtolower($this->code); + } +} \ No newline at end of file diff --git a/includes/autoloader.php b/includes/autoloader.php new file mode 100644 index 0000000..2c7c70f --- /dev/null +++ b/includes/autoloader.php @@ -0,0 +1,37 @@ +点此安装'; +exit(); +} + +$DB = new \lib\PdoHelper($dbconfig); + +if($DB->query("select * from pre_config where 1")==FALSE)//检测安装2 +{ +header('Content-type:text/html;charset=utf-8'); +echo '你还没安装!点此安装'; +exit(); +} + + +$CACHE=new \lib\Cache(); +$conf=$CACHE->pre_fetch(); +define('SYS_KEY', $conf['syskey']); +if(!$conf['localurl'])$conf['localurl'] = $siteurl; +$password_hash='!@#%!s!0'; + +include_once(SYSTEM_ROOT."functions.php"); +include_once(SYSTEM_ROOT."member.php"); + +if (!file_exists(ROOT.'install/install.lock') && file_exists(ROOT.'install/index.php')) { + sysmsg('

    检测到无 install.lock 文件

    • 如果您尚未安装本程序,请前往安装
    • 如果您已经安装本程序,请手动放置一个空的 install.lock 文件到 /install 文件夹下,为了您站点安全,在您完成它之前我们不会工作。

    为什么必须建立 install.lock 文件?

    它是安装保护文件,如果检测不到它,就会认为站点还没安装,此时任何人都可以安装/重装你的网站。

    ');exit; +} +?> \ No newline at end of file diff --git a/includes/functions.php b/includes/functions.php new file mode 100644 index 0000000..87809e5 --- /dev/null +++ b/includes/functions.php @@ -0,0 +1,763 @@ +send($to, $sub, $msg, $conf['mail_name2'], $conf['sitename']); + }elseif($conf['mail_cloud']==2){ + $mail = new \lib\mail\Aliyun($conf['mail_apiuser'], $conf['mail_apikey']); + return $mail->send($to, $sub, $msg, $conf['mail_name2'], $conf['sitename']); + }else{ + if(!$conf['mail_name'] || !$conf['mail_smtp'] || !$conf['mail_pwd'])return false; + $From = $conf['mail_name']; + $Host = $conf['mail_smtp']; + $Port = $conf['mail_port']; + $SMTPAuth = 1; + $Username = $conf['mail_name']; + $Password = $conf['mail_pwd']; + $Nickname = $conf['sitename']; + $SSL = $conf['mail_port']==465?1:0; + $mail = new \lib\mail\SMTP($Host , $Port , $SMTPAuth , $Username , $Password , $SSL); + $mail->att = array(); + if($mail->send($to , $From , $sub , $msg, $Nickname)) { + return true; + } else { + return $mail->log; + } + } +} +function send_sms($phone, $code, $scope='reg'){ + global $conf; + if($scope == 'reg'){ + $moban = $conf['sms_tpl_reg']; + }elseif($scope == 'login'){ + $moban = $conf['sms_tpl_login']; + }elseif($scope == 'find'){ + $moban = $conf['sms_tpl_find']; + }elseif($scope == 'edit'){ + $moban = $conf['sms_tpl_edit']; + } + if($conf['sms_api']==1){ + $ssender = new \lib\sms\TencentSms($conf['sms_appid'], $conf['sms_appkey']); + $params = array($code, $conf['sitename']); + $smsSign = $conf['sms_sign']; + $result = $ssender->sendWithParam("86", $phone, $moban, $params, $smsSign, "", ""); + $arr = json_decode($result,true); + if(array_key_exists('result',$arr) && $arr['result']==0){ + return true; + }else{ + return $arr['errmsg']; + } + }elseif($conf['sms_api']==2){ + $sms = new \lib\sms\Aliyun($conf['sms_appid'], $conf['sms_appkey']); + $arr = $sms->send($phone, $code, $moban, $conf['sms_sign'], $conf['sitename']); + if(array_key_exists('Code',$arr) && $arr['Code']=='OK'){ + return true; + }else{ + return $arr['Message']; + } + }else{ + $app=$conf['sitename']; + $url = 'http://api.978w.cn/yzmsms/index/appkey/'.$conf['sms_appkey'].'/phone/'.$phone.'/moban/'.$moban.'/app/'.$app.'/code/'.$code; + $data=get_curl($url); + $arr=json_decode($data,true); + if($arr['status']=='200'){ + return true; + }else{ + return $arr['error_msg_zh']; + } + } +} +function daddslashes($string, $force = 0, $strip = FALSE) { + !defined('MAGIC_QUOTES_GPC') && define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc()); + if(!MAGIC_QUOTES_GPC || $force) { + if(is_array($string)) { + foreach($string as $key => $val) { + $string[$key] = daddslashes($val, $force, $strip); + } + } else { + $string = addslashes($strip ? stripslashes($string) : $string); + } + } + return $string; +} + +function strexists($string, $find) { + return !(strpos($string, $find) === FALSE); +} + +function dstrpos($string, $arr) { + if(empty($string)) return false; + foreach((array)$arr as $v) { + if(strpos($string, $v) !== false) { + return true; + } + } + return false; +} + +function checkmobile() { + $useragent = strtolower($_SERVER['HTTP_USER_AGENT']); + $ualist = array('android', 'midp', 'nokia', 'mobile', 'iphone', 'ipod', 'blackberry', 'windows phone'); + if((dstrpos($useragent, $ualist) || strexists($_SERVER['HTTP_ACCEPT'], "VND.WAP") || strexists($_SERVER['HTTP_VIA'],"wap"))) + return true; + else + return false; +} +function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { + $ckey_length = 4; + $key = md5($key ? $key : ENCRYPT_KEY); + $keya = md5(substr($key, 0, 16)); + $keyb = md5(substr($key, 16, 16)); + $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; + $cryptkey = $keya.md5($keya.$keyc); + $key_length = strlen($cryptkey); + $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; + $string_length = strlen($string); + $result = ''; + $box = range(0, 255); + $rndkey = array(); + for($i = 0; $i <= 255; $i++) { + $rndkey[$i] = ord($cryptkey[$i % $key_length]); + } + for($j = $i = 0; $i < 256; $i++) { + $j = ($j + $box[$i] + $rndkey[$i]) % 256; + $tmp = $box[$i]; + $box[$i] = $box[$j]; + $box[$j] = $tmp; + } + for($a = $j = $i = 0; $i < $string_length; $i++) { + $a = ($a + 1) % 256; + $j = ($j + $box[$a]) % 256; + $tmp = $box[$a]; + $box[$a] = $box[$j]; + $box[$j] = $tmp; + $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256])); + } + if($operation == 'DECODE') { + if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) { + return substr($result, 26); + } else { + return ''; + } + } else { + return $keyc.str_replace('=', '', base64_encode($result)); + } +} + +function random($length, $numeric = 0) { + $seed = base_convert(md5(microtime().$_SERVER['DOCUMENT_ROOT']), 16, $numeric ? 10 : 35); + $seed = $numeric ? (str_replace('0', '', $seed).'012340567890') : ($seed.'zZ'.strtoupper($seed)); + $hash = ''; + $max = strlen($seed) - 1; + for($i = 0; $i < $length; $i++) { + $hash .= $seed{mt_rand(0, $max)}; + } + return $hash; +} +function showmsg($content = '未知的异常',$type = 4,$back = false) +{ +switch($type) +{ +case 1: + $panel="success"; +break; +case 2: + $panel="info"; +break; +case 3: + $panel="warning"; +break; +case 4: + $panel="danger"; +break; +} + +echo '
    +
    +

    提示信息

    +
    +
    '; +echo $content; + +if ($back) { + echo '
    << 返回上一页'; +} +else + echo '
    << 返回上一页'; + +echo '
    +
    '; + exit; +} +function sysmsg($msg = '未知的异常',$title = '站点提示信息') { + ?> + + + + + + <?php echo $title?> + + + + '.$title.''; + echo $msg; ?> + + + getColumn("SELECT v FROM pre_config WHERE k=:k LIMIT 1", [':k'=>$k]); + $cache = $CACHE->get($k); + return $cache[$k]; +} +function saveSetting($k, $v){ + global $DB; + return $DB->exec("REPLACE INTO pre_config SET v=:v,k=:k", [':v'=>$v, ':k'=>$k]); +} + +function creat_callback($data){ + global $DB; + $key=$DB->getColumn("SELECT `key` FROM pre_user WHERE uid='{$data['uid']}' LIMIT 1"); + $type=$DB->getColumn("SELECT name FROM pre_type WHERE id='{$data['type']}' LIMIT 1"); + $array=array('pid'=>$data['uid'],'trade_no'=>$data['trade_no'],'out_trade_no'=>$data['out_trade_no'],'type'=>$type,'name'=>$data['name'],'money'=>$data['money'],'money'=>$data['money'],'trade_status'=>'TRADE_SUCCESS'); + $arg=\lib\PayUtils::argSort(\lib\PayUtils::paraFilter($array)); + $prestr=\lib\PayUtils::createLinkstring($arg); + $urlstr=\lib\PayUtils::createLinkstringUrlencode($arg); + $sign=\lib\PayUtils::md5Sign($prestr, $key); + if(strpos($data['notify_url'],'?')) + $url['notify']=$data['notify_url'].'&'.$urlstr.'&sign='.$sign.'&sign_type=MD5'; + else + $url['notify']=$data['notify_url'].'?'.$urlstr.'&sign='.$sign.'&sign_type=MD5'; + if(strpos($data['return_url'],'?')) + $url['return']=$data['return_url'].'&'.$urlstr.'&sign='.$sign.'&sign_type=MD5'; + else + $url['return']=$data['return_url'].'?'.$urlstr.'&sign='.$sign.'&sign_type=MD5'; + if($data['tid']>0){ + $url['return']=$data['return_url']; + } + return $url; +} + +function creat_callback_user($data, $key=null){ + global $DB; + if(!$key)$key=$DB->getColumn("SELECT `key` FROM pre_user WHERE uid='{$data['uid']}' LIMIT 1"); + $type=$DB->getColumn("SELECT name FROM pre_type WHERE id='{$data['type']}' LIMIT 1"); + $array=array('pid'=>$data['uid'],'trade_no'=>$data['trade_no'],'out_trade_no'=>$data['out_trade_no'],'type'=>$type,'name'=>$data['name'],'money'=>$data['money'],'money'=>$data['money'],'trade_status'=>$data['type']>0?'TRADE_SUCCESS':'TRADE_CLOSED'); + $arg=\lib\PayUtils::argSort(\lib\PayUtils::paraFilter($array)); + $prestr=\lib\PayUtils::createLinkstring($arg); + $urlstr=\lib\PayUtils::createLinkstringUrlencode($arg); + $sign=\lib\PayUtils::md5Sign($prestr, $key); + if(strpos($data['notify_url'],'?')) + $url['notify']=$data['notify_url'].'&'.$urlstr.'&sign='.$sign.'&sign_type=MD5'; + else + $url['notify']=$data['notify_url'].'?'.$urlstr.'&sign='.$sign.'&sign_type=MD5'; + if(strpos($data['return_url'],'?')) + $url['return']=$data['return_url'].'&'.$urlstr.'&sign='.$sign.'&sign_type=MD5'; + else + $url['return']=$data['return_url'].'?'.$urlstr.'&sign='.$sign.'&sign_type=MD5'; + if($data['tid']>0){ + $url['return']=$data['return_url']; + } + return $url; +} + +function getdomain($url){ + $arr=parse_url($url); + return $arr['host']; +} + +function do_notify($url){ + $return = curl_get($url); + if(strpos($return,'success')!==false || strpos($return,'SUCCESS')!==false || strpos($return,'Success')!==false){ + return true; + }else{ + return false; + } +} + +function processOrder($srow,$notify=true){ + global $DB,$CACHE,$conf; + $addmoney = $srow['getmoney']; + if($srow['tid']==1){ //商户注册 + changeUserMoney($srow['uid'], $addmoney, true, '订单收入', $srow['trade_no']); + $info = unserialize($CACHE->read('reg_'.$srow['trade_no'])); + if($info){ + $DB->exec("UPDATE `pre_regcode` SET `status` ='1' WHERE `id`=:codeid", [':codeid'=>$info['codeid']]); + $key = random(32); + $sds=$DB->exec("INSERT INTO `pre_user` (`key`, `money`, `email`, `phone`, `addtime`, `pay`, `settle`, `keylogin`, `apply`, `status`) VALUES (:key, '0.00', :email, :phone, :addtime, 1, 1, 0, 0, 1)", [':key'=>$key, ':email'=>$info['email'], ':phone'=>$info['phone'], ':addtime'=>$info['addtime']]); + $uid=$DB->lastInsertId(); + $pwd = getMd5Pwd($info['pwd'], $uid); + $DB->exec("UPDATE `pre_user` SET `pwd` ='{$pwd}' WHERE `uid`='$uid'"); + if($sds && !empty($info['email'])){ + $sub = $conf['sitename'].' - 注册成功通知'; + $msg = '

    商户注册成功通知

    感谢您注册'.$conf['sitename'].'!
    您的登录账号:'.$info['email'].'
    您的商户ID:'.$uid.'
    您的商户秘钥:'.$key.'
    '.$conf['sitename'].'官网:'.$_SERVER['HTTP_HOST'].'
    商户管理后台】'; + $result = send_mail($info['email'], $sub, $msg); + } + } + }else if($srow['tid']==2){ //充值余额 + changeUserMoney($srow['uid'], $addmoney, true, '余额充值', $srow['trade_no']); + }else if($srow['tid']==3){ //一码支付 + changeUserMoney($srow['uid'], $addmoney, true, '在线收款', $srow['trade_no']); + }else if($srow['tid']==4){ //购买用户组 + $start = strpos($srow['name'],'#')+1; + $end = strrpos($srow['name'],'#'); + $gid=intval(substr($srow['name'],$start,$end-$start)); + changeUserGroup($srow['uid'],$gid); + }else{ + changeUserMoney($srow['uid'], $addmoney, true, '订单收入', $srow['trade_no']); + if($notify==true){ + $url=creat_callback($srow); + if(do_notify($url['notify'])){ + $DB->exec("UPDATE pre_order SET notify=0 WHERE trade_no='{$srow['trade_no']}'"); + }else{ + $DB->exec("UPDATE pre_order SET notify=1 WHERE trade_no='{$srow['trade_no']}'"); + } + } + } +} + +function changeUserMoney($uid, $money, $add=true, $type=null, $orderid=null){ + global $DB; + if($money<=0)return; + if($type=='订单退款'){ + $isrefund = $DB->getColumn("SELECT id FROM pre_record WHERE type='订单退款' AND trade_no='{$orderid}' LIMIT 1"); + if($isrefund)return; + } + $oldmoney = $DB->getColumn("SELECT money FROM pre_user WHERE uid='{$uid}' LIMIT 1"); + if($add == true){ + $action = 1; + $newmoney = round($oldmoney+$money, 2); + }else{ + $action = 2; + $newmoney = round($oldmoney-$money, 2); + } + $res = $DB->exec("UPDATE pre_user SET money='{$newmoney}' WHERE uid='{$uid}'"); + $DB->exec("INSERT INTO `pre_record` (`uid`, `action`, `money`, `oldmoney`, `newmoney`, `type`, `trade_no`, `date`) VALUES (:uid, :action, :money, :oldmoney, :newmoney, :type, :orderid, NOW())", [':uid'=>$uid, ':action'=>$action, ':money'=>$money, ':oldmoney'=>$oldmoney, ':newmoney'=>$newmoney, ':type'=>$type, ':orderid'=>$orderid]); + return $res; +} + +function changeUserGroup($uid, $gid){ + global $DB; + return $DB->exec("UPDATE pre_user SET gid='{$gid}' WHERE uid='{$uid}'"); +} + +function checkIfActive($string) { + $array=explode(',',$string); + $php_self=substr($_SERVER['REQUEST_URI'],strrpos($_SERVER['REQUEST_URI'],'/')+1,strrpos($_SERVER['REQUEST_URI'],'.')-strrpos($_SERVER['REQUEST_URI'],'/')-1); + if (in_array($php_self,$array)){ + return 'active'; + }else + return null; +} + +function api_refund($trade_no, &$message){ + global $DB,$conf; + $order = $DB->getRow("SELECT * FROM pre_order WHERE trade_no='$trade_no' LIMIT 1"); + if(!$order){ + $message = '该订单号不存在'; + return false; + } + $channel = \lib\Channel::get($order['channel']); + if(!$channel){ + $message = '当前支付通道信息不存在'; + return false; + } + $loadfile = \lib\Plugin::refund($channel['plugin'], $trade_no); + if(!$loadfile){ + $message = '当前支付通道不支持API退款'; + return false; + } + $result = include($loadfile); + if($result && $result['code']==0){ + return true; + }else{ + $message = $result['msg']; + return false; + } +} + +function transferToAlipay($channel, $out_trade_no, $payee_account, $payee_real_name, $money){ + global $conf; + define("IN_PLUGIN", true); + define("PAY_ROOT", PLUGIN_ROOT.'alipay/'); + require_once PAY_ROOT."inc/lib/AopClient.php"; + require_once PAY_ROOT."inc/model/request/AlipayFundTransToaccountTransferRequest.php"; + + if(is_numeric($payee_account) && substr($payee_account,0,4)=='2088' && strlen($payee_account)==16)$payee_type = 'ALIPAY_USERID'; + else $payee_type = 'ALIPAY_LOGONID'; + $BizContent = array( + 'out_biz_no' => $out_trade_no, //商户转账唯一订单号 + 'payee_type' => $payee_type, //收款方账户类型 + 'payee_account' => $payee_account, //收款方账户 + 'amount' => $money, //转账金额 + 'payer_show_name' => $conf['transfer_name'], //付款方显示姓名 + ); + if(!empty($payee_real_name))$BizContent['payee_real_name'] = $payee_real_name; //收款方真实姓名 + + $aop = new AopClient (); + $aop->gatewayUrl = 'https://openapi.alipay.com/gateway.do'; + $aop->appId = $channel['appid']; + $aop->rsaPrivateKey = $channel['appsecret']; + $aop->alipayrsaPublicKey = $channel['appkey']; + $aop->apiVersion = '1.0'; + $aop->signType = 'RSA2'; + $aop->postCharset='UTF-8'; + $aop->format='json'; + $request = new AlipayFundTransToaccountTransferRequest (); + $request->setBizContent(json_encode($BizContent)); + $result = $aop->execute ( $request); + + $data = array(); + $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response"; + $resultCode = $result->$responseNode->code; + if(!empty($resultCode)&&$resultCode == 10000){ + $data['code']=0; + $data['ret']=1; + $data['msg']='success'; + $data['orderid']=$result->$responseNode->order_id; + $data['paydate']=$result->$responseNode->pay_date; + } elseif($resultCode == 40004) { + $data['code']=0; + $data['ret']=0; + $data['msg']='['.$result->$responseNode->sub_code.']'.$result->$responseNode->sub_msg; + $data['sub_code']=$result->$responseNode->sub_code; + $data['sub_msg']=$result->$responseNode->sub_msg; + } elseif(!empty($resultCode)){ + $data['code']=-1; + $data['msg']='['.$result->$responseNode->sub_code.']'.$result->$responseNode->sub_msg; + $data['sub_code']=$result->$responseNode->sub_code; + $data['sub_msg']=$result->$responseNode->sub_msg; + } else { + $data['code']=-1; + $data['msg']='未知错误'; + } + return $data; +} + +function transferToWeixin($channel, $out_trade_no, $payee_account, $payee_real_name, $money){ + global $conf; + define("IN_PLUGIN", true); + define("PAY_ROOT", PLUGIN_ROOT.'wxpay/'); + require_once PAY_ROOT."inc/WxPay.Api.php"; + $input = new WxPayTransfer(); + $input->SetPartner_trade_no($out_trade_no); + $input->SetOpenid($payee_account); + if(!empty($payee_real_name)){ + $input->SetCheck_name('FORCE_CHECK'); + $input->SetRe_user_name($payee_real_name); + }else{ + $input->SetCheck_name('NO_CHECK'); + } + $input->SetAmount($money*100); + $input->SetDesc($conf['transfer_desc']); + $input->SetSpbill_create_ip($_SERVER['SERVER_ADDR']); + $result = WxPayApi::transfer($input); + + $data = array(); + if($result["result_code"]=='SUCCESS'){ + $data['code']=0; + $data['ret']=1; + $data['msg']='success'; + $data['orderid']=$result["payment_no"]; + $data['paydate']=$result["payment_time"]; + } elseif($result["result_code"]=='FAIL' && ($result["err_code"]=='OPENID_ERROR'||$result["err_code"]=='NAME_MISMATCH'||$result["err_code"]=='MONEY_LIMIT'||$result["err_code"]=='V2_ACCOUNT_SIMPLE_BAN')) { + $data['code']=0; + $data['ret']=0; + $data['msg']='['.$result["err_code"].']'.$result["err_code_des"]; + $data['sub_code']=$result["err_code"]; + $data['sub_msg']=$result["err_code_des"]; + } elseif(!empty($result["result_code"])){ + $data['code']=-1; + $data['msg']='['.$result["err_code"].']'.$result["err_code_des"]; + $data['sub_code']=$result["err_code"]; + $data['sub_msg']=$result["err_code_des"]; + } else { + $data['code']=-1; + $data['msg']='未知错误 '.$result["return_msg"]; + } + return $data; +} + +function transferToQQ($channel, $out_trade_no, $payee_account, $payee_real_name, $money){ + global $conf; + define("IN_PLUGIN", true); + define("PAY_ROOT", PLUGIN_ROOT.'qqpay/'); + require_once (PAY_ROOT.'inc/qpayMchAPI.class.php'); + //入参 + $params = array(); + $params["input_charset"] = 'UTF-8'; + $params["uin"] = $payee_account; + $params["out_trade_no"] = $out_trade_no; + $params["fee_type"] = "CNY"; + $params["total_fee"] = $money*100; + $params["memo"] = $conf['transfer_desc']; //付款备注 + if(!empty($payee_real_name)){ + $params["check_name"] = 'FORCE_CHECK'; //校验用户姓名,"FORCE_CHECK"校验实名 + }else{ + $params["check_name"] = 'false'; //校验用户姓名,"FORCE_CHECK"校验实名 + } + $params["re_user_name"] = $payee_real_name; //收款用户真实姓名 + $params["check_real_name"] = "0"; //校验用户是否实名 + $params["op_user_id"] = QpayMchConf::OP_USERID; + $params["op_user_passwd"] = md5(QpayMchConf::OP_USERPWD); + $params["spbill_create_ip"] = $_SERVER['SERVER_ADDR']; + + //api调用 + $qpayApi = new QpayMchAPI('https://api.qpay.qq.com/cgi-bin/epay/qpay_epay_b2c.cgi', true, 10); + $ret = $qpayApi->reqQpay($params); + $result = QpayMchUtil::xmlToArray($ret); + + $data = array(); + if ($result['return_code']=='SUCCESS' && $result['result_code']=='SUCCESS') { + $data['code']=0; + $data['ret']=1; + $data['msg']='success'; + $data['orderid']=$result["transaction_id"]; + $data['paydate']=date('Y-m-d H:i:s',time()); + }elseif ($result['err_code']=='TRANSFER_FEE_LIMIT_ERROR' || $result['err_code']=='TRANSFER_FAIL' || $result['err_code']=='NOTENOUGH' || $result['err_code']=='APPID_OR_OPENID_ERR' || $result['err_code']=='TOTAL_FEE_OUT_OF_LIMIT' || $result['err_code']=='REALNAME_CHECK_ERROR' || $result['err_code']=='RE_USER_NAME_CHECK_ERROR') { + $data['code']=0; + $data['ret']=0; + $data['msg']='['.$result["err_code"].']'.$result["err_code_des"]; + $data['sub_code']=$result["err_code"]; + $data['sub_msg']=$result["err_code_des"]; + }elseif(isset($result['result_code'])){ + $data['code']=-1; + $data['msg']='['.$result["err_code"].']'.$result["err_code_des"]; + $data['sub_code']=$result["err_code"]; + $data['sub_msg']=$result["err_code_des"]; + }else{ + $data['code']=-1; + $data['msg']='未知错误 '.$result["return_msg"]; + } + return $data; +} + +function ordername_replace($name,$oldname,$uid){ + global $DB; + if(strpos($name,'[name]')!==false){ + $name = str_replace('[name]', $oldname, $name); + } + if(strpos($name,'[qq]')!==false){ + $qq = $DB->getColumn("SELECT qq FROM pre_user WHERE uid='{$uid}' limit 1"); + $name = str_replace('[qq]', $qq, $name); + } + if(strpos($name,'[time]')!==false){ + $name = str_replace('[time]', time(), $name); + } + return $name; +} + +function is_idcard( $id ) +{ + $id = strtoupper($id); + $regx = "/(^\d{17}([0-9]|X)$)/"; + $arr_split = array(); + if(strlen($id)!=18 || !preg_match($regx, $id)) + { + return false; + } + $regx = "/^(\d{6})+(\d{4})+(\d{2})+(\d{2})+(\d{3})([0-9]|X)$/"; + @preg_match($regx, $id, $arr_split); + $dtm_birth = $arr_split[2] . '/' . $arr_split[3]. '/' .$arr_split[4]; + if(!strtotime($dtm_birth)) //检查生日日期是否正确 + { + return false; + } + else + { + //检验18位身份证的校验码是否正确。 + //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。 + $arr_int = array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2); + $arr_ch = array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'); + $sign = 0; + for ( $i = 0; $i < 17; $i++ ) + { + $b = (int) $id{$i}; + $w = $arr_int[$i]; + $sign += $b * $w; + } + $n = $sign % 11; + $val_num = $arr_ch[$n]; + if ($val_num != substr($id,17, 1)) + { + return false; + } + else + { + return true; + } + } +} + +function getwxdwz($channel,$longurl) { + $id = $channel['appid']; + $secret = $channel['appsecret']; + $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$id."&secret=".$secret; + $token = getAccessToken($url); + + $arr = array('action'=>'long2short', 'long_url'=>$longurl); + $post = json_encode($arr); + $url = "https://api.weixin.qq.com/cgi-bin/shorturl?access_token=".$token.""; + $result = get_curl($url, $post); + $arr = json_decode($result, true); + if(@array_key_exists('errcode',$arr) && $arr['errcode']==0){ + return $arr['short_url']; + }else{ + return false; + } +} +function getAccessToken($url) { + // access_token 应该全局存储与更新,以下代码以写入到文件中做示例 + $data = json_decode(@file_get_contents(SYSTEM_ROOT."access_token.json"), true); + if ($data['expire_time'] < time()) { + // 如果是企业号用以下URL获取access_token + $output = get_curl($url); + $res = json_decode($output, true); + $access_token = $res['access_token']; + if ($access_token) { + $data['expire_time'] = time() + 600; + $data['access_token'] = $access_token; + file_put_contents(SYSTEM_ROOT."access_token.json", $data); + } + } else { + $access_token = $data['access_token']; + } + return $access_token; +} +function getdwz($longurl){ + $url = preg_replace('/^(http|https|thunder|qqdl|ed2k|Flashget|qbrowser):\/\//i', '', $longurl); + $url = 'https://buluo.qq.com/cgi-bin/bar/extra/gen_short_url?urls=[%22'.urlencode($url).'%22]&r=0.9179819480050355'; + $cookie = 'BULUO_TICKET=VcvoIeiMSTp1KfAJmdHdrhk87ypMYF3oykq9YIxprKLZBFoZtsNFkbm-LePkqkL1hKRqtUpBTV-eqF_4hSqOpBO3sB0; BL_ID=o3ztss1vi1w-QaMZ2MTlJveJZjNA'; + $data = get_curl($url,0,'https://buluo.qq.com/',$cookie); + $arr = json_decode($data,true); + $short = $arr['result']['ls'][0]['url_code']; + if(!$short){ + return false; + }else{ + return($short); + } +} + +function qrcodelogin($image){ + $url='http://api.cccyun.cc/api/qrcode_noauth.php'; + $post='image='.urlencode($image); + $data = get_curl($url,$post); + $arr=json_decode($data,true); + if(array_key_exists('code',$arr) && $arr['code']==1){ + $result=array("code"=>0,"msg"=>"succ","url"=>$arr['url']); + }elseif(array_key_exists('msg',$arr)){ + $result=array("code"=>-1,"msg"=>$arr['msg']); + }else{ + $result=array("code"=>-1,"msg"=>$data); + } + return $result; +} +?> \ No newline at end of file diff --git a/includes/lib/Cache.php b/includes/lib/Cache.php new file mode 100644 index 0000000..6a8be08 --- /dev/null +++ b/includes/lib/Cache.php @@ -0,0 +1,45 @@ +getColumn("SELECT v FROM pre_cache WHERE k=:key LIMIT 1", [':key'=>$key]); + return $value; + } + public function save($key ,$value, $expire=0) { + if (is_array($value)) $value = serialize($value); + global $DB; + return $DB->exec("REPLACE INTO pre_cache VALUES (:key, :value, :expire)", [':key'=>$key, ':value'=>$value, ':expire'=>$expire]); + } + public function pre_fetch(){ + global $_CACHE; + $_CACHE=array(); + $cache = $this->read('config'); + $_CACHE = @unserialize($cache); + if(empty($_CACHE['version']))$_CACHE = $this->update(); + return $_CACHE; + } + public function update() { + global $DB; + $cache = array(); + $result = $DB->getAll("SELECT * FROM pre_config"); + foreach($result as $row){ + $cache[ $row['k'] ] = $row['v']; + } + $this->save('config', $cache); + return $cache; + } + public function clear($key = 'config') { + global $DB; + return $DB->exec("UPDATE pre_cache SET v='' WHERE k=:key", [':key'=>$key]); + } + public function clean() { + global $DB; + return $DB->exec("DELETE FROM pre_cache WHERE expire>0 AND expire<'".time()."'"); + } +} diff --git a/includes/lib/Channel.php b/includes/lib/Channel.php new file mode 100644 index 0000000..2230a4a --- /dev/null +++ b/includes/lib/Channel.php @@ -0,0 +1,191 @@ +getRow("SELECT * FROM pre_channel WHERE id='$id' LIMIT 1"); + return $value; + } + + // 支付提交处理(输入支付方式名称) + static public function submit($type, $gid=0){ + global $DB; + if(checkmobile()==true){ + $sqls = " AND (device=0 OR device=2)"; + }else{ + $sqls = " AND (device=0 OR device=1)"; + } + $paytype=$DB->getRow("SELECT id,name,status FROM pre_type WHERE name='$type'{$sqls} LIMIT 1"); + if(!$paytype || $paytype['status']==0)sysmsg('支付方式(type)不存在'); + $typeid = $paytype['id']; + $typename = $paytype['name']; + + return self::getSubmitInfo($typeid, $typename, $gid); + } + + // 支付提交处理2(输入支付方式ID) + static public function submit2($typeid, $gid=0){ + global $DB; + $paytype=$DB->getRow("SELECT id,name,status FROM pre_type WHERE id='$typeid' LIMIT 1"); + if(!$paytype || $paytype['status']==0)sysmsg('支付方式(type)不存在'); + $typename = $paytype['name']; + + return self::getSubmitInfo($typeid, $typename, $gid); + } + + //获取通道、插件、费率信息 + static public function getSubmitInfo($typeid, $typename, $gid){ + global $DB; + if($gid>0)$groupinfo=$DB->getColumn("SELECT info FROM pre_group WHERE gid='$gid' LIMIT 1"); + if(!$groupinfo)$groupinfo=$DB->getColumn("SELECT info FROM pre_group WHERE gid=0 LIMIT 1"); + if($groupinfo){ + $info = json_decode($groupinfo,true); + $groupinfo = $info[$typeid]; + if(is_array($groupinfo)){ + $channel = $groupinfo['channel']; + $money_rate = $groupinfo['rate']; + } + else{ + $channel = -1; + $money_rate = null; + } + if($channel==0){ //当前商户关闭该通道 + return false; + } + elseif($channel==-1){ //随机可用通道 + $row=$DB->getRow("SELECT id,plugin,status,rate,apptype FROM pre_channel WHERE type='$typeid' AND status=1 ORDER BY rand() LIMIT 1"); + if($row){ + $channel = $row['id']; + $plugin = $row['plugin']; + $apptype = $row['apptype']; + if(empty($money_rate))$money_rate = $row['rate']; + } + } + else{ + if($groupinfo['type']=='roll'){ //解析轮询组 + $channel = self::getChannelFromRoll($channel); + if($channel==0){ //当前轮询组未开启 + return false; + } + } + $row=$DB->getRow("SELECT plugin,status,rate,apptype FROM pre_channel WHERE id='$channel' LIMIT 1"); + if($row['status']==1){ + $plugin = $row['plugin']; + $apptype = $row['apptype']; + if(empty($money_rate))$money_rate = $row['rate']; + } + } + }else{ + $row=$DB->getRow("SELECT id,plugin,status,rate,apptype FROM pre_channel WHERE type='$typeid' AND status=1 ORDER BY rand() LIMIT 1"); + if($row){ + $channel = $row['id']; + $plugin = $row['plugin']; + $apptype = $row['apptype']; + $money_rate = $row['rate']; + } + } + if(!$plugin || !$channel){ //通道已关闭 + return false; + } + return ['typeid'=>$typeid, 'typename'=>$typename, 'plugin'=>$plugin, 'channel'=>$channel, 'rate'=>$money_rate, 'apptype'=>$apptype]; + } + + // 获取当前商户可用支付方式 + static public function getTypes($gid=0){ + global $DB; + if(checkmobile()==true){ + $sqls = " AND (device=0 OR device=2)"; + }else{ + $sqls = " AND (device=0 OR device=1)"; + } + $rows = $DB->getAll("SELECT * FROM pre_type WHERE status=1{$sqls}"); + $paytype = []; + foreach($rows as $row){ + $paytype[$row['id']] = $row; + } + if($gid>0)$groupinfo=$DB->getColumn("SELECT info FROM pre_group WHERE gid='$gid' LIMIT 1"); + if(!$groupinfo)$groupinfo=$DB->getColumn("SELECT info FROM pre_group WHERE gid=0 LIMIT 1"); + if($groupinfo){ + $info = json_decode($groupinfo,true); + foreach($info as $id=>$row){ + if(!isset($paytype[$id]))continue; + if($row['channel']==0){ + unset($paytype[$id]); + }elseif($row['channel']==-1){ + $status=$DB->getColumn("SELECT status FROM pre_channel WHERE type='$id' AND status=1 LIMIT 1"); + if(!$status || $status==0){ + unset($paytype[$id]); + }elseif(empty($row['rate'])){ + $paytype[$id]['rate']=$DB->getColumn("SELECT rate FROM pre_channel WHERE type='$id' AND status=1 LIMIT 1"); + }else{ + $paytype[$id]['rate']=$row['rate']; + } + }else{ + if($row['type']=='roll'){ + $status=$DB->getColumn("SELECT status FROM pre_roll WHERE id='{$row['channel']}' LIMIT 1"); + }else{ + $status=$DB->getColumn("SELECT status FROM pre_channel WHERE id='{$row['channel']}' LIMIT 1"); + } + if(!$status || $status==0)unset($paytype[$id]); + else $paytype[$id]['rate']=$row['rate']; + } + } + }else{ + foreach($paytype as $id=>$row){ + $status=$DB->getColumn("SELECT status FROM pre_channel WHERE type='$id' AND status=1 limit 1"); + if(!$status || $status==0)unset($paytype[$id]); + else{ + $paytype[$id]['rate']=$DB->getColumn("SELECT rate FROM pre_channel WHERE type='$id' AND status=1 limit 1"); + } + } + } + return $paytype; + } + + //根据轮询组ID获取支付通道ID + static private function getChannelFromRoll($channel){ + global $DB; + $row=$DB->getRow("SELECT * FROM pre_roll WHERE id='$channel' LIMIT 1"); + if($row['status']==1){ + $info = self::rollinfo_decode($row['info'],true); + if($row['kind']==1){ + $channel = self::random_weight($info); + }else{ + $channel = $info[$row['index']]['name']; + $index = ($row['index'] + 1) % count($info); + $DB->exec("UPDATE pre_roll SET `index`='$index' WHERE id='{$row['id']}'"); + } + return $channel; + } + return false; + } + + //解析轮询组info + static private function rollinfo_decode($content){ + $result = []; + $arr = explode(',',$content); + foreach($arr as $row){ + $a = explode(':',$row); + $result[] = ['name'=>$a[0], 'weight'=>$a[1]]; + } + return $result; + } + + //加权随机 + static private function random_weight($arr){ + $weightSum = 0; + foreach ($arr as $value) { + $weightSum += $value['weight']; + } + if($weightSum<=0)return false; + $randNum = rand(1, $weightSum); + foreach ($arr as $k => $v) { + if ($randNum <= $v['weight']) { + return $v['name']; + } + $randNum -=$v['weight']; + } + } +} diff --git a/includes/lib/GeetestLib.php b/includes/lib/GeetestLib.php new file mode 100644 index 0000000..3b212a2 --- /dev/null +++ b/includes/lib/GeetestLib.php @@ -0,0 +1,273 @@ +captcha_id = $captcha_id; + $this->private_key = $private_key; + } + + /** + * 判断极验服务器是否down机 + * + * @param array $data + * @return int + */ + public function pre_process($param, $new_captcha=1) { + if(!empty($this->captcha_id) && !empty($this->private_key)){ + $data = array('gt'=>$this->captcha_id, + 'new_captcha'=>$new_captcha + ); + $data = array_merge($data,$param); + $query = http_build_query($data); + $url = "http://api.geetest.com/register.php?" . $query; + $challenge = $this->send_request($url); + if (strlen($challenge) != 32) { + $this->failback_process(); + return 0; + } + $this->success_process($challenge); + return 1; + }else{ + $url = "https://www.geetest.com/demo/gt/register-slide?t=" . time() . "123"; + $data = get_curl($url,0,'https://www.geetest.com/demo/slide-popup.html'); + $this->response = json_decode($data, true); + return 1; + } + } + + /** + * @param $challenge + */ + private function success_process($challenge) { + $challenge = md5($challenge . $this->private_key); + $result = array( + 'success' => 1, + 'gt' => $this->captcha_id, + 'challenge' => $challenge, + 'new_captcha'=>1 + ); + $this->response = $result; + } + + /** + * + */ + private function failback_process() { + $rnd1 = md5(rand(0, 100)); + $rnd2 = md5(rand(0, 100)); + $challenge = $rnd1 . substr($rnd2, 0, 2); + $result = array( + 'success' => 0, + 'gt' => $this->captcha_id, + 'challenge' => $challenge, + 'new_captcha'=>1 + ); + $this->response = $result; + } + + /** + * @return mixed + */ + public function get_response_str() { + return json_encode($this->response); + } + + /** + * 返回数组方便扩展 + * + * @return mixed + */ + public function get_response() { + return $this->response; + } + + /** + * 正常模式获取验证结果 + * + * @param string $challenge + * @param string $validate + * @param string $seccode + * @param array $param + * @return int + */ + public function success_validate($challenge, $validate, $seccode,$param, $json_format=1) { + if(!empty($this->captcha_id) && !empty($this->private_key)){ + if (!$this->check_validate($challenge, $validate)) { + return 0; + } + $query = array( + "seccode" => $seccode, + "timestamp"=>time(), + "challenge"=>$challenge, + "captchaid"=>$this->captcha_id, + "json_format"=>$json_format, + "sdk" => self::GT_SDK_VERSION + ); + $query = array_merge($query,$param); + $url = "http://api.geetest.com/validate.php"; + $codevalidate = $this->post_request($url, $query); + $obj = json_decode($codevalidate,true); + if ($obj === false){ + return 0; + } + if ($obj['seccode'] == md5($seccode)) { + return 1; + } else { + return 0; + } + }else{ + $url = "https://www.geetest.com/demo/gt/validate-slide"; + $post = "geetest_challenge=".$challenge."&geetest_validate=".$validate."&geetest_seccode=".$seccode; + $data = get_curl($url,$post,'https://www.geetest.com/demo/slide-popup.html'); + $arr = json_decode($data, true); + if($arr['status'] == 'success')return 1; + else return 0; + } + } + + /** + * 宕机模式获取验证结果 + * + * @param $challenge + * @param $validate + * @param $seccode + * @return int + */ + public function fail_validate($challenge, $validate, $seccode) { + if(md5($challenge) == $validate){ + return 1; + }else{ + return 0; + } + } + + /** + * @param $challenge + * @param $validate + * @return bool + */ + private function check_validate($challenge, $validate) { + if (strlen($validate) != 32) { + return false; + } + if (md5($this->private_key . 'geetest' . $challenge) != $validate) { + return false; + } + + return true; + } + + /** + * GET 请求 + * + * @param $url + * @return mixed|string + */ + private function send_request($url) { + + if (function_exists('curl_exec')) { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, self::$connectTimeout); + curl_setopt($ch, CURLOPT_TIMEOUT, self::$socketTimeout); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $curl_errno = curl_errno($ch); + $data = curl_exec($ch); + curl_close($ch); + if ($curl_errno >0) { + return 0; + }else{ + return $data; + } + } else { + $opts = array( + 'http' => array( + 'method' => "GET", + 'timeout' => self::$connectTimeout + self::$socketTimeout, + ) + ); + $context = stream_context_create($opts); + $data = @file_get_contents($url, false, $context); + if($data){ + return $data; + }else{ + return 0; + } + } + } + + /** + * + * @param $url + * @param array $postdata + * @return mixed|string + */ + private function post_request($url, $postdata = '') { + if (!$postdata) { + return false; + } + + $data = http_build_query($postdata); + if (function_exists('curl_exec')) { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, self::$connectTimeout); + curl_setopt($ch, CURLOPT_TIMEOUT, self::$socketTimeout); + + //不可能执行到的代码 + if (!$postdata) { + curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); + } else { + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data); + } + $data = curl_exec($ch); + + if (curl_errno($ch)) { + $err = sprintf("curl[%s] error[%s]", $url, curl_errno($ch) . ':' . curl_error($ch)); + $this->triggerError($err); + } + + curl_close($ch); + } else { + if ($postdata) { + $opts = array( + 'http' => array( + 'method' => 'POST', + 'header' => "Content-type: application/x-www-form-urlencoded\r\n" . "Content-Length: " . strlen($data) . "\r\n", + 'content' => $data, + 'timeout' => self::$connectTimeout + self::$socketTimeout + ) + ); + $context = stream_context_create($opts); + $data = file_get_contents($url, false, $context); + } + } + + return $data; + } + + + + /** + * @param $err + */ + private function triggerError($err) { + trigger_error($err); + } +} diff --git a/includes/lib/PayUtils.php b/includes/lib/PayUtils.php new file mode 100644 index 0000000..06a9047 --- /dev/null +++ b/includes/lib/PayUtils.php @@ -0,0 +1,88 @@ +$val) { + $arg.=$key."=".$val."&"; + } + //ȥһ&ַ + $arg = substr($arg,0,-1); + + return $arg; + } + /** + * Ԫأա=ֵģʽá&ַƴӳַַurlencode + * @param $para Ҫƴӵ + * return ƴԺַ + */ + static public function createLinkstringUrlencode($para) { + $arg = ""; + foreach ($para as $key=>$val) { + $arg.=$key."=".urlencode($val)."&"; + } + //ȥһ&ַ + $arg = substr($arg,0,-1); + + return $arg; + } + /** + * ȥеĿֵǩ + * @param $para ǩ + * return ȥֵǩǩ + */ + static public function paraFilter($para) { + $para_filter = array(); + foreach ($para as $key=>$val) { + if($key == "sign" || $key == "sign_type" || $val == "")continue; + else $para_filter[$key] = $para[$key]; + } + return $para_filter; + } + /** + * + * @param $para ǰ + * return + */ + static public function argSort($para) { + ksort($para); + reset($para); + return $para; + } + /** + * ǩַ + * @param $prestr Ҫǩַ + * @param $key ˽Կ + * return ǩ + */ + static public function md5Sign($prestr, $key) { + $prestr = $prestr . $key; + return md5($prestr); + } + + /** + * ֤ǩ + * @param $prestr Ҫǩַ + * @param $sign ǩ + * @param $key ˽Կ + * return ǩ + */ + static public function md5Verify($prestr, $sign, $key) { + $prestr = $prestr . $key; + $mysgin = md5($prestr); + + if($mysgin == $sign) { + return true; + } + else { + return false; + } + } +} diff --git a/includes/lib/PdoHelper.php b/includes/lib/PdoHelper.php new file mode 100644 index 0000000..60fa20e --- /dev/null +++ b/includes/lib/PdoHelper.php @@ -0,0 +1,211 @@ +prefix = $dbconfig['dbqz'].'_'; + try { + $this->db = new \PDO("mysql:host={$dbconfig['host']};dbname={$dbconfig['dbname']};port={$dbconfig['port']}",$dbconfig['user'],$dbconfig['pwd']); + } catch (Exception $e) { + exit('链接数据库失败:' . $e->getMessage()); + } + $this->db->exec("set sql_mode = ''"); + $this->db->exec("set names utf8"); + } + + /** + * 设置结果集方式 + * + * @param string $_style + */ + public function setFetchStyle($_style) + { + $this->fetchStyle = $_style; + } + + /** + * 替换数据表前缀 + * @param $_sql + * + * @return mixed + */ + private function dealPrefix($_sql){ + return str_replace($this->sqlPrefix,$this->prefix,$_sql); + } + + /** + * 获取PDOStatement + * @param string $_sql + * @param array $_array + * + * @return \PDOStatement + */ + public function query($_sql, $_array = null) + { + $_sql = $this->dealPrefix($_sql); + if (is_array($_array)) { + $stmt = $this->db->prepare($_sql); + if($stmt) $stmt->execute($_array); + } else { + $stmt = $this->db->query($_sql); + } + return $stmt; + } + + /** + * 查询一条结果 + * + * @param string $_sql string + * @param array $_array array + * + * @return mixed + */ + public function getRow($_sql, $_array = null) + { + $_sql = $this->dealPrefix($_sql); + if (is_array($_array)) { + $stmt = $this->db->prepare($_sql); + if($stmt) $stmt->execute($_array); + } else { + $stmt = $this->db->query($_sql); + } + if($stmt) { + return $stmt->fetch($this->fetchStyle); + }else{ + return false; + } + } + + /** + * 获取所有结果 + * + * @param string $_sql + * @param array $_array + * + * @return array + */ + public function getAll($_sql, $_array = null) + { + $_sql = $this->dealPrefix($_sql); + if (is_array($_array)) { + $stmt = $this->db->prepare($_sql); + if($stmt) $stmt->execute($_array); + } else { + $stmt = $this->db->query($_sql); + } + if($stmt) { + return $stmt->fetchAll($this->fetchStyle); + }else{ + return false; + } + } + + /** + * 获取结果数 + * @param string $_sql + * @param array $_array + * + * @return int + */ + public function getCount($_sql, $_array = null) + { + $_sql = $this->dealPrefix($_sql); + $stmt = $this->db->prepare($_sql); + if($stmt) { + $stmt->execute($_array); + return $stmt->rowCount(); + }else{ + return false; + } + } + + /** + * 获取一个字段值 + * @param string $_sql + * @param array $_array + * + * @return int + */ + public function getColumn($_sql, $_array = null) + { + $_sql = $this->dealPrefix($_sql); + if (is_array($_array)) { + $stmt = $this->db->prepare($_sql); + if($stmt) $stmt->execute($_array); + } else { + $stmt = $this->db->query($_sql); + } + if($stmt) { + return $stmt->fetchColumn(); + }else{ + return false; + } + } + + /** + * 执行语句 + * @param string $_sql + * @param array $_array + * + * @return int|\PDOStatement + */ + public function exec($_sql, $_array = null) + { + $_sql = $this->dealPrefix($_sql); + if (is_array($_array)) { + $stmt = $this->db->prepare($_sql); + if($stmt) { + return $stmt->execute($_array); + }else{ + return false; + } + } else { + return $this->db->exec($_sql); + } + } + + /** + * 返回最后插入行的ID + * + * @return int|\PDOStatement + */ + public function lastInsertId() + { + return $this->db->lastInsertId(); + } + + /** + * 返回错误信息 + * + * @return string|\PDOStatement + */ + public function error() + { + $error = $this->db->errorInfo(); + return '['.$error[1].']'.$error[2]; + } + + function __get($name) + { + return $this->$name; + } + + function __destruct() + { + $this->db = null; + } + + +} \ No newline at end of file diff --git a/includes/lib/Plugin.php b/includes/lib/Plugin.php new file mode 100644 index 0000000..05f2fd2 --- /dev/null +++ b/includes/lib/Plugin.php @@ -0,0 +1,124 @@ +exec("TRUNCATE TABLE pre_plugin"); + $list = self::getList(); + foreach($list as $name){ + if($config = self::getConfig($name)){ + if($config['name']!=$name)continue; + $DB->exec("INSERT INTO pre_plugin VALUES (:name, :showname, :author, :link, :types, :inputs, :select)", [':name'=>$config['name'], ':showname'=>$config['showname'], ':author'=>$config['author'], ':link'=>$config['link'], ':types'=>$config['types'], ':inputs'=>$config['inputs'], ':select'=>$config['select']]); + } + } + return true; + } + + static public function get($name){ + global $DB; + $result = $DB->getRow("SELECT * FROM pre_plugin WHERE name='$name'"); + return $result; + } + + static public function getAll(){ + global $DB; + $result = $DB->getAll("SELECT * FROM pre_plugin"); + return $result; + } +} diff --git a/includes/lib/QC.php b/includes/lib/QC.php new file mode 100644 index 0000000..17694b4 --- /dev/null +++ b/includes/lib/QC.php @@ -0,0 +1,117 @@ +appid = $QC_config["appid"]; + $this->appkey = $QC_config["appkey"]; + $this->callback = $QC_config['callback']; + } + + public function qq_login(){ + $state = md5(uniqid(rand(), TRUE)); + $_SESSION['Oauth_state'] = $state; + + //-------构造请求参数列表 + $keysArr = array( + "response_type" => "code", + "client_id" => $this->appid, + "redirect_uri" => $this->callback, + "state" => $state + ); + + $login_url = self::GET_AUTH_CODE_URL.'?'.http_build_query($keysArr); + + header("Location:$login_url"); + } + + public function qq_callback(){ + if($_GET['state'] != $_SESSION['Oauth_state']){ + sysmsg("

    The state does not match. You may be a victim of CSRF.

    "); + } + //-------请求参数列表 + $keysArr = array( + "grant_type" => "authorization_code", + "client_id" => $this->appid, + "redirect_uri" => $this->callback, + "client_secret" => $this->appkey, + "code" => $_GET['code'] + ); + + //------构造请求access_token的url + $token_url = self::GET_ACCESS_TOKEN_URL.'?'.http_build_query($keysArr); + $response = $this->get_curl($token_url); + + if(strpos($response, "callback") !== false){ + + $lpos = strpos($response, "("); + $rpos = strrpos($response, ")"); + $response = substr($response, $lpos + 1, $rpos - $lpos -1); + $msg = json_decode($response); + + if(isset($msg->error)){ + sysmsg('

    error:

    '.$msg->error.'

    msg :

    '.$msg->error_description); + } + } + + $params = array(); + parse_str($response, $params); + + return $params["access_token"]; + + } + + public function get_openid($access_token){ + + //-------请求参数列表 + $keysArr = array( + "access_token" => $access_token + ); + + $graph_url = self::GET_OPENID_URL.'?'.http_build_query($keysArr); + $response = $this->get_curl($graph_url); + + //--------检测错误是否发生 + if(strpos($response, "callback") !== false){ + + $lpos = strpos($response, "("); + $rpos = strrpos($response, ")"); + $response = substr($response, $lpos + 1, $rpos - $lpos -1); + } + + $user = json_decode($response); + if(isset($user->error)){ + sysmsg('

    error:

    '.$msg->error.'

    msg :

    '.$msg->error_description); + } + + //------记录openid + return $user->openid; + } + + public function get_curl($url){ + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL,$url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Linux; U; Android 4.4.1; zh-cn) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/5.5 Mobile Safari/533.1'); + curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); + $ret = curl_exec($ch); + curl_close($ch); + return $ret; + } +} diff --git a/includes/lib/Template.php b/includes/lib/Template.php new file mode 100644 index 0000000..2f7c9d9 --- /dev/null +++ b/includes/lib/Template.php @@ -0,0 +1,49 @@ +precharacters(); + } + + private function precharacters(){ + $this->numbers = array( + "+[]", + "+!![]", + "!+[]+!![]", + "!+[]+!![]+!![]", + "!+[]+!![]+!![]+!![]", + "!+[]+!![]+!![]+!![]+!![]", + "!+[]+!![]+!![]+!![]+!![]+!![]", + "!+[]+!![]+!![]+!![]+!![]+!![]+!![]", + "!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]", + "!+[]+!![]+!![]+!![]+!![]+!![]+!![]+!![]+!![]" + ); + + $this->characters = array( + "0" => "(" . $this->numbers[0] . "+[])", + "1" => "(" . $this->numbers[1] . "+[])", + "2" => "(" . $this->numbers[2] . "+[])", + "3" => "(" . $this->numbers[3] . "+[])", + "4" => "(" . $this->numbers[4] . "+[])", + "5" => "(" . $this->numbers[5] . "+[])", + "6" => "(" . $this->numbers[6] . "+[])", + "7" => "(" . $this->numbers[7] . "+[])", + "8" => "(" . $this->numbers[8] . "+[])", + "9" => "(" . $this->numbers[9] . "+[])" + ); + + $_object_Object = "[]+{}"; + $_NaN = "+{}+[]"; + $_true = "!![]+[]"; + $_false = "![]+[]"; + $_undefined = "[][[]]+[]"; + + $this->characters[" "] = "(" . $_object_Object . ")[" . $this->numbers[7] . "]"; + $this->characters["["] = "(" . $_object_Object . ")[" . $this->numbers[0] . "]"; + $this->characters["]"] = "(" . $_object_Object . ")[" . $this->characters[1] . "+" . $this->characters[4] . "]"; + $this->characters["a"] = "(" . $_NaN . ")[" . $this->numbers[1] . "]"; + $this->characters["b"] = "(" . $_object_Object . ")[" . $this->numbers[2] . "]"; + $this->characters["c"] = "(" . $_object_Object . ")[" . $this->numbers[5] . "]"; + $this->characters["d"] = "(" . $_undefined . ")[" . $this->numbers[2] . "]"; + $this->characters["e"] = "(" . $_undefined . ")[" . $this->numbers[3] . "]"; + $this->characters["f"] = "(" . $_false . ")[" . $this->numbers[0] . "]"; + $this->characters["i"] = "(" . $_undefined . ")[" . $this->numbers[5] . "]"; + $this->characters["j"] = "(" . $_object_Object . ")[" . $this->numbers[3] . "]"; + $this->characters["l"] = "(" . $_false . ")[" . $this->numbers[2] . "]"; + $this->characters["n"] = "(" . $_undefined . ")[" . $this->numbers[1] . "]"; + $this->characters["o"] = "(" . $_object_Object . ")[" . $this->numbers[1] . "]"; + $this->characters["r"] = "(" . $_true . ")[" . $this->numbers[1] . "]"; + $this->characters["s"] = "(" . $_false . ")[" . $this->numbers[3] . "]"; + $this->characters["t"] = "(" . $_true . ")[" . $this->numbers[0] . "]"; + $this->characters["u"] = "(" . $_undefined . ")[" . $this->numbers[0] ."]"; + $this->characters["N"] = "(" . $_NaN . ")[" . $this->numbers[0] . "]"; + $this->characters["O"] = "(" . $_object_Object . ")[" . $this->numbers[8] . "]"; + + $_Infinity = "+(" . $this->numbers[1] . "+" . $this->characters["e"] . "+" . $this->characters[1] . "+" . $this->characters[0] . "+" . $this->characters[0] . "+" . $this->characters[0] . ")+[]"; + + $this->characters["y"] = "(" . $_Infinity . ")[" . $this->numbers[7] . "]"; + $this->characters["I"] = "(" . $_Infinity . ")[" . $this->numbers[0] . "]"; + + $_1e100 = "+(" . $this->numbers[1] . "+" . $this->characters["e"] . "+" . $this->characters[1] . "+" . $this->characters[0] . "+" . $this->characters[0] . ")+[]"; + + $this->characters["+"] = "(" . $_1e100 . ")[" . $this->numbers[2] . "]"; + + $this->functionConstructor = "[][" . $this->hieroglyphyString("sort") . "][" . $this->hieroglyphyString("constructor") . "]"; + + //Below $this->characters need target http(s) pages + $locationString = "[]+" . $this->hieroglyphyScript("return location"); + $this->characters["h"] = "(" . $locationString . ")" . "[" . $this->numbers[0] . "]"; + $this->characters["p"] = "(" . $locationString . ")" . "[" . $this->numbers[3] . "]"; + $this->characters["/"] = "(" . $locationString . ")" . "[" . $this->numbers[6] . "]"; + + $this->unescape = $this->hieroglyphyScript("return unescape"); + $escape = $this->hieroglyphyScript("return escape"); + + $this->characters["%"] = $escape . "(" . $this->hieroglyphyString("[") . ")[" . $this->numbers[0] . "]"; + } + + private function getHexaString ($number, $digits) { + $string = bin2hex($number); + + while (strlen($string) < $digits) { + $string = "0" . $string; + } + + return $string; + } + + private function getUnescapeSequence ($charCode) { + return $this->unescape . "(" . + $this->hieroglyphyString("%" . $this->getHexaString($charCode, 2)) . ")"; + } + + private function getHexaSequence ($charCode) { + return $this->hieroglyphyString("\\x" . $this->getHexaString($charCode, 2)); + } + + private function getUnicodeSequence ($charCode) { + return $this->hieroglyphyString("\\u" . $this->getHexaString($charCode, 4)); + } + + private function hieroglyphyCharacter ($char) { + $charCode = ord($char); + + if (isset($this->characters[$char])) { + return $this->characters[$char]; + } + + if (($char == "\\") || ($char == "x")) { + //These chars must be handled appart becuase the others need them + $this->characters[$char] = $this->getUnescapeSequence($charCode); + return $this->characters[$char]; + } + + $shortestSequence = $this->getUnicodeSequence($charCode); + + //ASCII $characters can be obtained with hexa and unscape sequences + if ($charCode < 128) { + $unescapeSequence = $this->getUnescapeSequence($charCode); + if (strlen($shortestSequence) > strlen($unescapeSequence)) { + $shortestSequence = $unescapeSequence; + } + + $hexaSequence = $this->getHexaSequence($charCode); + if (strlen($shortestSequence) > strlen($hexaSequence)) { + $shortestSequence = $hexaSequence; + } + } + + $this->characters[$char] = $shortestSequence; + return $shortestSequence; + } + + public function hieroglyphyString ($str) { + $hieroglyphiedStr = ""; + + for ($i = 0; $i < strlen($str); $i++) { + + $hieroglyphiedStr .= ($i > 0) ? "+" : ""; + $hieroglyphiedStr .= $this->hieroglyphyCharacter($str[$i]); + } + + return $hieroglyphiedStr; + } + + public function hieroglyphyNumber ($n) { + $n = +$n; + + if ($n <= 9) { + return $this->numbers[$n]; + } + + return "+(" . $this->hieroglyphyString(ord($n[10])) . ")"; + } + + public function hieroglyphyScript ($src) { + return $this->functionConstructor . "(" . $this->hieroglyphyString($src) . ")()"; + } +} \ No newline at end of file diff --git a/includes/lib/mail/Aliyun.php b/includes/lib/mail/Aliyun.php new file mode 100644 index 0000000..5cc2578 --- /dev/null +++ b/includes/lib/mail/Aliyun.php @@ -0,0 +1,69 @@ +AccessKeyId = $AccessKeyId; + $this->AccessKeySecret = $AccessKeySecret; + } + private function aliyunSignature($parameters, $accessKeySecret, $method) + { + ksort($parameters); + $canonicalizedQueryString = ''; + foreach ($parameters as $key => $value) { + $canonicalizedQueryString .= '&' . $this->percentEncode($key). '=' . $this->percentEncode($value); + } + $stringToSign = $method . '&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1)); + $signature = base64_encode(hash_hmac("sha1", $stringToSign, $accessKeySecret."&", true)); + + return $signature; + } + private function percentEncode($str) + { + $res = urlencode($str); + $res = preg_replace('/\+/', '%20', $res); + $res = preg_replace('/\*/', '%2A', $res); + $res = preg_replace('/%7E/', '~', $res); + return $res; + } + public function send($to, $sub, $msg, $from, $from_name){ + if(empty($this->AccessKeyId)||empty($this->AccessKeySecret))return false; + $url='https://dm.aliyuncs.com/'; + $data=array( + 'Action' => 'SingleSendMail', + 'AccountName' => $from, + 'ReplyToAddress' => 'false', + 'AddressType' => 1, + 'ToAddress' => $to, + 'FromAlias' => $from_name, + 'Subject' => $sub, + 'HtmlBody' => $msg, + 'Format' => 'JSON', + 'Version' => '2015-11-23', + 'AccessKeyId' => $this->AccessKeyId, + 'SignatureMethod' => 'HMAC-SHA1', + 'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'), + 'SignatureVersion' => '1.0', + 'SignatureNonce' => random(8)); + $data['Signature'] = $this->aliyunSignature($data, $this->AccessKeySecret, 'POST'); + $ch=curl_init($url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_TIMEOUT, 10); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); + $json=curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + $arr=json_decode($json,true); + if($httpCode==200){ + return true; + }else{ + return $arr['Message']; + } + } +} diff --git a/includes/lib/mail/SMTP.php b/includes/lib/mail/SMTP.php new file mode 100644 index 0000000..7d903cf --- /dev/null +++ b/includes/lib/mail/SMTP.php @@ -0,0 +1,236 @@ +send('God.Kenvix ','God.Kenvix ','f','fff'); + */ +namespace lib\mail; + +class SMTP { + public $smtp_port; + public $time_out; + public $host_name; + public $log_file; + public $part_boundary = '--PART-BOUNDARY-ID-WRG11-Y4RD1-5AS1D-RE4D1-AF1EG---'; + public $relay_host; + public $debug; + public $auth; + public $user; + public $pass; + public $sock; + public $log; + public $error; + public $att = array(); //附件内容 + public $ssl = false; + + public function __construct($relay_host = '', $smtp_port = 25, $auth = false, $user, $pass , $ssl = false) { + $this ->debug = false; + $this ->smtp_port = $smtp_port; + if ($ssl == true) { + $this->ssl = true; + $relay_host = 'ssl://' . $relay_host; + } + $this ->relay_host = $relay_host; + $this ->time_out = 30; + $this ->auth = $auth; + $this ->user = $user; + $this ->pass = $pass; + $this ->host_name = "localhost"; + $this ->log_file = ""; + } + + /** + * 添加一个附件 + * @param string $name 文件名 + * @param string $value 文件内容 + */ + public function addatt($name , $value = '') { + $this->att[$name] = $value; + } + + public function send($to, $from, $subject = "", $body = "", $fromname = "彩虹云任务", $reply = '', $cc = "", $bcc = "", $additional_headers = "") { + if (empty($reply)) { + $reply = $from; + } + $header = ""; + $mail_from = $this ->get_address($this ->strip_comment($from)); + $from = "=?UTF-8?B?".base64_encode($fromname)."?= " . "<$from>"; + $body = mb_ereg_replace("(^|(\r\n))(\\.)", "\\1.\\3", $body); + $header .= "MIME-Version:1.0\r\n"; + $header .= 'Content-Type: multipart/mixed; boundary="'.$this->part_boundary.'"' . "\r\n"; + $header .= "To: " . $to . "\r\n"; + if ($cc!="") $header .= "Cc: " . $cc . "\r\n"; + $header .= "From: " . $from . "\r\n"; + $header .= "Subject: " . $subject . "\r\n"; + $header .= $additional_headers; + $header .= "Date: " . date("r") . "\r\n"; + $header .= 'Reply-To: ' . $reply . "\r\n"; + $header .= "Content-Transfer-Encoding: base64\r\n"; + list($msec, $sec) = explode(" ", microtime()); + $header .= "Message-ID: <" . date("YmdHis", $sec) . "." . ($msec*1000000) . "." . $mail_from . ">\r\n"; + $TO = explode(",", $this ->strip_comment($to)); + if ($cc!="") $TO = array_merge($TO, explode(",", $this ->strip_comment($cc))); + if ($bcc!="") $TO = array_merge($TO, explode(",", $this ->strip_comment($bcc))); + $sent = true; + foreach ($TO as $rcpt_to) { + $rcpt_to = $this ->get_address($rcpt_to); + if (!$this ->smtp_sockopen($rcpt_to)) { + $this ->log_write("Error: Cannot send email to [ " . $rcpt_to . " ] (Step 1)
    " . $this->error); + $sent = false; + continue; + } + if ($this ->smtp_send($this ->host_name, $mail_from, $rcpt_to, $header, $body)) { + $this ->log_write("邮件已成功发送到 [" . $rcpt_to . "]\n"); + } else { + $this ->log_write("Error: Cannot send email to [ " . $rcpt_to . " ] (Step 2)
    " . $this->error); + $sent = false; + } + fclose($this ->sock); + } + return $sent; + } + + private function smtp_send($helo, $from, $to, $header, $body = "") { + if (!$this ->smtp_putcmd("HELO", $helo)) return $this ->smtp_error("sending HELO command"); + if ($this ->auth) { + if (!$this ->smtp_putcmd("AUTH LOGIN", base64_encode($this ->user))) return $this ->smtp_error("sending HELO command"); + if (!$this ->smtp_putcmd("", base64_encode($this ->pass))) return $this ->smtp_error("sending HELO command"); + } + if (!$this ->smtp_putcmd("MAIL", "FROM:<" . $from . ">")) return $this ->smtp_error("sending MAIL FROM command"); + if (!$this ->smtp_putcmd("RCPT", "TO:<" . $to . ">")) return $this ->smtp_error("sending RCPT TO command"); + if (!$this ->smtp_putcmd("DATA")) return $this ->smtp_error("sending DATA command"); + if (!$this ->smtp_message($header)) return $this ->smtp_error("sending head message"); + if (!$this ->smtp_sendbody($body)) return $this ->smtp_error("sending body message"); + if (!$this ->smtp_sendatt()) return $this ->smtp_error("sending attachments message"); + if (!$this ->smtp_sendend()) return $this ->smtp_error("sending end message"); + if (!$this ->smtp_eom()) return $this ->smtp_error("sending . [EOM]"); + if (!$this ->smtp_putcmd("QUIT")) return $this ->smtp_error("sending QUIT command"); + return true; + } + + private function smtp_sockopen($address) { + if ($this ->relay_host=="") return $this ->smtp_sockopen_mx($address); else return $this ->smtp_sockopen_relay(); + } + + private function smtp_sockopen_relay() { + $this ->log_write("Trying to " . $this ->relay_host . ":" . $this ->smtp_port . "\n"); + $this ->sock = @fsockopen($this ->relay_host, $this ->smtp_port, $errno, $errstr, $this ->time_out); + if (!($this ->sock && $this ->smtp_ok())) { + $this ->log_write("Error: Cannot connenct to relay host " . $this ->relay_host . "\n"); + $this ->log_write("Error: " . $errstr . " (" . $errno . ")\n"); + return false; + } + $this ->log_write("Connected to relay host " . $this ->relay_host . "\n"); + return true;; + } + + private function smtp_sockopen_mx($address) { + $domain = ereg_replace("^.+@([^@]+)$", "\\1", $address); + if (!@getmxrr($domain, $MXHOSTS)) { + $this ->log_write("Error: Cannot resolve MX \"" . $domain . "\"\n"); + return false; + } + foreach ($MXHOSTS as $host) { + $this ->log_write("Trying to " . $host . ":" . $this ->smtp_port . "\n"); + $this ->sock = @fsockopen($host, $this ->smtp_port, $errno, $errstr, $this ->time_out); + if (!($this ->sock && $this ->smtp_ok())) { + $this ->log_write("Warning: Cannot connect to mx host " . $host . "\n"); + $this ->log_write("Error: " . $errstr . " (" . $errno . ")\n"); + continue; + } + $this ->log_write("Connected to mx host " . $host . "\n"); + return true; + } + $this ->log_write("Error: Cannot connect to any mx hosts (" . implode(", ", $MXHOSTS) . ")\n"); + return false; + } + + private function smtp_message($header) { + fputs($this ->sock, $header . "\r\n"); + $this ->smtp_debug("> " . str_replace("\r\n", "\n" . "> ", $header . "\n>")); + return true; + } + + private function smtp_sendbody($body) { + $head = "\r\n\r\n" . '--' . $this->part_boundary; + $head .= "\r\n" . 'Content-Type: text/html; charset="utf-8"'; + $head .= "\r\n" . 'Content-Transfer-Encoding: base64'; + $head .= "\r\n\r\n" . base64_encode($body); + return fputs($this ->sock, $head . "\r\n"); + } + + private function smtp_sendatt() { + $head = ''; + foreach ($this->att as $n => $v) { + $head .= "\r\n\r\n" . '--' . $this->part_boundary; + $head .= "\r\n" . 'Content-Type: ' . get_mime(get_extname($n)) . '; charset="utf-8"; name="'.$n.'"'; + $head .= "\r\n" . 'Content-Disposition: attachment; filename="'.$n.'"'; + $head .= "\r\n" . 'Content-Transfer-Encoding: base64'; + $head .= "\r\n\r\n" . base64_encode($v); + } + return fputs($this ->sock, $head . "\r\n"); + } + + private function smtp_sendend() { + return fputs($this ->sock, "\r\n\r\n" . '--' . $this->part_boundary . '--'); + } + + private function smtp_eom() { + fputs($this ->sock, "\r\n.\r\n"); + $this ->smtp_debug(". [EOM]\n"); + return $this ->smtp_ok(); + } + + private function smtp_ok() { + $response = str_replace("\r\n", "", fgets($this ->sock, 512)); + $this ->smtp_debug($response . "\n"); + if (!mb_ereg("^[23]", $response)) { + fputs($this ->sock, "QUIT\r\n"); + fgets($this ->sock, 512); + $this ->log_write("Error: Remote host returned \"" . $response . "\"\n"); + return false; + } + return true; + } + + private function smtp_putcmd($cmd, $arg = "") { + if ($arg!="") { + if ($cmd=="") $cmd = $arg; else + $cmd = $cmd . " " . $arg; + } + fputs($this ->sock, $cmd . "\r\n"); + $this ->smtp_debug("> " . $cmd . "\n"); + + return $this ->smtp_ok(); + } + + private function smtp_error($string) { + $this ->error .= "
    Error: Error occurred while " . $string . ".
    "; + return false; + } + + private function log_write($message) { + $this->log .= '
    '.$message.'
    '; + return true; + } + + private function strip_comment($address) { + $comment = "\\([^()]*\\)"; + while (mb_ereg($comment, $address)) { + $address = mb_ereg_replace($comment, "", $address); + } + return $address; + } + + private function get_address($address) { + $address = mb_ereg_replace("([ \t\r\n])+", "", $address); + $address = mb_ereg_replace("^.*<(.+)>.*$", "\\1", $address); + return $address; + } + + public function smtp_debug($message) { + if ($this ->debug) { + return $message . "
    "; + } + } +} \ No newline at end of file diff --git a/includes/lib/mail/Sendcloud.php b/includes/lib/mail/Sendcloud.php new file mode 100644 index 0000000..45c830e --- /dev/null +++ b/includes/lib/mail/Sendcloud.php @@ -0,0 +1,37 @@ +apiUser = $apiUser; + $this->apiKey = $apiKey; + } + public function send($to, $sub, $msg, $from, $from_name){ + if(empty($this->apiUser)||empty($this->apiKey))return false; + $url='http://api.sendcloud.net/apiv2/mail/send'; + $data=array( + 'apiUser' => $this->apiUser, + 'apiKey' => $this->apiKey, + 'from' => $from, + 'fromName' => $from_name, + 'to' => $to, + 'subject' => $sub, + 'html' => $msg); + $ch=curl_init($url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_TIMEOUT, 10); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, $data); + $json=curl_exec($ch); + curl_close($ch); + $arr=json_decode($json,true); + if($arr['statusCode']==200){ + return true; + }else{ + return implode("\n",$arr['message']); + } + } +} diff --git a/includes/lib/sms/Aliyun.php b/includes/lib/sms/Aliyun.php new file mode 100644 index 0000000..dc17fab --- /dev/null +++ b/includes/lib/sms/Aliyun.php @@ -0,0 +1,64 @@ +AccessKeyId = $AccessKeyId; + $this->AccessKeySecret = $AccessKeySecret; + } + private function aliyunSignature($parameters, $accessKeySecret, $method) + { + ksort($parameters); + $canonicalizedQueryString = ''; + foreach ($parameters as $key => $value) { + $canonicalizedQueryString .= '&' . $this->percentEncode($key). '=' . $this->percentEncode($value); + } + $stringToSign = $method . '&%2F&' . $this->percentencode(substr($canonicalizedQueryString, 1)); + $signature = base64_encode(hash_hmac("sha1", $stringToSign, $accessKeySecret."&", true)); + + return $signature; + } + private function percentEncode($str) + { + $res = urlencode($str); + $res = preg_replace('/\+/', '%20', $res); + $res = preg_replace('/\*/', '%2A', $res); + $res = preg_replace('/%7E/', '~', $res); + return $res; + } + public function send($phone, $code, $moban, $sign, $sitename){ + if(empty($this->AccessKeyId)||empty($this->AccessKeySecret))return false; + $url='https://dysmsapi.aliyuncs.com/'; + $TemplateParam = json_encode(['code'=>$code]); + $data=array( + 'Action' => 'SendSms', + 'PhoneNumbers' => $phone, + 'SignName' => $sign, + 'TemplateCode' => $moban, + 'TemplateParam' => $TemplateParam, + 'Format' => 'JSON', + 'RegionId' => 'cn-hangzhou', + 'Version' => '2017-05-25', + 'AccessKeyId' => $this->AccessKeyId, + 'SignatureMethod' => 'HMAC-SHA1', + 'Timestamp' => gmdate('Y-m-d\TH:i:s\Z'), + 'SignatureVersion' => '1.0', + 'SignatureNonce' => random(8)); + $data['Signature'] = $this->aliyunSignature($data, $this->AccessKeySecret, 'POST'); + $ch=curl_init($url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_TIMEOUT, 10); + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); + $json=curl_exec($ch); + $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + curl_close($ch); + $arr=json_decode($json,true); + return $arr; + } +} diff --git a/includes/lib/sms/TencentSms.php b/includes/lib/sms/TencentSms.php new file mode 100644 index 0000000..a93a007 --- /dev/null +++ b/includes/lib/sms/TencentSms.php @@ -0,0 +1,104 @@ +url = "https://yun.tim.qq.com/v5/tlssmssvr/sendsms"; + $this->appid = $appid; + $this->appkey = $appkey; + $this->util = new TencentSmsUtil(); + } + + /** + * 普通单发 + * + * 普通单发需明确指定内容,如果有多个签名,请在内容中以【】的方式添加到信息内容中,否则系统将使用默认签名。 + * + * @param int $type 短信类型,0 为普通短信,1 营销短信 + * @param string $nationCode 国家码,如 86 为中国 + * @param string $phoneNumber 不带国家码的手机号 + * @param string $msg 信息内容,必须与申请的模板格式一致,否则将返回错误 + * @param string $extend 扩展码,可填空串 + * @param string $ext 服务端原样返回的参数,可填空串 + * @return string 应答json字符串,详细内容参见腾讯云协议文档 + */ + public function send($type, $nationCode, $phoneNumber, $msg, $extend = "", $ext = "") + { + $random = $this->util->getRandom(); + $curTime = time(); + $wholeUrl = $this->url . "?sdkappid=" . $this->appid . "&random=" . $random; + + // 按照协议组织 post 包体 + $data = new stdClass(); + $tel = new stdClass(); + $tel->nationcode = "".$nationCode; + $tel->mobile = "".$phoneNumber; + + $data->tel = $tel; + $data->type = (int)$type; + $data->msg = $msg; + $data->sig = hash("sha256", + "appkey=".$this->appkey."&random=".$random."&time=" + .$curTime."&mobile=".$phoneNumber, FALSE); + $data->time = $curTime; + $data->extend = $extend; + $data->ext = $ext; + + return $this->util->sendCurlPost($wholeUrl, $data); + } + + /** + * 指定模板单发 + * + * @param string $nationCode 国家码,如 86 为中国 + * @param string $phoneNumber 不带国家码的手机号 + * @param int $templId 模板 id + * @param array $params 模板参数列表,如模板 {1}...{2}...{3},那么需要带三个参数 + * @param string $sign 签名,如果填空串,系统会使用默认签名 + * @param string $extend 扩展码,可填空串 + * @param string $ext 服务端原样返回的参数,可填空串 + * @return string 应答json字符串,详细内容参见腾讯云协议文档 + */ + public function sendWithParam($nationCode, $phoneNumber, $templId = 0, $params, + $sign = "", $extend = "", $ext = "") + { + $random = $this->util->getRandom(); + $curTime = time(); + $wholeUrl = $this->url . "?sdkappid=" . $this->appid . "&random=" . $random; + + // 按照协议组织 post 包体 + $data = new stdClass(); + $tel = new stdClass(); + $tel->nationcode = "".$nationCode; + $tel->mobile = "".$phoneNumber; + + $data->tel = $tel; + $data->sig = $this->util->calculateSigForTempl($this->appkey, $random, + $curTime, $phoneNumber); + $data->tpl_id = $templId; + $data->params = $params; + $data->sign = $sign; + $data->time = $curTime; + $data->extend = $extend; + $data->ext = $ext; + + return $this->util->sendCurlPost($wholeUrl, $data); + } +} diff --git a/includes/lib/sms/TencentSmsUtil.php b/includes/lib/sms/TencentSmsUtil.php new file mode 100644 index 0000000..8549a28 --- /dev/null +++ b/includes/lib/sms/TencentSmsUtil.php @@ -0,0 +1,206 @@ +nationcode = $nationCode; + $telElement->mobile = $phoneNumbers[$i]; + array_push($tel, $telElement); + } while (++$i < count($phoneNumbers)); + + return $tel; + } + + /** + * 生成签名 + * + * @param string $appkey sdkappid对应的appkey + * @param string $random 随机正整数 + * @param string $curTime 当前时间 + * @param array $phoneNumber 手机号码 + * @return string 签名结果 + */ + public function calculateSigForTempl($appkey, $random, $curTime, $phoneNumber) + { + $phoneNumbers = array($phoneNumber); + + return $this->calculateSigForTemplAndPhoneNumbers($appkey, $random, + $curTime, $phoneNumbers); + } + + /** + * 生成签名 + * + * @param string $appkey sdkappid对应的appkey + * @param string $random 随机正整数 + * @param string $curTime 当前时间 + * @return string 签名结果 + */ + public function calculateSigForPuller($appkey, $random, $curTime) + { + return hash("sha256", "appkey=".$appkey."&random=".$random + ."&time=".$curTime); + } + + /** + * 生成上传文件授权 + * + * @param string $appkey sdkappid对应的appkey + * @param string $random 随机正整数 + * @param string $curTime 当前时间 + * @param array $fileSha1Sum 文件sha1sum + * @return string 授权结果 + */ + public function calculateAuth($appkey, $random, $curTime, $fileSha1Sum) + { + return hash("sha256", "appkey=".$appkey."&random=".$random + ."&time=".$curTime."&content-sha1=".$fileSha1Sum); + } + + /** + * 生成sha1sum + * + * @param string $content 内容 + * @return string 内容sha1散列值 + */ + public function sha1sum($content) + { + return hash("sha1", $content); + } + + /** + * 发送请求 + * + * @param string $url 请求地址 + * @param array $dataObj 请求内容 + * @return string 应答json字符串 + */ + public function sendCurlPost($url, $dataObj) + { + $curl = curl_init(); + curl_setopt($curl, CURLOPT_URL, $url); + curl_setopt($curl, CURLOPT_HEADER, 0); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($curl, CURLOPT_POST, 1); + curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 60); + curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($dataObj)); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); + + $ret = curl_exec($curl); + if (false == $ret) { + // curl_exec failed + $result = "{ \"result\":" . -2 . ",\"errmsg\":\"" . curl_error($curl) . "\"}"; + } else { + $rsp = curl_getinfo($curl, CURLINFO_HTTP_CODE); + if (200 != $rsp) { + $result = "{ \"result\":" . -1 . ",\"errmsg\":\"". $rsp + . " " . curl_error($curl) ."\"}"; + } else { + $result = $ret; + } + } + + curl_close($curl); + + return $result; + } + + /** + * 发送请求 + * + * @param string $req 请求对象 + * @return string 应答json字符串 + */ + public function fetch($req) + { + $curl = curl_init(); + + curl_setopt($curl, CURLOPT_URL, $req->url); + curl_setopt($curl, CURLOPT_HTTPHEADER, $req->headers); + curl_setopt($curl, CURLOPT_POSTFIELDS, $req->body); + curl_setopt($curl, CURLOPT_HEADER, 0); + curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($curl, CURLOPT_POST, 1); + curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 60); + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); + + $result = curl_exec($curl); + + if (false == $result) { + // curl_exec failed + $result = "{ \"result\":" . -2 . ",\"errmsg\":\"" . curl_error($curl) . "\"}"; + } else { + $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); + if (200 != $code) { + $result = "{ \"result\":" . -1 . ",\"errmsg\":\"". $code + . " " . curl_error($curl) ."\"}"; + } + } + curl_close($curl); + + return $result; + } +} diff --git a/includes/member.php b/includes/member.php new file mode 100644 index 0000000..f0d04f4 --- /dev/null +++ b/includes/member.php @@ -0,0 +1,24 @@ +time()) { + $islogin=1; + } +} +if(isset($_COOKIE["user_token"])) +{ + $token=authcode(daddslashes($_COOKIE['user_token']), 'DECODE', SYS_KEY); + list($uid, $sid, $expiretime) = explode("\t", $token); + $uid = intval($uid); + $userrow=$DB->getRow("SELECT * FROM pay_user WHERE uid='{$uid}' limit 1"); + $session=md5($userrow['uid'].$userrow['key'].$password_hash); + if($session==$sid && $expiretime>time()) { + $islogin2=1; + } +} +?> \ No newline at end of file diff --git a/includes/pages/wxopen.php b/includes/pages/wxopen.php new file mode 100644 index 0000000..fb24eee --- /dev/null +++ b/includes/pages/wxopen.php @@ -0,0 +1,52 @@ + + + + + 支付提示 + + + + + + + + +
    +
    + 请在菜单中选择在浏览器中打开,
    + 以完成支付 +
    +
    +
    + + + \ No newline at end of file diff --git a/includes/security.php b/includes/security.php new file mode 100644 index 0000000..bc676c7 --- /dev/null +++ b/includes/security.php @@ -0,0 +1,43 @@ +hieroglyphyString($iptoken); + header('Content-type:text/html;charset=utf-8'); + if($sec_defend_time>=10)exit('浏览器不支持COOKIE或者不正常访问!'); + echo '正在加载中'; + exit; + }elseif(isset($_COOKIE['sec_defend_time'])){ + setcookie("sec_defend_time", "", time() - 604800, '/'); + } +} + +@header("Cache-Control: no-store, no-cache, must-revalidate"); +@header("Pragma: no-cache"); +if($is_defend==true){ + if(!isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')include_once(SYSTEM_ROOT."txprotect.php"); + cc_defender(); +} +?> \ No newline at end of file diff --git a/includes/txprotect.php b/includes/txprotect.php new file mode 100644 index 0000000..686bb03 --- /dev/null +++ b/includes/txprotect.php @@ -0,0 +1,26 @@ +=$ipbanrange[0] && $remoteiplong<=$ipbanrange[1]) + exit('欢迎使用!'); +} +if(strpos($_SERVER['HTTP_REFERER'], 'urls.tr.com')!==false||strpos($_SERVER['HTTP_REFERER'], 'sc.wsd.com')!==false){ + $_SESSION['txprotectblock']=true; +} +//HEADER特征屏蔽 +if(!isset($_SERVER['HTTP_ACCEPT']) || preg_match("/manager/", strtolower($_SERVER['HTTP_USER_AGENT'])) || isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER']=='' || strpos($_SERVER['HTTP_USER_AGENT'], 'ozilla')!==false && strpos($_SERVER['HTTP_USER_AGENT'], 'Mozilla')===false || preg_match("/Windows NT 6.1/", $_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_ACCEPT']=='*/*' || preg_match("/Windows NT 5.1/", $_SERVER['HTTP_USER_AGENT']) && $_SERVER['HTTP_ACCEPT']=='*/*' || preg_match("/vnd.wap.wml/", $_SERVER['HTTP_ACCEPT']) && preg_match("/Windows NT 5.1/", $_SERVER['HTTP_USER_AGENT']) || strpos($_SERVER['HTTP_REFERER'], 'urls.tr.com')!==false || strpos($_SERVER['HTTP_REFERER'], 'sc.wsd.com')!==false || strpos($_SERVER['HTTP_REFERER'], '/membercomprehensive/')!==false || strpos($_SERVER['HTTP_REFERER'], '111.202.27.196')!==false || isset($_COOKIE['ASPSESSIONIDQASBQDRC']) || empty($_SERVER['HTTP_USER_AGENT']) || preg_match("/Alibaba.Security.Heimdall/", $_SERVER['HTTP_USER_AGENT']) || strpos($_SERVER['HTTP_USER_AGENT'], 'wechatdevtools/')!==false || strpos($_SERVER['HTTP_USER_AGENT'], 'libcurl/')!==false || strpos($_SERVER['HTTP_USER_AGENT'], 'python')!==false || strpos($_SERVER['HTTP_USER_AGENT'], 'Go-http-client')!==false || $_SESSION['txprotectblock']==true) { + exit('欢迎使用!'); +} +if(strpos($_SERVER['HTTP_USER_AGENT'], 'Coolpad Y82-520')!==false && $_SERVER['HTTP_ACCEPT']=='*/*' || strpos($_SERVER['HTTP_USER_AGENT'], 'Mac OS X 10_12_4')!==false && $_SERVER['HTTP_ACCEPT']=='*/*' || strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone OS')!==false && strpos($_SERVER['HTTP_USER_AGENT'], 'Baiduspider/')===false && $_SERVER['HTTP_ACCEPT']=='*/*' || strpos($_SERVER['HTTP_USER_AGENT'], 'Android')!==false && strpos($_SERVER['HTTP_USER_AGENT'], 'Baiduspider/')===false && $_SERVER['HTTP_ACCEPT']=='*/*' || strpos($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'en')!==false && strpos($_SERVER['HTTP_ACCEPT_LANGUAGE'], 'zh')===false || strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone')!==false && strpos($_SERVER['HTTP_USER_AGENT'], 'en-')!==false && strpos($_SERVER['HTTP_USER_AGENT'], 'zh')===false || strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone OS 9_1')!==false && $_SERVER['HTTP_CONNECTION']=='close') { + exit('您当前浏览器不支持或操作系统语言设置非中文,无法访问本站!'); +} \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..4021b9a --- /dev/null +++ b/index.php @@ -0,0 +1,9 @@ + 5.4 !'); +} +include("./includes/common.php"); + +$mod = isset($_GET['mod'])?$_GET['mod']:'index'; +$loadfile = \lib\Template::load($mod); +include $loadfile; \ No newline at end of file diff --git a/install/index.php b/install/index.php new file mode 100644 index 0000000..1c24beb --- /dev/null +++ b/install/index.php @@ -0,0 +1,236 @@ +getMessage(); + } + if(empty($errorMsg)){ + @file_put_contents($databaseFile," '{$host}', //数据库服务器 + 'port' => {$port}, //数据库端口 + 'user' => '{$user}', //数据库用户名 + 'pwd' => '{$pwd}', //数据库密码 + 'dbname' => '{$database}', //数据库名 + 'dbqz' => '{$dbqz}' //数据表前缀 +); +"); + date_default_timezone_set("PRC"); + $date = date("Y-m-d"); + $db->exec("set names utf8"); + $sqls=file_get_contents('install.sql'); + $sqls=explode(';', $sqls); + $sqls[]="INSERT INTO `".$dbqz."_config` VALUES ('syskey', '".random(32)."')"; + $sqls[]="INSERT INTO `".$dbqz."_config` VALUES ('build', '".$date."')"; + $sqls[]="INSERT INTO `".$dbqz."_config` VALUES ('cronkey', '".rand(111111,999999)."')"; + $sqls[]="INSERT INTO `".$dbqz."_config` VALUES ('localurl', 'http://{$_SERVER['HTTP_HOST']}/')"; + $success=0;$error=0;$errorMsg=null; + foreach ($sqls as $value) { + $value=trim($value); + if(!empty($value)){ + $value = str_replace('pre_',$dbqz.'_',$value); + if($db->exec($value)===false){ + $error++; + $dberror=$db->errorInfo(); + $errorMsg.=$dberror[2]."
    "; + }else{ + $success++; + } + } + } + $step=3; + @file_put_contents("install.lock",'安装锁'); + clearpack(); + } + } +} + +?> + + + + + + + + 彩虹易支付-安装程序 + + + +

    +
    +
    +

    彩虹易支付 - 安装程序

    +
    +
    +
    + '.$errorMsg.'
    '; + } + if($step==2){ + ?> +
    MYSQL数据库信息配置
    +
    +
    +
    + +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +
    + +
    +
    + + +
    +
    + +
    数据导入完毕
    +
    +
      +
    • 成功执行SQL语句条,失败条!
    • +
    • 1、系统已成功安装完毕!
    • +
    • 2、后台地址:/admin/ 密码:123456
    • +
    • 3、请及时修改后台管理员密码!
    • + 进入网站首页 +
    +
    + +
    安装环境检测
    +
    + 未锁定'; + }else{ + $check[2]='已锁定'; + $install=false; + } + if(class_exists("PDO")){ + $check[0]='支持'; + }else{ + $check[0]='不支持'; + $install=false; + } + if($fp = @fopen("../test.txt", 'w')) { + @fclose($fp); + @unlink("../test.txt"); + $check[1]='支持'; + }else{ + $check[1]='不支持'; + $install=false; + } + if(version_compare(PHP_VERSION,'5.4.0','<')){ + $check[3]='不支持'; + }else{ + $check[3]='支持'; + } + + ?> +
      +
    • 检测安装是否锁定
    • +
    • PDO_MYSQL组件
    • +
    • 主目录写入权限
    • +
    • PHP版本>=5.4
    • +
    • 成功安装后安装文件就会锁定,如需重新安装,请手动删除install目录下install.lock配置文件!
    • + 检测通过,下一步'; + ?> +
    +
    + +
    +
    +
    + + + + + diff --git a/install/install.sql b/install/install.sql new file mode 100644 index 0000000..e1ed607 --- /dev/null +++ b/install/install.sql @@ -0,0 +1,326 @@ +DROP TABLE IF EXISTS `pre_config`; +create table `pre_config` ( +`k` varchar(32) NOT NULL, +`v` text NULL, +PRIMARY KEY (`k`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO `pre_config` VALUES ('version', '2001'); +INSERT INTO `pre_config` VALUES ('admin_user', 'admin'); +INSERT INTO `pre_config` VALUES ('admin_pwd', '123456'); +INSERT INTO `pre_config` VALUES ('admin_paypwd', '123456'); +INSERT INTO `pre_config` VALUES ('homepage', '1'); +INSERT INTO `pre_config` VALUES ('sitename', '彩虹易支付'); +INSERT INTO `pre_config` VALUES ('title', '彩虹易支付 - 行业领先的免签约支付平台'); +INSERT INTO `pre_config` VALUES ('keywords', '彩虹易支付,支付宝免签约即时到账,财付通免签约,微信免签约支付,QQ钱包免签约,免签约支付'); +INSERT INTO `pre_config` VALUES ('description', '彩虹易支付是郑州追梦网络科技有限公司旗下的免签约支付产品,完美解决支付难题,一站式接入支付宝,微信,财付通,QQ钱包,微信wap,帮助开发者快速集成到自己相应产品,效率高,见效快,费率低!'); +INSERT INTO `pre_config` VALUES ('orgname', '郑州追梦网络科技有限公司'); +INSERT INTO `pre_config` VALUES ('kfqq', '123456789'); +INSERT INTO `pre_config` VALUES ('template', 'index1'); +INSERT INTO `pre_config` VALUES ('pre_maxmoney', '1000'); +INSERT INTO `pre_config` VALUES ('blockname', '百度云|摆渡|云盘|点券|芸盘|萝莉|罗莉|网盘|黑号|q币|Q币|扣币|qq货币|QQ货币|花呗|baidu云|bd云|吃鸡|透视|自瞄|后座|穿墙|脚本|外挂|模拟|辅助|检测|武器|套装'); +INSERT INTO `pre_config` VALUES ('blockalert', '温馨提醒该商品禁止出售,如有疑问请联系网站客服!'); +INSERT INTO `pre_config` VALUES ('settle_open', '1'); +INSERT INTO `pre_config` VALUES ('settle_type', '1'); +INSERT INTO `pre_config` VALUES ('settle_money', '30'); +INSERT INTO `pre_config` VALUES ('settle_rate', '0.5'); +INSERT INTO `pre_config` VALUES ('settle_fee_min', '0.1'); +INSERT INTO `pre_config` VALUES ('settle_fee_max', '20'); +INSERT INTO `pre_config` VALUES ('settle_alipay', '1'); +INSERT INTO `pre_config` VALUES ('settle_wxpay', '1'); +INSERT INTO `pre_config` VALUES ('settle_qqpay', '1'); +INSERT INTO `pre_config` VALUES ('settle_bank', '0'); +INSERT INTO `pre_config` VALUES ('transfer_alipay', '0'); +INSERT INTO `pre_config` VALUES ('transfer_wxpay', '0'); +INSERT INTO `pre_config` VALUES ('transfer_qqpay', '0'); +INSERT INTO `pre_config` VALUES ('transfer_name', '彩虹易支付'); +INSERT INTO `pre_config` VALUES ('transfer_desc', '彩虹易支付自动结算'); +INSERT INTO `pre_config` VALUES ('login_qq', '0'); +INSERT INTO `pre_config` VALUES ('login_qq_appid', '310786672'); +INSERT INTO `pre_config` VALUES ('login_qq_appkey', 'mkgbmYqS8IZzfGqn'); +INSERT INTO `pre_config` VALUES ('login_alipay', '0'); +INSERT INTO `pre_config` VALUES ('login_alipre_channel', '0'); +INSERT INTO `pre_config` VALUES ('login_wx', '0'); +INSERT INTO `pre_config` VALUES ('login_wx_channel', '0'); +INSERT INTO `pre_config` VALUES ('reg_open', '1'); +INSERT INTO `pre_config` VALUES ('reg_pay', '1'); +INSERT INTO `pre_config` VALUES ('reg_pre_uid', '1000'); +INSERT INTO `pre_config` VALUES ('reg_pre_price', '5'); +INSERT INTO `pre_config` VALUES ('verifytype', '1'); +INSERT INTO `pre_config` VALUES ('test_open', '1'); +INSERT INTO `pre_config` VALUES ('test_pre_uid', '1000'); +INSERT INTO `pre_config` VALUES ('mail_cloud', '0'); +INSERT INTO `pre_config` VALUES ('mail_smtp', 'smtp.qq.com'); +INSERT INTO `pre_config` VALUES ('mail_port', '465'); +INSERT INTO `pre_config` VALUES ('mail_name', ''); +INSERT INTO `pre_config` VALUES ('mail_pwd', ''); +INSERT INTO `pre_config` VALUES ('sms_api', '0'); +INSERT INTO `pre_config` VALUES ('captcha_open', '1'); +INSERT INTO `pre_config` VALUES ('captcha_id', 'b31335edde91b2f98dacd393f6ae6de8'); +INSERT INTO `pre_config` VALUES ('captcha_key', '170d2349acef92b7396c7157eb9d8f47'); +INSERT INTO `pre_config` VALUES ('onecode', '1'); +INSERT INTO `pre_config` VALUES ('recharge', '1'); + + +DROP TABLE IF EXISTS `pre_cache`; +create table `pre_cache` ( + `k` varchar(32) NOT NULL, + `v` longtext NULL, + `expire` int(11) NOT NULL DEFAULT '0', +PRIMARY KEY (`k`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pre_anounce`; +create table `pre_anounce` ( + `id` int(11) unsigned NOT NULL auto_increment, + `content` text DEFAULT NULL, + `color` varchar(10) DEFAULT NULL, + `sort` int(11) NOT NULL DEFAULT '1', + `addtime` datetime DEFAULT NULL, + `status` tinyint(1) NOT NULL DEFAULT '1', +PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pre_type`; +CREATE TABLE `pre_type` ( + `id` int(11) unsigned NOT NULL auto_increment, + `name` varchar(30) NOT NULL, + `device` int(1) unsigned NOT NULL DEFAULT '0', + `showname` varchar(30) NOT NULL, + `status` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY name (`name`,`device`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO `pre_type` VALUES (1, 'alipay', 0, '支付宝', 1); +INSERT INTO `pre_type` VALUES (2, 'wxpay', 0, '微信支付', 1); +INSERT INTO `pre_type` VALUES (3, 'qqpay', 0, 'QQ钱包', 1); +INSERT INTO `pre_type` VALUES (4, 'bank', 0, '网银支付', 0); +INSERT INTO `pre_type` VALUES (5, 'jdpay', 0, '京东支付', 0); + +DROP TABLE IF EXISTS `pre_plugin`; +CREATE TABLE `pre_plugin` ( + `name` varchar(30) NOT NULL, + `showname` varchar(60) DEFAULT NULL, + `author` varchar(60) DEFAULT NULL, + `link` varchar(255) DEFAULT NULL, + `types` varchar(50) DEFAULT NULL, + `inputs` text DEFAULT NULL, + `select` text DEFAULT NULL, + PRIMARY KEY (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO `pay_plugin` (`name`, `showname`, `author`, `link`, `types`, `inputs`, `select`) VALUES +('aliold', '支付宝旧版接口', '支付宝', 'https://b.alipay.com/signing/productSetV2.htm', 'alipay', 'appid:合作者身份(PID),appkey:安全校验码(Key)', '1:电脑网站支付,2:手机网站支付'), +('alipay', '支付宝官方支付', '支付宝', 'https://b.alipay.com/signing/productSetV2.htm', 'alipay', 'appid:应用APPID,appkey:支付宝公钥(RSA2),appsecret:商户私钥(RSA2)', '1:电脑网站支付,2:手机网站支付,3:当面付扫码,4:JS支付'), +('epay', '彩虹易支付', '彩虹', 'http://blog.cccyun.cc/', 'alipay,qqpay,wxpay,bank', 'appurl:接口地址,appid:商户ID,appkey:商户密钥', ''), +('jdpay', '京东支付', '京东', 'https://www.jdpay.com/', 'jdpay', 'appid:商户号,appkey:商户DES密钥', ''), +('micro', '小微支付', '小微支付', 'http://blog.cccyun.cc/', 'alipay,wxpay', 'appurl:接口地址,appid:APPID,appkey:APPKEY,appmchid:商户号MCHID', ''), +('qqpay', 'QQ钱包官方支付', 'QQ钱包', 'https://qpay.qq.com/', 'qqpay', 'appid:QQ钱包商户号,appkey:QQ钱包API密钥', '1:扫码支付(包含H5),2:公众号支付'), +('swiftpass', '威富通', '威富通', 'https://www.swiftpass.cn/', 'alipay,wxpay,qqpay,bank,jdpay', 'appid:商户号,appkey:RSA平台公钥,appsecret:RSA应用私钥', '1.手机微信使用公众号支付,1.手机微信使用H5支付'), +('wxpay', '微信官方支付', '微信', 'https://pay.weixin.qq.com/', 'wxpay', 'appid:公众号APPID,appmchid:商户号,appkey:商户支付密钥,appsecret:公众号SECRET', '1:扫码支付,2:公众号支付,3:H5支付'), +('wxpaysl', '微信官方支付服务商版', '微信', 'https://pay.weixin.qq.com/partner/public/home', 'wxpay', 'appid:公众号APPID,appmchid:商户号,appkey:商户支付密钥,appsecret:公众号SECRET,appurl:子商户号', '1:扫码支付,2:公众号支付,3:H5支付'); + +DROP TABLE IF EXISTS `pre_channel`; +CREATE TABLE `pre_channel` ( + `id` int(11) unsigned NOT NULL auto_increment, + `type` int(11) unsigned NOT NULL, + `plugin` varchar(30) NOT NULL, + `name` varchar(30) NOT NULL, + `rate` decimal(5,2) NOT NULL DEFAULT '100.00', + `status` tinyint(1) NOT NULL DEFAULT '0', + `appid` varchar(255) DEFAULT NULL, + `appkey` text DEFAULT NULL, + `appsecret` text DEFAULT NULL, + `appurl` varchar(255) DEFAULT NULL, + `appmchid` varchar(255) DEFAULT NULL, + `apptype` varchar(50) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY type (`type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pre_roll`; +CREATE TABLE `pre_roll` ( + `id` int(11) unsigned NOT NULL auto_increment, + `type` int(11) unsigned NOT NULL, + `name` varchar(30) NOT NULL, + `kind` int(1) unsigned NOT NULL DEFAULT '0', + `info` text DEFAULT NULL, + `status` tinyint(1) NOT NULL DEFAULT '0', + `index` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=101; + +DROP TABLE IF EXISTS `pre_order`; +CREATE TABLE `pre_order` ( + `trade_no` varchar(64) NOT NULL, + `out_trade_no` varchar(255) NOT NULL, + `api_trade_no` varchar(255) DEFAULT NULL, + `uid` int(11) unsigned NOT NULL, + `tid` int(11) unsigned NOT NULL DEFAULT '0', + `type` int(10) unsigned NOT NULL, + `channel` int(10) unsigned NOT NULL, + `name` varchar(64) NOT NULL, + `money` decimal(10,2) NOT NULL, + `realmoney` decimal(10,2) DEFAULT NULL, + `getmoney` decimal(10,2) DEFAULT NULL, + `notify_url` varchar(255) DEFAULT NULL, + `return_url` varchar(255) DEFAULT NULL, + `addtime` datetime DEFAULT NULL, + `endtime` datetime DEFAULT NULL, + `date` date DEFAULT NULL, + `domain` varchar(32) DEFAULT NULL, + `ip` varchar(20) DEFAULT NULL, + `buyer` varchar(30) DEFAULT NULL, + `status` tinyint(1) NOT NULL DEFAULT '0', + `notify` int(5) NOT NULL DEFAULT '0', + `invite` int(11) unsigned NOT NULL DEFAULT '0', + `invitemoney` decimal(10,2) DEFAULT NULL, + PRIMARY KEY (`trade_no`), + KEY uid (`uid`), + KEY out_trade_no (`uid`,`out_trade_no`), + KEY api_trade_no (`api_trade_no`), + KEY invite (`invite`), + KEY date (`date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pre_group`; +CREATE TABLE `pre_group` ( + `gid` int(11) unsigned NOT NULL auto_increment, + `name` varchar(30) NOT NULL, + `info` varchar(255) DEFAULT NULL, + `isbuy` tinyint(1) NOT NULL DEFAULT 0, + `price` decimal(10,2) DEFAULT NULL, + `sort` int(10) NOT NULL DEFAULT 0, + `expire` int(10) NOT NULL DEFAULT 0, + PRIMARY KEY (`gid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO `pre_group` (`gid`, `name`, `info`) VALUES +(0, '默认用户组', '{"1":{"type":"","channel":"-1","rate":""},"2":{"type":"","channel":"-1","rate":""},"3":{"type":"","channel":"-1","rate":""}}'); + +DROP TABLE IF EXISTS `pre_user`; +CREATE TABLE `pre_user` ( + `uid` int(11) unsigned NOT NULL auto_increment, + `gid` int(11) unsigned NOT NULL DEFAULT 0, + `upid` int(11) unsigned NOT NULL DEFAULT 0, + `key` varchar(32) NOT NULL, + `pwd` varchar(32) DEFAULT NULL, + `account` varchar(32) DEFAULT NULL, + `username` varchar(32) DEFAULT NULL, + `codename` varchar(32) DEFAULT NULL, + `settle_id` int(1) NOT NULL DEFAULT '1', + `alipre_uid` varchar(32) DEFAULT NULL, + `qq_uid` varchar(32) DEFAULT NULL, + `wxid` varchar(32) DEFAULT NULL, + `money` decimal(10,2) NOT NULL, + `email` varchar(32) DEFAULT NULL, + `phone` varchar(20) DEFAULT NULL, + `qq` varchar(20) DEFAULT NULL, + `url` varchar(64) DEFAULT NULL, + `cert` int(1) NOT NULL DEFAULT '0', + `certno` varchar(18) DEFAULT NULL, + `certname` varchar(32) DEFAULT NULL, + `certtime` datetime DEFAULT NULL, + `addtime` datetime DEFAULT NULL, + `lasttime` datetime DEFAULT NULL, + `endtime` datetime DEFAULT NULL, + `level` int(1) NOT NULL DEFAULT '1', + `pay` int(1) NOT NULL DEFAULT '1', + `settle` int(1) NOT NULL DEFAULT '1', + `keylogin` int(1) NOT NULL DEFAULT '1', + `apply` int(1) NOT NULL DEFAULT '0', + `mode` int(1) NOT NULL DEFAULT '0', + `status` int(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`uid`), + KEY email (`email`), + KEY phone (`phone`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1000; + +DROP TABLE IF EXISTS `pre_settle`; +CREATE TABLE `pre_settle` ( + `id` int(11) NOT NULL auto_increment, + `uid` int(11) NOT NULL, + `batch` varchar(20) DEFAULT NULL, + `auto` int(1) NOT NULL DEFAULT '1', + `type` int(1) NOT NULL DEFAULT '1', + `account` varchar(32) NOT NULL, + `username` varchar(10) NOT NULL, + `money` decimal(10,2) NOT NULL, + `realmoney` decimal(10,2) NOT NULL, + `addtime` datetime DEFAULT NULL, + `endtime` datetime DEFAULT NULL, + `status` int(1) NOT NULL DEFAULT '0', + `transfer_status` int(1) NOT NULL DEFAULT '0', + `transfer_result` varchar(64) DEFAULT NULL, + `transfer_date` datetime DEFAULT NULL, + `result` varchar(64) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY uid (`uid`), + KEY batch (`batch`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pre_log`; +CREATE TABLE `pre_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uid` int(11) NOT NULL DEFAULT '0', + `type` varchar(20) NULL, + `date` datetime NOT NULL, + `ip` varchar(20) DEFAULT NULL, + `city` varchar(20) DEFAULT NULL, + `data` text NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pre_record`; +CREATE TABLE `pre_record` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uid` int(11) NOT NULL, + `action` int(1) NOT NULL DEFAULT '0', + `money` decimal(10,2) NOT NULL, + `oldmoney` decimal(10,2) NOT NULL, + `newmoney` decimal(10,2) NOT NULL, + `type` varchar(20) DEFAULT NULL, + `trade_no` varchar(64) DEFAULT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY uid (`uid`), + KEY trade_no (`trade_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pre_batch`; +CREATE TABLE `pre_batch` ( + `batch` varchar(20) NOT NULL, + `allmoney` decimal(10,2) NOT NULL, + `count` int(11) NOT NULL DEFAULT '0', + `time` datetime DEFAULT NULL, + `status` int(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`batch`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pre_regcode`; +CREATE TABLE `pre_regcode` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uid` int(11) NOT NULL DEFAULT '0', + `type` int(1) NOT NULL DEFAULT '0', + `code` varchar(32) NOT NULL, + `to` varchar(32) DEFAULT NULL, + `time` int(11) NOT NULL, + `ip` varchar(20) DEFAULT NULL, + `status` int(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY code (`code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pre_risk`; +CREATE TABLE `pre_risk` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uid` int(11) NOT NULL DEFAULT '0', + `type` int(1) NOT NULL DEFAULT '0', + `url` varchar(64) DEFAULT NULL, + `content` varchar(64) DEFAULT NULL, + `date` datetime DEFAULT NULL, + `status` int(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY uid (`uid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file diff --git a/install/nginx.txt b/install/nginx.txt new file mode 100644 index 0000000..68e73fe --- /dev/null +++ b/install/nginx.txt @@ -0,0 +1,13 @@ +location / { + if (!-e $request_filename) { + rewrite ^(.[a-zA-Z0-9\-\_]+).html$ /index.php?mod=$1 last; + rewrite ^pay/(.*)$ /pay.php?s=$1 last; + break; + } +} +location ^~ /includes { + deny all; +} +location ^~ /plugins { + deny all; +} \ No newline at end of file diff --git a/install/update.php b/install/update.php new file mode 100644 index 0000000..ea72672 --- /dev/null +++ b/install/update.php @@ -0,0 +1,62 @@ +getMessage()); +} +date_default_timezone_set("PRC"); +$date = date("Y-m-d"); +$db->exec("set names utf8"); + +$version = 0; +if($rs = $db->query("SELECT v FROM pay_config WHERE k='version'")){ + $version = $rs->fetchColumn(); +} + +if($version<2001){ + $sqls = file_get_contents('update.sql'); + $sqls=explode(';', $sqls); + $sqls[]="INSERT INTO `pay_config` VALUES ('syskey', '".random(32)."')"; + $sqls[]="INSERT INTO `pay_config` VALUES ('build', '".$date."')"; + $sqls[]="INSERT INTO `pay_config` VALUES ('cronkey', '".rand(111111,999999)."')"; + $sqls[]="INSERT INTO `pay_config` VALUES ('localurl', 'http://{$_SERVER['HTTP_HOST']}/')"; + $sqls[]="UPDATE `pay_config` SET `v` = '2001' where `v` = 'version'"; +}else{ + exit('你的网站已经升级到最新版本了'); +} +$success=0;$error=0;$errorMsg=null; +foreach ($sqls as $value) { + $value=trim($value); + if(!empty($value)){ + $value = str_replace('pre_',$dbconfig['dbqz'].'_',$value); + if($db->exec($value)===false){ + $error++; + $dberror=$db->errorInfo(); + $errorMsg.=$dberror[2]."
    "; + }else{ + $success++; + } + } +} +echo '成功执行SQL语句'.$success.'条,失败'.$error.'条!
    '; +if($errorMsg){ +echo ''; +} +echo '
    点此返回首页'; +?> \ No newline at end of file diff --git a/install/update.sql b/install/update.sql new file mode 100644 index 0000000..412e3ff --- /dev/null +++ b/install/update.sql @@ -0,0 +1,305 @@ +DROP TABLE IF EXISTS `panel_log`; +DROP TABLE IF EXISTS `panel_user`; +ALTER TABLE `pay_order` RENAME TO `pay_order_old`; + +DROP TABLE IF EXISTS `pay_config`; +create table `pay_config` ( +`k` varchar(32) NOT NULL, +`v` text NULL, +PRIMARY KEY (`k`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO `pay_config` VALUES ('version', '2001'); +INSERT INTO `pay_config` VALUES ('admin_user', 'admin'); +INSERT INTO `pay_config` VALUES ('admin_pwd', '123456'); +INSERT INTO `pay_config` VALUES ('admin_paypwd', '123456'); +INSERT INTO `pay_config` VALUES ('homepage', '1'); +INSERT INTO `pay_config` VALUES ('sitename', '彩虹易支付'); +INSERT INTO `pay_config` VALUES ('title', '彩虹易支付 - 行业领先的免签约支付平台'); +INSERT INTO `pay_config` VALUES ('keywords', '彩虹易支付,支付宝免签约即时到账,财付通免签约,微信免签约支付,QQ钱包免签约,免签约支付'); +INSERT INTO `pay_config` VALUES ('description', '彩虹易支付是郑州追梦网络科技有限公司旗下的免签约支付产品,完美解决支付难题,一站式接入支付宝,微信,财付通,QQ钱包,微信wap,帮助开发者快速集成到自己相应产品,效率高,见效快,费率低!'); +INSERT INTO `pay_config` VALUES ('orgname', '郑州追梦网络科技有限公司'); +INSERT INTO `pay_config` VALUES ('kfqq', '123456789'); +INSERT INTO `pay_config` VALUES ('template', 'index1'); +INSERT INTO `pay_config` VALUES ('pay_maxmoney', '1000'); +INSERT INTO `pay_config` VALUES ('blockname', '百度云|摆渡|云盘|点券|芸盘|萝莉|罗莉|网盘|黑号|q币|Q币|扣币|qq货币|QQ货币|花呗|baidu云|bd云|吃鸡|透视|自瞄|后座|穿墙|脚本|外挂|模拟|辅助|检测|武器|套装'); +INSERT INTO `pay_config` VALUES ('blockalert', '温馨提醒该商品禁止出售,如有疑问请联系网站客服!'); +INSERT INTO `pay_config` VALUES ('settle_open', '1'); +INSERT INTO `pay_config` VALUES ('settle_type', '1'); +INSERT INTO `pay_config` VALUES ('settle_money', '30'); +INSERT INTO `pay_config` VALUES ('settle_rate', '0.5'); +INSERT INTO `pay_config` VALUES ('settle_fee_min', '0.1'); +INSERT INTO `pay_config` VALUES ('settle_fee_max', '20'); +INSERT INTO `pay_config` VALUES ('settle_alipay', '1'); +INSERT INTO `pay_config` VALUES ('settle_wxpay', '1'); +INSERT INTO `pay_config` VALUES ('settle_qqpay', '1'); +INSERT INTO `pay_config` VALUES ('settle_bank', '0'); +INSERT INTO `pay_config` VALUES ('transfer_alipay', '0'); +INSERT INTO `pay_config` VALUES ('transfer_wxpay', '0'); +INSERT INTO `pay_config` VALUES ('transfer_qqpay', '0'); +INSERT INTO `pay_config` VALUES ('transfer_name', '彩虹易支付'); +INSERT INTO `pay_config` VALUES ('transfer_desc', '彩虹易支付自动结算'); +INSERT INTO `pay_config` VALUES ('login_qq', '0'); +INSERT INTO `pay_config` VALUES ('login_qq_appid', '310786672'); +INSERT INTO `pay_config` VALUES ('login_qq_appkey', 'mkgbmYqS8IZzfGqn'); +INSERT INTO `pay_config` VALUES ('login_alipay', '0'); +INSERT INTO `pay_config` VALUES ('login_alipay_channel', '0'); +INSERT INTO `pay_config` VALUES ('login_wx', '0'); +INSERT INTO `pay_config` VALUES ('login_wx_channel', '0'); +INSERT INTO `pay_config` VALUES ('reg_open', '1'); +INSERT INTO `pay_config` VALUES ('reg_pay', '1'); +INSERT INTO `pay_config` VALUES ('reg_pay_uid', '1000'); +INSERT INTO `pay_config` VALUES ('reg_pay_price', '5'); +INSERT INTO `pay_config` VALUES ('verifytype', '1'); +INSERT INTO `pay_config` VALUES ('test_open', '1'); +INSERT INTO `pay_config` VALUES ('test_pay_uid', '1000'); +INSERT INTO `pay_config` VALUES ('mail_cloud', '0'); +INSERT INTO `pay_config` VALUES ('mail_smtp', 'smtp.qq.com'); +INSERT INTO `pay_config` VALUES ('mail_port', '465'); +INSERT INTO `pay_config` VALUES ('mail_name', ''); +INSERT INTO `pay_config` VALUES ('mail_pwd', ''); +INSERT INTO `pay_config` VALUES ('sms_api', '0'); +INSERT INTO `pay_config` VALUES ('captcha_open', '1'); +INSERT INTO `pay_config` VALUES ('captcha_id', 'b31335edde91b2f98dacd393f6ae6de8'); +INSERT INTO `pay_config` VALUES ('captcha_key', '170d2349acef92b7396c7157eb9d8f47'); +INSERT INTO `pay_config` VALUES ('onecode', '1'); +INSERT INTO `pay_config` VALUES ('recharge', '1'); + + +DROP TABLE IF EXISTS `pay_cache`; +create table `pay_cache` ( + `k` varchar(32) NOT NULL, + `v` longtext NULL, + `expire` int(11) NOT NULL DEFAULT '0', +PRIMARY KEY (`k`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pay_anounce`; +create table `pay_anounce` ( + `id` int(11) unsigned NOT NULL auto_increment, + `content` text DEFAULT NULL, + `color` varchar(10) DEFAULT NULL, + `sort` int(11) NOT NULL DEFAULT '1', + `addtime` datetime DEFAULT NULL, + `status` tinyint(1) NOT NULL DEFAULT '1', +PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pay_type`; +CREATE TABLE `pay_type` ( + `id` int(11) unsigned NOT NULL auto_increment, + `name` varchar(30) NOT NULL, + `device` int(1) unsigned NOT NULL DEFAULT '0', + `showname` varchar(30) NOT NULL, + `status` tinyint(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY name (`name`,`device`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO `pay_type` VALUES (1, 'alipay', 0, '支付宝', 1); +INSERT INTO `pay_type` VALUES (2, 'wxpay', 0, '微信支付', 1); +INSERT INTO `pay_type` VALUES (3, 'qqpay', 0, 'QQ钱包', 1); +INSERT INTO `pay_type` VALUES (4, 'bank', 0, '网银支付', 0); +INSERT INTO `pre_type` VALUES (5, 'jdpay', 0, '京东支付', 0); + +DROP TABLE IF EXISTS `pay_plugin`; +CREATE TABLE `pay_plugin` ( + `name` varchar(30) NOT NULL, + `showname` varchar(60) DEFAULT NULL, + `author` varchar(60) DEFAULT NULL, + `link` varchar(255) DEFAULT NULL, + `types` varchar(50) DEFAULT NULL, + `inputs` text DEFAULT NULL, + `select` text DEFAULT NULL, + PRIMARY KEY (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO `pay_plugin` (`name`, `showname`, `author`, `link`, `types`, `inputs`, `select`) VALUES +('aliold', '支付宝旧版接口', '支付宝', 'https://b.alipay.com/signing/productSetV2.htm', 'alipay', 'appid:合作者身份(PID),appkey:安全校验码(Key)', '1:电脑网站支付,2:手机网站支付'), +('alipay', '支付宝官方支付', '支付宝', 'https://b.alipay.com/signing/productSetV2.htm', 'alipay', 'appid:应用APPID,appkey:支付宝公钥(RSA2),appsecret:商户私钥(RSA2)', '1:电脑网站支付,2:手机网站支付,3:当面付扫码,4:JS支付'), +('epay', '彩虹易支付', '彩虹', 'http://blog.cccyun.cc/', 'alipay,qqpay,wxpay,bank', 'appurl:接口地址,appid:商户ID,appkey:商户密钥', ''), +('jdpay', '京东支付', '京东', 'https://www.jdpay.com/', 'jdpay', 'appid:商户号,appkey:商户DES密钥', ''), +('micro', '小微支付', '小微支付', 'http://blog.cccyun.cc/', 'alipay,wxpay', 'appurl:接口地址,appid:APPID,appkey:APPKEY,appmchid:商户号MCHID', ''), +('qqpay', 'QQ钱包官方支付', 'QQ钱包', 'https://qpay.qq.com/', 'qqpay', 'appid:QQ钱包商户号,appkey:QQ钱包API密钥', '1:扫码支付(包含H5),2:公众号支付'), +('swiftpass', '威富通', '威富通', 'https://www.swiftpass.cn/', 'alipay,wxpay,qqpay,bank,jdpay', 'appid:商户号,appkey:RSA平台公钥,appsecret:RSA应用私钥', '1.手机微信使用公众号支付,1.手机微信使用H5支付'), +('wxpay', '微信官方支付', '微信', 'https://pay.weixin.qq.com/', 'wxpay', 'appid:公众号APPID,appmchid:商户号,appkey:商户支付密钥,appsecret:公众号SECRET', '1:扫码支付,2:公众号支付,3:H5支付'), +('wxpaysl', '微信官方支付服务商版', '微信', 'https://pay.weixin.qq.com/partner/public/home', 'wxpay', 'appid:公众号APPID,appmchid:商户号,appkey:商户支付密钥,appsecret:公众号SECRET,appurl:子商户号', '1:扫码支付,2:公众号支付,3:H5支付'); + +DROP TABLE IF EXISTS `pay_channel`; +CREATE TABLE `pay_channel` ( + `id` int(11) unsigned NOT NULL auto_increment, + `type` int(11) unsigned NOT NULL, + `plugin` varchar(30) NOT NULL, + `name` varchar(30) NOT NULL, + `rate` decimal(5,2) NOT NULL DEFAULT '100.00', + `status` tinyint(1) NOT NULL DEFAULT '0', + `appid` varchar(255) DEFAULT NULL, + `appkey` text DEFAULT NULL, + `appsecret` text DEFAULT NULL, + `appurl` varchar(255) DEFAULT NULL, + `appmchid` varchar(255) DEFAULT NULL, + `apptype` varchar(50) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY type (`type`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pay_roll`; +CREATE TABLE `pay_roll` ( + `id` int(11) unsigned NOT NULL auto_increment, + `type` int(11) unsigned NOT NULL, + `name` varchar(30) NOT NULL, + `kind` int(1) unsigned NOT NULL DEFAULT '0', + `info` text DEFAULT NULL, + `status` tinyint(1) NOT NULL DEFAULT '0', + `index` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=101; + +DROP TABLE IF EXISTS `pay_order`; +CREATE TABLE `pay_order` ( + `trade_no` varchar(64) NOT NULL, + `out_trade_no` varchar(255) NOT NULL, + `api_trade_no` varchar(255) DEFAULT NULL, + `uid` int(11) unsigned NOT NULL, + `tid` int(11) unsigned NOT NULL DEFAULT '0', + `type` int(10) unsigned NOT NULL, + `channel` int(10) unsigned NOT NULL, + `name` varchar(64) NOT NULL, + `money` decimal(10,2) NOT NULL, + `realmoney` decimal(10,2) DEFAULT NULL, + `getmoney` decimal(10,2) DEFAULT NULL, + `notify_url` varchar(255) DEFAULT NULL, + `return_url` varchar(255) DEFAULT NULL, + `addtime` datetime DEFAULT NULL, + `endtime` datetime DEFAULT NULL, + `date` date DEFAULT NULL, + `domain` varchar(32) DEFAULT NULL, + `ip` varchar(20) DEFAULT NULL, + `buyer` varchar(30) DEFAULT NULL, + `status` tinyint(1) NOT NULL DEFAULT '0', + `notify` int(5) NOT NULL DEFAULT '0', + `invite` int(11) unsigned NOT NULL DEFAULT '0', + `invitemoney` decimal(10,2) DEFAULT NULL, + PRIMARY KEY (`trade_no`), + KEY uid (`uid`), + KEY out_trade_no (`uid`,`out_trade_no`), + KEY api_trade_no (`api_trade_no`), + KEY invite (`invite`), + KEY date (`date`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pre_group`; +CREATE TABLE `pre_group` ( + `gid` int(11) unsigned NOT NULL auto_increment, + `name` varchar(30) NOT NULL, + `info` varchar(255) DEFAULT NULL, + `isbuy` tinyint(1) NOT NULL DEFAULT 0, + `price` decimal(10,2) DEFAULT NULL, + `sort` int(10) NOT NULL DEFAULT 0, + `expire` int(10) NOT NULL DEFAULT 0, + PRIMARY KEY (`gid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +INSERT INTO `pay_group` (`gid`, `name`, `info`) VALUES +(0, '默认用户组', '{"1":{"type":"","channel":"-1","rate":""},"2":{"type":"","channel":"-1","rate":""},"3":{"type":"","channel":"-1","rate":""}}'); + + +ALTER TABLE `pay_user` +DROP COLUMN `uid`; +ALTER TABLE `pay_user` +DROP COLUMN `type`; +ALTER TABLE `pay_user` +CHANGE COLUMN `id` `uid` int(11) unsigned NOT NULL auto_increment; +ALTER TABLE `pay_user` +CHANGE COLUMN `active` `status` int(1) NOT NULL DEFAULT '0'; +ALTER TABLE `pay_user` +ADD COLUMN `gid` int(11) unsigned NOT NULL DEFAULT 0, +ADD COLUMN `upid` int(11) unsigned NOT NULL DEFAULT 0, +ADD COLUMN `pwd` varchar(32) DEFAULT NULL, +ADD COLUMN `codename` varchar(32) DEFAULT NULL, +ADD COLUMN `cert` int(1) NOT NULL DEFAULT '0', +ADD COLUMN `certno` varchar(18) DEFAULT NULL, +ADD COLUMN `certname` varchar(32) DEFAULT NULL, +ADD COLUMN `certtime` datetime DEFAULT NULL, +ADD COLUMN `lasttime` datetime DEFAULT NULL, +ADD COLUMN `endtime` datetime DEFAULT NULL, +ADD COLUMN `pay` int(1) NOT NULL DEFAULT '1', +ADD COLUMN `settle` int(1) NOT NULL DEFAULT '1', +ADD COLUMN `keylogin` int(1) NOT NULL DEFAULT '1', +ADD COLUMN `mode` int(1) NOT NULL DEFAULT '0'; +ALTER TABLE `pay_user` +ADD INDEX email (`email`), +ADD INDEX phone (`phone`); + + +ALTER TABLE `pay_settle` +CHANGE COLUMN `pid` `uid` int(11) NOT NULL; +ALTER TABLE `pay_settle` +DROP COLUMN `fee`, +ADD COLUMN `auto` int(1) NOT NULL DEFAULT '1', +ADD COLUMN `realmoney` decimal(10,2) NOT NULL, +CHANGE COLUMN `time` `addtime` datetime DEFAULT NULL, +ADD COLUMN `endtime` datetime DEFAULT NULL, +ADD COLUMN `result` varchar(64) DEFAULT NULL; +ALTER TABLE `pay_settle` +ADD INDEX batch (`batch`); + + +DROP TABLE IF EXISTS `pay_log`; +CREATE TABLE `pay_log` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uid` int(11) NOT NULL DEFAULT '0', + `type` varchar(20) NULL, + `date` datetime NOT NULL, + `ip` varchar(20) DEFAULT NULL, + `city` varchar(20) DEFAULT NULL, + `data` text NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pay_record`; +CREATE TABLE `pay_record` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uid` int(11) NOT NULL, + `action` int(1) NOT NULL DEFAULT '0', + `money` decimal(10,2) NOT NULL, + `oldmoney` decimal(10,2) NOT NULL, + `newmoney` decimal(10,2) NOT NULL, + `type` varchar(20) DEFAULT NULL, + `trade_no` varchar(64) DEFAULT NULL, + `date` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY uid (`uid`), + KEY trade_no (`trade_no`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + +ALTER TABLE `pay_batch` +ADD COLUMN `count` int(11) NOT NULL DEFAULT '0'; + +DROP TABLE IF EXISTS `pay_regcode`; +CREATE TABLE `pay_regcode` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uid` int(11) NOT NULL DEFAULT '0', + `type` int(1) NOT NULL DEFAULT '0', + `code` varchar(32) NOT NULL, + `to` varchar(32) DEFAULT NULL, + `time` int(11) NOT NULL, + `ip` varchar(20) DEFAULT NULL, + `status` int(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY code (`code`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +DROP TABLE IF EXISTS `pay_risk`; +CREATE TABLE `pay_risk` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `uid` int(11) NOT NULL DEFAULT '0', + `type` int(1) NOT NULL DEFAULT '0', + `url` varchar(64) DEFAULT NULL, + `content` varchar(64) DEFAULT NULL, + `date` datetime DEFAULT NULL, + `status` int(1) NOT NULL DEFAULT '0', + PRIMARY KEY (`id`), + KEY uid (`uid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; diff --git a/nginx.txt b/nginx.txt new file mode 100644 index 0000000..7b838e6 --- /dev/null +++ b/nginx.txt @@ -0,0 +1,12 @@ +location / { + if (!-e $request_filename) { + rewrite ^/(.[a-zA-Z0-9\-\_]+).html$ /index.php?mod=$1 last; + } + rewrite ^/pay/(.*)$ /pay.php?s=$1 last; +} +location ^~ /plugins { + deny all; +} +location ^~ /includes { + deny all; +} \ No newline at end of file diff --git a/pay.php b/pay.php new file mode 100644 index 0000000..60ddf98 --- /dev/null +++ b/pay.php @@ -0,0 +1,19 @@ +getRow("SELECT * FROM pre_order WHERE trade_no='".TRADE_NO."' limit 1"); +if(!$order)sysmsg('该订单号不存在,请返回来源地重新发起请求!'); + +$channel = \lib\Channel::get($order['channel']); +if(!$channel || $channel['plugin']!=PAY_PLUGIN)sysmsg('当前支付通道信息不存在'); + +$ordername = !empty($conf['ordername'])?ordername_replace($conf['ordername'],$order['name'],$order['uid']):$order['name']; +$order['money'] = $order['realmoney']; + +include $loadfile; \ No newline at end of file diff --git a/paypage/ajax.php b/paypage/ajax.php new file mode 100644 index 0000000..4592bb2 --- /dev/null +++ b/paypage/ajax.php @@ -0,0 +1,62 @@ +0 && $money>$conf['pay_maxmoney'])exit('{"code":-1,"msg":"最大支付金额是'.$conf['pay_maxmoney'].'元"}'); +if($conf['pay_minmoney']>0 && $money<$conf['pay_minmoney'])exit('{"code":-1,"msg":"最小支付金额是'.$conf['pay_minmoney'].'元"}'); + +$trade_no=date("YmdHis").rand(11111,99999); +$return_url=$siteurl.'paypage/success.php?trade_no='.$trade_no; +$domain=getdomain($return_url); +if(!$DB->exec("INSERT INTO `pre_order` (`trade_no`,`out_trade_no`,`uid`,`tid`,`addtime`,`name`,`money`,`notify_url`,`return_url`,`domain`,`ip`,`status`) VALUES (:trade_no, :out_trade_no, :uid, 3, NOW(), :name, :money, :notify_url, :return_url, :domain, :clientip, 0)", [':trade_no'=>$trade_no, ':out_trade_no'=>$trade_no, ':uid'=>$uid, ':name'=>'在线收款', ':money'=>$money, ':notify_url'=>$return_url, ':return_url'=>$return_url, ':domain'=>$domain, ':clientip'=>$clientip]))exit('{"code":-1,"msg":"创建订单失败,请返回重试!"}'); + +$_SESSION['paypage_trade_no'] = $trade_no; + +$result=[]; +$result['code']=0; +$result['msg']='succ'; +$result['trade_no']=$trade_no; +$result['direct']=$direct; + +if(!empty($paytype) && isset($_SESSION['paypage_typeid']) && isset($_SESSION['paypage_channel']) && isset($_SESSION['paypage_rate'])){ + $typeid = intval($_SESSION['paypage_typeid']); + $channel = intval($_SESSION['paypage_channel']); + if($direct==1){ + if($userrow['mode']==1){ + $realmoney = round($money*(100+100-$_SESSION['paypage_rate'])/100,2); + $getmoney = $money; + }else{ + $realmoney = $money; + $getmoney = round($money*$_SESSION['paypage_rate']/100,2); + } + $DB->exec("UPDATE pre_order SET type='$typeid',channel='$channel',realmoney='$realmoney',getmoney='$getmoney' WHERE trade_no='$trade_no'"); + $ordername = 'onlinepay'.time(); + $ordername = !empty($conf['ordername'])?ordername_replace($conf['ordername'],$ordername,$uid):$ordername; + if($paytype=='alipay'){ + $paydata = alipay_jspay($channel,$trade_no,$realmoney,$ordername,$payer); + }elseif($paytype=='wxpay'){ + $paydata = wxpay_jspay($channel,$trade_no,$realmoney,$ordername,$payer); + }elseif($paytype=='qqpay'){ + $paydata = qqpay_jspay($channel,$trade_no,$realmoney,$ordername); + } + $result['paydata'] = $paydata; + }else{ + $result['url'] = '/submit2.php?typeid='.$typeid.'&trade_no='.$trade_no; + } +}else{ + $result['url'] = '/cashier.php?trade_no='.$trade_no; +} + +exit(json_encode($result)); \ No newline at end of file diff --git a/paypage/css/default.css b/paypage/css/default.css new file mode 100644 index 0000000..1fa0e6d --- /dev/null +++ b/paypage/css/default.css @@ -0,0 +1,77 @@ +@charset "UTF-8"; +html {font-size:62.5%;-webkit-font-smoothing:antialiased;} +body {text-align:center;font-family: 'PingFang SC', 'Helvetica Neue', Helvetica, Arial, 'Hiragino Sans GB', 'Microsoft Yahei', 微软雅黑, STHeiti, 华文细黑, sans-serif; -webkit-text-size-adjust:none; font-size:1.4rem;background:#f4f6f9;color:#000;-webkit-user-select:none;} +* {margin:0; padding:0;list-style:none; } +i, em, b {font-style:normal; font-weight:normal;} +input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#ccc;} +img{width:100%;vertical-align:top;} +input,textarea,select,button{font-size:1.4rem;border:0; outline:none;font-family:"微软雅黑","Microsoft YaHei","Helvetica Neue",Helvetica,STHeiTi,sans-serif;} +*{-webkit-tap-highlight-color: rgba(0,0,0,0);} + + +.clear{ clear:both;} +.none{ display:none !important;} +.hide{ display:none;} +.height100{ height:100%;} + +/*flex*/ +html,body{height:100%;} +.container{height:100%;} +.layout-flex{display:-webkit-box;-webkit-box-orient:vertical;height:100%;} +.layout-flex .content{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;overflow:auto;-webkit-overflow-scrolling:touch;position:relative;height:100%;} +.m-title{padding: 0.42rem 0.54rem 0.5rem;} +.m-title dl{overflow: hidden;} +.m-title dl dt{float: left; width: 0.66rem; height: 0.66rem; margin-right: 0.2rem;} +.m-title dl dt img{width: 100%; height: 100%; display: block;} +.m-title dl dd{float: left; font-size: 0.28rem; color: #161213; padding-top: 0.13rem;} +/*pop*/ +.pop-wrap{position:fixed;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,0.6);display:table;z-index:99999;} +.pop-outer{display:table-cell;vertical-align:middle;} + + +/*loading*/ +.circle-box{width: 100%;height: 100%;position: fixed;left: 0;top: 0;} +.circle_animate{position: absolute; left: 50%; top: 43%; width: 9rem; height: 9rem; margin-left: -4.5rem; margin-top: -4.5rem; background: rgba(0, 10, 24, 0.6); border-radius: 8px; box-shadow: 0 0 4px rgba(0, 10, 24, 0.4);} +.circle_animate .circle{width: 3.6rem; height: 3.6rem; margin: 1.6rem auto 1rem; background: url(../images/loading.gif) no-repeat; background-size: 100% 100%; } +@-webkit-keyframes animate_circle{100%{-webkit-transform: rotate(360deg);}} +.circle_animate p{color: rgba(255, 255, 255, 0.7);} + +/*pop*/ +.pop_wrapper{position:fixed;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,0.6);display:table;z-index:99999;} +.pop_outer{display:table-cell;vertical-align:middle;} +.pop_obtm{display:table-cell;vertical-align:bottom;} +.pop_pintip{margin: 0 2rem;} +.pop_cont{margin: 0 2rem;background-color: rgba(255,255,255,1);border-radius: 1rem;overflow: hidden;} +.pop_tip{font-size: 1.8rem;padding: 2rem 2.4rem 2rem 2.4rem;line-height: 2.8rem;word-break: break-all;border-bottom:1px solid #e5e5e5;color:#000} +.pop_wbtn{display: block;height: 4.4rem;line-height: 4.4rem;font-size: 1.7rem;color: #007FFF; +} + +.pop_wbtn a{background:#0187e8} +.pop_wbtn:active{color: rgba(0,127,255,0.5);} +/*.b_top{padding:1.5rem 0.6rem;background:#0187e8;border-radius: 6px;color:#fff;margin:20px;.b_top{margin:20px 0}}*/ +.b_top{padding:1.2rem 0.6rem;border-radius: 6px;color:#0076fe;font-size:2rem} +/*.pop_btn{background:#0187e8;border-radius: 6px;padding:1rem 0;color:#fff;display:block;width:85%;margin:0 auto} +.pop_btn{padding:1em;height:2.5em}*/ +.pop_wrapper_white{position:fixed;left:0;top:0;width:100%;height:100%;background:rgba(0,0,0,0);display:table;z-index:99999;} +.pop_intips{display: inline-block;border-radius: 8px;background-color: rgba(0,0,0,0.8);font-size: 1.5rem;color: #fff;padding: 1.5rem 2rem;word-break: break-all;} + +@media (max-device-width: 320px){ + html{font-size: 52%;} +} + + + + + + + + + + + + + + + + + diff --git a/paypage/css/style.css b/paypage/css/style.css new file mode 100644 index 0000000..cc22fc0 --- /dev/null +++ b/paypage/css/style.css @@ -0,0 +1,190 @@ +@charset "utf-8"; +/*date:2018-03-13*/ + +/* add====================== */ +.mar10{margin:10px} +.marLeft5{margin-left:5px} +.marLeft10{margin-left:10px} +.mar20{margin:20px} +.fl{float:left} +.selTitle{font-size: 1.95rem;color:#666} +.fontGray{color:#8e8e8e} +.money{font-size:2rem;font-family: "Microsoft YaHei";} +.grayico_pay{display:inline-block;width: 3.34rem;height: 2.6rem;margin: 0 auto;overflow-y: hidden;} +.copyRight{color:#afafaf;font-size:1.5rem;margin-bottom:10px;font-family: Microsoft YaHei;} + +/* 按钮====================== */ +.btn{ width:100%; height:4.5rem; border-radius:6px; font-size:1.7rem;} +.btn:after{ border-radius:9px;} +.btn_blue{ background:#4182E2; color:#fff;} +.btn_blue:active{ background:#2167CD;} +.btn_blue.disable{ background: #ddd} +.btn_white{ background:#fff; color:#000;} +.btn_white:active{ background:#ddd;} + +/* 1像素边框====================== */ +.border{ position:relative;} +.border:after{ content:""; position:absolute; left:0; top:0; right:-100%; bottom:-100%; -webkit-transform:scale(0.5); -webkit-transform-origin:0 0; pointer-events:none;} +/*.b_all:after{ border:1px solid #4182e2;} +.b_all2:after{ border:1px solid #ddd;}*/ +.b_btm:after{ border-bottom:1px solid #d5d5d5;} +/*.b_lft:after{ border-left:1px solid #ddd;}*/ +.b_rgt:after{ border-right:1px solid #d5d5d5;} +/*.b_top:after{ border-top:1px solid #ddd;}*/ +.b_rgt_btm:after{ border-right:1px solid #d5d5d5; border-bottom:1px solid #d5d5d5;} + +/* 付款金额====================== */ +.payMoney{text-align: left;color:#b7b7b7;font-size:1.8rem;margin-bottom:10px;} + + +/* 设置支付金额====================== */ +.amount_title{padding: 0 1.5rem; font-size: 1.7rem;color: #333;line-height: 2.8rem;} + +.set_amount{padding:1rem 1rem 0.5rem 1rem; margin: 2rem 1.5rem 0 1.5rem; background: #fff; position: relative;border-radius:6px;box-shadow: 0 0 1px #ebebeb;} +.set_amount .amount_hd{font-size: 1.5rem; color: #666; text-align: left;height: 2.4rem;line-height: 2.4rem;} +.set_amount .amount_bd{ height: 50px;line-height: 50px; margin: 0; text-align: left; } +.set_amount .amount_bd input{width: 100%; height: 100%; font-family: arial; font-size: 4rem;} +.set_amount .amount_bd .int_place{display: inline-block; height: 5rem; line-height: 5rem; vertical-align: middle; font-family: arial; font-size: 4rem;color: #999;} +/* .set_amount .amount_bd .input_simu{font-family: HelveticaNeue; font-size: 4.4rem;display: inline-block;color:#444;position:absolute;left:3.6rem;height:50px;bottom:10px;} +.set_amount .amount_bd .line_simu{margin-top:0.5rem;width: 1px; height: 3rem; background: #4182E2; vertical-align: middle; opacity: 0; -webkit-animation: animate_flash 1s ease-in-out infinite;} + */ +.set_amount .amount_bd .input_simu{font-family: HelveticaNeue; font-size: 34px; color:#444;height:50px; float:left;} +.set_amount .amount_bd .line_simu{margin-top:0.5rem;width: 1px; height: 40px; background: #4182E2; opacity: 0; -webkit-animation: animate_flash 1s ease-in-out infinite;float:left;} +.i_money{padding:0rem 0.5rem 0 0; font-size:24px;color: #444;font-family: arial;height:50px; float:left;} +@-webkit-keyframes animate_flash{ + 50%{opacity:1;} +} +.amount_bd .clearBtn{width: 3rem;height: 100%;position: absolute;right: 0;top:0;background: #fff;} +.set_amount .amount_bd .btn_clear{ + position: absolute; right: 0.5rem; top: 1.5rem; width: 2rem; height: 2rem; background: url(../images/btn_clear.png) center center no-repeat; background-size: 1.4rem 1.4rem; +} +.error_tips{position: absolute; left: 50%; top: 18.2rem; width: 16rem; height: 3.2rem; line-height: 3.2rem; margin-left: -8rem; color: #fff; background: rgba(15,15,30,0.5); border-radius: 8px; display: none;} +.remark{padding: 0 1.6rem; color: #4081e1; text-align: right;height: 3.7rem;line-height: 3.7rem;} +.btn_row{padding: 0 2rem 1rem;} + +/* .i_money{padding:0rem 0.5rem 0 0; font-size:23px;color: #444;font-family: arial;position:absolute;height:50px;bottom:5px;} */ + +.sico_pay_p{padding: 3rem 0 1.5rem 0;} +.sico_pay{display: block;width:40px;height:40px;background: url(../images/sellerLogo.png) no-repeat;background-size:40px 40px;margin: 0 auto;overflow-y: hidden;} + +/*.keyboard{background: #fff;}*/ +.key_table{width: 100%;border-collapse:collapse;border-spacing:1;border-spacing:0;list-style: none;padding: 0;margin: 0;} +.key_table td{width: 25%;height: 6.2rem;text-align: center;color:#444} +.key_table td.disable{background-color: #a0d7fe;} +.keyboard .key{line-height: 6.2rem; font-family:HelveticaNeue; font-size: 3.6rem;} +.keyboard .key.clear{background: url(../images/clear.png) center no-repeat; background-size:2.95rem 2.95rem;width: 2.95rem;height:2.95rem} +.keyboard .key:active{background-color: #D5D8DB;} + .keyboard{background: #fff;} +.keyboard .pay_btn{background-color: #0076fe;font-size: 2rem;color: #fff;line-height: 2.3rem;} +.pay_btn:active{background-color: #54b8ff;} +.pay_btn em{display: block;} + +.pop_remark{background: rgba(255, 255, 255, 0.95); border-radius: 10px; margin: 8rem 4rem; overflow: hidden;} +.pop_remark .pop_title{padding: 1.8rem 1.5rem 0; font-size: 1.7rem;} +.pop_remark .input_wrap{margin: 1.6rem 1.5rem 2rem;} +.pop_remark .input_wrap input{width: 100%; height: 4rem; background: #fff; text-indent: 1rem;} +.pop_remark .btn_wrap{display: -webkit-box;} +.pop_remark .btn_wrap span{display: block; -webkit-box-flex: 1; width: 1px; height: 5rem; line-height: 5rem; font-size: 1.7rem; color: #007FFF;} + +/* 支付确认====================== */ +.pay_amount{font-size: 5rem; margin: 3.5rem 0 0.8rem;} +.remark2{font-size: 1.5rem; color: #666;} +.btn_row2{margin: 5rem 2rem 2rem;} + +/* 支付成功====================== */ +.bg_wt{background-color: #fff;margin-bottom: 1rem;} +.pay_stop{padding: 4rem 0 1rem 0;} +.pay_stop .ico_success{display: block;width: 6rem; height: 6rem; background: url(../images/icoSuccess.png) center no-repeat; background-size: 100% 100%;margin: 0 auto;} +.pay_suc1{font-size: 1.7rem; color: #4182e2;height: 2.6rem;line-height: 2.6rem;overflow: hidden;} +.pay_suc2{font-size: 3rem; color: #333;height: 3.9rem;line-height: 3.9rem;overflow: hidden;} +.pay_suc2 i{font-size: 1.5rem;} +.pay_suc3{font-size: 1.5rem;color: #999;height: 3.7rem;line-height: 3.7rem;overflow: hidden;} +.btn_p{padding: 2rem 0 2.4rem 0;} + +.btn_wt{width: 12.5rem;color: #4182e2;background-color: #fff;} +.btn_wt:active{ background-color:#eee;} + + +/*discount*/ +.discount{padding-bottom: 2rem;} +.discount-tit{ + font-size: 2.5rem; + padding: 2.5rem 0; + color:#4182e2; + text-align: center; +} +.discount-box{ + margin: 0 2rem; + background: #fff; + -wekkit-border-radius: 5px; + border-radius: 5px; +} +.discount-box img{ + max-width: 18.15rem; + display: block; + margin: 0 auto; + padding: 3rem 0 1rem 0; +} +.discount-box .t1{ + color:#999; + font-size: 1.4rem; + padding: 0.5rem 0; +} +.discount-box .t2{ + color:#000; + font-size: 2.5rem; +} +.discount-box .t2 span{font-size: 4rem;} +.discount-box .t3{ + margin: 2.5rem 1rem 0 1rem; + border-top: 1px dashed #ddd; + padding: 1rem 1rem 2.6rem 1rem; + line-height: 2.8rem; + color:#999; +} +.discount-box .clear{ + overflow: hidden; +} +.discount-box .fl{ + float: left; +} +.discount-box .fr{ + float: right; +} +.discount-box .grey{ + color:#666; + text-decoration: line-through; +} +.discount-box .orange{ + color:#ff9742; +} +.discount-box .btn{ + margin-top: 2.5rem; + -webkit-border-radius: 5px; + border-radius: 5px; + color:#fff; + font-size: 1.7rem; + line-height: 4.5rem; + background: #4182e2; +} +.discount-box .btn:active{ + background:#2667c7; +} +.discount-box .disable,.discount-box .disable:active{ + background:#ddd; +} +.tdVerTop{vertical-align:top;} +@media (max-width:340px){ + .set_amount .amount_bd .input_simu { + font-family: HelveticaNeue; + font-size: 30px; + } + .keyboard .key { + line-height: 5rem; + font-size: 3rem; + } + + .key_table td { + height: 5rem; + } +} diff --git a/paypage/error.php b/paypage/error.php new file mode 100644 index 0000000..f692b83 --- /dev/null +++ b/paypage/error.php @@ -0,0 +1,34 @@ + + + + 错误提示 + + + + + + + + + + +
    +

    错误提示

    +
    +
    +
    +
    +
    +
    + +
    +
    + + + \ No newline at end of file diff --git a/paypage/images/btn_clear.png b/paypage/images/btn_clear.png new file mode 100644 index 0000000..d0f7618 Binary files /dev/null and b/paypage/images/btn_clear.png differ diff --git a/paypage/images/clear.png b/paypage/images/clear.png new file mode 100644 index 0000000..5c4df5e Binary files /dev/null and b/paypage/images/clear.png differ diff --git a/paypage/images/icoSuccess.png b/paypage/images/icoSuccess.png new file mode 100644 index 0000000..fc99916 Binary files /dev/null and b/paypage/images/icoSuccess.png differ diff --git a/paypage/images/loading.gif b/paypage/images/loading.gif new file mode 100644 index 0000000..1720432 Binary files /dev/null and b/paypage/images/loading.gif differ diff --git a/paypage/images/sellerLogo.png b/paypage/images/sellerLogo.png new file mode 100644 index 0000000..c6d8804 Binary files /dev/null and b/paypage/images/sellerLogo.png differ diff --git a/paypage/inc.php b/paypage/inc.php new file mode 100644 index 0000000..7803ff3 --- /dev/null +++ b/paypage/inc.php @@ -0,0 +1,156 @@ +-1, 'msg'=>$msg]; + exit(json_encode($result)); +} + +function check_paytype(){ + if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger/')!==false){ + $type='wxpay'; + }elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'AlipayClient/')!==false){ + $type='alipay'; + }elseif(strpos($_SERVER['HTTP_USER_AGENT'], 'QQ/')!==false){ + $type='qqpay'; + } + return $type; +} + +function alipayOpenId($channel){ + global $DB,$siteurl; + $channel = \lib\Channel::get($channel); + if(!$channel)showerror('支付通道不存在'); + define("PAY_ROOT", PLUGIN_ROOT.$channel['plugin'].'/'); + require_once(PAY_ROOT."inc/AlipayOauthService.php"); + $config['redirect_uri'] = $siteurl.'paypage/'; + $oauth = new AlipayOauthService($config); + if(isset($_GET['auth_code'])){ + $result = $oauth->getToken($_GET['auth_code']); + if($result['user_id']){ + return $result['user_id']; + }else{ + showerror('支付宝快捷登录失败!['.$result['sub_code'].']'.$result['sub_msg']); + } + }else{ + $oauth->oauth(); + } +} + +function weixinOpenId($channel){ + global $DB; + $channel = \lib\Channel::get($channel); + if(!$channel)showerror('支付通道不存在'); + define("PAY_ROOT", PLUGIN_ROOT.$channel['plugin'].'/'); + require_once PAY_ROOT."inc/WxPay.Api.php"; + require_once PAY_ROOT."inc/WxPay.JsApiPay.php"; + $tools = new JsApiPay(); + $openId = $tools->GetOpenid(); + if(!$openId)showerror('OpenId获取失败'); + return $openId; +} + +function alipay_jspay($channel,$trade_no,$money,$name,$openid){ + global $DB,$conf; + $channel = \lib\Channel::get($channel); + if(!$channel)showerrorjson('支付通道不存在'); + define("PAY_ROOT", PLUGIN_ROOT.$channel['plugin'].'/'); + define("TRADE_NO", $trade_no); + + require_once(PAY_ROOT."inc/model/builder/AlipayTradeCreateContentBuilder.php"); + require_once(PAY_ROOT."inc/AlipayTradeService.php"); + + // 创建请求builder,设置请求参数 + $qrPayRequestBuilder = new AlipayTradeCreateContentBuilder(); + $qrPayRequestBuilder->setOutTradeNo(TRADE_NO); + $qrPayRequestBuilder->setTotalAmount($money); + $qrPayRequestBuilder->setSubject($name); + $qrPayRequestBuilder->setBuyerId($openid); + + // 调用qrPay方法获取当面付应答 + $qrPay = new AlipayTradeService($config); + $qrPayResult = $qrPay->create($qrPayRequestBuilder); + + // 根据状态值进行业务处理 + $status = $qrPayResult->getTradeStatus(); + $response = $qrPayResult->getResponse(); + if($status == 'SUCCESS'){ + $trade_no = $response->trade_no; + return $trade_no; + }elseif($status == 'FAILED'){ + showerrorjson('支付宝创建订单失败!['.$response->sub_code.']'.$response->sub_msg); + }else{ + showerrorjson('系统异常,状态未知!'); + } +} + +function wxpay_jspay($channel,$trade_no,$money,$name,$openid){ + global $DB,$conf; + $channel = \lib\Channel::get($channel); + if(!$channel)showerrorjson('支付通道不存在'); + define("PAY_ROOT", PLUGIN_ROOT.$channel['plugin'].'/'); + define("TRADE_NO", $trade_no); + + require_once PAY_ROOT."inc/WxPay.Api.php"; + require_once PAY_ROOT."inc/WxPay.JsApiPay.php"; + + $input = new WxPayUnifiedOrder(); + $input->SetBody($name); + $input->SetOut_trade_no(TRADE_NO); + $input->SetTotal_fee($money*100); + $input->SetTime_start(date("YmdHis")); + $input->SetTime_expire(date("YmdHis", time() + 600)); + $input->SetNotify_url($conf['localurl'].'pay/wxpay/notify/'.TRADE_NO.'/'); + $input->SetTrade_type("JSAPI"); + $input->SetProduct_id("01001"); + $input->SetOpenid($openid); + $order = WxPayApi::unifiedOrder($input); + + if($order["result_code"]=='SUCCESS'){ + $tools = new JsApiPay(); + $jsApiParameters = $tools->GetJsApiParameters($order); + return $jsApiParameters; + }else{ + showerrorjson('微信支付下单失败!['.$order["return_code"].'] '.$order["return_msg"].'['.$order["err_code"].'] '.$order["err_code_des"]); + } +} + +function qqpay_jspay($channel,$trade_no,$money,$name){ + global $DB,$conf; + $channel = \lib\Channel::get($channel); + if(!$channel)showerrorjson('支付通道不存在'); + define("PAY_ROOT", PLUGIN_ROOT.$channel['plugin'].'/'); + define("TRADE_NO", $trade_no); + + require_once (PAY_ROOT.'inc/qpayMchAPI.class.php'); + + //入参 + $params = array(); + $params["out_trade_no"] = TRADE_NO; + $params["body"] = $name; + $params["fee_type"] = "CNY"; + $params["notify_url"] = $conf['localurl'].'pay/qqpay/notify/'.TRADE_NO.'/'; + $params["spbill_create_ip"] = real_ip(); + $params["total_fee"] = $money*100; + $params["trade_type"] = "JSAPI"; + + //api调用 + $qpayApi = new QpayMchAPI('https://qpay.qq.com/cgi-bin/pay/qpay_unified_order.cgi', null, 10); + $ret = $qpayApi->reqQpay($params); + $result = QpayMchUtil::xmlToArray($ret); + //print_r($result); + + if($result['return_code']=='SUCCESS' && $result['result_code']=='SUCCESS'){ + $prepay_id = $result['prepay_id']; + return $prepay_id; + }elseif(isset($result["err_code"])){ + showerrorjson('QQ钱包支付下单失败!['.$result["err_code"].'] '.$result["err_code_des"]); + }else{ + showerrorjson('QQ钱包支付下单失败!['.$result["return_code"].'] '.$result["return_msg"]); + } +} \ No newline at end of file diff --git a/paypage/index.php b/paypage/index.php new file mode 100644 index 0000000..82e11fd --- /dev/null +++ b/paypage/index.php @@ -0,0 +1,136 @@ +getRow("select * from pre_user where uid='$uid' limit 1"); +if(!$userrow || $userrow['status']==0 || $userrow['pay']==0)showerror('当前商户不存在或已被封禁'); +if($conf['cert_force']==1 && $userrow['cert']==0){ + showerror('当前商户未完成实名认证,无法收款'); +} + +$_SESSION['paypage_uid'] = $uid; + +$direct = '0'; +$type = check_paytype(); +if($type){ + $submitData = \lib\Channel::submit($type, $userrow['gid']); + $apptype = explode(',',$submitData['apptype']); + if($type == 'alipay' && in_array('4',$apptype)){ + $openId = alipayOpenId($submitData['channel']); + $direct = '1'; + }elseif($type == 'wxpay' && in_array('2',$apptype)){ + $openId = weixinOpenId($submitData['channel']); + $direct = '1'; + }elseif($type == 'qqpay' && in_array('2',$apptype)){ + $direct = '1'; + } + $_SESSION['paypage_typeid'] = $submitData['typeid']; + $_SESSION['paypage_channel'] = $submitData['channel']; + $_SESSION['paypage_rate'] = $submitData['rate']; +} + +$codename = !empty($userrow['codename'])?$userrow['codename']:$userrow['username']; +$csrf_token = md5(mt_rand(0,999).time()); +$_SESSION['paypage_token'] = $csrf_token; +?> + + + 向商户付款 + + + + + + + + + + +
    + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + +
    +
    请输入付款金额
    +
    + ¥ + + + + + +
    + +
    +
    +
    + +
    + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    123
    456确认支付
    789
    0.
    +
    + + + + + + + + + + + \ No newline at end of file diff --git a/paypage/js/common.js b/paypage/js/common.js new file mode 100644 index 0000000..dc84090 --- /dev/null +++ b/paypage/js/common.js @@ -0,0 +1,122 @@ +function getId(value){ + return document.getElementById(value); +} + +//ajax post +function Post(option){ + var url = option.url || ""; + var data = (function(){ + var text = ''; + if(option.data && option.data.constructor == Object){ + var arr = []; + for(var key in option.data){ + arr.push(key+'='+option.data[key]); + } + text = arr.join('&'); + } + return text; + })(); + var toJson = option.dataType == 'text' ? false : true; + var success = option.success || function(){}; + var error = option.error || function(){}; + var timeout = option.timeout || 30000; + var isTimeout = false; + var http = new XMLHttpRequest(); + var timer = setTimeout(function(){ + isTimeout = true; + http.abort(); + error(); + },timeout); + http.open("POST",url,true); + http.setRequestHeader("Content-type","application/x-www-form-urlencoded"); + http.onreadystatechange = function(){ + if(http.readyState != 4 || isTimeout){return;} + clearTimeout(timer); + if(http.status == 200){ + var response = toJson ? JSON.parse(http.responseText) : http.responseText; + success(response); + }else{ + error(); + } + }; + http.send(data); +} + +//loading +function Loading(){ + var obj = document.createElement('div'); + var box = document.createElement('div'); + var img = document.createElement('div'); + var txt = document.createElement('p'); + + obj.className = 'circle-box none'; + box.className = 'circle_animate'; + img.className = 'circle'; + box.appendChild(img); + box.appendChild(txt); + obj.appendChild(box); + if(script){ + script.parentNode.insertBefore(obj,script); + }else{ + document.body.appendChild(obj); + } + + this.show = function(value){ + txt.innerHTML = value || '加载中...'; + obj.classList.remove('none'); + }; + + this.hide = function(){ + obj.classList.add('none'); + txt.innerHTML = ''; + }; +} + +//tips +function Tips(){ + var obj = document.createElement('div'); + var box = document.createElement('div'); + var con = document.createElement('div'); + var txt = document.createElement('div'); + var p = document.createElement('p'); + var btnBox = document.createElement('p'); + var btn = document.createElement('span'); + + obj.className = 'pop_wrapper none'; + box.className = 'pop_outer'; + con.className = 'pop_cont'; + txt.className = 'pop_tip'; + p.className = 'border b_top'; + btnBox.className = 'pop_wbtn'; + btn.className='pop_btn' + + btn.innerHTML = '我知道了'; + + p.appendChild(btn); + con.appendChild(txt); + con.appendChild(p); + box.appendChild(con); + obj.appendChild(box); + if(script){ + script.parentNode.insertBefore(obj,script); + }else{ + document.body.appendChild(obj); + } + + function hideFun(){ + obj.classList.add('none'); + } + + this.show = function(value,callback){ + var fun = callback || hideFun; + txt.innerHTML = value || ' '; + p.onclick = callback || hideFun; + obj.classList.remove('none'); + }; + + this.hide = hideFun; +} + +document.body.addEventListener('touchstart',function(){},false); +var script = document.body.getElementsByTagName('script')[0]; +var loading = new Loading(); \ No newline at end of file diff --git a/paypage/js/hammer.js b/paypage/js/hammer.js new file mode 100644 index 0000000..edadee1 --- /dev/null +++ b/paypage/js/hammer.js @@ -0,0 +1,7 @@ +/*! Hammer.JS - v2.0.8 - 2016-04-23 + * http://hammerjs.github.io/ + * + * Copyright (c) 2016 Jorik Tangelder; + * Licensed under the MIT license */ +!function(a,b,c,d){"use strict";function e(a,b,c){return setTimeout(j(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e\s*\(/gm,"{anonymous}()@"):"Unknown Stack Trace",f=a.console&&(a.console.warn||a.console.log);return f&&f.call(a.console,e,d),b.apply(this,arguments)}}function i(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&la(d,c)}function j(a,b){return function(){return a.apply(b,arguments)}}function k(a,b){return typeof a==oa?a.apply(b?b[0]||d:d,b):a}function l(a,b){return a===d?b:a}function m(a,b,c){g(q(b),function(b){a.addEventListener(b,c,!1)})}function n(a,b,c){g(q(b),function(b){a.removeEventListener(b,c,!1)})}function o(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function p(a,b){return a.indexOf(b)>-1}function q(a){return a.trim().split(/\s+/g)}function r(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;dc[b]}):d.sort()),d}function u(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g1&&!c.firstMultiple?c.firstMultiple=D(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=E(d);b.timeStamp=ra(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=I(h,i),b.distance=H(h,i),B(c,b),b.offsetDirection=G(b.deltaX,b.deltaY);var j=F(b.deltaTime,b.deltaX,b.deltaY);b.overallVelocityX=j.x,b.overallVelocityY=j.y,b.overallVelocity=qa(j.x)>qa(j.y)?j.x:j.y,b.scale=g?K(g.pointers,d):1,b.rotation=g?J(g.pointers,d):0,b.maxPointers=c.prevInput?b.pointers.length>c.prevInput.maxPointers?b.pointers.length:c.prevInput.maxPointers:b.pointers.length,C(c,b);var k=a.element;o(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function B(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};b.eventType!==Ea&&f.eventType!==Ga||(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function C(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ha&&(i>Da||h.velocity===d)){var j=b.deltaX-h.deltaX,k=b.deltaY-h.deltaY,l=F(i,j,k);e=l.x,f=l.y,c=qa(l.x)>qa(l.y)?l.x:l.y,g=G(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function D(a){for(var b=[],c=0;ce;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:pa(c/b),y:pa(d/b)}}function F(a,b,c){return{x:b/a||0,y:c/a||0}}function G(a,b){return a===b?Ia:qa(a)>=qa(b)?0>a?Ja:Ka:0>b?La:Ma}function H(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function I(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function J(a,b){return I(b[1],b[0],Ra)+I(a[1],a[0],Ra)}function K(a,b){return H(b[0],b[1],Ra)/H(a[0],a[1],Ra)}function L(){this.evEl=Ta,this.evWin=Ua,this.pressed=!1,x.apply(this,arguments)}function M(){this.evEl=Xa,this.evWin=Ya,x.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function N(){this.evTarget=$a,this.evWin=_a,this.started=!1,x.apply(this,arguments)}function O(a,b){var c=s(a.touches),d=s(a.changedTouches);return b&(Ga|Ha)&&(c=t(c.concat(d),"identifier",!0)),[c,d]}function P(){this.evTarget=bb,this.targetIds={},x.apply(this,arguments)}function Q(a,b){var c=s(a.touches),d=this.targetIds;if(b&(Ea|Fa)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=s(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return o(a.target,i)}),b===Ea)for(e=0;e-1&&d.splice(a,1)};setTimeout(e,cb)}}function U(a){for(var b=a.srcEvent.clientX,c=a.srcEvent.clientY,d=0;d=f&&db>=g)return!0}return!1}function V(a,b){this.manager=a,this.set(b)}function W(a){if(p(a,jb))return jb;var b=p(a,kb),c=p(a,lb);return b&&c?jb:b||c?b?kb:lb:p(a,ib)?ib:hb}function X(){if(!fb)return!1;var b={},c=a.CSS&&a.CSS.supports;return["auto","manipulation","pan-y","pan-x","pan-x pan-y","none"].forEach(function(d){b[d]=c?a.CSS.supports("touch-action",d):!0}),b}function Y(a){this.options=la({},this.defaults,a||{}),this.id=v(),this.manager=null,this.options.enable=l(this.options.enable,!0),this.state=nb,this.simultaneous={},this.requireFail=[]}function Z(a){return a&sb?"cancel":a&qb?"end":a&pb?"move":a&ob?"start":""}function $(a){return a==Ma?"down":a==La?"up":a==Ja?"left":a==Ka?"right":""}function _(a,b){var c=b.manager;return c?c.get(a):a}function aa(){Y.apply(this,arguments)}function ba(){aa.apply(this,arguments),this.pX=null,this.pY=null}function ca(){aa.apply(this,arguments)}function da(){Y.apply(this,arguments),this._timer=null,this._input=null}function ea(){aa.apply(this,arguments)}function fa(){aa.apply(this,arguments)}function ga(){Y.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function ha(a,b){return b=b||{},b.recognizers=l(b.recognizers,ha.defaults.preset),new ia(a,b)}function ia(a,b){this.options=la({},ha.defaults,b||{}),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=a,this.input=y(this),this.touchAction=new V(this,this.options.touchAction),ja(this,!0),g(this.options.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function ja(a,b){var c=a.element;if(c.style){var d;g(a.options.cssProps,function(e,f){d=u(c.style,f),b?(a.oldCssProps[d]=c.style[d],c.style[d]=e):c.style[d]=a.oldCssProps[d]||""}),b||(a.oldCssProps={})}}function ka(a,c){var d=b.createEvent("Event");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var la,ma=["","webkit","Moz","MS","ms","o"],na=b.createElement("div"),oa="function",pa=Math.round,qa=Math.abs,ra=Date.now;la="function"!=typeof Object.assign?function(a){if(a===d||null===a)throw new TypeError("Cannot convert undefined or null to object");for(var b=Object(a),c=1;ch&&(b.push(a),h=b.length-1):e&(Ga|Ha)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Za={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},$a="touchstart",_a="touchstart touchmove touchend touchcancel";i(N,x,{handler:function(a){var b=Za[a.type];if(b===Ea&&(this.started=!0),this.started){var c=O.call(this,a,b);b&(Ga|Ha)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}}});var ab={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},bb="touchstart touchmove touchend touchcancel";i(P,x,{handler:function(a){var b=ab[a.type],c=Q.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}});var cb=2500,db=25;i(R,x,{handler:function(a,b,c){var d=c.pointerType==za,e=c.pointerType==Ba;if(!(e&&c.sourceCapabilities&&c.sourceCapabilities.firesTouchEvents)){if(d)S.call(this,b,c);else if(e&&U.call(this,c))return;this.callback(a,b,c)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var eb=u(na.style,"touchAction"),fb=eb!==d,gb="compute",hb="auto",ib="manipulation",jb="none",kb="pan-x",lb="pan-y",mb=X();V.prototype={set:function(a){a==gb&&(a=this.compute()),fb&&this.manager.element.style&&mb[a]&&(this.manager.element.style[eb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){k(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),W(a.join(" "))},preventDefaults:function(a){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=p(d,jb)&&!mb[jb],f=p(d,lb)&&!mb[lb],g=p(d,kb)&&!mb[kb];if(e){var h=1===a.pointers.length,i=a.distance<2,j=a.deltaTime<250;if(h&&i&&j)return}return g&&f?void 0:e||f&&c&Na||g&&c&Oa?this.preventSrc(b):void 0},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var nb=1,ob=2,pb=4,qb=8,rb=qb,sb=16,tb=32;Y.prototype={defaults:{},set:function(a){return la(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,"recognizeWith",this))return this;var b=this.simultaneous;return a=_(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,"dropRecognizeWith",this)?this:(a=_(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,"requireFailure",this))return this;var b=this.requireFail;return a=_(a,this),-1===r(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,"dropRequireFailure",this))return this;a=_(a,this);var b=r(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(b,a)}var c=this,d=this.state;qb>d&&b(c.options.event+Z(d)),b(c.options.event),a.additionalEvent&&b(a.additionalEvent),d>=qb&&b(c.options.event+Z(d))},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=tb)},canEmit:function(){for(var a=0;af?Ja:Ka,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ia:0>g?La:Ma,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return aa.prototype.attrTest.call(this,a)&&(this.state&ob||!(this.state&ob)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$(a.direction);b&&(a.additionalEvent=this.options.event+b),this._super.emit.call(this,a)}}),i(ca,aa,{defaults:{event:"pinch",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&ob)},emit:function(a){if(1!==a.scale){var b=a.scale<1?"in":"out";a.additionalEvent=this.options.event+b}this._super.emit.call(this,a)}}),i(da,Y,{defaults:{event:"press",pointers:1,time:251,threshold:9},getTouchAction:function(){return[hb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distanceb.time;if(this._input=a,!d||!c||a.eventType&(Ga|Ha)&&!f)this.reset();else if(a.eventType&Ea)this.reset(),this._timer=e(function(){this.state=rb,this.tryEmit()},b.time,this);else if(a.eventType&Ga)return rb;return tb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===rb&&(a&&a.eventType&Ga?this.manager.emit(this.options.event+"up",a):(this._input.timeStamp=ra(),this.manager.emit(this.options.event,this._input)))}}),i(ea,aa,{defaults:{event:"rotate",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&ob)}}),i(fa,aa,{defaults:{event:"swipe",threshold:10,velocity:.3,direction:Na|Oa,pointers:1},getTouchAction:function(){return ba.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Na|Oa)?b=a.overallVelocity:c&Na?b=a.overallVelocityX:c&Oa&&(b=a.overallVelocityY),this._super.attrTest.call(this,a)&&c&a.offsetDirection&&a.distance>this.options.threshold&&a.maxPointers==this.options.pointers&&qa(b)>this.options.velocity&&a.eventType&Ga},emit:function(a){var b=$(a.offsetDirection);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),i(ga,Y,{defaults:{event:"tap",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[ib]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance -1 ? valueCur : valueCur + '.'; + break; + case 'delete' : + valueCur = valueCur.slice(0,valueCur.length-1); + break; + default : + valueCur = valueCur === '0' ? value : valueCur + value; + } + + if(!!valueCur && value !== 'delete' && value !== 'dot') { + var re = /^\d{1,9}(\.\d{0,2})?$/; + var limitLen = re.test(valueCur); + if (!limitLen) { + valueCur = valueCur.slice(0,valueCur.length-1); + return; + } + } + format(); +} + +//format +function format(){ + var arr = valueCur.split('.'); + var right = arr.length === 2 ? '.'+arr[1] : ''; + var num = arr[0]; + var left = ''; + while(num.length > 3){ + left = ',' + num.slice(-3) + left; + num = num.slice(0,num.length - 3); + } + left = num + left; + valueFormat = left+right; + valueFinal = valueCur === '' ? 0 : parseFloat(valueCur); + check(); +} + +//check +function check(){ + amount.innerHTML = valueFormat; + if(valueFormat.length > 0){ + clearBtn.classList.remove('none'); + }else{ + clearBtn.classList.add('none'); + } + if(valueFinal === 0 || valueCur.match(/\.$/)){ + payBtn.classList.add('disable'); + }else{ + payBtn.classList.remove('disable'); + } +} + +//clear +function clearFun(){ + valueCur = ''; + valueFormat = ''; + valueFinal = 0; + amount.innerHTML = ''; + clearBtn.classList.add('none'); + payBtn.classList.add('disable'); +} + +//submit +function submitFun(){ + if(!submitAble || payBtn.classList.contains('disable')){ + return; + } + var txAmount = $("#txAmount").val(); + if (!!txAmount && txAmount > 0) { + valueFinal = txAmount; + } + if(valueFinal == 0){ + tips.show('请输入金额!'); + return; + } + + var amount = valueFinal; + var uid = $("#uid").val(); + var paytype = $("#paytype").val(); + var token = $("#token").val(); + var direct = $("#direct").val(); + var payer = $("#payer").val(); + + submitAble = false; + loading.show(); + new Post({ + url : 'ajax.php', + dataType : 'json', + data : {"money":amount,"payer":payer,"uid":uid,"paytype":paytype,"direct":direct, + "token":token}, + error : function(){ + loading.hide(); + submitAble = true; + //update by yuwm 2018.03.14 + tips.show('网络异常,请重新发起支付'); + }, + success : function(data){ + loading.hide(); + if(data.code=="0"){//success + $("#trade_no").val(data.trade_no); + if (data.direct==1) { + if (paytype == 'wxpay') { + WxpayJsPay(data.paydata); + } else if (paytype == 'alipay') { + AlipayJsPay(data.paydata); + } else if (paytype == 'qqpay') { + QQJsPay(data.paydata); + } + }else{ + window.location.href= data.url; + } + }else{ + tips.show(data.msg); + } + submitAble = true; + } + }); +} + +//region WX JS +function WxpayJsPay(payStr){ + var jsonPayStr = eval("("+payStr+")"); + WeixinJSBridge.invoke( + 'getBrandWCPayRequest', + jsonPayStr, + function(res){ + // 使用以上方式判断前端返回,微信团队郑重提示:res.err_msg将在用户支付成功后返回 ok,但并不保证它绝对可靠。 + if(res.err_msg == "get_brand_wcpay_request:ok" ) { + // 支付成功则关闭窗口 + // tips.show("支付成功"); + //WeixinJSBridge.call('closeWindow'); + window.location.href="./success.php?trade_no="+$("#trade_no").val(); + } else if(res.err_msg == "get_brand_wcpay_request:cancel") { + // tips.show("支付过程中用户取消"); + } else if(res.err_msg == "get_brand_wcpay_request:fail") { + tips.show("支付失败"); + }else{ + tips.show("支付失败"); + } + } + ); +} +//endregion + +//region ALI JS +function AlipayJsPay(payStr) { + var trade_no = $("#trade_no").val(); + Alipayready(function(){ + AlipayJSBridge.call("tradePay",{ + tradeNO: payStr + }, function(result){ + var msg = ""; + if(result.resultCode == "9000"){ + //AlipayJSBridge.call('closeWebview'); + window.location.href="./success.php?trade_no="+$("#trade_no").val(); + }else if(result.resultCode == "8000"){ + msg = "正在处理中"; + }else if(result.resultCode == "4000"){ + msg = "订单支付失败"; + }else if(result.resultCode == "6002"){ + msg = "网络连接出错"; + } + if (msg!="") { + tips.show(msg); + } + }); + }); +} +function Alipayready(callback) { + // 如果jsbridge已经注入则直接调用 + if (window.AlipayJSBridge) { + callback && callback(); + } else { + // 如果没有注入则监听注入的事件 + document.addEventListener('AlipayJSBridgeReady', callback, false); + } +} +//endregion + +//region QQ JS +function QQJsPay(payStr){ + var trade_no = $("#trade_no").val(); + var jsonPayStr = eval("("+payStr+")"); + mqq.tenpay.pay({ + tokenId: jsonPayStr.tokenId, + appInfo: "appid#"+jsonPayStr.appid+"|bargainor_id#"+jsonPayStr.bargainor_id+"|channel#wallet" + }, function(result, resultCode){ + if(resultCode == 0){ //支付成功 + //mqq.ui.popBack(); + window.location.href="./success.php?trade_no="+$("#trade_no").val(); + }else{ + tips.show("支付失败"); + } + }); +} +//endregion + + +var keyboard = getId('keyboard'); +var clearBtn = getId('clearBtn'); +var payBtn = getId('payBtn'); +var valueCur = ''; +var valueFormat = ''; +var submitAble = true; +var valueFinal = 0; + +new Hammer(keyboard).on('tap',keypress); +new Hammer(payBtn).on('tap',submitFun); +new Hammer(clearBtn).on('tap',clearFun); diff --git a/paypage/success.php b/paypage/success.php new file mode 100644 index 0000000..960ccf5 --- /dev/null +++ b/paypage/success.php @@ -0,0 +1,48 @@ +getRow("SELECT * FROM pre_order WHERE trade_no='{$trade_no}' limit 1"); +if(!$row)showerror('订单号不存在'); +if($row['status']!=1)showerror('订单未完成支付'); +if(!isset($_SESSION['paypage_trade_no']) || $_SESSION['paypage_trade_no']!=$trade_no)showerror('订单校验失败'); +$userrow=$DB->getRow("select codename,username from pre_user where uid='{$row['uid']}' limit 1"); +$codename = !empty($userrow['codename'])?$userrow['codename']:$userrow['username']; +?> + + + + 支付成功页面 + + + + + + + + + + +
    +

    支付成功页面

    +
    +
    +
    +
    +
    +
    +

    +

    支付金额:

    +

    支付时间:

    +

    订单号:

    +
    +
    + + + \ No newline at end of file diff --git a/plugins/.htaccess b/plugins/.htaccess new file mode 100644 index 0000000..3418e55 --- /dev/null +++ b/plugins/.htaccess @@ -0,0 +1 @@ +deny from all \ No newline at end of file diff --git a/plugins/aliold/config.ini b/plugins/aliold/config.ini new file mode 100644 index 0000000..3d8f60c --- /dev/null +++ b/plugins/aliold/config.ini @@ -0,0 +1,21 @@ +[config] +;支付插件英文名称,需和目录名称一致,不能有重复 +name = "aliold" + +;支付插件显示名称 +showname = "支付宝旧版接口" + +;支付插件作者 +author = "支付宝" + +;支付插件作者链接 +link = "https://b.alipay.com/signing/productSetV2.htm" + +;支付插件支持的支付方式,多种方式用英文,隔开,可选的有alipay,qqpay,wxpay,bank +types = "alipay" + +;支付插件要求传入的参数以及参数显示名称,可选的有appid,appkey,appsecret,appurl,appmchid +inputs = "appid:合作者身份(PID),appkey:安全校验码(Key)" + +;支付插件要求传入的支付方式参数 +select = "1:电脑网站支付,2:手机网站支付" \ No newline at end of file diff --git a/plugins/aliold/inc/alipay.config.php b/plugins/aliold/inc/alipay.config.php new file mode 100644 index 0000000..80fc5f1 --- /dev/null +++ b/plugins/aliold/inc/alipay.config.php @@ -0,0 +1,44 @@ + \ No newline at end of file diff --git a/plugins/aliold/inc/alipay_core.function.php b/plugins/aliold/inc/alipay_core.function.php new file mode 100644 index 0000000..5c25220 --- /dev/null +++ b/plugins/aliold/inc/alipay_core.function.php @@ -0,0 +1,168 @@ +$val) { + $arg.=$key."=".$val."&"; + } + //去掉最后一个&字符 + $arg = substr($arg,0,-1); + + return $arg; +} +/** + * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码 + * @param $para 需要拼接的数组 + * return 拼接完成以后的字符串 + */ +function createLinkstringUrlencode($para) { + $arg = ""; + foreach ($para as $key=>$val) { + $arg.=$key."=".urlencode($val)."&"; + } + //去掉最后一个&字符 + $arg = substr($arg,0,-1); + + return $arg; +} +/** + * 除去数组中的空值和签名参数 + * @param $para 签名参数组 + * return 去掉空值与签名参数后的新签名参数组 + */ +function paraFilter($para) { + $para_filter = array(); + foreach ($para as $key=>$val) { + if($key == "sign" || $key == "sign_type" || $val == "")continue; + else $para_filter[$key] = $para[$key]; + } + return $para_filter; +} +/** + * 对数组排序 + * @param $para 排序前的数组 + * return 排序后的数组 + */ +function argSort($para) { + ksort($para); + reset($para); + return $para; +} +/** + * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库) + * 注意:服务器需要开通fopen配置 + * @param $word 要写入日志里的文本内容 默认值:空值 + */ +function logResult($word='') { + $fp = fopen("log.txt","a"); + flock($fp, LOCK_EX) ; + fwrite($fp,"执行日期:".strftime("%Y%m%d%H%M%S",time())."\n".$word."\n"); + flock($fp, LOCK_UN); + fclose($fp); +} + +/** + * 远程获取数据,POST模式 + * 注意: + * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了 + * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\\cacert.pem' + * @param $url 指定URL完整路径地址 + * @param $cacert_url 指定当前工作目录绝对路径 + * @param $para 请求的数据 + * @param $input_charset 编码格式。默认值:空值 + * return 远程输出的数据 + */ +function getHttpResponsePOST($url, $cacert_url, $para, $input_charset = '') { + + if (trim($input_charset) != '') { + $url = $url."_input_charset=".$input_charset; + } + $curl = curl_init($url); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//SSL证书认证 + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//严格认证 + curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头 + curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果 + curl_setopt($curl,CURLOPT_POST,true); // post传输数据 + curl_setopt($curl,CURLOPT_POSTFIELDS,$para);// post传输数据 + $responseText = curl_exec($curl); + //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容 + curl_close($curl); + + return $responseText; +} + +/** + * 远程获取数据,GET模式 + * 注意: + * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了 + * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\\cacert.pem' + * @param $url 指定URL完整路径地址 + * @param $cacert_url 指定当前工作目录绝对路径 + * return 远程输出的数据 + */ +function getHttpResponseGET($url,$cacert_url) { + $curl = curl_init($url); + curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头 + curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果 + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//SSL证书认证 + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//严格认证 + $responseText = curl_exec($curl); + //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容 + curl_close($curl); + + return $responseText; +} + +/** + * 实现多种字符编码方式 + * @param $input 需要编码的字符串 + * @param $_output_charset 输出的编码格式 + * @param $_input_charset 输入的编码格式 + * return 编码后的字符串 + */ +function charsetEncode($input,$_output_charset ,$_input_charset) { + $output = ""; + if(!isset($_output_charset) )$_output_charset = $_input_charset; + if($_input_charset == $_output_charset || $input ==null ) { + $output = $input; + } elseif (function_exists("mb_convert_encoding")) { + $output = mb_convert_encoding($input,$_output_charset,$_input_charset); + } elseif(function_exists("iconv")) { + $output = iconv($_input_charset,$_output_charset,$input); + } else die("sorry, you have no libs support for charset change."); + return $output; +} +/** + * 实现多种字符解码方式 + * @param $input 需要解码的字符串 + * @param $_output_charset 输出的解码格式 + * @param $_input_charset 输入的解码格式 + * return 解码后的字符串 + */ +function charsetDecode($input,$_input_charset ,$_output_charset) { + $output = ""; + if(!isset($_input_charset) )$_input_charset = $_input_charset ; + if($_input_charset == $_output_charset || $input ==null ) { + $output = $input; + } elseif (function_exists("mb_convert_encoding")) { + $output = mb_convert_encoding($input,$_output_charset,$_input_charset); + } elseif(function_exists("iconv")) { + $output = iconv($_input_charset,$_output_charset,$input); + } else die("sorry, you have no libs support for charset changes."); + return $output; +} +?> \ No newline at end of file diff --git a/plugins/aliold/inc/alipay_md5.function.php b/plugins/aliold/inc/alipay_md5.function.php new file mode 100644 index 0000000..52c6a14 --- /dev/null +++ b/plugins/aliold/inc/alipay_md5.function.php @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/plugins/aliold/inc/alipay_notify.class.php b/plugins/aliold/inc/alipay_notify.class.php new file mode 100644 index 0000000..a5c53ce --- /dev/null +++ b/plugins/aliold/inc/alipay_notify.class.php @@ -0,0 +1,139 @@ +alipay_config = $alipay_config; + } + function AlipayNotify($alipay_config) { + $this->__construct($alipay_config); + } + /** + * 针对notify_url验证消息是否是支付宝发出的合法消息 + * @return 验证结果 + */ + function verifyNotify(){ + if(empty($_POST)) {//判断POST来的数组是否为空 + return false; + } + else { + //生成签名结果 + $isSign = $this->getSignVeryfy($_POST, $_POST["sign"]); + //获取支付宝远程服务器ATN结果(验证是否是支付宝发来的消息) + $responseTxt = $this->getResponse($_POST["notify_id"]); + + //验证 + //$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 + //isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 + if (preg_match("/true$/i",$responseTxt) && $isSign) { + return true; + } else { + return false; + } + } + } + + /** + * 针对return_url验证消息是否是支付宝发出的合法消息 + * @return 验证结果 + */ + function verifyReturn(){ + if(empty($_GET)) {//判断POST来的数组是否为空 + return false; + } + else { + //生成签名结果 + $isSign = $this->getSignVeryfy($_GET, $_GET["sign"]); + //获取支付宝远程服务器ATN结果(验证是否是支付宝发来的消息) + $responseTxt = $this->getResponse($_GET["notify_id"]); + + //验证 + //$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 + //isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 + if (preg_match("/true$/i",$responseTxt) && $isSign) { + return true; + } else { + return false; + } + } + } + + /** + * 获取返回时的签名验证结果 + * @param $para_temp 通知返回来的参数数组 + * @param $sign 返回的签名结果 + * @return 签名验证结果 + */ + function getSignVeryfy($para_temp, $sign) { + //除去待签名参数数组中的空值和签名参数 + $para_filter = paraFilter($para_temp); + + //对待签名参数数组排序 + $para_sort = argSort($para_filter); + + //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 + $prestr = createLinkstring($para_sort); + + $isSgin = false; + switch (strtoupper(trim($this->alipay_config['sign_type']))) { + case "MD5" : + $isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']); + break; + default : + $isSgin = false; + } + + return $isSgin; + } + + /** + * 获取远程服务器ATN结果,验证返回URL + * @param $notify_id 通知校验ID + * @return 服务器ATN结果 + * 验证结果集: + * invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空 + * true 返回正确信息 + * false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟 + */ + function getResponse($notify_id) { + $transport = strtolower(trim($this->alipay_config['transport'])); + $partner = trim($this->alipay_config['partner']); + $veryfy_url = ''; + if($transport == 'https') { + $veryfy_url = $this->https_verify_url; + } + else { + $veryfy_url = $this->http_verify_url; + } + $veryfy_url = $veryfy_url."partner=" . $partner . "¬ify_id=" . $notify_id; + $responseTxt = getHttpResponseGET($veryfy_url, $this->alipay_config['cacert']); + + return $responseTxt; + } +} +?> diff --git a/plugins/aliold/inc/alipay_submit.class.php b/plugins/aliold/inc/alipay_submit.class.php new file mode 100644 index 0000000..b040dd7 --- /dev/null +++ b/plugins/aliold/inc/alipay_submit.class.php @@ -0,0 +1,165 @@ +alipay_config = $alipay_config; + } + function AlipaySubmit($alipay_config) { + $this->__construct($alipay_config); + } + + /** + * 生成签名结果 + * @param $para_sort 已排序要签名的数组 + * return 签名结果字符串 + */ + function buildRequestMysign($para_sort) { + //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 + $prestr = createLinkstring($para_sort); + + $mysign = ""; + switch (strtoupper(trim($this->alipay_config['sign_type']))) { + case "MD5" : + $mysign = md5Sign($prestr, $this->alipay_config['key']); + break; + default : + $mysign = ""; + } + + return $mysign; + } + + /** + * 生成要请求给支付宝的参数数组 + * @param $para_temp 请求前的参数数组 + * @return 要请求的参数数组 + */ + function buildRequestPara($para_temp) { + //除去待签名参数数组中的空值和签名参数 + $para_filter = paraFilter($para_temp); + + //对待签名参数数组排序 + $para_sort = argSort($para_filter); + + //生成签名结果 + $mysign = $this->buildRequestMysign($para_sort); + + //签名结果与签名方式加入请求提交参数组中 + $para_sort['sign'] = $mysign; + $para_sort['sign_type'] = strtoupper(trim($this->alipay_config['sign_type'])); + + return $para_sort; + } + + /** + * 生成要请求给支付宝的参数数组 + * @param $para_temp 请求前的参数数组 + * @return 要请求的参数数组字符串 + */ + function buildRequestParaToString($para_temp) { + //待请求参数数组 + $para = $this->buildRequestPara($para_temp); + + //把参数组中所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码 + $request_data = createLinkstringUrlencode($para); + + return $request_data; + } + + /** + * 建立请求,以表单HTML形式构造(默认) + * @param $para_temp 请求参数数组 + * @param $method 提交方式。两个值可选:post、get + * @param $button_name 确认按钮显示文字 + * @return 提交表单HTML文本 + */ + function buildRequestForm($para_temp, $method, $button_name) { + //待请求参数数组 + $para = $this->buildRequestPara($para_temp); + + $sHtml = "
    "; + foreach ($para as $key=>$val) { + $sHtml.= ""; + } + + //submit按钮控件请不要含有name属性 + $sHtml = $sHtml."
    "; + + $sHtml = $sHtml.""; + + return $sHtml; + } + + /** + * 建立请求,以模拟远程HTTP的POST请求方式构造并获取支付宝的处理结果 + * @param $para_temp 请求参数数组 + * @return 支付宝处理结果 + */ + function buildRequestHttp($para_temp) { + $sResult = ''; + + //待请求参数数组字符串 + $request_data = $this->buildRequestPara($para_temp); + + //远程获取数据 + $sResult = getHttpResponsePOST($this->alipay_gateway_new, $this->alipay_config['cacert'],$request_data,trim(strtolower($this->alipay_config['input_charset']))); + + return $sResult; + } + + /** + * 建立请求,以模拟远程HTTP的POST请求方式构造并获取支付宝的处理结果,带文件上传功能 + * @param $para_temp 请求参数数组 + * @param $file_para_name 文件类型的参数名 + * @param $file_name 文件完整绝对路径 + * @return 支付宝返回处理结果 + */ + function buildRequestHttpInFile($para_temp, $file_para_name, $file_name) { + + //待请求参数数组 + $para = $this->buildRequestPara($para_temp); + $para[$file_para_name] = "@".$file_name; + + //远程获取数据 + $sResult = getHttpResponsePOST($this->alipay_gateway_new, $this->alipay_config['cacert'],$para,trim(strtolower($this->alipay_config['input_charset']))); + + return $sResult; + } + + /** + * 用于防钓鱼,调用接口query_timestamp来获取时间戳的处理函数 + * 注意:该功能PHP5环境及以上支持,因此必须服务器、本地电脑中装有支持DOMDocument、SSL的PHP配置环境。建议本地调试时使用PHP开发软件 + * return 时间戳字符串 + */ + function query_timestamp() { + $url = $this->alipay_gateway_new."service=query_timestamp&partner=".trim(strtolower($this->alipay_config['partner']))."&_input_charset=".trim(strtolower($this->alipay_config['input_charset'])); + $encrypt_key = ""; + + $doc = new DOMDocument(); + $doc->load($url); + $itemEncrypt_key = $doc->getElementsByTagName( "encrypt_key" ); + $encrypt_key = $itemEncrypt_key->item(0)->nodeValue; + + return $encrypt_key; + } +} +?> \ No newline at end of file diff --git a/plugins/aliold/notify.php b/plugins/aliold/notify.php new file mode 100644 index 0000000..2d582e1 --- /dev/null +++ b/plugins/aliold/notify.php @@ -0,0 +1,57 @@ +verifyNotify(); + +if($verify_result) {//验证成功 + //商户订单号 + $out_trade_no = daddslashes($_POST['out_trade_no']); + + //支付宝交易号 + $trade_no = daddslashes($_POST['trade_no']); + + //交易状态 + $trade_status = $_POST['trade_status']; + + //交易金额 + $total_fee = $_POST['total_fee']; + + if ($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS') { + //付款完成后,支付宝系统发送该交易状态通知 + if($out_trade_no == TRADE_NO && round($total_fee,2)==round($order['money'],2)){ + if($order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='".TRADE_NO."'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$trade_no',`endtime` ='$date',`date` =NOW() where `trade_no`='".TRADE_NO."'"); + processOrder($order); + } + } + } + } + + echo "success"; +} +else { + //验证失败 + echo "fail"; +} +?> \ No newline at end of file diff --git a/plugins/aliold/return.php b/plugins/aliold/return.php new file mode 100644 index 0000000..4c8c916 --- /dev/null +++ b/plugins/aliold/return.php @@ -0,0 +1,64 @@ +verifyReturn(); +if($verify_result) { + //商户订单号 + $out_trade_no = daddslashes($_GET['out_trade_no']); + + //支付宝交易号 + $trade_no = daddslashes($_GET['trade_no']); + + //交易状态 + $trade_status = $_GET['trade_status']; + + //交易金额 + $total_fee = $_GET['total_fee']; + + if($_GET['trade_status'] == 'TRADE_FINISHED' || $_GET['trade_status'] == 'TRADE_SUCCESS') { + if($out_trade_no == TRADE_NO && round($total_fee,2)==round($order['money'],2)){ + $url=creat_callback($order); + + if($order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='".TRADE_NO."'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$trade_no',`endtime` ='$date',`date` =NOW() where `trade_no`='".TRADE_NO."'"); + processOrder($order,false); + } + echo ''; + }else{ + echo ''; + } + }else{ + sysmsg('订单信息校验失败'); + } + } + else { + echo "trade_status=".$_GET['trade_status']; + } +} +else { + //验证失败 + sysmsg('支付宝返回验证失败!'); +} + +?> \ No newline at end of file diff --git a/plugins/aliold/submit.php b/plugins/aliold/submit.php new file mode 100644 index 0000000..ef57cc8 --- /dev/null +++ b/plugins/aliold/submit.php @@ -0,0 +1,42 @@ +window.location.href='/submit2.php?typeid={$order['type']}&trade_no={$trade_no}';";exit; +} +if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')!==false){ + include(SYSTEM_ROOT.'pages/wxopen.php'); + exit; +} +if(!empty($conf['localurl_alipay']) && !strpos($conf['localurl_alipay'],$_SERVER['HTTP_HOST'])){ + echo "";exit; +} + +require_once(PAY_ROOT."inc/alipay.config.php"); +require_once(PAY_ROOT."inc/alipay_submit.class.php"); + +if(checkmobile()==true && in_array('2',$channel['apptype'])){ + $alipay_service = "alipay.wap.create.direct.pay.by.user"; +}else{ + $alipay_service = "create_direct_pay_by_user"; +} +$parameter = array( + "service" => $alipay_service, + "partner" => trim($alipay_config['partner']), //合作身份者id + "seller_id" => trim($alipay_config['partner']), //收款支付宝用户号 + "payment_type" => "1", //支付方式 + "notify_url" => $conf['localurl'].'pay/aliold/notify/'.TRADE_NO.'/', //服务器异步通知页面路径 + "return_url" => $siteurl.'pay/aliold/return/'.TRADE_NO.'/', //页面跳转同步通知页面路径 + "out_trade_no" => $trade_no, //商户订单号 + "subject" => $ordername, //订单名称 + "total_fee" => $order['money'], //付款金额 + "_input_charset" => strtolower('utf-8') +); +if($alipay_service=="alipay.wap.create.direct.pay.by.user"){ + $parameter['app_pay'] = "Y"; +} + +//建立请求 +$alipaySubmit = new AlipaySubmit($alipay_config); +$html_text = $alipaySubmit->buildRequestForm($parameter,"get", "正在跳转"); +echo $html_text; \ No newline at end of file diff --git a/plugins/alipay/config.ini b/plugins/alipay/config.ini new file mode 100644 index 0000000..38381a3 --- /dev/null +++ b/plugins/alipay/config.ini @@ -0,0 +1,21 @@ +[config] +;支付插件英文名称,需和目录名称一致,不能有重复 +name = "alipay" + +;支付插件显示名称 +showname = "支付宝官方支付" + +;支付插件作者 +author = "支付宝" + +;支付插件作者链接 +link = "https://b.alipay.com/signing/productSetV2.htm" + +;支付插件支持的支付方式,多种方式用英文,隔开,可选的有alipay,qqpay,wxpay,bank +types = "alipay" + +;支付插件要求传入的参数以及参数显示名称,可选的有appid,appkey,appsecret,appurl,appmchid +inputs = "appid:应用APPID,appkey:支付宝公钥(RSA2),appsecret:商户私钥(RSA2)" + +;支付插件要求传入的支付方式参数 +select = "1:电脑网站支付,2:手机网站支付,3:当面付扫码,4:JS支付" \ No newline at end of file diff --git a/plugins/alipay/inc/AlipayCertifyService.php b/plugins/alipay/inc/AlipayCertifyService.php new file mode 100644 index 0000000..f350b63 --- /dev/null +++ b/plugins/alipay/inc/AlipayCertifyService.php @@ -0,0 +1,209 @@ +gateway_url = $alipay_config['gatewayUrl']; + $this->appid = $alipay_config['app_id']; + $this->sign_type = $alipay_config['sign_type']; + $this->private_key = $alipay_config['merchant_private_key']; + $this->alipay_public_key = $alipay_config['alipay_public_key']; + $this->return_url = $alipay_config['cert_return_url']; + $this->charset = $alipay_config['charset']; + $this->signtype = $alipay_config['sign_type']; + + if(empty($this->appid)||trim($this->appid)==""){ + throw new Exception("appid should not be NULL!"); + } + if(empty($this->private_key)||trim($this->private_key)==""){ + throw new Exception("private_key should not be NULL!"); + } + if(empty($this->alipay_public_key)||trim($this->alipay_public_key)==""){ + throw new Exception("alipay_public_key should not be NULL!"); + } + if(empty($this->charset)||trim($this->charset)==""){ + throw new Exception("charset should not be NULL!"); + } + if(empty($this->gateway_url)||trim($this->gateway_url)==""){ + throw new Exception("gateway_url should not be NULL!"); + } + if(empty($this->sign_type)||trim($this->sign_type)==""){ + throw new Exception("sign_type should not be NULL"); + } + + } + + //身份认证初始化服务 + public function initialize($outer_order_no, $cert_name, $cert_no, $biz_code = 'SMART_FACE') { + + $BizContent = array( + 'outer_order_no' => $outer_order_no, //商户请求的唯一标识 + 'biz_code' => $biz_code, //认证场景码 + 'identity_param' => [ + 'identity_type' => 'CERT_INFO', //身份信息参数类型 + 'cert_type' => 'IDENTITY_CARD', //证件类型 + 'cert_name' => $cert_name, //真实姓名 + 'cert_no' => $cert_no, //证件号码 + ], + 'merchant_config' => ['return_url'=>$this->return_url], //商户个性化配置 + ); + $request = new AlipayUserCertifyOpenInitializeRequest(); + $request->setBizContent(json_encode($BizContent)); + + $response = $this->aopclientRequestExecute($request); + $response = $response->alipay_user_certify_open_initialize_response; + + if(!empty($response->code)&&$response->code == 10000){ + $result = array('certify_id'=>$response->certify_id); + }else{ + $result = array('code'=>$response->code, 'msg'=>$response->msg, 'sub_code'=>$response->sub_code, 'sub_msg'=>$response->sub_msg); + } + + return $result; + + } + + //身份认证开始认证 + public function certify($certify_id) { + + $BizContent = array( + 'certify_id' => $certify_id, + ); + $request = new AlipayUserCertifyOpenCertifyRequest(); + $request->setBizContent(json_encode($BizContent)); + + $response = $this->aopclientRequestPageExecute($request); + + return $response; + + } + + //身份认证记录查询 + public function query($certify_id) { + + $BizContent = array( + 'certify_id' => $certify_id, + ); + $request = new AlipayUserCertifyOpenQueryRequest(); + $request->setBizContent(json_encode($BizContent)); + + $response = $this->aopclientRequestExecute($request); + $response = $response->alipay_user_certify_open_query_response; + + if(!empty($response->code)&&$response->code == 10000){ + $result = array('passed'=>$response->passed[0], 'identity_info'=>$response->identity_info, 'material_info'=>$response->material_info); + }else{ + $result = array('code'=>$response->code, 'msg'=>$response->msg, 'sub_code'=>$response->sub_code, 'sub_msg'=>$response->sub_msg); + } + + return $result; + + } + + /** + * 使用SDK执行提交页面接口请求 + * @param unknown $request + * @param string $token + * @param string $appAuthToken + * @return string $$result + */ + private function aopclientRequestExecute($request, $token = NULL, $appAuthToken = NULL) { + + $aop = new AopClient (); + $aop->gatewayUrl = $this->gateway_url; + $aop->appId = $this->appid; + $aop->signType = $this->sign_type; + $aop->rsaPrivateKey = $this->private_key; + $aop->alipayrsaPublicKey = $this->alipay_public_key; + $aop->apiVersion = "1.0"; + $aop->postCharset = $this->charset; + + $aop->format=$this->format; + // 开启页面信息输出 + $aop->debugInfo=true; + $result = $aop->execute($request,$token,$appAuthToken); + + //打开后,将url形式请求报文写入log文件 + //$this->writeLog("response: ".var_export($result,true)); + return $result; + } + + /** + * 使用SDK执行提交页面接口请求 + * @param unknown $request + * @param string $token + * @param string $appAuthToken + * @return string $$result + */ + private function aopclientRequestPageExecute($request, $token = NULL, $appAuthToken = NULL) { + + $aop = new AopClient (); + $aop->gatewayUrl = $this->gateway_url; + $aop->appId = $this->appid; + $aop->signType = $this->sign_type; + $aop->rsaPrivateKey = $this->private_key; + $aop->alipayrsaPublicKey = $this->alipay_public_key; + $aop->apiVersion = "1.0"; + $aop->postCharset = $this->charset; + + $aop->format=$this->format; + // 开启页面信息输出 + $aop->debugInfo=true; + $result = $aop->pageExecute($request,$token,$appAuthToken); + + //打开后,将url形式请求报文写入log文件 + //$this->writeLog("response: ".var_export($result,true)); + return $result; + } + + function writeLog($text) { + // $text=iconv("GBK", "UTF-8//IGNORE", $text); + //$text = characet ( $text ); + file_put_contents ( PAY_ROOT."inc/log/log.txt", date ( "Y-m-d H:i:s" ) . " " . $text . "\r\n", FILE_APPEND ); + } + +} \ No newline at end of file diff --git a/plugins/alipay/inc/AlipayOauthService.php b/plugins/alipay/inc/AlipayOauthService.php new file mode 100644 index 0000000..94b44b3 --- /dev/null +++ b/plugins/alipay/inc/AlipayOauthService.php @@ -0,0 +1,167 @@ +gateway_url = $alipay_config['gatewayUrl']; + $this->appid = $alipay_config['app_id']; + $this->sign_type = $alipay_config['sign_type']; + $this->private_key = $alipay_config['merchant_private_key']; + $this->alipay_public_key = $alipay_config['alipay_public_key']; + $this->redirect_uri = $alipay_config['redirect_uri']; + $this->charset = $alipay_config['charset']; + $this->signtype = $alipay_config['sign_type']; + + if(empty($this->appid)||trim($this->appid)==""){ + throw new Exception("appid should not be NULL!"); + } + if(empty($this->private_key)||trim($this->private_key)==""){ + throw new Exception("private_key should not be NULL!"); + } + if(empty($this->alipay_public_key)||trim($this->alipay_public_key)==""){ + throw new Exception("alipay_public_key should not be NULL!"); + } + if(empty($this->charset)||trim($this->charset)==""){ + throw new Exception("charset should not be NULL!"); + } + if(empty($this->gateway_url)||trim($this->gateway_url)==""){ + throw new Exception("gateway_url should not be NULL!"); + } + if(empty($this->sign_type)||trim($this->sign_type)==""){ + throw new Exception("sign_type should not be NULL"); + } + + } + + //跳转支付宝授权页面 + public function oauth() { + + $param = array('app_id'=>$this->appid, 'scope'=>'auth_base', 'redirect_uri'=>$this->redirect_uri); + $url = 'https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?'.http_build_query($param); + + Header("Location: $url"); + exit(); + + } + + //换取授权访问令牌 + public function getToken($code, $grant_type = 'authorization_code') { + + $request = new AlipaySystemOauthTokenRequest(); + if($grant_type == 'refresh_token'){ + $request->setGrantType("refresh_token"); + $request->setRefreshToken($code); + }else{ + $request->setGrantType("authorization_code"); + $request->setCode($code); + } + + $response = $this->aopclientRequestExecute($request); + $response = $response->alipay_system_oauth_token_response; + + if(!empty($response) && $response->user_id){ + $result = array('user_id'=>$response->user_id, 'access_token'=>$response->access_token); + }else{ + $result = array('code'=>$response->code, 'msg'=>$response->msg, 'sub_code'=>$response->sub_code, 'sub_msg'=>$response->sub_msg); + } + + return $result; + + } + + //支付宝会员授权信息查询 + public function userinfo($accessToken) { + + $request = new AlipayUserInfoShareRequest(); + + $response = $this->aopclientRequestExecute($request, $accessToken); + $response = $response->alipay_user_info_share_response; + + if(!empty($response) && $response->code == "10000"){ + $result = json_decode(json_encode($response), true); + }else{ + $result = array('code'=>$response->code, 'msg'=>$response->msg, 'sub_code'=>$response->sub_code, 'sub_msg'=>$response->sub_msg); + } + + return $result; + + } + + /** + * 使用SDK执行提交页面接口请求 + * @param unknown $request + * @param string $token + * @param string $appAuthToken + * @return string $$result + */ + private function aopclientRequestExecute($request, $token = NULL, $appAuthToken = NULL) { + + $aop = new AopClient (); + $aop->gatewayUrl = $this->gateway_url; + $aop->appId = $this->appid; + $aop->signType = $this->sign_type; + $aop->rsaPrivateKey = $this->private_key; + $aop->alipayrsaPublicKey = $this->alipay_public_key; + $aop->apiVersion = "1.0"; + $aop->postCharset = $this->charset; + + $aop->format=$this->format; + // 开启页面信息输出 + $aop->debugInfo=true; + $result = $aop->execute($request,$token,$appAuthToken); + + //打开后,将url形式请求报文写入log文件 + //$this->writeLog("response: ".var_export($result,true)); + return $result; + } + + function writeLog($text) { + // $text=iconv("GBK", "UTF-8//IGNORE", $text); + //$text = characet ( $text ); + file_put_contents ( PAY_ROOT."inc/log/log.txt", date ( "Y-m-d H:i:s" ) . " " . $text . "\r\n", FILE_APPEND ); + } + +} \ No newline at end of file diff --git a/plugins/alipay/inc/AlipayTradeService.php b/plugins/alipay/inc/AlipayTradeService.php new file mode 100644 index 0000000..d4f80e9 --- /dev/null +++ b/plugins/alipay/inc/AlipayTradeService.php @@ -0,0 +1,394 @@ +gateway_url = $alipay_config['gatewayUrl']; + $this->appid = $alipay_config['app_id']; + $this->sign_type = $alipay_config['sign_type']; + $this->private_key = $alipay_config['merchant_private_key']; + $this->alipay_public_key = $alipay_config['alipay_public_key']; + $this->charset = $alipay_config['charset']; + $this->notify_url = $alipay_config['notify_url']; + $this->return_url = $alipay_config['return_url']; + $this->signtype = $alipay_config['sign_type']; + + if(empty($this->appid)||trim($this->appid)==""){ + throw new Exception("appid should not be NULL!"); + } + if(empty($this->private_key)||trim($this->private_key)==""){ + throw new Exception("private_key should not be NULL!"); + } + if(empty($this->alipay_public_key)||trim($this->alipay_public_key)==""){ + throw new Exception("alipay_public_key should not be NULL!"); + } + if(empty($this->charset)||trim($this->charset)==""){ + throw new Exception("charset should not be NULL!"); + } + if(empty($this->gateway_url)||trim($this->gateway_url)==""){ + throw new Exception("gateway_url should not be NULL!"); + } + if(empty($this->sign_type)||trim($this->sign_type)==""){ + throw new Exception("sign_type should not be NULL"); + } + + } + function AlipayWapPayService($alipay_config) { + $this->__construct($alipay_config); + } + + /** + * 使用SDK执行提交页面接口请求 + * @param unknown $request + * @param $ispage 是否是页面接口,电脑网站支付是页面表单接口。 + * @return string $result + */ + private function aopclientRequestExecute($request, $ispage=false) { + + $aop = new AopClient (); + $aop->gatewayUrl = $this->gateway_url; + $aop->appId = $this->appid; + $aop->signType = $this->sign_type; + $aop->rsaPrivateKey = $this->private_key; + $aop->alipayrsaPublicKey = $this->alipay_public_key; + $aop->apiVersion = "1.0"; + $aop->postCharset = $this->charset; + $aop->format=$this->format; + // 开启页面信息输出 + $aop->debugInfo=true; + if($ispage) + { + $result = $aop->pageExecute($request,"post"); + } + else + { + $result = $aop->Execute($request); + } + + //打开后,将url形式请求报文写入log文件 + //$this->writeLog("response: ".var_export($result,true)); + return $result; + } + + /** + * alipay.trade.create + * @param $builder 业务参数,使用build中的对象生成。 + * @return $response 支付宝返回的信息 + */ + public function create($req) { + $bizContent = $req->getBizContent(); + $this->writeLog($bizContent); + + $request = new AlipayTradeCreateRequest(); + $request->setBizContent ( $bizContent ); + $request->setNotifyUrl ( $this->notify_url ); + + // 首先调用支付api + $response = $this->aopclientRequestExecute ( $request ); + $response = $response->alipay_trade_create_response; + + $result = new AlipayF2FPrecreateResult($response); + if(!empty($response)&&("10000"==$response->code)){ + $result->setTradeStatus("SUCCESS"); + } elseif($this->tradeError($response)){ + $result->setTradeStatus("UNKNOWN"); + } else { + $result->setTradeStatus("FAILED"); + } + return $result; + } + + //当面付2.0预下单(生成二维码) + public function qrPay($req) { + $bizContent = $req->getBizContent(); + $this->writeLog($bizContent); + + $request = new AlipayTradePrecreateRequest(); + $request->setBizContent ( $bizContent ); + $request->setNotifyUrl ( $this->notify_url ); + + // 首先调用支付api + $response = $this->aopclientRequestExecute ( $request ); + $response = $response->alipay_trade_precreate_response; + + $result = new AlipayF2FPrecreateResult($response); + if(!empty($response)&&("10000"==$response->code)){ + $result->setTradeStatus("SUCCESS"); + } elseif($this->tradeError($response)){ + $result->setTradeStatus("UNKNOWN"); + } else { + $result->setTradeStatus("FAILED"); + } + return $result; + } + + /** + * alipay.trade.page.pay + * @param $builder 业务参数,使用build中的对象生成。 + * @return $response 支付宝返回的信息 + */ + public function pagePay($builder) { + + $biz_content=$builder->getBizContent(); + //打印业务参数 + $this->writeLog($biz_content); + + $request = new AlipayTradePagePayRequest(); + + $request->setNotifyUrl($this->notify_url); + $request->setReturnUrl($this->return_url); + $request->setBizContent ( $biz_content ); + + // 首先调用支付api + $response = $this->aopclientRequestExecute ($request,true); + // $response = $response->alipay_trade_wap_pay_response; + return $response; + } + + /** + * alipay.trade.wap.pay + * @param $builder 业务参数,使用build中的对象生成。 + * @return $response 支付宝返回的信息 + */ + public function wapPay($builder) { + + $biz_content=$builder->getBizContent(); + //打印业务参数 + $this->writeLog($biz_content); + + $request = new AlipayTradeWapPayRequest(); + + $request->setNotifyUrl($this->notify_url); + $request->setReturnUrl($this->return_url); + $request->setBizContent ( $biz_content ); + + // 首先调用支付api + $response = $this->aopclientRequestExecute ($request,true); + // $response = $response->alipay_trade_wap_pay_response; + return $response; + } + + /** + * alipay.trade.refund (统一收单交易退款接口) + * @param $builder 业务参数,使用build中的对象生成。 + * @return $response 支付宝返回的信息 + */ + public function refund($req) { + $bizContent = $req->getBizContent(); + $this->writeLog($bizContent); + $request = new AlipayTradeRefundRequest(); + $request->setBizContent ( $bizContent ); + $response = $this->aopclientRequestExecute ( $request ); + + $response = $response->alipay_trade_refund_response; + + $result = new AlipayF2FRefundResult($response); + if(!empty($response)&&("10000"==$response->code)){ + $result->setTradeStatus("SUCCESS"); + } elseif ($this->tradeError($response)){ + $result->setTradeStatus("UNKNOWN"); + } else { + $result->setTradeStatus("FAILED"); + } + + return $result; + } + + /** + * alipay.trade.close (统一收单交易关闭接口) + * @param $builder 业务参数,使用build中的对象生成。 + * @return $response 支付宝返回的信息 + */ + public function close($builder){ + $biz_content=$builder->getBizContent(); + //打印业务参数 + $this->writeLog($biz_content); + $request = new AlipayTradeCloseRequest(); + $request->setBizContent ( $biz_content ); + + $response = $this->aopclientRequestExecute ($request); + $response = $response->alipay_trade_close_response; + return $response; + } + + /** + * 退款查询 alipay.trade.fastpay.refund.query (统一收单交易退款查询) + * @param $builder 业务参数,使用build中的对象生成。 + * @return $response 支付宝返回的信息 + */ + public function refundQuery($builder){ + $biz_content=$builder->getBizContent(); + //打印业务参数 + $this->writeLog($biz_content); + $request = new AlipayTradeFastpayRefundQueryRequest(); + $request->setBizContent ( $biz_content ); + + $response = $this->aopclientRequestExecute ($request); + $response = $response->alipay_trade_fastpay_refund_query_response; + return $response; + } + + + /** + * alipay.trade.query (统一收单线下交易查询) + * @param $builder 业务参数,使用build中的对象生成。 + * @return $response 支付宝返回的信息 + */ + public function query($builder) { + $biz_content = $builder->getBizContent(); + //$this->writeLog($biz_content); + $request = new AlipayTradeQueryRequest(); + $request->setBizContent ( $biz_content ); + $response = $this->aopclientRequestExecute ( $request ); + + return $response->alipay_trade_query_response; + } + + /** + * alipay.trade.query (统一收单线下交易查询) + * @param $tradeNo 支付宝交易号 + * @return $response 支付宝返回的信息 + */ + public function orderQuery($tradeNo) { + $queryContentBuilder = new AlipayTradeQueryContentBuilder(); + $queryContentBuilder->setTradeNo($tradeNo); + $response = $this->query($queryContentBuilder); + return $response; + } + + // 当面付2.0消费查询 + public function queryTradeResult($req){ + $response = $this->query($req); + $result = new AlipayF2FQueryResult($response); + + if($this->querySuccess($response)){ + // 查询返回该订单交易支付成功 + $result->setTradeStatus("SUCCESS"); + + } elseif ($this->tradeError($response)){ + //查询发生异常或无返回,交易状态未知 + $result->setTradeStatus("UNKNOWN"); + } else { + //其他情况均表明该订单号交易失败 + $result->setTradeStatus("FAILED"); + } + return $result; + + } + + // 查询返回“支付成功” + protected function querySuccess($queryResponse){ + return !empty($queryResponse)&& + $queryResponse->code == "10000"&& + ($queryResponse->trade_status == "TRADE_SUCCESS"|| + $queryResponse->trade_status == "TRADE_FINISHED"); + } + + // 查询返回“交易关闭” + protected function queryClose($queryResponse){ + return !empty($queryResponse)&& + $queryResponse->code == "10000"&& + $queryResponse->trade_status == "TRADE_CLOSED"; + } + + // 交易异常,或发生系统错误 + protected function tradeError($response){ + return empty($response)|| + $response->code == "20000"; + } + + + /** + * alipay.data.dataservice.bill.downloadurl.query (查询对账单下载地址) + * @param $builder 业务参数,使用build中的对象生成。 + * @return $response 支付宝返回的信息 + */ + public function downloadurlQuery($builder){ + $biz_content=$builder->getBizContent(); + //打印业务参数 + $this->writeLog($biz_content); + $request = new alipaydatadataservicebilldownloadurlqueryRequest(); + $request->setBizContent ( $biz_content ); + + $response = $this->aopclientRequestExecute ($request); + $response = $response->alipay_data_dataservice_bill_downloadurl_query_response; + return $response; + } + + /** + * 验签方法 + * @param $arr 验签支付宝返回的信息,使用支付宝公钥。 + * @return boolean + */ + public function check($arr){ + $aop = new AopClient(); + $aop->alipayrsaPublicKey = $this->alipay_public_key; + $result = $aop->rsaCheckV1($arr, $this->alipay_public_key, $this->signtype); + if($result){ + $queryResponse = $this->orderQuery($arr['trade_no']); + $result = $this->querySuccess($queryResponse); + } + return $result; + } + + public function writeLog($text) { + // $text=iconv("GBK", "UTF-8//IGNORE", $text); + //$text = characet ( $text ); + file_put_contents ( PAY_ROOT."inc/log/log.txt", date ( "Y-m-d H:i:s" ) . " " . $text . "\r\n", FILE_APPEND ); + } + +} \ No newline at end of file diff --git a/plugins/alipay/inc/config.php b/plugins/alipay/inc/config.php new file mode 100644 index 0000000..d83ce5c --- /dev/null +++ b/plugins/alipay/inc/config.php @@ -0,0 +1,32 @@ + "RSA2", + + //支付宝公钥 + 'alipay_public_key' => $channel['appkey'], + + //商户私钥 + 'merchant_private_key' => $channel['appsecret'], + + //编码格式 + 'charset' => "UTF-8", + + //支付宝网关 + 'gatewayUrl' => "https://openapi.alipay.com/gateway.do", + + //应用ID + 'app_id' => $channel['appid'], + + //异步通知地址 + 'notify_url' => $conf['localurl'].'pay/alipay/notify/'.(defined("TRADE_NO")?TRADE_NO:$order['trade_no']).'/', + + //同步通知地址 + 'return_url' => $conf['localurl'].'pay/alipay/return/'.(defined("TRADE_NO")?TRADE_NO:$order['trade_no']).'/', + + //登录返回页面 + 'redirect_uri' => $siteurl.'user/oauth.php', + + //实名认证返回页面 + 'cert_return_url' => 'alipays://platformapi/startapp?appId=20000067&url='.urlencode($siteurl.'user/alipaycertok.php'), +); \ No newline at end of file diff --git a/plugins/alipay/inc/lib/AopClient.php b/plugins/alipay/inc/lib/AopClient.php new file mode 100644 index 0000000..243ba9c --- /dev/null +++ b/plugins/alipay/inc/lib/AopClient.php @@ -0,0 +1,1233 @@ +sign($this->getSignContent($params), $signType); + } + + public function rsaSign($params, $signType = "RSA") { + return $this->sign($this->getSignContent($params), $signType); + } + + public function getSignContent($params) { + ksort($params); + + $stringToBeSigned = ""; + $i = 0; + foreach ($params as $k => $v) { + if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) { + + // 转换成目标字符集 + $v = $this->characet($v, $this->postCharset); + + if ($i == 0) { + $stringToBeSigned .= "$k" . "=" . "$v"; + } else { + $stringToBeSigned .= "&" . "$k" . "=" . "$v"; + } + $i++; + } + } + + unset ($k, $v); + return $stringToBeSigned; + } + + + //此方法对value做urlencode + public function getSignContentUrlencode($params) { + ksort($params); + + $stringToBeSigned = ""; + $i = 0; + foreach ($params as $k => $v) { + if (false === $this->checkEmpty($v) && "@" != substr($v, 0, 1)) { + + // 转换成目标字符集 + $v = $this->characet($v, $this->postCharset); + + if ($i == 0) { + $stringToBeSigned .= "$k" . "=" . urlencode($v); + } else { + $stringToBeSigned .= "&" . "$k" . "=" . urlencode($v); + } + $i++; + } + } + + unset ($k, $v); + return $stringToBeSigned; + } + + protected function sign($data, $signType = "RSA") { + if($this->checkEmpty($this->rsaPrivateKeyFilePath)){ + $priKey=$this->rsaPrivateKey; + $res = "-----BEGIN RSA PRIVATE KEY-----\n" . + wordwrap($priKey, 64, "\n", true) . + "\n-----END RSA PRIVATE KEY-----"; + }else { + $priKey = file_get_contents($this->rsaPrivateKeyFilePath); + $res = openssl_get_privatekey($priKey); + } + + ($res) or die('您使用的私钥格式错误,请检查RSA私钥配置'); + + if ("RSA2" == $signType) { + openssl_sign($data, $sign, $res, OPENSSL_ALGO_SHA256); + } else { + openssl_sign($data, $sign, $res); + } + + if(!$this->checkEmpty($this->rsaPrivateKeyFilePath)){ + openssl_free_key($res); + } + $sign = base64_encode($sign); + return $sign; + } + + /** + * RSA单独签名方法,未做字符串处理,字符串处理见getSignContent() + * @param $data 待签名字符串 + * @param $privatekey 商户私钥,根据keyfromfile来判断是读取字符串还是读取文件,false:填写私钥字符串去回车和空格 true:填写私钥文件路径 + * @param $signType 签名方式,RSA:SHA1 RSA2:SHA256 + * @param $keyfromfile 私钥获取方式,读取字符串还是读文件 + * @return string + * @author mengyu.wh + */ + public function alonersaSign($data,$privatekey,$signType = "RSA",$keyfromfile=false) { + + if(!$keyfromfile){ + $priKey=$privatekey; + $res = "-----BEGIN RSA PRIVATE KEY-----\n" . + wordwrap($priKey, 64, "\n", true) . + "\n-----END RSA PRIVATE KEY-----"; + } + else{ + $priKey = file_get_contents($privatekey); + $res = openssl_get_privatekey($priKey); + } + + ($res) or die('您使用的私钥格式错误,请检查RSA私钥配置'); + + if ("RSA2" == $signType) { + openssl_sign($data, $sign, $res, OPENSSL_ALGO_SHA256); + } else { + openssl_sign($data, $sign, $res); + } + + if($keyfromfile){ + openssl_free_key($res); + } + $sign = base64_encode($sign); + return $sign; + } + + + protected function curl($url, $postFields = null) { + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_FAILONERROR, false); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + + $postBodyString = ""; + $encodeArray = Array(); + $postMultipart = false; + + + if (is_array($postFields) && 0 < count($postFields)) { + + foreach ($postFields as $k => $v) { + if ("@" != substr($v, 0, 1)) //判断是不是文件上传 + { + + $postBodyString .= "$k=" . urlencode($this->characet($v, $this->postCharset)) . "&"; + $encodeArray[$k] = $this->characet($v, $this->postCharset); + } else //文件上传用multipart/form-data,否则用www-form-urlencoded + { + $postMultipart = true; + $encodeArray[$k] = new \CURLFile(substr($v, 1)); + } + + } + unset ($k, $v); + curl_setopt($ch, CURLOPT_POST, true); + if ($postMultipart) { + curl_setopt($ch, CURLOPT_POSTFIELDS, $encodeArray); + } else { + curl_setopt($ch, CURLOPT_POSTFIELDS, substr($postBodyString, 0, -1)); + } + } + + if ($postMultipart) { + + $headers = array('content-type: multipart/form-data;charset=' . $this->postCharset . ';boundary=' . $this->getMillisecond()); + } else { + + $headers = array('content-type: application/x-www-form-urlencoded;charset=' . $this->postCharset); + } + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + + + + + $reponse = curl_exec($ch); + + if (curl_errno($ch)) { + + throw new Exception(curl_error($ch), 0); + } else { + $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + if (200 !== $httpStatusCode) { + throw new Exception($reponse, $httpStatusCode); + } + } + + curl_close($ch); + return $reponse; + } + + protected function getMillisecond() { + list($s1, $s2) = explode(' ', microtime()); + return (float)sprintf('%.0f', (floatval($s1) + floatval($s2)) * 1000); + } + + + protected function logCommunicationError($apiName, $requestUrl, $errorCode, $responseTxt) { + $localIp = isset ($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"] : "CLI"; + file_put_contents ( PAY_ROOT."inc/log/errlog.txt", date ( "Y-m-d H:i:s" ) . " " . $apiName . " " . $requestUrl . " " . $errorCode . " " . str_replace("\n", "", $responseTxt). "\r\n", FILE_APPEND ); + /*$logger = new LtLogger; + $logger->conf["log_file"] = rtrim(AOP_SDK_WORK_DIR, '\\/') . '/' . "logs/aop_comm_err_" . $this->appId . "_" . date("Y-m-d") . ".log"; + $logger->conf["separator"] = "^_^"; + $logData = array( + date("Y-m-d H:i:s"), + $apiName, + $this->appId, + $localIp, + PHP_OS, + $this->alipaySdkVersion, + $requestUrl, + $errorCode, + str_replace("\n", "", $responseTxt) + ); + $logger->log($logData);*/ + } + + /** + * 生成用于调用收银台SDK的字符串 + * @param $request SDK接口的请求参数对象 + * @return string + * @author guofa.tgf + */ + public function sdkExecute($request) { + + $this->setupCharsets($request); + + $params['app_id'] = $this->appId; + $params['method'] = $request->getApiMethodName(); + $params['format'] = $this->format; + $params['sign_type'] = $this->signType; + $params['timestamp'] = date("Y-m-d H:i:s"); + $params['alipay_sdk'] = $this->alipaySdkVersion; + $params['charset'] = $this->postCharset; + + $version = $request->getApiVersion(); + $params['version'] = $this->checkEmpty($version) ? $this->apiVersion : $version; + + if ($notify_url = $request->getNotifyUrl()) { + $params['notify_url'] = $notify_url; + } + + $dict = $request->getApiParas(); + $params['biz_content'] = $dict['biz_content']; + + ksort($params); + + $params['sign'] = $this->generateSign($params, $this->signType); + + foreach ($params as &$value) { + $value = $this->characet($value, $params['charset']); + } + + return http_build_query($params); + } + + /* + 页面提交执行方法 + @param:跳转类接口的request; $httpmethod 提交方式。两个值可选:post、get + @return:构建好的、签名后的最终跳转URL(GET)或String形式的form(POST) + auther:笙默 + */ + public function pageExecute($request,$httpmethod = "POST") { + + $this->setupCharsets($request); + + if (strcasecmp($this->fileCharset, $this->postCharset)) { + + // writeLog("本地文件字符集编码与表单提交编码不一致,请务必设置成一样,属性名分别为postCharset!"); + throw new Exception("文件编码:[" . $this->fileCharset . "] 与表单提交编码:[" . $this->postCharset . "]两者不一致!"); + } + + $iv=null; + + if(!$this->checkEmpty($request->getApiVersion())){ + $iv=$request->getApiVersion(); + }else{ + $iv=$this->apiVersion; + } + + //组装系统参数 + $sysParams["app_id"] = $this->appId; + $sysParams["version"] = $iv; + $sysParams["format"] = $this->format; + $sysParams["sign_type"] = $this->signType; + $sysParams["method"] = $request->getApiMethodName(); + $sysParams["timestamp"] = date("Y-m-d H:i:s"); + $sysParams["alipay_sdk"] = $this->alipaySdkVersion; + $sysParams["terminal_type"] = $request->getTerminalType(); + $sysParams["terminal_info"] = $request->getTerminalInfo(); + $sysParams["prod_code"] = $request->getProdCode(); + $sysParams["notify_url"] = $request->getNotifyUrl(); + $sysParams["return_url"] = $request->getReturnUrl(); + $sysParams["charset"] = $this->postCharset; + + //获取业务参数 + $apiParams = $request->getApiParas(); + + if (method_exists($request,"getNeedEncrypt") &&$request->getNeedEncrypt()){ + + $sysParams["encrypt_type"] = $this->encryptType; + + if ($this->checkEmpty($apiParams['biz_content'])) { + + throw new Exception(" api request Fail! The reason : encrypt request is not supperted!"); + } + + if ($this->checkEmpty($this->encryptKey) || $this->checkEmpty($this->encryptType)) { + + throw new Exception(" encryptType and encryptKey must not null! "); + } + + if ("AES" != $this->encryptType) { + + throw new Exception("加密类型只支持AES"); + } + + // 执行加密 + $enCryptContent = encrypt($apiParams['biz_content'], $this->encryptKey); + $apiParams['biz_content'] = $enCryptContent; + + } + + //print_r($apiParams); + $totalParams = array_merge($apiParams, $sysParams); + + //待签名字符串 + $preSignStr = $this->getSignContent($totalParams); + + //签名 + $totalParams["sign"] = $this->generateSign($totalParams, $this->signType); + + if ("GET" == strtoupper($httpmethod)) { + + //value做urlencode + $preString=$this->getSignContentUrlencode($totalParams); + //拼接GET请求串 + $requestUrl = $this->gatewayUrl."?".$preString; + + return $requestUrl; + } else { + //拼接表单字符串 + return $this->buildRequestForm($totalParams); + } + + + } + + + + /** + * 建立请求,以表单HTML形式构造(默认) + * @param $para_temp 请求参数数组 + * @return 提交表单HTML文本 + */ + protected function buildRequestForm($para_temp) { + + $sHtml = "
    "; + while (list ($key, $val) = each ($para_temp)) { + if (false === $this->checkEmpty($val)) { + //$val = $this->characet($val, $this->postCharset); + $val = str_replace("'","'",$val); + //$val = str_replace("\"",""",$val); + $sHtml.= ""; + } + } + + //submit按钮控件请不要含有name属性 + $sHtml = $sHtml."
    "; + + $sHtml = $sHtml.""; + + return $sHtml; + } + + + public function execute($request, $authToken = null, $appInfoAuthtoken = null) { + + $this->setupCharsets($request); + + // // 如果两者编码不一致,会出现签名验签或者乱码 + if (strcasecmp($this->fileCharset, $this->postCharset)) { + + // writeLog("本地文件字符集编码与表单提交编码不一致,请务必设置成一样,属性名分别为postCharset!"); + throw new Exception("文件编码:[" . $this->fileCharset . "] 与表单提交编码:[" . $this->postCharset . "]两者不一致!"); + } + + $iv = null; + + if (!$this->checkEmpty($request->getApiVersion())) { + $iv = $request->getApiVersion(); + } else { + $iv = $this->apiVersion; + } + + + //组装系统参数 + $sysParams["app_id"] = $this->appId; + $sysParams["version"] = $iv; + $sysParams["format"] = $this->format; + $sysParams["sign_type"] = $this->signType; + $sysParams["method"] = $request->getApiMethodName(); + $sysParams["timestamp"] = date("Y-m-d H:i:s"); + $sysParams["auth_token"] = $authToken; + $sysParams["alipay_sdk"] = $this->alipaySdkVersion; + $sysParams["terminal_type"] = $request->getTerminalType(); + $sysParams["terminal_info"] = $request->getTerminalInfo(); + $sysParams["prod_code"] = $request->getProdCode(); + $sysParams["notify_url"] = $request->getNotifyUrl(); + $sysParams["charset"] = $this->postCharset; + $sysParams["app_auth_token"] = $appInfoAuthtoken; + + + //获取业务参数 + $apiParams = $request->getApiParas(); + + if (method_exists($request,"getNeedEncrypt") &&$request->getNeedEncrypt()){ + + $sysParams["encrypt_type"] = $this->encryptType; + + if ($this->checkEmpty($apiParams['biz_content'])) { + + throw new Exception(" api request Fail! The reason : encrypt request is not supperted!"); + } + + if ($this->checkEmpty($this->encryptKey) || $this->checkEmpty($this->encryptType)) { + + throw new Exception(" encryptType and encryptKey must not null! "); + } + + if ("AES" != $this->encryptType) { + + throw new Exception("加密类型只支持AES"); + } + + // 执行加密 + $enCryptContent = encrypt($apiParams['biz_content'], $this->encryptKey); + $apiParams['biz_content'] = $enCryptContent; + + } + + + //签名 + $sysParams["sign"] = $this->generateSign(array_merge($apiParams, $sysParams), $this->signType); + + + //系统参数放入GET请求串 + $requestUrl = $this->gatewayUrl . "?"; + foreach ($sysParams as $sysParamKey => $sysParamValue) { + $requestUrl .= "$sysParamKey=" . urlencode($this->characet($sysParamValue, $this->postCharset)) . "&"; + } + $requestUrl = substr($requestUrl, 0, -1); + + + //发起HTTP请求 + try { + $resp = $this->curl($requestUrl, $apiParams); + } catch (Exception $e) { + + $this->logCommunicationError($sysParams["method"], $requestUrl, "HTTP_ERROR_" . $e->getCode(), $e->getMessage()); + return false; + } + + //解析AOP返回结果 + $respWellFormed = false; + + + // 将返回结果转换本地文件编码 + $r = iconv($this->postCharset, $this->fileCharset . "//IGNORE", $resp); + + + + $signData = null; + + if ("json" == $this->format) { + + $respObject = json_decode($r); + if (null !== $respObject) { + $respWellFormed = true; + $signData = $this->parserJSONSignData($request, $resp, $respObject); + } + } else if ("xml" == $this->format) { + $disableLibxmlEntityLoader = libxml_disable_entity_loader(true); + $respObject = @ simplexml_load_string($resp); + if (false !== $respObject) { + $respWellFormed = true; + + $signData = $this->parserXMLSignData($request, $resp); + } + libxml_disable_entity_loader($disableLibxmlEntityLoader); + } + + + //返回的HTTP文本不是标准JSON或者XML,记下错误日志 + if (false === $respWellFormed) { + $this->logCommunicationError($sysParams["method"], $requestUrl, "HTTP_RESPONSE_NOT_WELL_FORMED", $resp); + return false; + } + + // 验签 + $this->checkResponseSign($request, $signData, $resp, $respObject); + + // 解密 + if (method_exists($request,"getNeedEncrypt") &&$request->getNeedEncrypt()){ + + if ("json" == $this->format) { + + + $resp = $this->encryptJSONSignSource($request, $resp); + + // 将返回结果转换本地文件编码 + $r = iconv($this->postCharset, $this->fileCharset . "//IGNORE", $resp); + $respObject = json_decode($r); + }else{ + + $resp = $this->encryptXMLSignSource($request, $resp); + + $r = iconv($this->postCharset, $this->fileCharset . "//IGNORE", $resp); + $disableLibxmlEntityLoader = libxml_disable_entity_loader(true); + $respObject = @ simplexml_load_string($r); + libxml_disable_entity_loader($disableLibxmlEntityLoader); + + } + } + + return $respObject; + } + + /** + * 转换字符集编码 + * @param $data + * @param $targetCharset + * @return string + */ + function characet($data, $targetCharset) { + + if (!empty($data)) { + $fileType = $this->fileCharset; + if (strcasecmp($fileType, $targetCharset) != 0) { + $data = mb_convert_encoding($data, $targetCharset, $fileType); + // $data = iconv($fileType, $targetCharset.'//IGNORE', $data); + } + } + + + return $data; + } + + public function exec($paramsArray) { + if (!isset ($paramsArray["method"])) { + trigger_error("No api name passed"); + } + $inflector = new LtInflector; + $inflector->conf["separator"] = "."; + $requestClassName = ucfirst($inflector->camelize(substr($paramsArray["method"], 7))) . "Request"; + if (!class_exists($requestClassName)) { + trigger_error("No such api: " . $paramsArray["method"]); + } + + $session = isset ($paramsArray["session"]) ? $paramsArray["session"] : null; + + $req = new $requestClassName; + foreach ($paramsArray as $paraKey => $paraValue) { + $inflector->conf["separator"] = "_"; + $setterMethodName = $inflector->camelize($paraKey); + $inflector->conf["separator"] = "."; + $setterMethodName = "set" . $inflector->camelize($setterMethodName); + if (method_exists($req, $setterMethodName)) { + $req->$setterMethodName ($paraValue); + } + } + return $this->execute($req, $session); + } + + /** + * 校验$value是否非空 + * if not set ,return true; + * if is null , return true; + **/ + protected function checkEmpty($value) { + if (!isset($value)) + return true; + if ($value === null) + return true; + if (trim($value) === "") + return true; + + return false; + } + + /** rsaCheckV1 & rsaCheckV2 + * 验证签名 + * 在使用本方法前,必须初始化AopClient且传入公钥参数。 + * 公钥是否是读取字符串还是读取文件,是根据初始化传入的值判断的。 + **/ + public function rsaCheckV1($params, $rsaPublicKeyFilePath,$signType='RSA') { + $sign = $params['sign']; + $params['sign_type'] = null; + $params['sign'] = null; + return $this->verify($this->getSignContent($params), $sign, $rsaPublicKeyFilePath,$signType); + } + public function rsaCheckV2($params, $rsaPublicKeyFilePath, $signType='RSA') { + $sign = $params['sign']; + $params['sign'] = null; + return $this->verify($this->getSignContent($params), $sign, $rsaPublicKeyFilePath, $signType); + } + + function verify($data, $sign, $rsaPublicKeyFilePath, $signType = 'RSA') { + + if($this->checkEmpty($this->alipayPublicKey)){ + + $pubKey= $this->alipayrsaPublicKey; + $res = "-----BEGIN PUBLIC KEY-----\n" . + wordwrap($pubKey, 64, "\n", true) . + "\n-----END PUBLIC KEY-----"; + }else { + //读取公钥文件 + $pubKey = file_get_contents($rsaPublicKeyFilePath); + //转换为openssl格式密钥 + $res = openssl_get_publickey($pubKey); + } + + ($res) or die('支付宝RSA公钥错误。请检查公钥文件格式是否正确'); + + //调用openssl内置方法验签,返回bool值 + + $result = FALSE; + if ("RSA2" == $signType) { + $result = (openssl_verify($data, base64_decode($sign), $res, OPENSSL_ALGO_SHA256)===1); + } else { + $result = (openssl_verify($data, base64_decode($sign), $res)===1); + } + + if(!$this->checkEmpty($this->alipayPublicKey)) { + //释放资源 + openssl_free_key($res); + } + + return $result; + } + +/** + * 在使用本方法前,必须初始化AopClient且传入公私钥参数。 + * 公钥是否是读取字符串还是读取文件,是根据初始化传入的值判断的。 + **/ + public function checkSignAndDecrypt($params, $rsaPublicKeyPem, $rsaPrivateKeyPem, $isCheckSign, $isDecrypt, $signType='RSA') { + $charset = $params['charset']; + $bizContent = $params['biz_content']; + if ($isCheckSign) { + if (!$this->rsaCheckV2($params, $rsaPublicKeyPem, $signType)) { + echo "
    checkSign failure
    "; + exit; + } + } + if ($isDecrypt) { + return $this->rsaDecrypt($bizContent, $rsaPrivateKeyPem, $charset); + } + + return $bizContent; + } + + /** + * 在使用本方法前,必须初始化AopClient且传入公私钥参数。 + * 公钥是否是读取字符串还是读取文件,是根据初始化传入的值判断的。 + **/ + public function encryptAndSign($bizContent, $rsaPublicKeyPem, $rsaPrivateKeyPem, $charset, $isEncrypt, $isSign, $signType='RSA') { + // 加密,并签名 + if ($isEncrypt && $isSign) { + $encrypted = $this->rsaEncrypt($bizContent, $rsaPublicKeyPem, $charset); + $sign = $this->sign($encrypted, $signType); + $response = "$encryptedRSA$sign$signType"; + return $response; + } + // 加密,不签名 + if ($isEncrypt && (!$isSign)) { + $encrypted = $this->rsaEncrypt($bizContent, $rsaPublicKeyPem, $charset); + $response = "$encrypted$signType"; + return $response; + } + // 不加密,但签名 + if ((!$isEncrypt) && $isSign) { + $sign = $this->sign($bizContent, $signType); + $response = "$bizContent$sign$signType"; + return $response; + } + // 不加密,不签名 + $response = "$bizContent"; + return $response; + } + + /** + * 在使用本方法前,必须初始化AopClient且传入公私钥参数。 + * 公钥是否是读取字符串还是读取文件,是根据初始化传入的值判断的。 + **/ + public function rsaEncrypt($data, $rsaPublicKeyPem, $charset) { + if($this->checkEmpty($this->alipayPublicKey)){ + //读取字符串 + $pubKey= $this->alipayrsaPublicKey; + $res = "-----BEGIN PUBLIC KEY-----\n" . + wordwrap($pubKey, 64, "\n", true) . + "\n-----END PUBLIC KEY-----"; + }else { + //读取公钥文件 + $pubKey = file_get_contents($rsaPublicKeyFilePath); + //转换为openssl格式密钥 + $res = openssl_get_publickey($pubKey); + } + + ($res) or die('支付宝RSA公钥错误。请检查公钥文件格式是否正确'); + $blocks = $this->splitCN($data, 0, 30, $charset); + $chrtext  = null; + $encodes  = array(); + foreach ($blocks as $n => $block) { + if (!openssl_public_encrypt($block, $chrtext , $res)) { + echo "
    " . openssl_error_string() . "
    "; + } + $encodes[] = $chrtext ; + } + $chrtext = implode(",", $encodes); + + return base64_encode($chrtext); + } + + /** + * 在使用本方法前,必须初始化AopClient且传入公私钥参数。 + * 公钥是否是读取字符串还是读取文件,是根据初始化传入的值判断的。 + **/ + public function rsaDecrypt($data, $rsaPrivateKeyPem, $charset) { + + if($this->checkEmpty($this->rsaPrivateKeyFilePath)){ + //读字符串 + $priKey=$this->rsaPrivateKey; + $res = "-----BEGIN RSA PRIVATE KEY-----\n" . + wordwrap($priKey, 64, "\n", true) . + "\n-----END RSA PRIVATE KEY-----"; + }else { + $priKey = file_get_contents($this->rsaPrivateKeyFilePath); + $res = openssl_get_privatekey($priKey); + } + ($res) or die('您使用的私钥格式错误,请检查RSA私钥配置'); + //转换为openssl格式密钥 + $decodes = explode(',', $data); + $strnull = ""; + $dcyCont = ""; + foreach ($decodes as $n => $decode) { + if (!openssl_private_decrypt($decode, $dcyCont, $res)) { + echo "
    " . openssl_error_string() . "
    "; + } + $strnull .= $dcyCont; + } + return $strnull; + } + + function splitCN($cont, $n = 0, $subnum, $charset) { + //$len = strlen($cont) / 3; + $arrr = array(); + for ($i = $n; $i < strlen($cont); $i += $subnum) { + $res = $this->subCNchar($cont, $i, $subnum, $charset); + if (!empty ($res)) { + $arrr[] = $res; + } + } + + return $arrr; + } + + function subCNchar($str, $start = 0, $length, $charset = "gbk") { + if (strlen($str) <= $length) { + return $str; + } + $re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/"; + $re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/"; + $re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/"; + $re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/"; + preg_match_all($re[$charset], $str, $match); + $slice = join("", array_slice($match[0], $start, $length)); + return $slice; + } + + function parserResponseSubCode($request, $responseContent, $respObject, $format) { + + if ("json" == $format) { + + $apiName = $request->getApiMethodName(); + $rootNodeName = str_replace(".", "_", $apiName) . $this->RESPONSE_SUFFIX; + $errorNodeName = $this->ERROR_RESPONSE; + + $rootIndex = strpos($responseContent, $rootNodeName); + $errorIndex = strpos($responseContent, $errorNodeName); + + if ($rootIndex > 0) { + // 内部节点对象 + $rInnerObject = $respObject->$rootNodeName; + } elseif ($errorIndex > 0) { + + $rInnerObject = $respObject->$errorNodeName; + } else { + return null; + } + + // 存在属性则返回对应值 + if (isset($rInnerObject->sub_code)) { + + return $rInnerObject->sub_code; + } else { + + return null; + } + + + } elseif ("xml" == $format) { + + // xml格式sub_code在同一层级 + return $respObject->sub_code; + + } + + + } + + function parserJSONSignData($request, $responseContent, $responseJSON) { + + $signData = new SignData(); + + $signData->sign = $this->parserJSONSign($responseJSON); + $signData->signSourceData = $this->parserJSONSignSource($request, $responseContent); + + + return $signData; + + } + + function parserJSONSignSource($request, $responseContent) { + + $apiName = $request->getApiMethodName(); + $rootNodeName = str_replace(".", "_", $apiName) . $this->RESPONSE_SUFFIX; + + $rootIndex = strpos($responseContent, $rootNodeName); + $errorIndex = strpos($responseContent, $this->ERROR_RESPONSE); + + + if ($rootIndex > 0) { + + return $this->parserJSONSource($responseContent, $rootNodeName, $rootIndex); + } else if ($errorIndex > 0) { + + return $this->parserJSONSource($responseContent, $this->ERROR_RESPONSE, $errorIndex); + } else { + + return null; + } + + + } + + function parserJSONSource($responseContent, $nodeName, $nodeIndex) { + $signDataStartIndex = $nodeIndex + strlen($nodeName) + 2; + $signIndex = strrpos($responseContent, "\"" . $this->SIGN_NODE_NAME . "\""); + // 签名前-逗号 + $signDataEndIndex = $signIndex - 1; + $indexLen = $signDataEndIndex - $signDataStartIndex; + if ($indexLen < 0) { + + return null; + } + + return substr($responseContent, $signDataStartIndex, $indexLen); + + } + + function parserJSONSign($responseJSon) { + + return $responseJSon->sign; + } + + function parserXMLSignData($request, $responseContent) { + + + $signData = new SignData(); + + $signData->sign = $this->parserXMLSign($responseContent); + $signData->signSourceData = $this->parserXMLSignSource($request, $responseContent); + + + return $signData; + + + } + + function parserXMLSignSource($request, $responseContent) { + + + $apiName = $request->getApiMethodName(); + $rootNodeName = str_replace(".", "_", $apiName) . $this->RESPONSE_SUFFIX; + + + $rootIndex = strpos($responseContent, $rootNodeName); + $errorIndex = strpos($responseContent, $this->ERROR_RESPONSE); + // $this->echoDebug("
    rootNodeName:" . $rootNodeName); + // $this->echoDebug("
    responseContent:" . $responseContent . ""); + + + if ($rootIndex > 0) { + + return $this->parserXMLSource($responseContent, $rootNodeName, $rootIndex); + } else if ($errorIndex > 0) { + + return $this->parserXMLSource($responseContent, $this->ERROR_RESPONSE, $errorIndex); + } else { + + return null; + } + + + } + + function parserXMLSource($responseContent, $nodeName, $nodeIndex) { + $signDataStartIndex = $nodeIndex + strlen($nodeName) + 1; + $signIndex = strrpos($responseContent, "<" . $this->SIGN_NODE_NAME . ">"); + // 签名前-逗号 + $signDataEndIndex = $signIndex - 1; + $indexLen = $signDataEndIndex - $signDataStartIndex + 1; + + if ($indexLen < 0) { + return null; + } + + + return substr($responseContent, $signDataStartIndex, $indexLen); + + + } + + function parserXMLSign($responseContent) { + $signNodeName = "<" . $this->SIGN_NODE_NAME . ">"; + $signEndNodeName = "SIGN_NODE_NAME . ">"; + + $indexOfSignNode = strpos($responseContent, $signNodeName); + $indexOfSignEndNode = strpos($responseContent, $signEndNodeName); + + + if ($indexOfSignNode < 0 || $indexOfSignEndNode < 0) { + return null; + } + + $nodeIndex = ($indexOfSignNode + strlen($signNodeName)); + + $indexLen = $indexOfSignEndNode - $nodeIndex; + + if ($indexLen < 0) { + return null; + } + + // 签名 + return substr($responseContent, $nodeIndex, $indexLen); + + } + + /** + * 验签 + * @param $request + * @param $signData + * @param $resp + * @param $respObject + * @throws Exception + */ + public function checkResponseSign($request, $signData, $resp, $respObject) { + + if (!$this->checkEmpty($this->alipayPublicKey) || !$this->checkEmpty($this->alipayrsaPublicKey)) { + + + if ($signData == null || $this->checkEmpty($signData->sign) || $this->checkEmpty($signData->signSourceData)) { + + throw new Exception(" check sign Fail! The reason : signData is Empty"); + } + + + // 获取结果sub_code + $responseSubCode = $this->parserResponseSubCode($request, $resp, $respObject, $this->format); + + + if (!$this->checkEmpty($responseSubCode) || ($this->checkEmpty($responseSubCode) && !$this->checkEmpty($signData->sign))) { + + $checkResult = $this->verify($signData->signSourceData, $signData->sign, $this->alipayPublicKey, $this->signType); + + + if (!$checkResult) { + + if (strpos($signData->signSourceData, "\\/") > 0) { + + $signData->signSourceData = str_replace("\\/", "/", $signData->signSourceData); + + $checkResult = $this->verify($signData->signSourceData, $signData->sign, $this->alipayPublicKey, $this->signType); + + if (!$checkResult) { + throw new Exception("check sign Fail! [sign=" . $signData->sign . ", signSourceData=" . $signData->signSourceData . "]"); + } + + } else { + + throw new Exception("check sign Fail! [sign=" . $signData->sign . ", signSourceData=" . $signData->signSourceData . "]"); + } + + } + } + + + } + } + + private function setupCharsets($request) { + if ($this->checkEmpty($this->postCharset)) { + $this->postCharset = 'UTF-8'; + } + $str = preg_match('/[\x80-\xff]/', $this->appId) ? $this->appId : print_r($request, true); + $this->fileCharset = mb_detect_encoding($str, "UTF-8, GBK") == 'UTF-8' ? 'UTF-8' : 'GBK'; + } + + // 获取加密内容 + + private function encryptJSONSignSource($request, $responseContent) { + + $parsetItem = $this->parserEncryptJSONSignSource($request, $responseContent); + + $bodyIndexContent = substr($responseContent, 0, $parsetItem->startIndex); + $bodyEndContent = substr($responseContent, $parsetItem->endIndex, strlen($responseContent) + 1 - $parsetItem->endIndex); + + $bizContent = decrypt($parsetItem->encryptContent, $this->encryptKey); + return $bodyIndexContent . $bizContent . $bodyEndContent; + + } + + + private function parserEncryptJSONSignSource($request, $responseContent) { + + $apiName = $request->getApiMethodName(); + $rootNodeName = str_replace(".", "_", $apiName) . $this->RESPONSE_SUFFIX; + + $rootIndex = strpos($responseContent, $rootNodeName); + $errorIndex = strpos($responseContent, $this->ERROR_RESPONSE); + + + if ($rootIndex > 0) { + + return $this->parserEncryptJSONItem($responseContent, $rootNodeName, $rootIndex); + } else if ($errorIndex > 0) { + + return $this->parserEncryptJSONItem($responseContent, $this->ERROR_RESPONSE, $errorIndex); + } else { + + return null; + } + + + } + + + private function parserEncryptJSONItem($responseContent, $nodeName, $nodeIndex) { + $signDataStartIndex = $nodeIndex + strlen($nodeName) + 2; + $signIndex = strpos($responseContent, "\"" . $this->SIGN_NODE_NAME . "\""); + // 签名前-逗号 + $signDataEndIndex = $signIndex - 1; + + if ($signDataEndIndex < 0) { + + $signDataEndIndex = strlen($responseContent)-1 ; + } + + $indexLen = $signDataEndIndex - $signDataStartIndex; + + $encContent = substr($responseContent, $signDataStartIndex+1, $indexLen-2); + + + $encryptParseItem = new EncryptParseItem(); + + $encryptParseItem->encryptContent = $encContent; + $encryptParseItem->startIndex = $signDataStartIndex; + $encryptParseItem->endIndex = $signDataEndIndex; + + return $encryptParseItem; + + } + + // 获取加密内容 + + private function encryptXMLSignSource($request, $responseContent) { + + $parsetItem = $this->parserEncryptXMLSignSource($request, $responseContent); + + $bodyIndexContent = substr($responseContent, 0, $parsetItem->startIndex); + $bodyEndContent = substr($responseContent, $parsetItem->endIndex, strlen($responseContent) + 1 - $parsetItem->endIndex); + $bizContent = decrypt($parsetItem->encryptContent, $this->encryptKey); + + return $bodyIndexContent . $bizContent . $bodyEndContent; + + } + + private function parserEncryptXMLSignSource($request, $responseContent) { + + + $apiName = $request->getApiMethodName(); + $rootNodeName = str_replace(".", "_", $apiName) . $this->RESPONSE_SUFFIX; + + + $rootIndex = strpos($responseContent, $rootNodeName); + $errorIndex = strpos($responseContent, $this->ERROR_RESPONSE); + // $this->echoDebug("
    rootNodeName:" . $rootNodeName); + // $this->echoDebug("
    responseContent:" . $responseContent . ""); + + + if ($rootIndex > 0) { + + return $this->parserEncryptXMLItem($responseContent, $rootNodeName, $rootIndex); + } else if ($errorIndex > 0) { + + return $this->parserEncryptXMLItem($responseContent, $this->ERROR_RESPONSE, $errorIndex); + } else { + + return null; + } + + + } + + private function parserEncryptXMLItem($responseContent, $nodeName, $nodeIndex) { + + $signDataStartIndex = $nodeIndex + strlen($nodeName) + 1; + + $xmlStartNode="<".$this->ENCRYPT_XML_NODE_NAME.">"; + $xmlEndNode="ENCRYPT_XML_NODE_NAME.">"; + + $indexOfXmlNode=strpos($responseContent,$xmlEndNode); + if($indexOfXmlNode<0){ + + $item = new EncryptParseItem(); + $item->encryptContent = null; + $item->startIndex = 0; + $item->endIndex = 0; + return $item; + } + + $startIndex=$signDataStartIndex+strlen($xmlStartNode); + $bizContentLen=$indexOfXmlNode-$startIndex; + $bizContent=substr($responseContent,$startIndex,$bizContentLen); + + $encryptParseItem = new EncryptParseItem(); + $encryptParseItem->encryptContent = $bizContent; + $encryptParseItem->startIndex = $signDataStartIndex; + $encryptParseItem->endIndex = $indexOfXmlNode+strlen($xmlEndNode); + + return $encryptParseItem; + + } + + + function echoDebug($content) { + + if ($this->debugInfo) { + echo "
    " . $content; + } + + } + + +} \ No newline at end of file diff --git a/plugins/alipay/inc/lib/AopEncrypt.php b/plugins/alipay/inc/lib/AopEncrypt.php new file mode 100644 index 0000000..0ec4e5b --- /dev/null +++ b/plugins/alipay/inc/lib/AopEncrypt.php @@ -0,0 +1,71 @@ +bizContentarr)){ + $this->bizContent = json_encode($this->bizContentarr,JSON_UNESCAPED_UNICODE); + } + return $this->bizContent; + } + + public function getTradeNo() + { + return $this->tradeNo; + } + + public function setTradeNo($tradeNo) + { + $this->tradeNo = $tradeNo; + $this->bizContentarr['trade_no'] = $tradeNo; + } + + public function getOutTradeNo() + { + return $this->outTradeNo; + } + + public function setOutTradeNo($outTradeNo) + { + $this->outTradeNo = $outTradeNo; + $this->bizContentarr['out_trade_no'] = $outTradeNo; + } + public function getOperatorId() + { + return $this->operatorId; + } + + public function setOperatorId($operatorId) + { + $this->operatorId = $operatorId; + $this->bizContentarr['operator_id'] = $operatorId; + } + +} + +?> \ No newline at end of file diff --git a/plugins/alipay/inc/model/builder/AlipayTradeCreateContentBuilder.php b/plugins/alipay/inc/model/builder/AlipayTradeCreateContentBuilder.php new file mode 100644 index 0000000..2d98426 --- /dev/null +++ b/plugins/alipay/inc/model/builder/AlipayTradeCreateContentBuilder.php @@ -0,0 +1,218 @@ +outTradeNo = $outTradeNo; + $this->bizParas['out_trade_no'] = $outTradeNo; + } + public function getOutTradeNo() + { + return $this->outTradeNo; + } + + public function setSellerId($sellerId) + { + $this->sellerId = $sellerId; + $this->bizParas['seller_id'] = $sellerId; + } + + public function getSellerId() + { + return $this->sellerId; + } + + public function setTotalAmount($totalAmount) + { + $this->totalAmount = $totalAmount; + $this->bizParas['total_amount'] = $totalAmount; + } + + public function getTotalAmount() + { + return $this->totalAmount; + } + + public function setDiscountableAmount($discountableAmount) + { + $this->discountableAmount = $discountableAmount; + $this->bizParas['discountable_amount'] = $discountableAmount; + } + + public function getDiscountableAmount() + { + return $this->discountableAmount; + } + + public function setBuyerId($buyerId) + { + $this->buyerId = $buyerId; + $this->bizParas['buyer_id'] = $buyerId; + } + + public function getBuyerLogonId() + { + return $this->buyerLogonId; + } + + public function setSubject($subject) + { + $this->subject = $subject; + $this->bizParas['subject'] = $subject; + } + + public function getSubject() + { + return $this->subject; + } + + public function setBody($body) + { + $this->body = $body; + $this->bizParas['body'] = $body; + } + + public function getBody() + { + return $this->body; + } + + public function setOperatorId($operatorId) + { + $this->operatorId = $operatorId; + $this->bizParas['operator_id'] = $operatorId; + } + + public function getOperatorId() + { + return $this->operatorId; + } + + public function setStoreId($storeId) + { + $this->storeId = $storeId; + $this->bizParas['store_id'] = $storeId; + } + + public function getStoreId() + { + return $this->storeId; + } + + public function setTerminalId($terminalId) + { + $this->terminalId = $terminalId; + $this->bizParas['terminal_id'] = $terminalId; + } + + public function getTerminalId() + { + return $this->terminalId; + } + + public function setTimeExpress($timeExpress) + { + $this->timeExpress = $timeExpress; + $this->bizParas['timeout_express'] = $timeExpress; + } + + public function getTimeExpress() + { + return $this->timeExpress; + } + + public function getExtendParams() + { + return $this->extendParams; + } + + public function setExtendParams($extendParams) + { + $this->extendParams = $extendParams; + $this->bizParas['extend_params'] = $extendParams; + } + + public function getGoodsDetailList() + { + return $this->goodsDetailList; + } + + public function setGoodsDetailList($goodsDetailList) + { + $this->goodsDetailList = $goodsDetailList; + $this->bizParas['goods_detail'] = $goodsDetailList; + } + + public function getBizContent() + { + if(!empty($this->bizParas)){ + $this->bizContent = json_encode($this->bizParas,JSON_UNESCAPED_UNICODE); + } + + return $this->bizContent; + } +} + +?> \ No newline at end of file diff --git a/plugins/alipay/inc/model/builder/AlipayTradeFastpayRefundQueryContentBuilder.php b/plugins/alipay/inc/model/builder/AlipayTradeFastpayRefundQueryContentBuilder.php new file mode 100644 index 0000000..da5839f --- /dev/null +++ b/plugins/alipay/inc/model/builder/AlipayTradeFastpayRefundQueryContentBuilder.php @@ -0,0 +1,65 @@ +bizContentarr)){ + $this->bizContent = json_encode($this->bizContentarr,JSON_UNESCAPED_UNICODE); + } + return $this->bizContent; + } + + public function getTradeNo() + { + return $this->tradeNo; + } + + public function setTradeNo($tradeNo) + { + $this->tradeNo = $tradeNo; + $this->bizContentarr['trade_no'] = $tradeNo; + } + + public function getOutTradeNo() + { + return $this->outTradeNo; + } + + public function setOutTradeNo($outTradeNo) + { + $this->outTradeNo = $outTradeNo; + $this->bizContentarr['out_trade_no'] = $outTradeNo; + } + public function getOutRequestNo() + { + return $this->outRequestNo; + } + public function setOutRequestNo($outRequestNo) + { + $this->outRequestNo = $outRequestNo; + $this->bizContentarr['out_request_no'] = $outRequestNo; + } +} + +?> \ No newline at end of file diff --git a/plugins/alipay/inc/model/builder/AlipayTradePagePayContentBuilder.php b/plugins/alipay/inc/model/builder/AlipayTradePagePayContentBuilder.php new file mode 100644 index 0000000..143ed59 --- /dev/null +++ b/plugins/alipay/inc/model/builder/AlipayTradePagePayContentBuilder.php @@ -0,0 +1,111 @@ +bizContentarr)){ + $this->bizContent = json_encode($this->bizContentarr,JSON_UNESCAPED_UNICODE); + } + return $this->bizContent; + } + + public function __construct() + { + $this->bizContentarr['product_code'] = "FAST_INSTANT_TRADE_PAY"; + } + + public function AlipayTradeWapPayContentBuilder() + { + $this->__construct(); + } + + public function getBody() + { + return $this->body; + } + + public function setBody($body) + { + $this->body = $body; + $this->bizContentarr['body'] = $body; + } + + public function setSubject($subject) + { + $this->subject = $subject; + $this->bizContentarr['subject'] = $subject; + } + + public function getSubject() + { + return $this->subject; + } + + public function getOutTradeNo() + { + return $this->outTradeNo; + } + + public function setOutTradeNo($outTradeNo) + { + $this->outTradeNo = $outTradeNo; + $this->bizContentarr['out_trade_no'] = $outTradeNo; + } + + public function setTimeExpress($timeExpress) + { + $this->timeExpress = $timeExpress; + $this->bizContentarr['timeout_express'] = $timeExpress; + } + + public function getTimeExpress() + { + return $this->timeExpress; + } + + public function setTotalAmount($totalAmount) + { + $this->totalAmount = $totalAmount; + $this->bizContentarr['total_amount'] = $totalAmount; + } + + public function getTotalAmount() + { + return $this->totalAmount; + } + +} + +?> \ No newline at end of file diff --git a/plugins/alipay/inc/model/builder/AlipayTradePrecreateContentBuilder.php b/plugins/alipay/inc/model/builder/AlipayTradePrecreateContentBuilder.php new file mode 100644 index 0000000..b9af814 --- /dev/null +++ b/plugins/alipay/inc/model/builder/AlipayTradePrecreateContentBuilder.php @@ -0,0 +1,254 @@ +outTradeNo = $outTradeNo; + $this->bizParas['out_trade_no'] = $outTradeNo; + } + public function getOutTradeNo() + { + return $this->outTradeNo; + } + + public function setSellerId($sellerId) + { + $this->sellerId = $sellerId; + $this->bizParas['seller_id'] = $sellerId; + } + + public function getSellerId() + { + return $this->sellerId; + } + + public function setTotalAmount($totalAmount) + { + $this->totalAmount = $totalAmount; + $this->bizParas['total_amount'] = $totalAmount; + } + + public function getTotalAmount() + { + return $this->totalAmount; + } + + public function setDiscountableAmount($discountableAmount) + { + $this->discountableAmount = $discountableAmount; + $this->bizParas['discountable_amount'] = $discountableAmount; + } + + public function getDiscountableAmount() + { + return $this->discountableAmount; + } + + public function setUndiscountableAmount($undiscountableAmount) + { + $this->undiscountableAmount = $undiscountableAmount; + $this->bizParas['undiscountable_amount'] = $undiscountableAmount; + } + + public function getUndiscountableAmount() + { + return $this->undiscountableAmount; + } + + public function setBuyerLogonId($buyerLogonId) + { + $this->buyerLogonId = $buyerLogonId; + $this->bizParas['buyer_logon_id'] = $buyerLogonId; + } + + public function getBuyerLogonId() + { + return $this->buyerLogonId; + } + + public function setSubject($subject) + { + $this->subject = $subject; + $this->bizParas['subject'] = $subject; + } + + public function getSubject() + { + return $this->subject; + } + + public function setBody($body) + { + $this->body = $body; + $this->bizParas['body'] = $body; + } + + public function getBody() + { + return $this->body; + } + + public function setOperatorId($operatorId) + { + $this->operatorId = $operatorId; + $this->bizParas['operator_id'] = $operatorId; + } + + public function getOperatorId() + { + return $this->operatorId; + } + + public function setStoreId($storeId) + { + $this->storeId = $storeId; + $this->bizParas['store_id'] = $storeId; + } + + public function getStoreId() + { + return $this->storeId; + } + + public function setTerminalId($terminalId) + { + $this->terminalId = $terminalId; + $this->bizParas['terminal_id'] = $terminalId; + } + + public function getTerminalId() + { + return $this->terminalId; + } + + public function setTimeExpress($timeExpress) + { + $this->timeExpress = $timeExpress; + $this->bizParas['timeout_express'] = $timeExpress; + } + + public function getTimeExpress() + { + return $this->timeExpress; + } + + public function getAlipayStoreId() + { + return $this->alipayStoreId; + } + + + public function setAlipayStoreId($alipayStoreId) + { + $this->alipayStoreId = $alipayStoreId; + $this->bizParas['alipay_store_id'] = $alipayStoreId; + } + + public function getExtendParams() + { + return $this->extendParams; + } + + public function setExtendParams($extendParams) + { + $this->extendParams = $extendParams; + $this->bizParas['extend_params'] = $extendParams; + } + + public function getGoodsDetailList() + { + return $this->goodsDetailList; + } + + public function setGoodsDetailList($goodsDetailList) + { + $this->goodsDetailList = $goodsDetailList; + $this->bizParas['goods_detail'] = $goodsDetailList; + } + + public function getBizContent() + { + /*$this->bizContent = "{"; + foreach ($this->bizParas as $k=>$v){ + $this->bizContent.= "\"".$k."\":\"".$v."\","; + } + $this->bizContent = substr($this->bizContent,0,-1); + $this->bizContent.= "}";*/ + if(!empty($this->bizParas)){ + $this->bizContent = json_encode($this->bizParas,JSON_UNESCAPED_UNICODE); + } + + return $this->bizContent; + } +} + +?> \ No newline at end of file diff --git a/plugins/alipay/inc/model/builder/AlipayTradeQueryContentBuilder.php b/plugins/alipay/inc/model/builder/AlipayTradeQueryContentBuilder.php new file mode 100644 index 0000000..e78b486 --- /dev/null +++ b/plugins/alipay/inc/model/builder/AlipayTradeQueryContentBuilder.php @@ -0,0 +1,55 @@ +bizContentarr)){ + $this->bizContent = json_encode($this->bizContentarr,JSON_UNESCAPED_UNICODE); + } + return $this->bizContent; + } + + public function getOutTradeNo() + { + return $this->outTradeNo; + } + + public function setOutTradeNo($outTradeNo) + { + $this->outTradeNo = $outTradeNo; + $this->bizContentarr['out_trade_no'] = $outTradeNo; + } + + public function getTradeNo() + { + return $this->tradeNo; + } + + public function setTradeNo($tradeNo) + { + $this->tradeNo = $tradeNo; + $this->bizContentarr['trade_no'] = $tradeNo; + } + + +} + +?> \ No newline at end of file diff --git a/plugins/alipay/inc/model/builder/AlipayTradeRefundContentBuilder.php b/plugins/alipay/inc/model/builder/AlipayTradeRefundContentBuilder.php new file mode 100644 index 0000000..d9959de --- /dev/null +++ b/plugins/alipay/inc/model/builder/AlipayTradeRefundContentBuilder.php @@ -0,0 +1,149 @@ +response = $response; + } + + public function AlipayTradeRefundContentBuilder() + { + $this->__construct(); + }*/ + + public function getBizContent() + { + if(!empty($this->bizContentarr)){ + $this->bizContent = json_encode($this->bizContentarr,JSON_UNESCAPED_UNICODE); + } + + return $this->bizContent; + } + + public function setTradeNo($tradeNo) + { + $this->tradeNo = $tradeNo; + $this->bizContentarr['trade_no'] = $tradeNo; + } + + public function getTradeNo() + { + return $this->tradeNo; + } + + public function setOutTradeNo($outTradeNo) + { + $this->outTradeNo = $outTradeNo; + $this->bizContentarr['out_trade_no'] = $outTradeNo; + } + + public function getOutTradeNo() + { + return $this->outTradeNo; + } + + public function setOperatorId($operatorId) + { + $this->operatorId = $operatorId; + $this->bizContentarr['operator_id'] = $operatorId; + } + + public function getOperatorId() + { + return $this->operatorId; + } + + public function setOutRequestNo($outRequestNo) + { + $this->outRequestNo = $outRequestNo; + $this->bizContentarr['out_request_no'] = $outRequestNo; + } + + public function getOutRequestNo() + { + return $this->outRequestNo; + } + + public function setRefundAmount($refundAmount) + { + $this->refundAmount = $refundAmount; + $this->bizContentarr['refund_amount'] = $refundAmount; + } + + public function getRefundAmount() + { + return $this->refundAmount; + } + + public function setRefundReason($refundReason) + { + $this->refundReason = $refundReason; + $this->bizContentarr['refund_reason'] = $refundReason; + } + + public function getRefundReason() + { + return $this->refundReason; + } + + public function setStoreId($storeId) + { + $this->storeId = $storeId; + $this->bizContentarr['store_id'] = $storeId; + } + + public function getStoreId() + { + return $this->storeId; + } + + public function setTerminalId($terminalId) + { + $this->terminalId = $terminalId; + $this->bizContentarr['terminal_id'] =$terminalId; + } + + public function getTerminalId() + { + return $this->terminalId; + } +} + +?> \ No newline at end of file diff --git a/plugins/alipay/inc/model/builder/AlipayTradeWapPayContentBuilder.php b/plugins/alipay/inc/model/builder/AlipayTradeWapPayContentBuilder.php new file mode 100644 index 0000000..a5e4cdf --- /dev/null +++ b/plugins/alipay/inc/model/builder/AlipayTradeWapPayContentBuilder.php @@ -0,0 +1,124 @@ +bizContentarr)){ + $this->bizContent = json_encode($this->bizContentarr,JSON_UNESCAPED_UNICODE); + } + return $this->bizContent; + } + + public function __construct() + { + $this->bizContentarr['productCode'] = "QUICK_WAP_PAY"; + } + + public function AlipayTradeWapPayContentBuilder() + { + $this->__construct(); + } + + public function getBody() + { + return $this->body; + } + + public function setBody($body) + { + $this->body = $body; + $this->bizContentarr['body'] = $body; + } + + public function setSubject($subject) + { + $this->subject = $subject; + $this->bizContentarr['subject'] = $subject; + } + + public function getSubject() + { + return $this->subject; + } + + public function getOutTradeNo() + { + return $this->outTradeNo; + } + + public function setOutTradeNo($outTradeNo) + { + $this->outTradeNo = $outTradeNo; + $this->bizContentarr['out_trade_no'] = $outTradeNo; + } + + public function setTimeExpress($timeExpress) + { + $this->timeExpress = $timeExpress; + $this->bizContentarr['timeout_express'] = $timeExpress; + } + + public function getTimeExpress() + { + return $this->timeExpress; + } + + public function setTotalAmount($totalAmount) + { + $this->totalAmount = $totalAmount; + $this->bizContentarr['total_amount'] = $totalAmount; + } + + public function getTotalAmount() + { + return $this->totalAmount; + } + + public function setSellerId($sellerId) + { + $this->sellerId = $sellerId; + $this->bizContentarr['seller_id'] = $sellerId; + } + + public function getSellerId() + { + return $this->sellerId; + } +} + +?> \ No newline at end of file diff --git a/plugins/alipay/inc/model/builder/ContentBuilder.php b/plugins/alipay/inc/model/builder/ContentBuilder.php new file mode 100644 index 0000000..0194c9f --- /dev/null +++ b/plugins/alipay/inc/model/builder/ContentBuilder.php @@ -0,0 +1,36 @@ +appAuthToken = $appAuthToken; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl = $notifyUrl; + } + + public function getAppAuthToken() + { + return $this->appAuthToken; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } +} \ No newline at end of file diff --git a/plugins/alipay/inc/model/builder/ExtendParams.php b/plugins/alipay/inc/model/builder/ExtendParams.php new file mode 100644 index 0000000..783e251 --- /dev/null +++ b/plugins/alipay/inc/model/builder/ExtendParams.php @@ -0,0 +1,61 @@ +extendParamsArr)) { + return $this->extendParamsArr; + } + } + + public function getSysServiceProviderId() + { + return $this->sysServiceProviderId; + } + + public function setSysServiceProviderId($sysServiceProviderId) + { + $this->sysServiceProviderId = $sysServiceProviderId; + $this->extendParamsArr['sys_service_provider_id'] = $sysServiceProviderId; + } + + public function getHbFqNum() + { + return $this->hbFqNum; + } + + public function setHbFqNum($hbFqNum) + { + $this->hbFqNum = $hbFqNum; + $this->extendParamsArr['hb_fq_num'] = $hbFqNum; + } + + public function getHbFqSellerPercent() + { + return $this->hbFqSellerPercent; + } + + public function setHbFqSellerPercent($hbFqSellerPercent) + { + $this->hbFqSellerPercent = $hbFqSellerPercent; + $this->extendParamsArr['hb_fq_seller_percent'] = $hbFqSellerPercent; + } +} \ No newline at end of file diff --git a/plugins/alipay/inc/model/builder/GoodsDetail.php b/plugins/alipay/inc/model/builder/GoodsDetail.php new file mode 100644 index 0000000..9d62d05 --- /dev/null +++ b/plugins/alipay/inc/model/builder/GoodsDetail.php @@ -0,0 +1,129 @@ +goodsDetail; + /*$this->goodsDetailStr = "{"; + foreach ($this->goodsDetail as $k => $v){ + $this->goodsDetailStr.= "\"".$k."\":\"".$v."\","; + } + $this->goodsDetailStr = substr($this->goodsDetailStr,0,-1); + $this->goodsDetailStr.= "}"; + return $this->goodsDetailStr;*/ + } + + public function setGoodsId($goodsId) + { + $this->goodsId = $goodsId; + $this->goodsDetail['goods_id'] = $goodsId; + } + + public function getGoodsId() + { + return $this->goodsId; + } + + public function setAlipayGoodsId($alipayGoodsId) + { + $this->alipayGoodsId = $alipayGoodsId; + $this->goodsDetail['alipay_goods_id'] = $alipayGoodsId; + } + + public function getAlipayGoodsId() + { + return $this->alipayGoodsId; + } + + public function setGoodsName($goodsName) + { + $this->goodsName = $goodsName; + $this->goodsDetail['goods_name'] = $goodsName; + } + + public function getGoodsName() + { + return $this->goodsName; + } + + public function setQuantity($quantity) + { + $this->quantity = $quantity; + $this->goodsDetail['quantity'] = $quantity; + } + + public function getQuantity() + { + return $this->quantity; + } + + public function setPrice($price) + { + $this->price = $price; + $this->goodsDetail['price'] = $price; + } + + public function getPrice() + { + return $this->price; + } + + public function setGoodsCategory($goodsCategory) + { + $this->goodsCategory = $goodsCategory; + $this->goodsDetail['goods_category'] = $goodsCategory; + } + + public function getGoodsCategory() + { + return $this->goodsCategory; + } + + public function setBody($body) + { + $this->body = $body; + $this->goodsDetail['body'] = $body; + } + + public function getBody() + { + return $this->body; + } + + +} + +?> \ No newline at end of file diff --git a/plugins/alipay/inc/model/builder/RoyaltyDetailInfo.php b/plugins/alipay/inc/model/builder/RoyaltyDetailInfo.php new file mode 100644 index 0000000..2cc9374 --- /dev/null +++ b/plugins/alipay/inc/model/builder/RoyaltyDetailInfo.php @@ -0,0 +1,161 @@ +setTransInType("userId"); + $this->setTransOutType("userId"); + } + + public function RoyaltyDetailInfo(){ + $this->__construct(); + } + + public function getRoyaltyDetailInfo() + { + return $this->royaltyDetailInfo; + } + + public function getAmount() + { + return $this->amount; + } + + public function getBatchNo() + { + return $this->batchNo; + } + + public function getDesc() + { + return $this->desc; + } + + public function getOutRelationId() + { + return $this->outRelationId; + } + + public function getSerialNo() + { + return $this->serialNo; + } + + public function getTransIn() + { + return $this->transIn; + } + + public function getTransInType() + { + return $this->transInType; + } + + public function getTransOut() + { + return $this->transOut; + } + + public function getTransOutType() + { + return $this->transOutType; + } + + public function setAmount($amount) + { + $this->amount = $amount; + $this->royaltyDetailInfo['amount'] = $amount; + } + + public function setBatchNo($batchNo) + { + $this->batchNo = $batchNo; + $this->royaltyDetailInfo['batch_no'] = $batchNo; + } + + public function setDesc($desc) + { + $this->desc = $desc; + $this->royaltyDetailInfo['desc'] = $desc; + } + + public function setOutRelationId($outRelationId) + { + $this->outRelationId = $outRelationId; + $this->royaltyDetailInfo['out_relation_id'] = $outRelationId; + } + + public function setSerialNo($serialNo) + { + $this->serialNo = $serialNo; + $this->royaltyDetailInfo['serial_no'] = $serialNo; + } + + public function setTransIn($transIn) + { + $this->transIn = $transIn; + $this->royaltyDetailInfo['trans_in'] = $transIn; + } + + public function setTransInType($transInType) + { + $this->transInType = $transInType; + $this->royaltyDetailInfo['trans_in_type'] = $transInType; + } + + public function setTransOut($transOut) + { + $this->transOut = $transOut; + $this->royaltyDetailInfo['trans_out'] = $transOut; + } + + public function setTransOutType($transOutType) + { + $this->transOutType = $transOutType; + $this->royaltyDetailInfo['trans_out_type'] = $transOutType; + } +} \ No newline at end of file diff --git a/plugins/alipay/inc/model/request/AlipayFundAccountQueryRequest.php b/plugins/alipay/inc/model/request/AlipayFundAccountQueryRequest.php new file mode 100644 index 0000000..55cbba4 --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayFundAccountQueryRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.fund.account.query"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayFundTransCommonQueryRequest.php b/plugins/alipay/inc/model/request/AlipayFundTransCommonQueryRequest.php new file mode 100644 index 0000000..992cbb8 --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayFundTransCommonQueryRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.fund.trans.common.query"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayFundTransToaccountTransferRequest.php b/plugins/alipay/inc/model/request/AlipayFundTransToaccountTransferRequest.php new file mode 100644 index 0000000..d34754e --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayFundTransToaccountTransferRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.fund.trans.toaccount.transfer"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayFundTransUniTransferRequest.php b/plugins/alipay/inc/model/request/AlipayFundTransUniTransferRequest.php new file mode 100644 index 0000000..5e69370 --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayFundTransUniTransferRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.fund.trans.uni.transfer"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipaySystemOauthTokenRequest.php b/plugins/alipay/inc/model/request/AlipaySystemOauthTokenRequest.php new file mode 100644 index 0000000..2acce50 --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipaySystemOauthTokenRequest.php @@ -0,0 +1,150 @@ +code = $code; + $this->apiParas["code"] = $code; + } + + public function getCode() + { + return $this->code; + } + + public function setGrantType($grantType) + { + $this->grantType = $grantType; + $this->apiParas["grant_type"] = $grantType; + } + + public function getGrantType() + { + return $this->grantType; + } + + public function setRefreshToken($refreshToken) + { + $this->refreshToken = $refreshToken; + $this->apiParas["refresh_token"] = $refreshToken; + } + + public function getRefreshToken() + { + return $this->refreshToken; + } + + public function getApiMethodName() + { + return "alipay.system.oauth.token"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayTradeCloseRequest.php b/plugins/alipay/inc/model/request/AlipayTradeCloseRequest.php new file mode 100644 index 0000000..d5c356e --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayTradeCloseRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.trade.close"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayTradeCreateRequest.php b/plugins/alipay/inc/model/request/AlipayTradeCreateRequest.php new file mode 100644 index 0000000..6171d30 --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayTradeCreateRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.trade.create"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayTradeFastpayRefundQueryRequest.php b/plugins/alipay/inc/model/request/AlipayTradeFastpayRefundQueryRequest.php new file mode 100644 index 0000000..b940b90 --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayTradeFastpayRefundQueryRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.trade.fastpay.refund.query"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayTradePagePayRequest.php b/plugins/alipay/inc/model/request/AlipayTradePagePayRequest.php new file mode 100644 index 0000000..add08b2 --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayTradePagePayRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.trade.page.pay"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayTradePrecreateRequest.php b/plugins/alipay/inc/model/request/AlipayTradePrecreateRequest.php new file mode 100644 index 0000000..dfa015c --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayTradePrecreateRequest.php @@ -0,0 +1,119 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.trade.precreate"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayTradeQueryRequest.php b/plugins/alipay/inc/model/request/AlipayTradeQueryRequest.php new file mode 100644 index 0000000..e5a99cc --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayTradeQueryRequest.php @@ -0,0 +1,119 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.trade.query"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayTradeRefundRequest.php b/plugins/alipay/inc/model/request/AlipayTradeRefundRequest.php new file mode 100644 index 0000000..8d8c8f9 --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayTradeRefundRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.trade.refund"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayTradeWapPayRequest.php b/plugins/alipay/inc/model/request/AlipayTradeWapPayRequest.php new file mode 100644 index 0000000..d8bf23f --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayTradeWapPayRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.trade.wap.pay"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayUserCertifyOpenCertifyRequest.php b/plugins/alipay/inc/model/request/AlipayUserCertifyOpenCertifyRequest.php new file mode 100644 index 0000000..ffadf33 --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayUserCertifyOpenCertifyRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.user.certify.open.certify"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayUserCertifyOpenInitializeRequest.php b/plugins/alipay/inc/model/request/AlipayUserCertifyOpenInitializeRequest.php new file mode 100644 index 0000000..370d3b1 --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayUserCertifyOpenInitializeRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.user.certify.open.initialize"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayUserCertifyOpenQueryRequest.php b/plugins/alipay/inc/model/request/AlipayUserCertifyOpenQueryRequest.php new file mode 100644 index 0000000..4ef8c9d --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayUserCertifyOpenQueryRequest.php @@ -0,0 +1,118 @@ +bizContent = $bizContent; + $this->apiParas["biz_content"] = $bizContent; + } + + public function getBizContent() + { + return $this->bizContent; + } + + public function getApiMethodName() + { + return "alipay.user.certify.open.query"; + } + + public function setNotifyUrl($notifyUrl) + { + $this->notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/request/AlipayUserInfoShareRequest.php b/plugins/alipay/inc/model/request/AlipayUserInfoShareRequest.php new file mode 100644 index 0000000..85e43b2 --- /dev/null +++ b/plugins/alipay/inc/model/request/AlipayUserInfoShareRequest.php @@ -0,0 +1,103 @@ +notifyUrl=$notifyUrl; + } + + public function getNotifyUrl() + { + return $this->notifyUrl; + } + + public function setReturnUrl($returnUrl) + { + $this->returnUrl=$returnUrl; + } + + public function getReturnUrl() + { + return $this->returnUrl; + } + + public function getApiParas() + { + return $this->apiParas; + } + + public function getTerminalType() + { + return $this->terminalType; + } + + public function setTerminalType($terminalType) + { + $this->terminalType = $terminalType; + } + + public function getTerminalInfo() + { + return $this->terminalInfo; + } + + public function setTerminalInfo($terminalInfo) + { + $this->terminalInfo = $terminalInfo; + } + + public function getProdCode() + { + return $this->prodCode; + } + + public function setProdCode($prodCode) + { + $this->prodCode = $prodCode; + } + + public function setApiVersion($apiVersion) + { + $this->apiVersion=$apiVersion; + } + + public function getApiVersion() + { + return $this->apiVersion; + } + + public function setNeedEncrypt($needEncrypt) + { + + $this->needEncrypt=$needEncrypt; + + } + + public function getNeedEncrypt() + { + return $this->needEncrypt; + } + +} diff --git a/plugins/alipay/inc/model/result/AlipayF2FPrecreateResult.php b/plugins/alipay/inc/model/result/AlipayF2FPrecreateResult.php new file mode 100644 index 0000000..846b200 --- /dev/null +++ b/plugins/alipay/inc/model/result/AlipayF2FPrecreateResult.php @@ -0,0 +1,44 @@ +response = $response; + } + + public function AlipayF2FPrecreateResult($response) + { + $this->__construct($response); + } + + public function setTradeStatus($tradeStatus) + { + $this->tradeStatus = $tradeStatus; + } + + public function getTradeStatus() + { + return $this->tradeStatus; + } + + public function setResponse($response) + { + $this->response = $response; + } + + public function getResponse() + { + return $this->response; + } +} + +?> \ No newline at end of file diff --git a/plugins/alipay/inc/model/result/AlipayF2FQueryResult.php b/plugins/alipay/inc/model/result/AlipayF2FQueryResult.php new file mode 100644 index 0000000..53caf44 --- /dev/null +++ b/plugins/alipay/inc/model/result/AlipayF2FQueryResult.php @@ -0,0 +1,44 @@ +response = $response; + } + + public function AlipayF2FPayResult($response) + { + $this->__construct($response); + } + + public function setTradeStatus($tradeStatus) + { + $this->tradeStatus = $tradeStatus; + } + + public function getTradeStatus() + { + return $this->tradeStatus; + } + + public function setResponse($response) + { + $this->response = $response; + } + + public function getResponse() + { + return $this->response; + } +} + +?> \ No newline at end of file diff --git a/plugins/alipay/inc/model/result/AlipayF2FRefundResult.php b/plugins/alipay/inc/model/result/AlipayF2FRefundResult.php new file mode 100644 index 0000000..5d9805d --- /dev/null +++ b/plugins/alipay/inc/model/result/AlipayF2FRefundResult.php @@ -0,0 +1,44 @@ +response = $response; + } + + public function AlipayF2FPayResult($response) + { + $this->__construct($response); + } + + public function setTradeStatus($tradeStatus) + { + $this->tradeStatus = $tradeStatus; + } + + public function getTradeStatus() + { + return $this->tradeStatus; + } + + public function setResponse($response) + { + $this->response = $response; + } + + public function getResponse() + { + return $this->response; + } +} + +?> \ No newline at end of file diff --git a/plugins/alipay/notify.php b/plugins/alipay/notify.php new file mode 100644 index 0000000..21b8a4a --- /dev/null +++ b/plugins/alipay/notify.php @@ -0,0 +1,46 @@ +writeLog(var_export($_POST,true)); +$verify_result = $alipaySevice->check($_POST); + +if($verify_result) {//验证成功 + //商户订单号 + $out_trade_no = daddslashes($_POST['out_trade_no']); + + //支付宝交易号 + $trade_no = daddslashes($_POST['trade_no']); + + //交易状态 + $trade_status = $_POST['trade_status']; + + //买家支付宝 + $buyer_id = daddslashes($_POST['buyer_id']); + + //交易金额 + $total_amount = $_POST['total_amount']; + + if($_POST['trade_status'] == 'TRADE_FINISHED') { + //退款日期超过可退款期限后(如三个月可退款),支付宝系统发送该交易状态通知 + } + else if ($_POST['trade_status'] == 'TRADE_SUCCESS') { + if($out_trade_no == TRADE_NO && round($total_amount,2)==round($order['money'],2) && $order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='".TRADE_NO."'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$trade_no',`endtime` ='$date',`buyer` ='$buyer_id',`date` =NOW() where `trade_no`='".TRADE_NO."'"); + processOrder($order); + } + } + } + + echo "success"; +} +else { + //验证失败 + echo "fail"; +} +?> \ No newline at end of file diff --git a/plugins/alipay/qrcode.php b/plugins/alipay/qrcode.php new file mode 100644 index 0000000..816273f --- /dev/null +++ b/plugins/alipay/qrcode.php @@ -0,0 +1,170 @@ +setOutTradeNo(TRADE_NO); +$qrPayRequestBuilder->setTotalAmount($order['money']); +$qrPayRequestBuilder->setSubject($ordername); + +// 调用qrPay方法获取当面付应答 +$qrPay = new AlipayTradeService($config); +$qrPayResult = $qrPay->qrPay($qrPayRequestBuilder); + +// 根据状态值进行业务处理 +$status = $qrPayResult->getTradeStatus(); +$response = $qrPayResult->getResponse(); +if($status == 'SUCCESS'){ + $code_url = $response->qr_code; +}elseif($status == 'FAILED'){ + sysmsg('支付宝创建订单二维码失败!['.$response->sub_code.']'.$response->sub_msg); +}else{ + print_r($response); + sysmsg('系统异常,状态未知!'); +} + +?> + + + + + + +支付宝扫码支付 - <?php echo $sitename?> + + + +
    +

    +支付宝扫码支付 +

    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +

    请使用支付宝扫一扫

    +

    扫描二维码完成支付

    +
    +
    +
    +
    +
    + +
    +
    +
    +
    +

    正在打开支付宝...

    +

    如果没有打开支付宝,请点此重新唤起

    +
    +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/plugins/alipay/refund.php b/plugins/alipay/refund.php new file mode 100644 index 0000000..bc2a8cd --- /dev/null +++ b/plugins/alipay/refund.php @@ -0,0 +1,29 @@ +setTradeNo($order['api_trade_no']); +$requestBuilder->setRefundAmount($order['realmoney']); + +// 调用退款接口 +$trade = new AlipayTradeService($config); +$refundResult = $trade->refund($requestBuilder); + +// 根据状态值进行业务处理 +$status = $refundResult->getTradeStatus(); +$response = $refundResult->getResponse(); +if($status == 'SUCCESS'){ + $result = ['code'=>0, 'trade_no'=>$response->trade_no, 'refund_fee'=>$response->refund_fee, 'refund_time'=>$response->gmt_refund_pay, 'buyer'=>$response->buyer_user_id]; +}elseif($status == 'FAILED'){ + $result = ['code'=>-1, 'msg'=>'['.$response->sub_code.']'.$response->sub_msg]; +}else{ + $result = ['code'=>-1, 'msg'=>'未知错误']; +} +return $result; diff --git a/plugins/alipay/return.php b/plugins/alipay/return.php new file mode 100644 index 0000000..09f485b --- /dev/null +++ b/plugins/alipay/return.php @@ -0,0 +1,44 @@ +writeLog(var_export($_POST,true)); +$verify_result = $alipaySevice->check($_GET); + +if($verify_result) {//验证成功 + //商户订单号 + $out_trade_no = daddslashes($_GET['out_trade_no']); + + //支付宝交易号 + $trade_no = daddslashes($_GET['trade_no']); + + //交易金额 + $total_amount = $_GET['total_amount']; + + if($out_trade_no == TRADE_NO && round($total_amount,2)==round($order['money'],2)){ + $url=creat_callback($order); + + if($order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='".TRADE_NO."'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$trade_no',`endtime` ='$date',`date` =NOW() where `trade_no`='".TRADE_NO."'"); + processOrder($order,false); + } + echo ''; + }else{ + echo ''; + } + }else{ + sysmsg('订单信息校验失败'); + } +} +else { + //验证失败 + sysmsg('支付宝返回验证失败!'); +} +?> \ No newline at end of file diff --git a/plugins/alipay/submit.php b/plugins/alipay/submit.php new file mode 100644 index 0000000..673f1d3 --- /dev/null +++ b/plugins/alipay/submit.php @@ -0,0 +1,45 @@ +window.location.href='/submit2.php?typeid={$order['type']}&trade_no={$trade_no}';";exit; +} +if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')!==false){ + include(SYSTEM_ROOT.'pages/wxopen.php'); + exit; +} + +if(in_array('3',$channel['apptype']) && !in_array('1',$channel['apptype']) && !in_array('2',$channel['apptype'])){ + echo ""; +}else{ + +if(!empty($conf['localurl_alipay']) && !strpos($conf['localurl_alipay'],$_SERVER['HTTP_HOST'])){ + echo "";exit; +} + +if(checkmobile()==true && in_array('2',$channel['apptype'])){ + require_once(PAY_ROOT."inc/model/builder/AlipayTradeWapPayContentBuilder.php"); + require_once(PAY_ROOT."inc/AlipayTradeService.php"); + + // + $payRequestBuilder = new AlipayTradeWapPayContentBuilder(); + $payRequestBuilder->setSubject($ordername); + $payRequestBuilder->setTotalAmount($order['money']); + $payRequestBuilder->setOutTradeNo($trade_no); + + $aop = new AlipayTradeService($config); + echo $aop->wapPay($payRequestBuilder); +}else{ + require_once(PAY_ROOT."inc/model/builder/AlipayTradePagePayContentBuilder.php"); + require_once(PAY_ROOT."inc/AlipayTradeService.php"); + + // + $payRequestBuilder = new AlipayTradePagePayContentBuilder(); + $payRequestBuilder->setSubject($ordername); + $payRequestBuilder->setTotalAmount($order['money']); + $payRequestBuilder->setOutTradeNo($trade_no); + + $aop = new AlipayTradeService($config); + echo $aop->pagePay($payRequestBuilder); +} +} \ No newline at end of file diff --git a/plugins/codepay/config.ini b/plugins/codepay/config.ini new file mode 100644 index 0000000..f8b1626 --- /dev/null +++ b/plugins/codepay/config.ini @@ -0,0 +1,21 @@ +[config] +;支付插件英文名称,需和目录名称一致,不能有重复 +name = "codepay" + +;支付插件显示名称 +showname = "码支付" + +;支付插件作者 +author = "码支付" + +;支付插件作者链接 +link = "https://codepay.fateqq.com/" + +;支付插件支持的支付方式,多种方式用英文,隔开,可选的有alipay,qqpay,wxpay,bank +types = "alipay,qqpay,wxpay" + +;支付插件要求传入的参数以及参数显示名称,可选的有appid,appkey,appsecret,appurl,appmchid +inputs = "appid:商户ID,appkey:商户密钥" + +;支付插件要求传入的支付方式参数 +select = "" \ No newline at end of file diff --git a/plugins/codepay/inc/codepay_config.php b/plugins/codepay/inc/codepay_config.php new file mode 100644 index 0000000..bf3b155 --- /dev/null +++ b/plugins/codepay/inc/codepay_config.php @@ -0,0 +1,33 @@ + $val) { + if ($val == '') continue; + if ($key != 'sign') { + if ($sign != '') { + $sign .= "&"; + $urls .= "&"; + } + $sign .= "$key=$val"; //拼接为url参数形式 + $urls .= "$key=" . urlencode($val); //拼接为url参数形式 + } +} + +if (!$_POST['pay_no'] || md5($sign . $codepay_config['key']) != $_POST['sign']) { //不合法的数据 KEY密钥为你的密钥 + exit('fail'); +} else { //合法的数据 + + $out_trade_no = daddslashes($_POST['param']); + + //流水号 + $trade_no = daddslashes($_POST['pay_no']); + + $price = (float)$_POST['price']; + + if($out_trade_no == TRADE_NO && round($price,2)==round($order['money'],2) && $order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='$out_trade_no'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$trade_no',`endtime` ='$date',`date` =NOW() where `trade_no`='$out_trade_no'"); + processOrder($order); + } + } + + exit('success'); +} + +?> \ No newline at end of file diff --git a/plugins/codepay/qrcode.php b/plugins/codepay/qrcode.php new file mode 100644 index 0000000..1f28680 --- /dev/null +++ b/plugins/codepay/qrcode.php @@ -0,0 +1,234 @@ +getColumn("SELECT name FROM pre_type WHERE id='{$order['type']}' LIMIT 1"); + +if ($typename == 'wxpay') { + $typeName = '微信'; + $type = 3; +} else if ($typename == 'qqpay' || $typename == 'tenpay') { + $typeName = 'QQ'; + $type = 2; +} else { + $type = 1; + $typeName = '支付宝'; +} + +$price = $order['money']; +$param = TRADE_NO; + +$pay_id = $clientip; +$data = array( + "id" => $codepay_config['id'],//平台ID号 + "type" => $type,//支付方式 + "price" => $price,//原价 + "pay_id" => $pay_id, //可以是用户ID,站内商户订单号,用户名 + "param" => $param,//自定义参数 +// "https" => 1,//启用HTTPS + "act" => $codepay_config['act'], + "outTime" => $codepay_config['outTime'],//二维码超时设置 + "page" => $codepay_config['page'],//付款页面展示方式 + "return_url" => $siteurl.'pay/codepay/return/'.TRADE_NO.'/',//付款后附带加密参数跳转到该页面 + "notify_url" => $conf['localurl'].'pay/codepay/notify/'.TRADE_NO.'/',//付款后通知该页面处理业务 + "style" => $codepay_config['style'],//付款页面风格 + "user_ip" => $clientip,//用户IP + "out_trade_no" => $param,//单号去重复 + "createTime" => time(),//服务器时间 + "qrcode_url" => $codepay_config['qrcode_url'],//本地化二维码 + "chart" => strtolower('utf-8')//字符编码方式 + //其他业务参数根据在线开发文档,添加参数.文档地址:https://codepay.fateqq.com/apiword/ + //如"参数名"=>"参数值" +); +function create_link($params,$codepay_key,$host=""){ + ksort($params); //重新排序$data数组 + reset($params); //内部指针指向数组中的第一个元素 + $sign = ''; + $urls = ''; + foreach ($params AS $key => $val) { + if ($val == '') continue; + if ($key != 'sign') { + if ($sign != '') { + $sign .= "&"; + $urls .= "&"; + } + $sign .= "$key=$val"; //拼接为url参数形式 + $urls .= "$key=" . urlencode($val); //拼接为url参数形式 + } + } + + $key = md5($sign . $codepay_key);//替换为自己的密钥 + $query = $urls . '&sign=' . $key; //创建订单所需的参数 + $apiHost=$host?$host:"http://api2.xiuxiu888.com/creat_order/?"; + $url = $apiHost.$query; //支付页面 + return array("url"=>$url,"query"=>$query,"sign"=>$sign,"param"=>$urls); +} +$back=create_link($data,$codepay_config['key']); + +$user_data = array( + "return_url" => $siteurl.'pay/codepay/return/'.TRADE_NO.'/', + "type" => $type, + "outTime" => $codepay_config["outTime"], + "codePay_id" => $codepay_config["id"], + "out_trade_no" => $param, + "price" => $price, + 'money'=>$price, + 'order_id'=>$param, + "subject"=>$row['name'] + ); //传给网页JS去执行 + + +$user_data["qrcode_url"] = $codepay_config["qrcode_url"]; + +//中间那log 默认为8秒后隐藏 +//改为自己的替换img目录下的use_开头的图片 你要保证你的二维码遮挡不会影响扫码 +//二维码容错率决定你能遮挡多少部分 +$user_data["logShowTime"] = $user_data["qrcode_url"]?1:8*1000; + + +$codepay_json = get_curl($back['url']); + +if(empty($codepay_json)){ + $data['call']="callback"; + $data['page']="3"; + $back=create_link($data,$codepay_config['key']); + $codepay_html=''; +}else{ + $codepay_data = json_decode($codepay_json); + $qr = $codepay_data ? $codepay_data->qrcode : ''; + $user_data["money"]=$codepay_data&&$codepay_data->money ? $codepay_data->money : $price; + $codepay_html=""; +} + +?> + + + + + + + + + + <?php echo $typeName ?>扫码支付 + + + + + + +
    +

    + +

    + +
    +
    请务必规定时间内支付下面显示的金额 +
    + + +
    +
    + +
    + 加载中... + +
    +
    + + +
    + + +
    +

    二维码过期时间

    + 0时 + 0分 + 0秒 +
    + +
    +
    +
    +

    请使用扫一扫

    +

    扫描二维码完成支付

    +

    +
    +
    + +
    + + +
    + +
    +
    + + +
    +
    +
    +

    手机用户可保存上方二维码到手机中

    +

    扫一扫中选择“相册”即可

    +

    +
    +
    + +
    + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/codepay/return.php b/plugins/codepay/return.php new file mode 100644 index 0000000..a396b21 --- /dev/null +++ b/plugins/codepay/return.php @@ -0,0 +1,45 @@ + $val) { + if ($val == '') continue; + if ($key != 'sign') { + if ($sign != '') { + $sign .= "&"; + $urls .= "&"; + } + $sign .= "$key=$val"; //拼接为url参数形式 + $urls .= "$key=" . urlencode($val); //拼接为url参数形式 + } +} +if (!$_GET['pay_no'] || md5($sign . $codepay_config['key']) != $_GET['sign']) { //不合法的数据 KEY密钥为你的密钥 + sysmsg('验证失败!'); +} else { //合法的数据 + $out_trade_no = daddslashes($_GET['param']); + //流水号 + $trade_no = daddslashes($_GET['pay_no']); + $price = (float)$_GET['price']; + + if($out_trade_no == TRADE_NO && round($price,2)==round($order['money'],2)){ + $url=creat_callback($order); + if($order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='$out_trade_no'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$trade_no',`endtime` ='$date',`date` =NOW() where `trade_no`='$out_trade_no'"); + processOrder($order,false); + } + echo ''; + }else{ + echo ''; + } + }else{ + sysmsg('订单信息校验失败'); + } +} +?> \ No newline at end of file diff --git a/plugins/codepay/submit.php b/plugins/codepay/submit.php new file mode 100644 index 0000000..52febf3 --- /dev/null +++ b/plugins/codepay/submit.php @@ -0,0 +1,5 @@ +window.location.href='/pay/codepay/qrcode/{$trade_no}/?sitename={$sitename}';"; + diff --git a/plugins/epay/config.ini b/plugins/epay/config.ini new file mode 100644 index 0000000..bda8320 --- /dev/null +++ b/plugins/epay/config.ini @@ -0,0 +1,21 @@ +[config] +;支付插件英文名称,需和目录名称一致,不能有重复 +name = "epay" + +;支付插件显示名称 +showname = "彩虹易支付" + +;支付插件作者 +author = "彩虹" + +;支付插件作者链接 +link = "http://blog.cccyun.cc/" + +;支付插件支持的支付方式,多种方式用英文,隔开,可选的有alipay,qqpay,wxpay,bank +types = "alipay,qqpay,wxpay,bank" + +;支付插件要求传入的参数以及参数显示名称,可选的有appid,appkey,appsecret,appurl,appmchid +inputs = "appurl:接口地址,appid:商户ID,appkey:商户密钥" + +;支付插件要求传入的支付方式参数 +select = "" \ No newline at end of file diff --git a/plugins/epay/inc/epay.config.php b/plugins/epay/inc/epay.config.php new file mode 100644 index 0000000..56f6487 --- /dev/null +++ b/plugins/epay/inc/epay.config.php @@ -0,0 +1,28 @@ + \ No newline at end of file diff --git a/plugins/epay/inc/epay_core.function.php b/plugins/epay/inc/epay_core.function.php new file mode 100644 index 0000000..e25bc11 --- /dev/null +++ b/plugins/epay/inc/epay_core.function.php @@ -0,0 +1,168 @@ +$val) { + $arg.=$key."=".$val."&"; + } + //去掉最后一个&字符 + $arg = substr($arg,0,-1); + + return $arg; +} +/** + * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码 + * @param $para 需要拼接的数组 + * return 拼接完成以后的字符串 + */ +function createLinkstringUrlencode($para) { + $arg = ""; + foreach ($para as $key=>$val) { + $arg.=$key."=".urlencode($val)."&"; + } + //去掉最后一个&字符 + $arg = substr($arg,0,-1); + + return $arg; +} +/** + * 除去数组中的空值和签名参数 + * @param $para 签名参数组 + * return 去掉空值与签名参数后的新签名参数组 + */ +function paraFilter($para) { + $para_filter = array(); + foreach ($para as $key=>$val) { + if($key == "sign" || $key == "sign_type" || $val == "")continue; + else $para_filter[$key] = $para[$key]; + } + return $para_filter; +} +/** + * 对数组排序 + * @param $para 排序前的数组 + * return 排序后的数组 + */ +function argSort($para) { + ksort($para); + reset($para); + return $para; +} +/** + * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库) + * 注意:服务器需要开通fopen配置 + * @param $word 要写入日志里的文本内容 默认值:空值 + */ +function logResult($word='') { + $fp = fopen("log.txt","a"); + flock($fp, LOCK_EX) ; + fwrite($fp,"执行日期:".strftime("%Y%m%d%H%M%S",time())."\n".$word."\n"); + flock($fp, LOCK_UN); + fclose($fp); +} + +/** + * 远程获取数据,POST模式 + * 注意: + * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了 + * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\\cacert.pem' + * @param $url 指定URL完整路径地址 + * @param $cacert_url 指定当前工作目录绝对路径 + * @param $para 请求的数据 + * @param $input_charset 编码格式。默认值:空值 + * return 远程输出的数据 + */ +function getHttpResponsePOST($url, $cacert_url, $para, $input_charset = '') { + + if (trim($input_charset) != '') { + $url = $url."_input_charset=".$input_charset; + } + $curl = curl_init($url); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//SSL证书认证 + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//严格认证 + curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头 + curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果 + curl_setopt($curl,CURLOPT_POST,true); // post传输数据 + curl_setopt($curl,CURLOPT_POSTFIELDS,$para);// post传输数据 + $responseText = curl_exec($curl); + //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容 + curl_close($curl); + + return $responseText; +} + +/** + * 远程获取数据,GET模式 + * 注意: + * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了 + * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\\cacert.pem' + * @param $url 指定URL完整路径地址 + * @param $cacert_url 指定当前工作目录绝对路径 + * return 远程输出的数据 + */ +function getHttpResponseGET($url,$cacert_url) { + $curl = curl_init($url); + curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头 + curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果 + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//SSL证书认证 + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//严格认证 + $responseText = curl_exec($curl); + //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容 + curl_close($curl); + + return $responseText; +} + +/** + * 实现多种字符编码方式 + * @param $input 需要编码的字符串 + * @param $_output_charset 输出的编码格式 + * @param $_input_charset 输入的编码格式 + * return 编码后的字符串 + */ +function charsetEncode($input,$_output_charset ,$_input_charset) { + $output = ""; + if(!isset($_output_charset) )$_output_charset = $_input_charset; + if($_input_charset == $_output_charset || $input ==null ) { + $output = $input; + } elseif (function_exists("mb_convert_encoding")) { + $output = mb_convert_encoding($input,$_output_charset,$_input_charset); + } elseif(function_exists("iconv")) { + $output = iconv($_input_charset,$_output_charset,$input); + } else die("sorry, you have no libs support for charset change."); + return $output; +} +/** + * 实现多种字符解码方式 + * @param $input 需要解码的字符串 + * @param $_output_charset 输出的解码格式 + * @param $_input_charset 输入的解码格式 + * return 解码后的字符串 + */ +function charsetDecode($input,$_input_charset ,$_output_charset) { + $output = ""; + if(!isset($_input_charset) )$_input_charset = $_input_charset ; + if($_input_charset == $_output_charset || $input ==null ) { + $output = $input; + } elseif (function_exists("mb_convert_encoding")) { + $output = mb_convert_encoding($input,$_output_charset,$_input_charset); + } elseif(function_exists("iconv")) { + $output = iconv($_input_charset,$_output_charset,$input); + } else die("sorry, you have no libs support for charset changes."); + return $output; +} +?> \ No newline at end of file diff --git a/plugins/epay/inc/epay_md5.function.php b/plugins/epay/inc/epay_md5.function.php new file mode 100644 index 0000000..52c6a14 --- /dev/null +++ b/plugins/epay/inc/epay_md5.function.php @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/plugins/epay/inc/epay_notify.class.php b/plugins/epay/inc/epay_notify.class.php new file mode 100644 index 0000000..7df4d84 --- /dev/null +++ b/plugins/epay/inc/epay_notify.class.php @@ -0,0 +1,117 @@ +alipay_config = $alipay_config; + $this->http_verify_url = $this->alipay_config['apiurl'].'api.php?'; + } + function AlipayNotify($alipay_config) { + $this->__construct($alipay_config); + } + /** + * 针对notify_url验证消息是否是支付宝发出的合法消息 + * @return 验证结果 + */ + function verifyNotify(){ + if(empty($_GET)) {//判断POST来的数组是否为空 + return false; + } + else { + //生成签名结果 + $isSign = $this->getSignVeryfy($_GET, $_GET["sign"]); + //获取支付宝远程服务器ATN结果(验证是否是支付宝发来的消息) + $responseTxt = 'true'; + //$responseTxt = $this->getResponse($_GET["trade_no"]); + + //验证 + //$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 + //isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 + if (preg_match("/true$/i",$responseTxt) && $isSign) { + return true; + } else { + return false; + } + } + } + + /** + * 针对return_url验证消息是否是支付宝发出的合法消息 + * @return 验证结果 + */ + function verifyReturn(){ + if(empty($_GET)) {//判断POST来的数组是否为空 + return false; + } + else { + //生成签名结果 + $isSign = $this->getSignVeryfy($_GET, $_GET["sign"]); + //获取支付宝远程服务器ATN结果(验证是否是支付宝发来的消息) + $responseTxt = 'true'; + //$responseTxt = $this->getResponse($_GET["trade_no"]); + + //验证 + //$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 + //isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 + if (preg_match("/true$/i",$responseTxt) && $isSign) { + return true; + } else { + return false; + } + } + } + + /** + * 获取返回时的签名验证结果 + * @param $para_temp 通知返回来的参数数组 + * @param $sign 返回的签名结果 + * @return 签名验证结果 + */ + function getSignVeryfy($para_temp, $sign) { + //除去待签名参数数组中的空值和签名参数 + $para_filter = paraFilter($para_temp); + + //对待签名参数数组排序 + $para_sort = argSort($para_filter); + + //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 + $prestr = createLinkstring($para_sort); + + $isSgin = false; + $isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']); + + return $isSgin; + } + + /** + * 获取远程服务器ATN结果,验证返回URL + * @param $notify_id 通知校验ID + * @return 服务器ATN结果 + * 验证结果集: + * invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空 + * true 返回正确信息 + * false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟 + */ + function getResponse($trade_no) { + $partner = trim($this->alipay_config['partner']); + $veryfy_url = $this->http_verify_url."act=order&pid=" . $partner . "&trade_no=" . $trade_no; + $responseTxt = getHttpResponseGET($veryfy_url); + $arr = json_encode($responseTxt,true); + if($arr['status']==1){ + return 'true'; + }else{ + return 'false'; + } + } +} +?> diff --git a/plugins/epay/inc/epay_submit.class.php b/plugins/epay/inc/epay_submit.class.php new file mode 100644 index 0000000..11280a2 --- /dev/null +++ b/plugins/epay/inc/epay_submit.class.php @@ -0,0 +1,114 @@ +alipay_config = $alipay_config; + $this->alipay_gateway_new = $this->alipay_config['apiurl'].'submit.php?'; + $this->alipay_qrcode = $this->alipay_config['apiurl'].'qrcode.php?'; + } + function AlipaySubmit($alipay_config) { + $this->__construct($alipay_config); + } + + /** + * 生成签名结果 + * @param $para_sort 已排序要签名的数组 + * return 签名结果字符串 + */ + function buildRequestMysign($para_sort) { + //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 + $prestr = createLinkstring($para_sort); + + $mysign = md5Sign($prestr, $this->alipay_config['key']); + + return $mysign; + } + + /** + * 生成要请求给支付宝的参数数组 + * @param $para_temp 请求前的参数数组 + * @return 要请求的参数数组 + */ + function buildRequestPara($para_temp) { + //除去待签名参数数组中的空值和签名参数 + $para_filter = paraFilter($para_temp); + + //对待签名参数数组排序 + $para_sort = argSort($para_filter); + + //生成签名结果 + $mysign = $this->buildRequestMysign($para_sort); + + //签名结果与签名方式加入请求提交参数组中 + $para_sort['sign'] = $mysign; + $para_sort['sign_type'] = strtoupper(trim($this->alipay_config['sign_type'])); + + return $para_sort; + } + + /** + * 生成要请求给支付宝的参数数组 + * @param $para_temp 请求前的参数数组 + * @return 要请求的参数数组字符串 + */ + function buildRequestParaToString($para_temp) { + //待请求参数数组 + $para = $this->buildRequestPara($para_temp); + + //把参数组中所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码 + $request_data = createLinkstringUrlencode($para); + + return $request_data; + } + + /** + * 建立请求,以表单HTML形式构造(默认) + * @param $para_temp 请求参数数组 + * @param $method 提交方式。两个值可选:post、get + * @param $button_name 确认按钮显示文字 + * @return 提交表单HTML文本 + */ + function buildRequestForm($para_temp, $method='POST', $button_name='正在跳转') { + //待请求参数数组 + $para = $this->buildRequestPara($para_temp); + + $sHtml = "
    "; + foreach ($para as $key=>$val) { + $sHtml.= ""; + } + + //submit按钮控件请不要含有name属性 + $sHtml = $sHtml."
    "; + + $sHtml = $sHtml.""; + + return $sHtml; + } + + /** + * 建立请求,以URL形式构造 + * @param $para_temp 请求参数数组 + * @return 提交的URL链接 + */ + function buildRequestUrl($para_temp) { + //待请求参数数组字符串 + $request_data = $this->buildRequestPara($para_temp); + + //远程获取数据 + $url = $this->alipay_qrcode.http_build_query($request_data); + + return $url; + } +} +?> \ No newline at end of file diff --git a/plugins/epay/notify.php b/plugins/epay/notify.php new file mode 100644 index 0000000..8b0d68e --- /dev/null +++ b/plugins/epay/notify.php @@ -0,0 +1,41 @@ +verifyNotify(); + +if($verify_result) {//验证成功 + //商户订单号 + $out_trade_no = daddslashes($_GET['out_trade_no']); + + //支付宝交易号 + $trade_no = daddslashes($_GET['trade_no']); + + //交易状态 + $trade_status = $_GET['trade_status']; + + //交易金额 + $money = $_GET['money']; + + if ($_GET['trade_status'] == 'TRADE_SUCCESS') { + //付款完成后,支付宝系统发送该交易状态通知 + if($out_trade_no == TRADE_NO && round($money,2)==round($order['money'],2) && $order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='$out_trade_no'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$trade_no',`endtime` ='$date',`date` =NOW() where `trade_no`='$out_trade_no'"); + processOrder($order); + } + } + } + + echo "success"; +} +else { + //验证失败 + echo "fail"; +} + +?> \ No newline at end of file diff --git a/plugins/epay/return.php b/plugins/epay/return.php new file mode 100644 index 0000000..c92964a --- /dev/null +++ b/plugins/epay/return.php @@ -0,0 +1,50 @@ +verifyReturn(); +if($verify_result) { + //商户订单号 + $out_trade_no = daddslashes($_GET['out_trade_no']); + + //支付宝交易号 + $trade_no = daddslashes($_GET['trade_no']); + + //交易状态 + $trade_status = $_GET['trade_status']; + + //交易金额 + $money = $_GET['money']; + + if($_GET['trade_status'] == 'TRADE_SUCCESS') { + if($out_trade_no == TRADE_NO && round($money,2)==round($order['money'],2)){ + $url=creat_callback($order); + if($order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='$out_trade_no'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$trade_no',`endtime` ='$date',`date` =NOW() where `trade_no`='$out_trade_no'"); + processOrder($order,false); + } + echo ''; + }else{ + echo ''; + } + }else{ + sysmsg('订单信息校验失败'); + } + } + else { + echo "trade_status=".$_GET['trade_status']; + } +} +else { + //验证失败 + echo('验证失败!'); +} + +?> \ No newline at end of file diff --git a/plugins/epay/submit.php b/plugins/epay/submit.php new file mode 100644 index 0000000..8b64951 --- /dev/null +++ b/plugins/epay/submit.php @@ -0,0 +1,18 @@ + trim($alipay_config['partner']), + "type" => $order['typename'], + "notify_url" => $conf['localurl'].'pay/epay/notify/'.TRADE_NO.'/', + "return_url" => $siteurl.'pay/epay/return/'.TRADE_NO.'/', + "out_trade_no" => $trade_no, + "name" => $order['name'], + "money" => $order['money'] +); +//建立请求 +$alipaySubmit = new AlipaySubmit($alipay_config); +$html_text = $alipaySubmit->buildRequestForm($parameter); +echo $html_text; diff --git a/plugins/jdpay/config.ini b/plugins/jdpay/config.ini new file mode 100644 index 0000000..1201b9a --- /dev/null +++ b/plugins/jdpay/config.ini @@ -0,0 +1,21 @@ +[config] +;支付插件英文名称,需和目录名称一致,不能有重复 +name = "jdpay" + +;支付插件显示名称 +showname = "京东支付" + +;支付插件作者 +author = "京东" + +;支付插件作者链接 +link = "https://www.jdpay.com/" + +;支付插件支持的支付方式,多种方式用英文,隔开,可选的有alipay,qqpay,wxpay,bank +types = "jdpay" + +;支付插件要求传入的参数以及参数显示名称,可选的有appid,appkey,appsecret,appurl,appmchid +inputs = "appid:商户号,appkey:商户DES密钥" + +;支付插件要求传入的支付方式参数 +select = "" \ No newline at end of file diff --git a/plugins/jdpay/inc/cert/config.ini b/plugins/jdpay/inc/cert/config.ini new file mode 100644 index 0000000..d16fa09 --- /dev/null +++ b/plugins/jdpay/inc/cert/config.ini @@ -0,0 +1,46 @@ +[wepay] +;======================= 商户开通的商户号 +merchantNum=22294531 + +;======================= 商户DES密钥 +desKey=ta4E/aspLA3lgFGKmNDNRYU92RkZ4w2t + +;=======================京东支付在线支付PC端请求地址 +serverPayUrl=https://wepay.jd.com/jdpay/saveOrder + +;=======================京东支付在线支付H5端请求地址 +;serverPayUrl=https://h5pay.jd.com/jdpay/saveOrder + +;=======================京东查询服务地址 +serverQueryUrl=https://paygate.jd.com/service/query + +;=======================退款服务地址 +refundUrl=https://paygate.jd.com/service/refund + +;=======================callback地址 +callbackUrl=http://localhost/jdPay2Demo/com/jdjr/pay/demo/action/CallBack.php + +;=======================notify地址 +notifyUrl=http://localhost/jdPay2Demo/com/jdjr/pay/demo/action/AsnyNotify.php + +;======================扫码创建订单 +uniorderUrl= https://paygate.jd.com/service/uniorder + +;======================交易号查退款 +queryRefundUrl=https://paygate.jd.com/service/queryRefund + +;==========撤销地址 +revokeUrl=https://paygate.jd.com/service/revoke + +;=========付款码支付 +fkmPayUrl=https://paygate.jd.com/service/fkmPay + +;=========用户关系查询地址 +getUserRelationUrl=https://paygate.jd.com/service/getUserRelation + +;=========用户关系解绑地址 +cancelUserRelationUrl=https://paygate.jd.com/service/cancelUserRelation + +;=========白条策略查询地址 +queryBaiTiaoFQUrl=https://paygate.jd.com/service/queryBaiTiaoFQ + diff --git a/plugins/jdpay/inc/cert/seller_rsa_private_key.pem b/plugins/jdpay/inc/cert/seller_rsa_private_key.pem new file mode 100644 index 0000000..7787101 --- /dev/null +++ b/plugins/jdpay/inc/cert/seller_rsa_private_key.pem @@ -0,0 +1,18 @@ +-----BEGIN PRIVATE KEY----- +MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALXf6twUqul1TATO ++5nA66p2wjnRd+g96IXpfV6Sf8WXxwizGj+L19LQYRBXpZHmRh82prJ48d0FcHbo +CiN8pKutnuZrrKYhvORysOc5bVli0hcCn1TfYDoUWJ1UhjUQloqZKWjUz6LV9QY6 +bIZ1W4+Hmw6HK1bfFwUq0WzIGkJNAgMBAAECgYBlIFQeev9tP+M86TnMjBB9f/sO +2wGpCIM5slIbO6n/3By3IZ7+pmsitOrDg3h0X22t/V1C7yzMkDGwa+T3Rl7ogwc4 +UNVj0ZQorOTx3OEPx3nP1yT3zmJ9djKaHKAmee4XmhQHdqqIuMT2XQaqatBzcsnP ++Jnw/WVOsIJIqMeFAQJBAP9yq4hE+UfM/YSXZ5JR33k9RolUUq8S/elmeJIDo/3N +2qDmzLjOr9iEZHxioc8JOxubtZ0BxA+NdfKz4v0BSpkCQQC2RIrAPRj9vOk6GfT9 +W1hbJ4GdnzTb+4vp3RDQQ3x9JGXzWFlg8xJT1rNgM8R95Gkxn3KGnYHJQTLlCsIy +2FnVAkAWXolM3pVhxz6wHL4SHx9Ns6L4payz7hrUFIgcaTs0H5G0o2FsEZVuhXFz +PwPiaHGHomQOAriTkBSzEzOeaj2JAkEAtYUFefZfETQ2QbrgFgIGuKFboJKRnhOi +f8G9oOvU6vx43CS8vqTVN9G2yrRDl+0GJnlZIV9zhe78tMZGKUT2EQJAHQawBKGl +XlMe49Fo24yOy5DvKeohobjYqzJAtbqaAH7iIQTpOZx91zUcL/yG4dWS6r+wGO7Z +1RKpupOJLKG3lA== +-----END PRIVATE KEY----- + + diff --git a/plugins/jdpay/inc/cert/wy_rsa_public_key.pem b/plugins/jdpay/inc/cert/wy_rsa_public_key.pem new file mode 100644 index 0000000..20de941 --- /dev/null +++ b/plugins/jdpay/inc/cert/wy_rsa_public_key.pem @@ -0,0 +1,6 @@ +-----BEGIN PUBLIC KEY----- +MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCKE5N2xm3NIrXON8Zj19GNtLZ8 +xwEQ6uDIyrS3S03UhgBJMkGl4msfq4Xuxv6XUAN7oU1XhV3/xtabr9rXto4Ke3d6 +WwNbxwXnK5LSgsQc1BhT5NcXHXpGBdt7P8NMez5qGieOKqHGvT0qvjyYnYA29a8Z +4wzNR7vAVHp36uD5RwIDAQAB +-----END PUBLIC KEY----- diff --git a/plugins/jdpay/inc/common/HttpUtils.php b/plugins/jdpay/inc/common/HttpUtils.php new file mode 100644 index 0000000..7c3256a --- /dev/null +++ b/plugins/jdpay/inc/common/HttpUtils.php @@ -0,0 +1,34 @@ +"; + //error_log("=========>sourceSignString:".$sourceSignString, 0); + $sha256SourceSignString = hash ( "sha256", $sourceSignString); + //error_log($sha256SourceSignString, 0); + //echo "sha256SourceSignString=".htmlspecialchars($sha256SourceSignString)."
    "; + return RSAUtils::encryptByPrivateKey ($sha256SourceSignString); + } + + public static function sign($params,$unSignKeyList) { + ksort($params); + $sourceSignString = SignUtil::signString ( $params, $unSignKeyList ); + //error_log($sourceSignString, 0); + $sha256SourceSignString = hash ( "sha256", $sourceSignString); + //error_log($sha256SourceSignString, 0); + return RSAUtils::encryptByPrivateKey ($sha256SourceSignString); + } + + public static function signString($data, $unSignKeyList) { + $linkStr=""; + $isFirst=true; + ksort($data); + foreach($data as $key=>$value){ + if($value=="" || in_array($key, $unSignKeyList)) continue; + $linkStr.=$key."=".$value."&"; + } + return substr($linkStr,0,-1); + } +} diff --git a/plugins/jdpay/inc/common/TDESUtil.php b/plugins/jdpay/inc/common/TDESUtil.php new file mode 100644 index 0000000..6056586 --- /dev/null +++ b/plugins/jdpay/inc/common/TDESUtil.php @@ -0,0 +1,59 @@ + + * 补位后 byte[] = 描述有效数据长度(int)的byte[]+原始数据byte[]+补位byte[] + * + * @param + * sourceData 元数据字符串 + * @return 返回3DES加密后的16进制表示的字符串 + */ + public static function encrypt2HexStr($keys, $sourceData) { + $length = strlen($sourceData); + $result = ''; + for($i = 0; $i < 4; $i ++) { + $shift = (4 - 1 - $i) * 8; + $result .= chr(($length >> $shift) & 0x000000FF); + } + $result .= $sourceData; + $add = 8 - ($length+4) % 8; + if($add>0){ + for($i=0; $i<$add; $i++){ + $result .= chr(0); + } + } + $desdata = self::encrypt( $result, $keys ); + return bin2hex( $desdata ); + } + + /** + * 3DES 解密 进行了补位的16进制表示的字符串数据 + * + * @return + * + */ + public static function decrypt4HexStr($keys, $data) { + $unDesResult = self::decrypt(hex2bin($data),$keys); + + $length=0; + for($i = 0; $i < 4; $i ++) { + $shift = (4 - 1 - $i) * 8; + $length += (ord($unDesResult[$i]) & 0x000000FF) << $shift; + } + $result = substr($unDesResult, 4, $length); + + return $result; + } + + // 加密算法 + public static function encrypt($input, $key) { + return openssl_encrypt($input, 'des-ede3', $key, OPENSSL_NO_PADDING, ""); + } + // 解密算法 + public static function decrypt($encrypted, $key) { + return openssl_decrypt($encrypted, 'des-ede3', $key, OPENSSL_NO_PADDING, ""); + } +} diff --git a/plugins/jdpay/inc/common/XMLUtil.php b/plugins/jdpay/inc/common/XMLUtil.php new file mode 100644 index 0000000..4581b38 --- /dev/null +++ b/plugins/jdpay/inc/common/XMLUtil.php @@ -0,0 +1,123 @@ +createElement("jdpay"); + $item = $dom->appendChild($item); + } + + foreach ($arr as $key=>$val){ + $itemx = $dom->createElement(is_string($key)?$key:"item"); + $itemx = $item->appendChild($itemx); + if (!is_array($val)){ + $text = $dom->createTextNode($val); + $text = $itemx->appendChild($text); + + }else { + XMLUtil::arrtoxml($val,$dom,$itemx); + } + } + return $dom; + } + + public static function xmlToString($dom){ + $xmlStr = $dom->saveXML(); + $xmlStr = str_replace("\r", "", $xmlStr); + $xmlStr = str_replace("\n", "", $xmlStr); + $xmlStr = str_replace("\t", "", $xmlStr); + $xmlStr = preg_replace("/>\s+<", $xmlStr); + $xmlStr = preg_replace("/\s+\/>/", "/>", $xmlStr); + $xmlStr = str_replace("=utf-8", "=UTF-8", $xmlStr); + return $xmlStr; + } + + public static function encryptReqXml($param){ + $dom = XMLUtil::arrtoxml($param); + $xmlStr = XMLUtil::xmlToString($dom); + //echo "源串:".htmlspecialchars($xmlStr)."
    "; + $sha256SourceSignString = hash("sha256", $xmlStr); + //echo "摘要:".$sha256SourceSignString."
    "; + $sign = RSAUtils::encryptByPrivateKey($sha256SourceSignString); + $rootDom = $dom->getElementsByTagName("jdpay"); + $signDom = $dom->createElement("sign"); + $signDom = $rootDom[0]->appendChild($signDom); + $signText = $dom->createTextNode($sign); + $signText = $signDom->appendChild($signText); + $data = XMLUtil::xmlToString($dom); + //echo "封装后:".htmlspecialchars($data)."
    "; + + $desKey = Confid_desKey; + $keys = base64_decode($desKey); + $encrypt = TDESUtil::encrypt2HexStr($keys, $data); + //echo "3DES后:".$encrypt."
    "; + $encrypt = base64_encode($encrypt); + //echo "base64后:".$encrypt."
    "; + $reqParam; + $reqParam["version"]=$param["version"]; + $reqParam["merchant"]=$param["merchant"]; + $reqParam["encrypt"]=$encrypt; + $reqDom = XMLUtil::arrtoxml($reqParam,0,0); + $reqXmlStr = XMLUtil::xmlToString($reqDom); + //echo htmlspecialchars($reqXmlStr)."
    "; + return $reqXmlStr; + } + + public static function decryptResXml($resultData,&$resData){ + $resultXml = simplexml_load_string($resultData); + $resultObj = json_decode(json_encode($resultXml),TRUE); + $encryptStr = $resultObj["encrypt"]; + $encryptStr=base64_decode($encryptStr); + $desKey = Confid_desKey; + $keys = base64_decode($desKey); + $reqBody = TDESUtil::decrypt4HexStr($keys, $encryptStr); + //echo "请求返回encrypt Des解密后:".$reqBody."\n"; + + $bodyXml = simplexml_load_string($reqBody); + //echo "请求返回encrypt Des解密后:".$bodyXml->saveXML()."\n"; + $resData = json_decode(json_encode($bodyXml),TRUE); + + $inputSign = $resData["sign"]; +// $bodyDom = XMLUtil::arrtoxml($bodyObj,0,0); +// $rootDom = $bodyDom->getElementsByTagName("jdpay"); +// $signNodelist = $rootDom[0]->getElementsByTagName("sign"); +// $rootDom[0]->removeChild($signNodelist[0]); + +// $reqBodyStr = XMLUtil::xmlToString($bodyDom); + + $startIndex = strpos($reqBody,""); + $endIndex = strpos($reqBody,""); + + if($startIndex!=false && $endIndex!=false){ + $xmls = substr($reqBody, 0,$startIndex); + $xmle = substr($reqBody,$endIndex+7,strlen($reqBody)); + $xml=$xmls.$xmle; + } + + //echo "本地摘要原串:".$xml."\n"; + $sha256SourceSignString = hash("sha256", $xml); + //echo "本地摘要:".$sha256SourceSignString."\n"; + + $decryptStr = RSAUtils::decryptByPublicKey($inputSign); + //echo "解密后摘要:".$decryptStr."\n"; + if($decryptStr==$sha256SourceSignString){ + //echo "验签成功
    "; + $flag=true; + }else{ + //echo "验签失败
    "; + $flag=false; + } + $resData["version"]=$resultObj["version"]; + $resData["merchant"]=$resultObj["merchant"]; + $resData["result"]=$resultObj["result"]; + //echo var_dump($resData); + return $flag; + } +} diff --git a/plugins/jdpay/notify.php b/plugins/jdpay/notify.php new file mode 100644 index 0000000..dc3447b --- /dev/null +++ b/plugins/jdpay/notify.php @@ -0,0 +1,27 @@ +exec("update `pre_order` set `status` ='1' where `trade_no`='".TRADE_NO."'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$trade_no',`endtime` ='$date',`date` =NOW() where `trade_no`='".TRADE_NO."'"); + processOrder($order); + } + } + } +}else{ + echo "error"; +} \ No newline at end of file diff --git a/plugins/jdpay/refund.php b/plugins/jdpay/refund.php new file mode 100644 index 0000000..1d1a78a --- /dev/null +++ b/plugins/jdpay/refund.php @@ -0,0 +1,39 @@ +http_post_data($url, $reqXmlStr); +//echo $return_content."\n"; + +$flag=XMLUtil::decryptResXml($return_content,$resData); +//echo var_dump($resData); + +if($flag){ + if($resData['status'] == "1"){ + $result = ['code'=>0, 'trade_no'=>$resData['oTradeNum'], 'refund_fee'=>$resData['amount']]; + }else{ + $result = ['code'=>-1, 'msg'=>'['.$resData['result']['code'].']'.$resData['result']['desc']]; + } +}else{ + $result = ['code'=>-1, 'msg'=>'验签失败']; +} + +return $result; \ No newline at end of file diff --git a/plugins/jdpay/return.php b/plugins/jdpay/return.php new file mode 100644 index 0000000..a5d551f --- /dev/null +++ b/plugins/jdpay/return.php @@ -0,0 +1,57 @@ +"; +//$decryptBASE64Arr = base64_decode($sign); +$decryptStr = RSAUtils::decryptByPublicKey($sign); +//echo "decryptStr=".htmlspecialchars($decryptStr)."
    "; +$sha256SourceSignString = hash ( "sha256", $strSourceData); +//echo "sha256SourceSignString=".htmlspecialchars($sha256SourceSignString)."
    "; +if($decryptStr == $sha256SourceSignString){ + $trade_no = daddslashes($param["tradeNum"]); + $out_trade_no = daddslashes($param["tradeNum"]); + if($out_trade_no == TRADE_NO && $param["amount"]==$order['money']*100 && $order['status']==0){ + $url=creat_callback($order); + + if($order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='".TRADE_NO."'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$trade_no',`endtime` ='$date',`date` =NOW() where `trade_no`='".TRADE_NO."'"); + processOrder($order,false); + } + echo ''; + }else{ + echo ''; + } + }else{ + sysmsg('订单信息校验失败'); + } +}else{ + sysmsg("验证签名失败!strSourceData=".htmlspecialchars($strSourceData)); +} diff --git a/plugins/jdpay/submit.php b/plugins/jdpay/submit.php new file mode 100644 index 0000000..3603028 --- /dev/null +++ b/plugins/jdpay/submit.php @@ -0,0 +1,65 @@ +window.location.href='/submit2.php?typeid={$order['type']}&trade_no={$trade_no}';";exit; +} +if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')!==false){ + include(SYSTEM_ROOT.'pages/wxopen.php'); + exit; +} + +require_once(PAY_ROOT."inc/common/SignUtil.php"); +require_once(PAY_ROOT."inc/common/TDESUtil.php"); + +if(checkmobile()==true){ + $oriUrl = 'https://h5pay.jd.com/jdpay/saveOrder'; +}else{ + $oriUrl = 'https://wepay.jd.com/jdpay/saveOrder'; +} + +$param=array(); +$param["version"]='V2.0'; +$param["merchant"]=$channel['appid']; +$param["tradeNum"]=$trade_no; +$param["tradeName"]=$ordername; +$param["tradeTime"]= date('YmdHis'); +$param["amount"]= strval($order['money']*100); +$param["currency"]= 'CNY'; +$param["callbackUrl"]= $siteurl.'pay/jdpay/return/'.TRADE_NO.'/'; +$param["notifyUrl"]= $conf['localurl'].'pay/jdpay/notify/'.TRADE_NO.'/'; +$param["ip"]= $clientip; +$param["userId"]= ''; +$param["orderType"]= '1'; +$unSignKeyList = array("sign"); +$desKey = $channel['appkey']; +$sign = SignUtil::signWithoutToHex($param, $unSignKeyList); +//echo $sign."
    "; +$param["sign"] = $sign; +$keys = base64_decode($desKey); + +$param["tradeNum"]=TDESUtil::encrypt2HexStr($keys, $param["tradeNum"]); +if($param["tradeName"] != null && $param["tradeName"]!=""){ + $param["tradeName"]=TDESUtil::encrypt2HexStr($keys, $param["tradeName"]); +} +$param["tradeTime"]=TDESUtil::encrypt2HexStr($keys, $param["tradeTime"]); +$param["amount"]=TDESUtil::encrypt2HexStr($keys, $param["amount"]); +$param["currency"]=TDESUtil::encrypt2HexStr($keys, $param["currency"]); +$param["callbackUrl"]=TDESUtil::encrypt2HexStr($keys, $param["callbackUrl"]); +$param["notifyUrl"]=TDESUtil::encrypt2HexStr($keys, $param["notifyUrl"]); +$param["ip"]=TDESUtil::encrypt2HexStr($keys, $param["ip"]); + +if($param["userId"] != null && $param["userId"]!=""){ + $param["userId"]=TDESUtil::encrypt2HexStr($keys, $param["userId"]); +} +if($param["orderType"] != null && $param["orderType"]!=""){ + $param["orderType"]=TDESUtil::encrypt2HexStr($keys, $param["orderType"]); +} +//print_R($param);exit; + +echo '
    '; +foreach($param as $k => $v) { + echo "\n"; +} +echo '
    '; +?> \ No newline at end of file diff --git a/plugins/micro/config.ini b/plugins/micro/config.ini new file mode 100644 index 0000000..e8817e5 --- /dev/null +++ b/plugins/micro/config.ini @@ -0,0 +1,21 @@ +[config] +;支付插件英文名称,需和目录名称一致,不能有重复 +name = "micro" + +;支付插件显示名称 +showname = "小微支付" + +;支付插件作者 +author = "小微支付" + +;支付插件作者链接 +link = "http://blog.cccyun.cc/" + +;支付插件支持的支付方式,多种方式用英文,隔开,可选的有alipay,qqpay,wxpay,bank +types = "alipay,wxpay" + +;支付插件要求传入的参数以及参数显示名称,可选的有appid,appkey,appsecret,appurl,appmchid +inputs = "appurl:接口地址,appid:APPID,appkey:APPKEY,appmchid:商户号MCHID" + +;支付插件要求传入的支付方式参数 +select = "" \ No newline at end of file diff --git a/plugins/micro/inc/micro.config.php b/plugins/micro/inc/micro.config.php new file mode 100644 index 0000000..35bcf89 --- /dev/null +++ b/plugins/micro/inc/micro.config.php @@ -0,0 +1,32 @@ + \ No newline at end of file diff --git a/plugins/micro/inc/micro_core.function.php b/plugins/micro/inc/micro_core.function.php new file mode 100644 index 0000000..e25bc11 --- /dev/null +++ b/plugins/micro/inc/micro_core.function.php @@ -0,0 +1,168 @@ +$val) { + $arg.=$key."=".$val."&"; + } + //去掉最后一个&字符 + $arg = substr($arg,0,-1); + + return $arg; +} +/** + * 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码 + * @param $para 需要拼接的数组 + * return 拼接完成以后的字符串 + */ +function createLinkstringUrlencode($para) { + $arg = ""; + foreach ($para as $key=>$val) { + $arg.=$key."=".urlencode($val)."&"; + } + //去掉最后一个&字符 + $arg = substr($arg,0,-1); + + return $arg; +} +/** + * 除去数组中的空值和签名参数 + * @param $para 签名参数组 + * return 去掉空值与签名参数后的新签名参数组 + */ +function paraFilter($para) { + $para_filter = array(); + foreach ($para as $key=>$val) { + if($key == "sign" || $key == "sign_type" || $val == "")continue; + else $para_filter[$key] = $para[$key]; + } + return $para_filter; +} +/** + * 对数组排序 + * @param $para 排序前的数组 + * return 排序后的数组 + */ +function argSort($para) { + ksort($para); + reset($para); + return $para; +} +/** + * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库) + * 注意:服务器需要开通fopen配置 + * @param $word 要写入日志里的文本内容 默认值:空值 + */ +function logResult($word='') { + $fp = fopen("log.txt","a"); + flock($fp, LOCK_EX) ; + fwrite($fp,"执行日期:".strftime("%Y%m%d%H%M%S",time())."\n".$word."\n"); + flock($fp, LOCK_UN); + fclose($fp); +} + +/** + * 远程获取数据,POST模式 + * 注意: + * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了 + * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\\cacert.pem' + * @param $url 指定URL完整路径地址 + * @param $cacert_url 指定当前工作目录绝对路径 + * @param $para 请求的数据 + * @param $input_charset 编码格式。默认值:空值 + * return 远程输出的数据 + */ +function getHttpResponsePOST($url, $cacert_url, $para, $input_charset = '') { + + if (trim($input_charset) != '') { + $url = $url."_input_charset=".$input_charset; + } + $curl = curl_init($url); + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//SSL证书认证 + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//严格认证 + curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头 + curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果 + curl_setopt($curl,CURLOPT_POST,true); // post传输数据 + curl_setopt($curl,CURLOPT_POSTFIELDS,$para);// post传输数据 + $responseText = curl_exec($curl); + //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容 + curl_close($curl); + + return $responseText; +} + +/** + * 远程获取数据,GET模式 + * 注意: + * 1.使用Crul需要修改服务器中php.ini文件的设置,找到php_curl.dll去掉前面的";"就行了 + * 2.文件夹中cacert.pem是SSL证书请保证其路径有效,目前默认路径是:getcwd().'\\cacert.pem' + * @param $url 指定URL完整路径地址 + * @param $cacert_url 指定当前工作目录绝对路径 + * return 远程输出的数据 + */ +function getHttpResponseGET($url,$cacert_url) { + $curl = curl_init($url); + curl_setopt($curl, CURLOPT_HEADER, 0 ); // 过滤HTTP头 + curl_setopt($curl,CURLOPT_RETURNTRANSFER, 1);// 显示输出结果 + curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//SSL证书认证 + curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);//严格认证 + $responseText = curl_exec($curl); + //var_dump( curl_error($curl) );//如果执行curl过程中出现异常,可打开此开关,以便查看异常内容 + curl_close($curl); + + return $responseText; +} + +/** + * 实现多种字符编码方式 + * @param $input 需要编码的字符串 + * @param $_output_charset 输出的编码格式 + * @param $_input_charset 输入的编码格式 + * return 编码后的字符串 + */ +function charsetEncode($input,$_output_charset ,$_input_charset) { + $output = ""; + if(!isset($_output_charset) )$_output_charset = $_input_charset; + if($_input_charset == $_output_charset || $input ==null ) { + $output = $input; + } elseif (function_exists("mb_convert_encoding")) { + $output = mb_convert_encoding($input,$_output_charset,$_input_charset); + } elseif(function_exists("iconv")) { + $output = iconv($_input_charset,$_output_charset,$input); + } else die("sorry, you have no libs support for charset change."); + return $output; +} +/** + * 实现多种字符解码方式 + * @param $input 需要解码的字符串 + * @param $_output_charset 输出的解码格式 + * @param $_input_charset 输入的解码格式 + * return 解码后的字符串 + */ +function charsetDecode($input,$_input_charset ,$_output_charset) { + $output = ""; + if(!isset($_input_charset) )$_input_charset = $_input_charset ; + if($_input_charset == $_output_charset || $input ==null ) { + $output = $input; + } elseif (function_exists("mb_convert_encoding")) { + $output = mb_convert_encoding($input,$_output_charset,$_input_charset); + } elseif(function_exists("iconv")) { + $output = iconv($_input_charset,$_output_charset,$input); + } else die("sorry, you have no libs support for charset changes."); + return $output; +} +?> \ No newline at end of file diff --git a/plugins/micro/inc/micro_md5.function.php b/plugins/micro/inc/micro_md5.function.php new file mode 100644 index 0000000..52c6a14 --- /dev/null +++ b/plugins/micro/inc/micro_md5.function.php @@ -0,0 +1,41 @@ + \ No newline at end of file diff --git a/plugins/micro/inc/micro_notify.class.php b/plugins/micro/inc/micro_notify.class.php new file mode 100644 index 0000000..a8995fa --- /dev/null +++ b/plugins/micro/inc/micro_notify.class.php @@ -0,0 +1,118 @@ +alipay_config = $alipay_config; + $this->http_verify_url = $this->alipay_config['apiurl'].'api/query'; + } + function AlipayNotify($alipay_config) { + $this->__construct($alipay_config); + } + /** + * 针对notify_url验证消息是否是支付宝发出的合法消息 + * @return 验证结果 + */ + function verifyNotify(){ + if(empty($_POST)) {//判断POST来的数组是否为空 + return false; + } + else { + //生成签名结果 + $isSign = $this->getSignVeryfy($_POST, $_POST["sign"]); + //获取支付宝远程服务器ATN结果(验证是否是支付宝发来的消息) + $responseTxt = true; + //$responseTxt = $this->getResponse($_POST["trade_no"]); + + //验证 + //$responsetTxt的结果不是true,与服务器设置问题、合作身份者ID、notify_id一分钟失效有关 + //isSign的结果不是true,与安全校验码、请求时的参数格式(如:带自定义参数等)、编码格式有关 + if ($responseTxt && $isSign) { + return true; + } else { + return false; + } + } + } + + /** + * 针对return_url验证消息是否是支付宝发出的合法消息 + * @return 验证结果 + */ + function verifyReturn(){ + if(empty($_GET)) {//判断GET来的数组是否为空 + return false; + } + else { + $responseTxt = $this->getResponse($_GET["out_trade_no"]); + + //验证 + if ($responseTxt) { + return true; + } else { + return false; + } + } + } + + /** + * 获取返回时的签名验证结果 + * @param $para_temp 通知返回来的参数数组 + * @param $sign 返回的签名结果 + * @return 签名验证结果 + */ + function getSignVeryfy($para_temp, $sign) { + //除去待签名参数数组中的空值和签名参数 + $para_filter = paraFilter($para_temp); + + //对待签名参数数组排序 + $para_sort = argSort($para_filter); + + //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 + $prestr = createLinkstring($para_sort); + + $isSgin = false; + $isSgin = md5Verify($prestr, $sign, $this->alipay_config['key']); + + return $isSgin; + } + + /** + * 获取远程服务器ATN结果,验证返回URL + * @param $notify_id 通知校验ID + * @return 服务器ATN结果 + * 验证结果集: + * invalid命令参数不对 出现这个错误,请检测返回处理中partner和key是否为空 + * true 返回正确信息 + * false 请检查防火墙或者是服务器阻止端口问题以及验证时间是否超过一分钟 + */ + function getResponse($out_trade_no) { + $param = [ + 'appid'=> $this->alipay_config['appid'], + 'out_trade_no' => $out_trade_no, + ]; + $sign = ''; + foreach ($param as $k => $v) { + if($v) $sign .= $k . '=' . $v . '&'; + } + $param['sign'] = md5(rtrim($sign, '&') . $this->alipay_config['key']); + $data = get_curl($this->http_verify_url,http_build_query($param)); + $arr = json_decode($data,true); + if(isset($arr['code'])&&$arr['code']==1){ + return true; + }else{ + return false; + } + } +} +?> \ No newline at end of file diff --git a/plugins/micro/inc/micro_submit.class.php b/plugins/micro/inc/micro_submit.class.php new file mode 100644 index 0000000..e5a67c2 --- /dev/null +++ b/plugins/micro/inc/micro_submit.class.php @@ -0,0 +1,96 @@ +alipay_config = $alipay_config; + $this->alipay_gateway_new = $this->alipay_config['apiurl'].'api/payment'; + } + function AlipaySubmit($alipay_config) { + $this->__construct($alipay_config); + } + + /** + * 生成签名结果 + * @param $para_sort 已排序要签名的数组 + * return 签名结果字符串 + */ + function buildRequestMysign($para_sort) { + //把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串 + $prestr = createLinkstring($para_sort); + + $mysign = md5Sign($prestr, $this->alipay_config['key']); + + return $mysign; + } + + /** + * 生成要请求给支付宝的参数数组 + * @param $para_temp 请求前的参数数组 + * @return 要请求的参数数组 + */ + function buildRequestPara($para_temp) { + //除去待签名参数数组中的空值和签名参数 + $para_filter = paraFilter($para_temp); + + //对待签名参数数组排序 + $para_sort = argSort($para_filter); + + //生成签名结果 + $mysign = $this->buildRequestMysign($para_sort); + + //签名结果与签名方式加入请求提交参数组中 + $para_sort['sign'] = $mysign; + + return $para_sort; + } + + /** + * 生成要请求给支付宝的参数数组 + * @param $para_temp 请求前的参数数组 + * @return 要请求的参数数组字符串 + */ + function buildRequestParaToString($para_temp) { + //待请求参数数组 + $para = $this->buildRequestPara($para_temp); + + //把参数组中所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串,并对字符串做urlencode编码 + $request_data = createLinkstringUrlencode($para); + + return $request_data; + } + + /** + * 建立请求,以表单HTML形式构造(默认) + * @param $para_temp 请求参数数组 + * @param $method 提交方式。两个值可选:post、get + * @param $button_name 确认按钮显示文字 + * @return 提交表单HTML文本 + */ + function buildRequestForm($para_temp, $method='POST', $button_name='正在跳转') { + //待请求参数数组 + $para = $this->buildRequestPara($para_temp); + + $sHtml = "
    "; + while (list ($key, $val) = each ($para)) { + $sHtml.= ""; + } + + //submit按钮控件请不要含有name属性 + $sHtml = $sHtml."
    "; + + $sHtml = $sHtml.""; + + return $sHtml; + } +} +?> \ No newline at end of file diff --git a/plugins/micro/notify.php b/plugins/micro/notify.php new file mode 100644 index 0000000..ebb3615 --- /dev/null +++ b/plugins/micro/notify.php @@ -0,0 +1,38 @@ +verifyNotify(); + +if($verify_result) {//验证成功 + //商户订单号 + $out_trade_no = daddslashes($_POST['out_trade_no']); + + //支付宝交易号 + $trade_no = daddslashes($_POST['trade_no']); + + //金额 + $money = $_POST['money']; + + if ($_POST['status'] == 1) { + //付款完成后,支付宝系统发送该交易状态通知 + if($out_trade_no == TRADE_NO && round($money,2)==round($order['money'],2) && $order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='$out_trade_no'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$trade_no',`endtime` ='$date',`date` =NOW() where `trade_no`='$out_trade_no'"); + processOrder($order); + } + } + } + + echo "success"; +} +else { + //验证失败 + echo "fail"; +} + +?> diff --git a/plugins/micro/return.php b/plugins/micro/return.php new file mode 100644 index 0000000..6c33112 --- /dev/null +++ b/plugins/micro/return.php @@ -0,0 +1,54 @@ +window.location.href="'.$url['return'].'";'; + exit; +}else{ + $alipayNotify = new AlipayNotify($alipay_config); + $verify_result = $alipayNotify->verifyReturn(); + if($verify_result){ + if($order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='$out_trade_no'")){ + $DB->exec("update `pre_order` set `endtime` ='$date',`date` =NOW() where `trade_no`='$out_trade_no'"); + processOrder($order,false); + } + } + echo ''; + exit; + } +} + +?> + + + + + + + + + +
    +

    支付结果页面

    +
    +
    +
    +
    +支付未完成 +
    +
    + + + \ No newline at end of file diff --git a/plugins/micro/submit.php b/plugins/micro/submit.php new file mode 100644 index 0000000..865b644 --- /dev/null +++ b/plugins/micro/submit.php @@ -0,0 +1,19 @@ + trim($alipay_config['appid']), + "type" => $order['typename']=='alipay'?'alipay':'cashier', + "notify_url" => $conf['localurl'].'pay/micro/notify/'.TRADE_NO.'/', + "return_url" => $siteurl.'pay/micro/return/'.TRADE_NO.'/', + "out_trade_no" => $trade_no, + "name" => $order['name'], + "money" => $order['money'], + "mchid" => trim($alipay_config['mchid']) +); +//建立请求 +$alipaySubmit = new AlipaySubmit($alipay_config); +$html_text = $alipaySubmit->buildRequestForm($parameter); +echo $html_text; diff --git a/plugins/qqpay/cert/apiclient_cert.pem b/plugins/qqpay/cert/apiclient_cert.pem new file mode 100644 index 0000000..9804808 --- /dev/null +++ b/plugins/qqpay/cert/apiclient_cert.pem @@ -0,0 +1,25 @@ +-----BEGIN CERTIFICATE----- +MIIEHjCCA4egAwIBAgIFAPpX1NAwDQYJKoZIhvcNAQEFBQAwgakxCzAJBgNVBAYT +AkNOMRIwEAYDVQQIEwlHVUFOR0RPTkcxETAPBgNVBAcTCFNIRU5aSEVOMRMwEQYD +VQQKEwp0ZW5wYXkuY29tMR0wGwYDVQQLExRUZW5wYXkuY29tIENBIENlbnRlcjEb +MBkGA1UEAxMSVGVucGF5LmNvbSBSb290IENBMSIwIAYJKoZIhvcNAQkBFhNzZXJ2 +aWNlQHRlbmNlbnQuY29tMB4XDTE5MTIxNjA1MjYwNVoXDTIwMTIxNTA1MjYwNVow +NzELMAkGA1UEBhMCQ04xEzARBgNVBAseCgBBAFAASYvBTmYxEzARBgNVBAMTCjE0 +MDUwNTA2MDEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQChqjQlY0T9 +irgysbN+KalvE0h4jhqyA3JYnOwlU0Wx5nZkw1mZQ/HHsKSx3Pg3fg6xV67GjtTB +KMt5vHSZ8TTLZULNAuyKOWmKfW2JCpOzDEAkSp2zf/5IjOi4Tsmr4oXernxtmyLK +VmFRbLAZUJz0eBBN9puP8rWPKGVILm1DOH9pJa5YjSi1x/YtyytXfjt6yybaoKN6 +piVAg22qVmFZAgtl6emnajHVYPjdAJhto07aNr+x33XcGXF4OiZKzNIctHeUBULG +iTVtwE4XDVHFk7BP4RqyTKvYEK8f9STe4eenvCJsaQKQx3cFG98F7dMv+uiDJr2D +bKohwO9aCmvxAgMBAAGjggE9MIIBOTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQf +Fh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRpZmljYXRlIjAdBgNVHQ4EFgQUVQb/1YCw +f2Qa4tAQ2NYm4hmCJ5Ywgd4GA1UdIwSB1jCB04AUjNT3yuA8Gk/Mbnlvf811nF23 +fNihga+kgawwgakxCzAJBgNVBAYTAkNOMRIwEAYDVQQIEwlHVUFOR0RPTkcxETAP +BgNVBAcTCFNIRU5aSEVOMRMwEQYDVQQKEwp0ZW5wYXkuY29tMR0wGwYDVQQLExRU +ZW5wYXkuY29tIENBIENlbnRlcjEbMBkGA1UEAxMSVGVucGF5LmNvbSBSb290IENB +MSIwIAYJKoZIhvcNAQkBFhNzZXJ2aWNlQHRlbmNlbnQuY29tggkArsVrh+ek+2Yw +DQYJKoZIhvcNAQEFBQADgYEANPf3klU9cc3zYVPDCNL8UTxSUIClUh+twLnNjxhi +V/7hd93g6mEmTOOREjAXI1h9JzO10Uw23JVZ+HbefqtCYS4IUsDF+r2X6oORz448 +ScQoM0emBh/QuNT40gOXoHi0+tWBXEhAY4o3Cjo7umIdo8N7ys+8XL2vKe1Mx1Ga +jZc= +-----END CERTIFICATE----- diff --git a/plugins/qqpay/cert/apiclient_key.pem b/plugins/qqpay/cert/apiclient_key.pem new file mode 100644 index 0000000..745f29a --- /dev/null +++ b/plugins/qqpay/cert/apiclient_key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQChqjQlY0T9irgy +sbN+KalvE0h4jhqyA3JYnOwlU0Wx5nZkw1mZQ/HHsKSx3Pg3fg6xV67GjtTBKMt5 +vHSZ8TTLZULNAuyKOWmKfW2JCpOzDEAkSp2zf/5IjOi4Tsmr4oXernxtmyLKVmFR +bLAZUJz0eBBN9puP8rWPKGVILm1DOH9pJa5YjSi1x/YtyytXfjt6yybaoKN6piVA +g22qVmFZAgtl6emnajHVYPjdAJhto07aNr+x33XcGXF4OiZKzNIctHeUBULGiTVt +wE4XDVHFk7BP4RqyTKvYEK8f9STe4eenvCJsaQKQx3cFG98F7dMv+uiDJr2DbKoh +wO9aCmvxAgMBAAECggEBAIT2JI8/dwWEavyetH6mK0lEtc0ZKxGPziLdZUdJlr+7 +SVKUbIOmoxtWyA3VLH0Pe2wWLpP18zuunrNP8SKPhJlofil5JyyEDa6ufEFC5rlS +8QooKE3yjiQDaH/1pN5unyXHomTPPCzoIIBEgQ1BBOX4PYixs74Po43LbomQTaMD +bPgqSRzhi/diKCgBFuzgEthh3P6HdzUImZ7i8x1n0Fceu8Ynn9nng1WgcKvmbnti +nuG4C0HERiLxB8IGfPB8ahFT5Qp529e8OVz3zhC3ea6Z29keDDS7hDf1tknEMMTw +583Cnpb3Q8f2fUX3al0NA66yigy5B99T7Pgc8EUmQgECgYEAzVDOGJXkD86kk2ZR +0+9fUDIIf95ZJCTrCX/4leCBxPo4VR8OtHvo6GpIhyhqXa2icHXm94prCF6LYLfG +EPnFUdf/CRGSI8kIIJjK8oUT8MSdw0jDHLJoK7RHOasHytRkNfkujdk0v1F2gjn0 +ka6pd1/myJ1+h5jEGk2onfkcWyECgYEAyZLURVxm24HRUoQtimMw2+wed4IUHBB2 +Cye9ixQQka34ayj4ik5YYiceIfEKxQa8hxONaSqCy5SrcmtN3o9tBcp1Rj3y6bZ+ +slnlCdbX43/NNOzQsYGKIg5DRX/R8xnPO9q4jT004tUbmFV6WXHsg51TMGBeQQ6g +gV75WrrZRtECgYAffOwOwzY14mhFHuUfzs9cWkAJdE1RiMPvMgwq2EKutf1buKal +sXc35cz3xZACi/Wkr8BbaIQfxXg0vhqHUfccJTc86c/y4wr3DNfbN+OmAlF7uLYL +uaTWRxDBXGSWi9pOmMe2A4DecpztPfwvN41P/IpFbDoSi7BPpGdeyuy5YQKBgFSy +NjECt1FKRbrHQR9huDjgCJksdeio3gCn7ROQFbowgC3+pBfw/WAYkaevUVgiEXss +MwHaU+TYjgVgovJ+D1AclpQyGWwsOyYTcZJlzIaRv5aaXsIG7RSMK6X7JCtiT9oV +d/AYpK0e4B5s5CDLJpbStw6fn1r0m2pgjqOZ2QvRAoGAWpfRMRCNmL0S418cwYTy +sNl3JzOkIz2+PQdys6zlQ69wXpUsZZzxQSINxm0bnHGBP1oxZnOwpGx2j/bc5/cc +0h6g7V/3COKFxYU/JD7GHUYMHFrVCBrvAokETmnYYxEgEc/ZcqQnUoXRZcpDj4N3 +Cml1hpXvOFCNh7OhKZfN8d0= +-----END PRIVATE KEY----- diff --git a/plugins/qqpay/config.ini b/plugins/qqpay/config.ini new file mode 100644 index 0000000..e5d9a22 --- /dev/null +++ b/plugins/qqpay/config.ini @@ -0,0 +1,21 @@ +[config] +;支付插件英文名称,需和目录名称一致,不能有重复 +name = "qqpay" + +;支付插件显示名称 +showname = "QQ钱包官方支付" + +;支付插件作者 +author = "QQ钱包" + +;支付插件作者链接 +link = "https://qpay.qq.com/" + +;支付插件支持的支付方式,多种方式用英文,隔开,可选的有alipay,qqpay,wxpay,bank +types = "qqpay" + +;支付插件要求传入的参数以及参数显示名称,可选的有appid,appkey,appsecret,appurl,appmchid +inputs = "appid:QQ钱包商户号,appkey:QQ钱包API密钥" + +;支付插件要求传入的支付方式参数 +select = "1:扫码支付(包含H5),2:公众号支付" \ No newline at end of file diff --git a/plugins/qqpay/inc/qpayMch.config.php b/plugins/qqpay/inc/qpayMch.config.php new file mode 100644 index 0000000..b3038d9 --- /dev/null +++ b/plugins/qqpay/inc/qpayMch.config.php @@ -0,0 +1,50 @@ +账户管理-->API安全 。 + */ + const SSLCERT_PATH = PAY_ROOT.'cert/apiclient_cert.pem'; + const SSLKEY_PATH = PAY_ROOT.'cert/apiclient_key.pem'; + + /** + * 企业付款-操作员ID + */ + const OP_USERID = QQ_OP_USERID; + + /** + * 企业付款-操作员密码 + */ + const OP_USERPWD = QQ_OP_USERPWD; + +} \ No newline at end of file diff --git a/plugins/qqpay/inc/qpayMchAPI.class.php b/plugins/qqpay/inc/qpayMchAPI.class.php new file mode 100644 index 0000000..ba574a9 --- /dev/null +++ b/plugins/qqpay/inc/qpayMchAPI.class.php @@ -0,0 +1,46 @@ +url = $url; + $this->isSSL = $isSSL; + $this->timeout = $timeout; + } + + public function reqQpay($params){ + $ret = array(); + //商户号 + $params["mch_id"] = QpayMchConf::MCH_ID; + //随机字符串 + $params["nonce_str"] = QpayMchUtil::createNoncestr(); + //签名 + $params["sign"] = QpayMchUtil::getSign($params); + //生成xml + $xml = QpayMchUtil::arrayToXml($params); + + if(isset($this->isSSL)){ + $ret = QpayMchUtil::reqByCurlSSLPost($xml, $this->url, $this->timeout); + }else{ + $ret = QpayMchUtil::reqByCurlNormalPost($xml, $this->url, $this->timeout); + } + return $ret; + } + +} \ No newline at end of file diff --git a/plugins/qqpay/inc/qpayMchUtil.class.php b/plugins/qqpay/inc/qpayMchUtil.class.php new file mode 100644 index 0000000..fa063e0 --- /dev/null +++ b/plugins/qqpay/inc/qpayMchUtil.class.php @@ -0,0 +1,149 @@ + $v){ + //参数为空不参与签名 + if(isset($v) && $v != '' && $k != 'sign'){ + array_push($arrTmp, "$k=$v"); + } + } + return implode('&', $arrTmp); + } + + /** + * 获取参数签名 + * @param $params + * + * @return string + */ + public static function getSign($params) { + //第一步:对参数按照key=value的格式,并按照参数名ASCII字典序排序 + ksort($params); + $stringA = QpayMchUtil::buildQueryStr($params); + //第二步:拼接API密钥并md5 + $stringA = $stringA."&key=".QpayMchConf::MCH_KEY; + $stringA = md5($stringA); + //转成大写 + $sign = strtoupper($stringA); + return $sign; + } + + /** + * 数组转换成xml字符串 + * @param $arr + * @return string + */ + public static function arrayToXml($arr) { + $xml = ""; + foreach ($arr as $key => $val){ + if (is_numeric($val)){ + $xml.="<$key>$val"; + } + else + $xml.="<$key>"; + } + $xml.=""; + return $xml; + } + + /** + * xml转换成数组 + * @param $xml + * @return array|mixed|object + */ + public static function xmlToArray($xml) { + $arr = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); + return $arr; + } + + /** + * 通用curl 请求接口。post方式 + * @param $params + * @param $url + * @param int $timeout + * + * @return bool|mixed + */ + public static function reqByCurlNormalPost($params, $url, $timeout = 10) { + return QpayMchUtil::_reqByCurl($params, $url, $timeout, false); + } + + /** + * 使用ssl证书请求接口。post方式 + * @param $params + * @param $url + * @param int $timeout + * + * @return bool|mixed + */ + public static function reqByCurlSSLPost($params, $url, $timeout = 10) { + return QpayMchUtil::_reqByCurl($params, $url, $timeout, true); + } + + private static function _reqByCurl($params, $url, $timeout = 10, $needSSL = false) { + $ch = curl_init(); + + curl_setopt($ch,CURLOPT_URL, $url); + curl_setopt($ch,CURLOPT_TIMEOUT, $timeout); + + curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); + curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); + + curl_setopt($ch,CURLOPT_HEADER,FALSE); + curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); + //是否使用ssl证书 + if(isset($needSSL) && $needSSL != false){ + curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLCERT, QpayMchConf::SSLCERT_PATH); + curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLKEY, QpayMchConf::SSLKEY_PATH); + } + curl_setopt($ch,CURLOPT_POST, true); + curl_setopt($ch,CURLOPT_POSTFIELDS, $params); + $ret = curl_exec($ch); + if($ret){ + curl_close($ch); + //log($ret); //业务记录交互流水。注:流水日志影响性能,如请求量过大,请慎重设计日志。 + return $ret; + } + else { + $error = curl_errno($ch); + //log($error); //业务记录错误日志 + print_r($error); + curl_close($ch); + return false; + } + } + +} diff --git a/plugins/qqpay/inc/qpayNotify.class.php b/plugins/qqpay/inc/qpayNotify.class.php new file mode 100644 index 0000000..54c70ae --- /dev/null +++ b/plugins/qqpay/inc/qpayNotify.class.php @@ -0,0 +1,26 @@ +params = $params; + $this->sign = $params['sign']; + return $params; + } + + function verifySign() { + $sign = QpayMchUtil::getSign($this->params); + return $sign == $this->sign; + } + +} \ No newline at end of file diff --git a/plugins/qqpay/jspay.php b/plugins/qqpay/jspay.php new file mode 100644 index 0000000..ed236dc --- /dev/null +++ b/plugins/qqpay/jspay.php @@ -0,0 +1,103 @@ +reqQpay($params); +$result = QpayMchUtil::xmlToArray($ret); +//print_r($result); + +if($result['return_code']=='SUCCESS' && $result['result_code']=='SUCCESS'){ + $prepay_id = $result['prepay_id']; +}elseif(isset($result["err_code"])){ + sysmsg('QQ钱包支付下单失败!['.$result["err_code"].'] '.$result["err_code_des"]); +}else{ + sysmsg('QQ钱包支付下单失败!['.$result["return_code"].'] '.$result["return_msg"]); +} + +?> + + + + + + + + + +
    +

    QQ钱包安全支付

    +
    +
    +
    +
    +正在跳转... + + + + +
    +
    + + \ No newline at end of file diff --git a/plugins/qqpay/notify.php b/plugins/qqpay/notify.php new file mode 100644 index 0000000..4d10ef0 --- /dev/null +++ b/plugins/qqpay/notify.php @@ -0,0 +1,54 @@ +getParams(); +//判断签名 +if($qpayNotify->verifySign()) { + +//判断签名及结果(即时到帐) + if($result['trade_state'] == "SUCCESS") { + //商户订单号 + $out_trade_no = daddslashes($result['out_trade_no']); + //QQ钱包订单号 + $transaction_id = daddslashes($result['transaction_id']); + //金额,以分为单位 + $total_fee = $result['total_fee']; + //币种 + $fee_type = $result['fee_type']; + //用户表示 + $openid = daddslashes($result['openid']); + + //------------------------------ + //处理业务开始 + //------------------------------ + if($out_trade_no == TRADE_NO && $total_fee==strval($order['money']*100) && $order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='".TRADE_NO."'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$transaction_id',`endtime` ='$date',`buyer` ='$openid',`date`=NOW() where `trade_no`='".TRADE_NO."'"); + processOrder($order); + } + } + //------------------------------ + //处理业务完毕 + //------------------------------ + echo " +SUCCESS +"; + } else { + echo " +FAIL +"; + } + +} else { + //回调签名错误 + echo " +FAIL +签名失败 +"; +} + +?> \ No newline at end of file diff --git a/plugins/qqpay/qrcode.php b/plugins/qqpay/qrcode.php new file mode 100644 index 0000000..870ab8f --- /dev/null +++ b/plugins/qqpay/qrcode.php @@ -0,0 +1,144 @@ +reqQpay($params); +$result = QpayMchUtil::xmlToArray($ret); +//print_r($result); + +if($result['return_code']=='SUCCESS' && $result['result_code']=='SUCCESS'){ + $code_url = $result['code_url']; +}elseif(isset($result["err_code"])){ + sysmsg('QQ钱包支付下单失败!['.$result["err_code"].'] '.$result["err_code_des"]); +}else{ + sysmsg('QQ钱包支付下单失败!['.$result["return_code"].'] '.$result["return_msg"]); +} + +?> + + + + + + +QQ钱包安全支付 - <?php echo $sitename?> + + + +
    +

    +QQ钱包支付 +

    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +

    请使用手机QQ扫一扫

    +

    扫描二维码完成支付

    +
    +
    +
    +
    +
    +
    +
    +

    手机用户可保存上方二维码到手机中

    +

    在手机QQ扫一扫中选择“相册”即可

    +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/plugins/qqpay/refund.php b/plugins/qqpay/refund.php new file mode 100644 index 0000000..268d9aa --- /dev/null +++ b/plugins/qqpay/refund.php @@ -0,0 +1,30 @@ +reqQpay($params); +$result = QpayMchUtil::xmlToArray($ret); +//print_r($result); + +if($result['return_code']=='SUCCESS' && $result['result_code']=='SUCCESS'){ + $result = ['code'=>0, 'trade_no'=>$result['transaction_id'], 'refund_fee'=>$result['total_fee']]; +}elseif(isset($result["err_code"])){ + $result = ['code'=>-1, 'msg'=>'['.$result["err_code"].']'.$result["err_code_des"]]; +}else{ + $result = ['code'=>-1, 'msg'=>'['.$result["return_code"].']'.$result["return_msg"]]; +} +return $result; \ No newline at end of file diff --git a/plugins/qqpay/submit.php b/plugins/qqpay/submit.php new file mode 100644 index 0000000..e443168 --- /dev/null +++ b/plugins/qqpay/submit.php @@ -0,0 +1,10 @@ +window.location.href='/pay/qqpay/jspay/{$trade_no}/';"; +}elseif(checkmobile()==true){ + echo ""; +}else{ + echo ""; +} diff --git a/plugins/qqpay/wap.php b/plugins/qqpay/wap.php new file mode 100644 index 0000000..1c22c11 --- /dev/null +++ b/plugins/qqpay/wap.php @@ -0,0 +1,129 @@ +reqQpay($params); +$result = QpayMchUtil::xmlToArray($ret); +//print_r($arr); + +if($result['return_code']=='SUCCESS' && $result['result_code']=='SUCCESS'){ + $code_url = 'https://myun.tenpay.com/mqq/pay/qrcode.html?_wv=1027&_bid=2183&t='.$result['prepay_id']; +}elseif(isset($result["err_code"])){ + sysmsg('QQ钱包支付下单失败!['.$result["err_code"].'] '.$result["err_code_des"]); +}else{ + sysmsg('QQ钱包支付下单失败!['.$result["return_code"].'] '.$result["return_msg"]); +} +if(strpos($_SERVER['HTTP_USER_AGENT'], 'QQ/')!==false){ + exit(""); +} +?> + + + + + QQ钱包支付 + + + + +
    +
    +

    + QQ钱包支付手机版 +

    +
    +

    +
    商品名称:
    商户订单号:
    创建时间:
    + + + +
    +
    +
    + + + + + \ No newline at end of file diff --git a/plugins/swiftpass/alipay.php b/plugins/swiftpass/alipay.php new file mode 100644 index 0000000..f9576ff --- /dev/null +++ b/plugins/swiftpass/alipay.php @@ -0,0 +1,181 @@ +setGateUrl($cfg->C('url')); +$reqHandler->setSignType($cfg->C('sign_type')); +$reqHandler->setRSAKey($cfg->C('private_rsa_key')); +$reqHandler->setParameter('service','pay.alipay.native');//接口类型 +$reqHandler->setParameter('mch_id',$cfg->C('mchId'));//必填项,商户号,由平台分配 +$reqHandler->setParameter('version',$cfg->C('version')); +$reqHandler->setParameter('sign_type',$cfg->C('sign_type')); +$reqHandler->setParameter('body',$order['name']); +$reqHandler->setParameter('total_fee',strval($order['money']*100)); +$reqHandler->setParameter('mch_create_ip',$clientip); +$reqHandler->setParameter('out_trade_no',TRADE_NO); +$reqHandler->setParameter('notify_url',$conf['localurl'].'pay/swiftpass/notify/'.TRADE_NO.'/'); +$reqHandler->setParameter('nonce_str',mt_rand(time(),time()+rand()));//随机字符串,必填项,不长于 32 位 +$reqHandler->createSign();//创建签名 + +$data = Utils::toXml($reqHandler->getAllParameters()); +//var_dump($data); + +$pay->setReqContent($reqHandler->getGateURL(),$data); +if($pay->call()){ + $resHandler->setContent($pay->getResContent()); + $resHandler->setRSAKey($cfg->C('public_rsa_key')); + if($resHandler->isTenpaySign()){ + //当返回状态与业务结果都为0时才返回支付二维码,其它结果请查看接口文档 + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $code_url = $resHandler->getParameter('code_url'); + }else{ + sysmsg('支付宝支付下单失败 ['.$resHandler->getParameter('err_code').']'.$resHandler->getParameter('err_msg')); + } + }else{ + sysmsg('支付宝支付下单失败 ['.$resHandler->getParameter('status').']'.$resHandler->getParameter('message')); + } +}else{ + sysmsg('支付接口调用失败 ['.$pay->getResponseCode().']'.$pay->getErrInfo()); +} +?> + + + + + + +支付宝扫码支付 - <?php echo $sitename?> + + + +
    +

    +支付宝扫码支付 +

    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +

    请使用支付宝扫一扫

    +

    扫描二维码完成支付

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    正在打开支付宝...

    +

    如果没有打开支付宝,请点此重新唤起

    +
    +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/plugins/swiftpass/config.ini b/plugins/swiftpass/config.ini new file mode 100644 index 0000000..32e9040 --- /dev/null +++ b/plugins/swiftpass/config.ini @@ -0,0 +1,21 @@ +[config] +;支付插件英文名称,需和目录名称一致,不能有重复 +name = "swiftpass" + +;支付插件显示名称 +showname = "威富通" + +;支付插件作者 +author = "威富通" + +;支付插件作者链接 +link = "https://www.swiftpass.cn/" + +;支付插件支持的支付方式,多种方式用英文,隔开,可选的有alipay,qqpay,wxpay,bank +types = "alipay,wxpay,qqpay,bank,jdpay" + +;支付插件要求传入的参数以及参数显示名称,可选的有appid,appkey,appsecret,appurl,appmchid +inputs = "appid:商户号,appkey:RSA平台公钥,appsecret:RSA应用私钥" + +;支付插件要求传入的支付方式参数 +select = "1:微信公众号支付,2:微信H5支付" \ No newline at end of file diff --git a/plugins/swiftpass/inc/WxPay.JsApiPay.php b/plugins/swiftpass/inc/WxPay.JsApiPay.php new file mode 100644 index 0000000..e8c0b59 --- /dev/null +++ b/plugins/swiftpass/inc/WxPay.JsApiPay.php @@ -0,0 +1,167 @@ +getMessage(); + } +} + +/** + * + * JSAPI支付实现类 + * 该类实现了从微信公众平台获取code、通过code获取openid和access_token、 + * 生成jsapi支付js接口所需的参数、生成获取共享收货地址所需的参数 + * + * 该类是微信支付提供的样例程序,商户可根据自己的需求修改,或者使用lib中的api自行开发 + * + * @author widy + * + */ +class JsApiPay +{ + /** + * + * 网页授权接口微信服务器返回的数据,返回样例如下 + * { + * "access_token":"ACCESS_TOKEN", + * "expires_in":7200, + * "refresh_token":"REFRESH_TOKEN", + * "openid":"OPENID", + * "scope":"SCOPE", + * "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" + * } + * 其中access_token可用于获取共享收货地址 + * openid是微信支付jsapi支付接口必须的参数 + * @var array + */ + public $data = null; + + /** + * + * 通过跳转获取用户的openid,跳转流程如下: + * 1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize + * 2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code + * + * @return 用户的openid + */ + public function GetOpenid() + { + //通过code获得openid + if (!isset($_GET['code'])){ + //触发微信返回code码 + $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); + $url = $this->__CreateOauthUrlForCode($baseUrl); + Header("Location: $url"); + exit(); + } else { + //获取code码,以获取openid + $code = $_GET['code']; + $openid = $this->GetOpenidFromMp($code); + return $openid; + } + } + + /** + * + * 通过code从工作平台获取openid机器access_token + * @param string $code 微信跳转回来带上的code + * + * @return openid + */ + public function GetOpenidFromMp($code) + { + $url = $this->__CreateOauthUrlForOpenid($code); + //初始化curl + $ch = curl_init(); + //设置超时 + curl_setopt($ch, CURLOPT_TIMEOUT, $this->curl_timeout); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); + curl_setopt($ch, CURLOPT_HEADER, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + //运行curl,结果以jason形式返回 + $res = curl_exec($ch); + curl_close($ch); + //取出openid + $data = json_decode($res,true); + $this->data = $data; + $openid = $data['openid']; + return $openid; + } + + /** + * + * 拼接签名字符串 + * @param array $urlObj + * + * @return 返回已经拼接好的字符串 + */ + private function ToUrlParams($urlObj) + { + $buff = ""; + foreach ($urlObj as $k => $v) + { + if($k != "sign"){ + $buff .= $k . "=" . $v . "&"; + } + } + + $buff = trim($buff, "&"); + return $buff; + } + + /** + * + * 构造获取code的url连接 + * @param string $redirectUrl 微信服务器回跳的url,需要url编码 + * + * @return 返回构造好的url + */ + private function __CreateOauthUrlForCode($redirectUrl) + { + $urlObj["appid"] = WxPayConfig::APPID; + $urlObj["redirect_uri"] = $redirectUrl; + $urlObj["response_type"] = "code"; + $urlObj["scope"] = "snsapi_base"; + $urlObj["state"] = "STATE"."#wechat_redirect"; + $bizString = $this->ToUrlParams($urlObj); + return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString; + } + + /** + * + * 构造获取open和access_toke的url地址 + * @param string $code,微信跳转带回的code + * + * @return 请求的url + */ + private function __CreateOauthUrlForOpenid($code) + { + $urlObj["appid"] = WxPayConfig::APPID; + $urlObj["secret"] = WxPayConfig::APPSECRET; + $urlObj["code"] = $code; + $urlObj["grant_type"] = "authorization_code"; + $bizString = $this->ToUrlParams($urlObj); + return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString; + } +} \ No newline at end of file diff --git a/plugins/swiftpass/inc/class/ClientResponseHandler.class.php b/plugins/swiftpass/inc/class/ClientResponseHandler.class.php new file mode 100644 index 0000000..993cf76 --- /dev/null +++ b/plugins/swiftpass/inc/class/ClientResponseHandler.class.php @@ -0,0 +1,236 @@ +ClientResponseHandler(); + } + + function ClientResponseHandler() { + $this->key = ""; + $this->public_rsa_key = ""; + $this->signtype = ""; + $this->parameters = array(); + $this->debugInfo = ""; + $this->content = ""; + } + + /** + *获取密钥 + */ + function getKey() { + return $this->key; + } + + /** + *设置密钥 + */ + function setKey($key) { + $this->key = $key; + } + + /*设置平台公钥*/ + function setRSAKey($key) { + $this->public_rsa_key = $key; + } + + function setSignType($type) { + $this->signtype = $type; + } + + //设置原始内容 + function setContent($content) { + $this->content = $content; + + libxml_disable_entity_loader(true); + $xml = simplexml_load_string($this->content); + $encode = $this->getXmlEncode($this->content); + + if($xml && $xml->children()) { + foreach ($xml->children() as $node){ + //有子节点 + if($node->children()) { + $k = $node->getName(); + $nodeXml = $node->asXML(); + $v = substr($nodeXml, strlen($k)+2, strlen($nodeXml)-2*strlen($k)-5); + + } else { + $k = $node->getName(); + $v = (string)$node; + } + + if($encode!="" && $encode != "UTF-8") { + $k = iconv("UTF-8", $encode, $k); + $v = iconv("UTF-8", $encode, $v); + } + + $this->setParameter($k, $v); + } + } + } + + //获取原始内容 + function getContent() { + return $this->content; + } + + /** + *获取参数值 + */ + function getParameter($parameter) { + return isset($this->parameters[$parameter])?$this->parameters[$parameter] : ''; + } + + /** + *设置参数值 + */ + function setParameter($parameter, $parameterValue) { + $this->parameters[$parameter] = $parameterValue; + } + + /** + *获取所有请求的参数 + *@return array + */ + function getAllParameters() { + return $this->parameters; + } + + /** + *是否平台签名,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。 + *true:是 + *false:否 + */ + function isTenpaySign() { + $swiftpassSign = strtolower($this->getParameter("sign")); + if ($this->getParameter('sign_type') == 'MD5') { + return $this->getMD5Sign() == $swiftpassSign; + } else if ($this->getParameter('sign_type') == 'RSA_1_1' || $this->getParameter('sign_type') == 'RSA_1_256') { + return $this->verifyRSASign(); + } + } + + function getMD5Sign() { + $signPars = ""; + ksort($this->parameters); + foreach($this->parameters as $k => $v) { + if("sign" != $k && "" != $v) { + $signPars .= $k . "=" . $v . "&"; + } + } + $signPars .= "key=" . $this->getKey(); + + return strtolower(md5($signPars)); + } + + function verifyRSASign() { + $signPars = ""; + ksort($this->parameters); + foreach($this->parameters as $k => $v) { + if("sign" != $k && "" != $v) { + $signPars .= $k . "=" . $v . "&"; + } + } + + $signPars = substr($signPars, 0, strlen($signPars) - 1); + $res = openssl_get_publickey($this->public_rsa_key); + if ($this->getParameter('sign_type') == 'RSA_1_1') { + $result = (bool)openssl_verify($signPars, base64_decode($this->getParameter("sign")), $res); + openssl_free_key($res); + return $result; + } else if($this->getParameter('sign_type') == 'RSA_1_256') { + $result = (bool)openssl_verify($signPars, base64_decode($this->getParameter("sign")), $res, OPENSSL_ALGO_SHA256); + openssl_free_key($res); + return $result; + } + } + + /** + *获取debug信息 + */ + function getDebugInfo() { + return $this->debugInfo; + } + + //获取xml编码 + function getXmlEncode($xml) { + $ret = preg_match ("/]* encoding=\"(.*)\"[^>]* ?>/i", $xml, $arr); + if($ret) { + return strtoupper ( $arr[1] ); + } else { + return ""; + } + } + + /** + *设置debug信息 + */ + function _setDebugInfo($debugInfo) { + $this->debugInfo = $debugInfo; + } + + /** + * 是否财付通签名 + * @param signParameterArray 签名的参数数组 + * @return boolean + */ + function _isTenpaySign($signParameterArray) { + + $signPars = ""; + foreach($signParameterArray as $k) { + $v = $this->getParameter($k); + if("sign" != $k && "" != $v) { + $signPars .= $k . "=" . $v . "&"; + } + } + $signPars .= "key=" . $this->getKey(); + + $sign = strtolower(md5($signPars)); + + $tenpaySign = strtolower($this->getParameter("sign")); + + //debug信息 + $this->_setDebugInfo($signPars . " => sign:" . $sign . + " tenpaySign:" . $this->getParameter("sign")); + + return $sign == $tenpaySign; + + + } + +} + + +?> \ No newline at end of file diff --git a/plugins/swiftpass/inc/class/PayHttpClient.class.php b/plugins/swiftpass/inc/class/PayHttpClient.class.php new file mode 100644 index 0000000..7ba0a7b --- /dev/null +++ b/plugins/swiftpass/inc/class/PayHttpClient.class.php @@ -0,0 +1,119 @@ +PayHttpClient(); + } + + + function PayHttpClient() { + $this->reqContent = ""; + $this->resContent = ""; + + $this->errInfo = ""; + + $this->timeOut = 120; + + $this->responseCode = 0; + + } + + //设置请求内容 + function setReqContent($url,$data) { + $this->reqUrl=$url; + $this->reqContent=$data; + } + + //获取结果内容 + function getResContent() { + return $this->resContent; + } + + //获取错误信息 + function getErrInfo() { + return $this->errInfo; + } + + //设置超时时间,单位秒 + function setTimeOut($timeOut) { + $this->timeOut = $timeOut; + } + + //执行http调用 + function call() { + //启动一个CURL会话 + $ch = curl_init(); + + // 设置curl允许执行的最长秒数 + curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeOut); + curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); + curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); + // 获取的信息以文件流的形式返回,而不是直接输出。 + curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); + + //发送一个常规的POST请求。 + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_URL, $this->reqUrl); + //要传送的所有数据 + curl_setopt($ch, CURLOPT_POSTFIELDS, $this->reqContent); + + // 执行操作 + $res = curl_exec($ch); + $this->responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + + if ($res == NULL) { + $this->errInfo = "call http err :" . curl_errno($ch) . " - " . curl_error($ch) ; + curl_close($ch); + return false; + } else if($this->responseCode != "200") { + $this->errInfo = "call http err httpcode=" . $this->responseCode ; + curl_close($ch); + return false; + } + + curl_close($ch); + $this->resContent = $res; + + + return true; + } + + function getResponseCode() { + return $this->responseCode; + } + +} +?> \ No newline at end of file diff --git a/plugins/swiftpass/inc/class/RequestHandler.class.php b/plugins/swiftpass/inc/class/RequestHandler.class.php new file mode 100644 index 0000000..7bd3994 --- /dev/null +++ b/plugins/swiftpass/inc/class/RequestHandler.class.php @@ -0,0 +1,225 @@ +RequestHandler(); + } + + function RequestHandler() { + $this->gateUrl = ""; + $this->key = ""; + $this->private_rsa_key = ""; + $this->signtype = ""; + $this->parameters = array(); + $this->debugInfo = ""; + } + + /** + *初始化函数。 + */ + function init() { + //nothing to do + } + + /** + *获取入口地址,不包含参数值 + */ + function getGateURL() { + return $this->gateUrl; + } + + /** + *设置入口地址,不包含参数值 + */ + function setGateURL($gateUrl) { + $this->gateUrl = $gateUrl; + } + + function setSignType($type) { + $this->signtype = $type; + } + + /** + *获取MD5密钥 + */ + function getKey() { + return $this->key; + } + + /** + *设置MD5密钥 + */ + function setKey($key) { + $this->key = $key; + } + + /*设置RSA私钥*/ + function setRSAKey($key) { + $this->private_rsa_key = $key; + } + + /** + *获取参数值 + */ + function getParameter($parameter) { + return isset($this->parameters[$parameter])?$this->parameters[$parameter]:''; + } + + /** + *设置参数值 + */ + function setParameter($parameter, $parameterValue) { + $this->parameters[$parameter] = $parameterValue; + } + + /** + * 一次性设置参数 + */ + function setReqParams($post,$filterField=null){ + if($filterField !== null){ + forEach($filterField as $k=>$v){ + unset($post[$v]); + } + } + + //判断是否存在空值,空值不提交 + forEach($post as $k=>$v){ + if(empty($v)){ + unset($post[$k]); + } + } + + $this->parameters = $post; + } + + /** + *获取所有请求的参数 + *@return array + */ + function getAllParameters() { + return $this->parameters; + } + + /** + *获取带参数的请求URL + */ + function getRequestURL() { + + $this->createSign(); + + $reqPar = ""; + ksort($this->parameters); + foreach($this->parameters as $k => $v) { + $reqPar .= $k . "=" . urlencode($v) . "&"; + } + + //去掉最后一个& + $reqPar = substr($reqPar, 0, strlen($reqPar)-1); + + $requestURL = $this->getGateURL() . "?" . $reqPar; + + return $requestURL; + + } + + /** + *获取debug信息 + */ + function getDebugInfo() { + return $this->debugInfo; + } + + /** + *创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。 + */ + function createSign() { + if($this->signtype == 'MD5') { + $this->createMD5Sign(); + } else { + $this->createRSASign(); + } + } + + function createMD5Sign() { + $signPars = ""; + ksort($this->parameters); + foreach($this->parameters as $k => $v) { + if("" != $v && "sign" != $k) { + $signPars .= $k . "=" . $v . "&"; + } + } + $signPars .= "key=" . $this->getKey(); + $sign = strtoupper(md5($signPars)); + $this->setParameter("sign", $sign); + + //debug信息 + $this->_setDebugInfo($signPars . " => sign:" . $sign); + } + + function createRSASign() { + $signPars = ""; + ksort($this->parameters); + foreach($this->parameters as $k => $v) { + if("" != $v && "sign" != $k) { + $signPars .= $k . "=" . $v . "&"; + } + } + + $signPars = substr($signPars, 0, strlen($signPars) - 1); + + $res = openssl_get_privatekey($this->private_rsa_key); + if ($this->signtype == 'RSA_1_1') { + openssl_sign($signPars, $sign, $res); + } else if ($this->signtype == 'RSA_1_256') { + openssl_sign($signPars, $sign, $res, OPENSSL_ALGO_SHA256); + } + openssl_free_key($res); + $sign = base64_encode($sign); + $this->setParameter("sign", $sign); + + //debug信息 + $this->_setDebugInfo($signPars . " => sign:" . $sign); + } + + /** + *设置debug信息 + */ + function _setDebugInfo($debugInfo) { + $this->debugInfo = $debugInfo; + } + +} + +?> \ No newline at end of file diff --git a/plugins/swiftpass/inc/class/Utils.class.php b/plugins/swiftpass/inc/class/Utils.class.php new file mode 100644 index 0000000..813ea4b --- /dev/null +++ b/plugins/swiftpass/inc/class/Utils.class.php @@ -0,0 +1,73 @@ +'; + forEach($array as $k=>$v){ + $xml.='<'.$k.'>'; + } + $xml.=''; + return $xml; + } + + public static function dataRecodes($title,$data){ + $handler = fopen('result.txt','a+'); + $content = "================".$title."===================\n"; + if(is_string($data) === true){ + $content .= $data."\n"; + } + if(is_array($data) === true){ + forEach($data as $k=>$v){ + $content .= "key: ".$k." value: ".$v."\n"; + } + } + $flag = fwrite($handler,$content); + fclose($handler); + return $flag; + } + + public static function parseXML($xmlSrc){ + if(empty($xmlSrc)){ + return false; + } + $array = array(); + libxml_disable_entity_loader(true); + $xml = simplexml_load_string($xmlSrc); + $encode = Utils::getXmlEncode($xmlSrc); + + if($xml && $xml->children()) { + foreach ($xml->children() as $node){ + //有子节点 + if($node->children()) { + $k = $node->getName(); + $nodeXml = $node->asXML(); + $v = substr($nodeXml, strlen($k)+2, strlen($nodeXml)-2*strlen($k)-5); + + } else { + $k = $node->getName(); + $v = (string)$node; + } + + if($encode!="" && $encode != "UTF-8") { + $k = iconv("UTF-8", $encode, $k); + $v = iconv("UTF-8", $encode, $v); + } + $array[$k] = $v; + } + } + return $array; + } + + //获取xml编码 + public static function getXmlEncode($xml) { + $ret = preg_match ("/]* encoding=\"(.*)\"[^>]* ?>/i", $xml, $arr); + if($ret) { + return strtoupper ( $arr[1] ); + } else { + return ""; + } + } +} +?> \ No newline at end of file diff --git a/plugins/swiftpass/inc/config.php b/plugins/swiftpass/inc/config.php new file mode 100644 index 0000000..3524db9 --- /dev/null +++ b/plugins/swiftpass/inc/config.php @@ -0,0 +1,20 @@ +'https://pay.swiftpass.cn/pay/gateway', /*支付接口请求地址 */ + 'mchId'=>PAY_API_APPID, /* 商户号,于申请成功后的开户邮件中获取 */ + 'version'=>'2.0', + 'sign_type'=>'RSA_1_256', + 'public_rsa_key'=>PAY_API_KEY, /* RSA验签平台公钥 */ + 'private_rsa_key'=>PAY_API_APPSECRET /* RSA签名私钥 */ + ); + + public function C($cfgName){ + return $this->cfg[$cfgName]; + } +} +?> \ No newline at end of file diff --git a/plugins/swiftpass/jdpay.php b/plugins/swiftpass/jdpay.php new file mode 100644 index 0000000..07bdf1a --- /dev/null +++ b/plugins/swiftpass/jdpay.php @@ -0,0 +1,157 @@ +setGateUrl($cfg->C('url')); +$reqHandler->setSignType($cfg->C('sign_type')); +$reqHandler->setRSAKey($cfg->C('private_rsa_key')); +$reqHandler->setParameter('service','pay.jdpay.native');//接口类型 +$reqHandler->setParameter('mch_id',$cfg->C('mchId'));//必填项,商户号,由平台分配 +$reqHandler->setParameter('version',$cfg->C('version')); +$reqHandler->setParameter('sign_type',$cfg->C('sign_type')); +$reqHandler->setParameter('body',$order['name']); +$reqHandler->setParameter('total_fee',strval($order['money']*100)); +$reqHandler->setParameter('mch_create_ip',$clientip); +$reqHandler->setParameter('out_trade_no',TRADE_NO); +$reqHandler->setParameter('notify_url',$conf['localurl'].'pay/swiftpass/notify/'.TRADE_NO.'/'); +$reqHandler->setParameter('nonce_str',mt_rand(time(),time()+rand()));//随机字符串,必填项,不长于 32 位 +$reqHandler->createSign();//创建签名 + +$data = Utils::toXml($reqHandler->getAllParameters()); +//var_dump($data); + +$pay->setReqContent($reqHandler->getGateURL(),$data); +if($pay->call()){ + $resHandler->setContent($pay->getResContent()); + $resHandler->setRSAKey($cfg->C('public_rsa_key')); + if($resHandler->isTenpaySign()){ + //当返回状态与业务结果都为0时才返回支付二维码,其它结果请查看接口文档 + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $code_url = $resHandler->getParameter('code_url'); + }else{ + sysmsg('京东支付下单失败 ['.$resHandler->getParameter('err_code').']'.$resHandler->getParameter('err_msg')); + } + }else{ + sysmsg('京东支付下单失败 ['.$resHandler->getParameter('status').']'.$resHandler->getParameter('message')); + } +}else{ + sysmsg('支付接口调用失败 ['.$pay->getResponseCode().']'.$pay->getErrInfo()); +} +?> + + + + + + +京东扫码支付 - <?php echo $sitename?> + + + +
    +

    +京东扫码支付 +

    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +

    请使用京东APP扫一扫

    +

    扫描二维码完成支付

    +
    +
    +
    +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/plugins/swiftpass/notify.php b/plugins/swiftpass/notify.php new file mode 100644 index 0000000..34d4841 --- /dev/null +++ b/plugins/swiftpass/notify.php @@ -0,0 +1,39 @@ +setContent($xml); + +$resHandler->setRSAKey($cfg->C('public_rsa_key')); +if($resHandler->isTenpaySign()){ + + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $transaction_id = $resHandler->getParameter('transaction_id'); + $out_trade_no = $resHandler->getParameter('out_trade_no'); + $total_fee = $resHandler->getParameter('total_fee'); + $fee_type = $resHandler->getParameter('fee_type'); + $openid = $resHandler->getParameter('openid'); + if($out_trade_no == TRADE_NO && $total_fee==strval($order['money']*100) && $order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='".TRADE_NO."'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$transaction_id',`endtime` ='$date',`buyer` ='$openid',`date`=NOW() where `trade_no`='".TRADE_NO."'"); + processOrder($order); + } + } + //Utils::dataRecodes('ӿڻصյ֪ͨ',$resHandler->getAllParameters()); + echo 'success'; + exit(); + }else{ + echo 'failure1'; + exit(); + } +}else{ + echo 'failure2'; +} +?> \ No newline at end of file diff --git a/plugins/swiftpass/qqpay.php b/plugins/swiftpass/qqpay.php new file mode 100644 index 0000000..6c46459 --- /dev/null +++ b/plugins/swiftpass/qqpay.php @@ -0,0 +1,166 @@ +setGateUrl($cfg->C('url')); +$reqHandler->setSignType($cfg->C('sign_type')); +$reqHandler->setRSAKey($cfg->C('private_rsa_key')); +$reqHandler->setParameter('service','pay.tenpay.native');//接口类型 +$reqHandler->setParameter('mch_id',$cfg->C('mchId'));//必填项,商户号,由平台分配 +$reqHandler->setParameter('version',$cfg->C('version')); +$reqHandler->setParameter('sign_type',$cfg->C('sign_type')); +$reqHandler->setParameter('body',$order['name']); +$reqHandler->setParameter('total_fee',strval($order['money']*100)); +$reqHandler->setParameter('mch_create_ip',$clientip); +$reqHandler->setParameter('out_trade_no',TRADE_NO); +$reqHandler->setParameter('notify_url',$conf['localurl'].'pay/swiftpass/notify/'.TRADE_NO.'/'); +$reqHandler->setParameter('nonce_str',mt_rand(time(),time()+rand()));//随机字符串,必填项,不长于 32 位 +$reqHandler->createSign();//创建签名 + +$data = Utils::toXml($reqHandler->getAllParameters()); +//var_dump($data); + +$pay->setReqContent($reqHandler->getGateURL(),$data); +if($pay->call()){ + $resHandler->setContent($pay->getResContent()); + $resHandler->setRSAKey($cfg->C('public_rsa_key')); + if($resHandler->isTenpaySign()){ + //当返回状态与业务结果都为0时才返回支付二维码,其它结果请查看接口文档 + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $code_url = $resHandler->getParameter('code_url'); + if(strpos($code_url,'myun.tenpay.com')){ + $qrcode=explode('&t=',$code_url); + $code_url = 'https://qpay.qq.com/qr/'.$qrcode[1]; + } + }else{ + sysmsg('QQ钱包支付下单失败 ['.$resHandler->getParameter('err_code').']'.$resHandler->getParameter('err_msg')); + } + }else{ + sysmsg('QQ钱包支付下单失败 ['.$resHandler->getParameter('status').']'.$resHandler->getParameter('message')); + } +}else{ + sysmsg('支付接口调用失败 ['.$pay->getResponseCode().']'.$pay->getErrInfo()); +} + +?> + + + + + + +QQ钱包安全支付 - <?php echo $sitename?> + + + +
    +

    +QQ钱包支付 +

    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +

    请使用手机QQ扫一扫

    +

    扫描二维码完成支付

    +
    +
    +
    +
    +
    +
    +
    +

    手机用户可保存上方二维码到手机中

    +

    在手机QQ扫一扫中选择“相册”即可

    +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/plugins/swiftpass/qqwappay.php b/plugins/swiftpass/qqwappay.php new file mode 100644 index 0000000..246bfd0 --- /dev/null +++ b/plugins/swiftpass/qqwappay.php @@ -0,0 +1,146 @@ +setGateUrl($cfg->C('url')); +$reqHandler->setSignType($cfg->C('sign_type')); +$reqHandler->setRSAKey($cfg->C('private_rsa_key')); +$reqHandler->setParameter('service','pay.tenpay.native');//接口类型 +$reqHandler->setParameter('mch_id',$cfg->C('mchId'));//必填项,商户号,由平台分配 +$reqHandler->setParameter('version',$cfg->C('version')); +$reqHandler->setParameter('sign_type',$cfg->C('sign_type')); +$reqHandler->setParameter('body',$order['name']); +$reqHandler->setParameter('total_fee',strval($order['money']*100)); +$reqHandler->setParameter('mch_create_ip',$clientip); +$reqHandler->setParameter('out_trade_no',TRADE_NO); +$reqHandler->setParameter('notify_url',$conf['localurl'].'pay/swiftpass/notify/'.TRADE_NO.'/'); +$reqHandler->setParameter('nonce_str',mt_rand(time(),time()+rand()));//随机字符串,必填项,不长于 32 位 +$reqHandler->createSign();//创建签名 + +$data = Utils::toXml($reqHandler->getAllParameters()); +//var_dump($data); + +$pay->setReqContent($reqHandler->getGateURL(),$data); +if($pay->call()){ + $resHandler->setContent($pay->getResContent()); + $resHandler->setRSAKey($cfg->C('public_rsa_key')); + if($resHandler->isTenpaySign()){ + //当返回状态与业务结果都为0时才返回支付二维码,其它结果请查看接口文档 + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $code_url = $resHandler->getParameter('code_url'); + }else{ + sysmsg('QQ钱包支付下单失败 ['.$resHandler->getParameter('err_code').']'.$resHandler->getParameter('err_msg')); + } + }else{ + sysmsg('QQ钱包支付下单失败 ['.$resHandler->getParameter('status').']'.$resHandler->getParameter('message')); + } +}else{ + sysmsg('支付接口调用失败 ['.$pay->getResponseCode().']'.$pay->getErrInfo()); +} +if(strpos($_SERVER['HTTP_USER_AGENT'], 'QQ/')!==false){ + exit(""); +} + +?> + + + + + QQ钱包支付 + + + + +
    +
    +

    + QQ钱包支付手机版 +

    +
    +

    +
    商品名称:
    商户订单号:
    创建时间:
    + + + +
    +
    +
    + + + + + \ No newline at end of file diff --git a/plugins/swiftpass/return.php b/plugins/swiftpass/return.php new file mode 100644 index 0000000..1d5f103 --- /dev/null +++ b/plugins/swiftpass/return.php @@ -0,0 +1,64 @@ + + + + + + + + + + +
    +

    订单处理结果

    +
    +
    +
    +
    +正在检测付款结果... + + + +
    +
    + + \ No newline at end of file diff --git a/plugins/swiftpass/submit.php b/plugins/swiftpass/submit.php new file mode 100644 index 0000000..530da9c --- /dev/null +++ b/plugins/swiftpass/submit.php @@ -0,0 +1,28 @@ +window.location.href='/pay/swiftpass/alipay/{$trade_no}/';"; +}elseif($order['typename']=='wxpay'){ + if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')!==false){ + echo ""; + }elseif(checkmobile()==true){ + if(in_array('2',$channel['apptype'])){ + echo ""; + }else{ + echo ""; + } + }else{ + echo ""; + } +}elseif($order['typename']=='qqpay'){ + if(checkmobile()==true){ + echo ""; + }else{ + echo ""; + } +}elseif($order['typename']=='jdpay'){ + echo ""; +}elseif($order['typename']=='bank'){ + echo ""; +} diff --git a/plugins/swiftpass/wxh5pay.php b/plugins/swiftpass/wxh5pay.php new file mode 100644 index 0000000..55b2180 --- /dev/null +++ b/plugins/swiftpass/wxh5pay.php @@ -0,0 +1,57 @@ +setGateUrl($cfg->C('url')); +$reqHandler->setSignType($cfg->C('sign_type')); +$reqHandler->setRSAKey($cfg->C('private_rsa_key')); +$reqHandler->setParameter('service','pay.weixin.wappay');//接口类型 +$reqHandler->setParameter('mch_id',$cfg->C('mchId'));//必填项,商户号,由平台分配 +$reqHandler->setParameter('version',$cfg->C('version')); +$reqHandler->setParameter('sign_type',$cfg->C('sign_type')); +$reqHandler->setParameter('body',$order['name']); +$reqHandler->setParameter('total_fee',strval($order['money']*100)); +$reqHandler->setParameter('mch_create_ip',$clientip); +$reqHandler->setParameter('out_trade_no',TRADE_NO); +$reqHandler->setParameter('device_info', 'AND_WAP');//应用类型 +$reqHandler->setParameter('mch_app_name',$sitename);//应用名 +$reqHandler->setParameter('mch_app_id',$siteurl);//应用标识 +$reqHandler->setParameter('notify_url',$conf['localurl'].'pay/swiftpass/notify/'.TRADE_NO.'/'); +$reqHandler->setParameter('callback_url',$siteurl.'pay/swiftpass/return/'.TRADE_NO.'/'); +$reqHandler->setParameter('nonce_str',mt_rand(time(),time()+rand()));//随机字符串,必填项,不长于 32 位 +$reqHandler->createSign();//创建签名 + +$data = Utils::toXml($reqHandler->getAllParameters()); +//var_dump($data); + +$pay->setReqContent($reqHandler->getGateURL(),$data); +if($pay->call()){ + $resHandler->setContent($pay->getResContent()); + $resHandler->setRSAKey($cfg->C('public_rsa_key')); + if($resHandler->isTenpaySign()){ + //当返回状态与业务结果都为0时才返回支付二维码,其它结果请查看接口文档 + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $pay_info = $resHandler->getParameter('pay_info'); + exit(""); + }else{ + sysmsg('微信支付下单失败 ['.$resHandler->getParameter('err_code').']'.$resHandler->getParameter('err_msg')); + } + }else{ + sysmsg('微信支付下单失败 ['.$resHandler->getParameter('status').']'.$resHandler->getParameter('message')); + } +}else{ + sysmsg('支付接口调用失败 ['.$pay->getResponseCode().']'.$pay->getErrInfo()); +} +?> \ No newline at end of file diff --git a/plugins/swiftpass/wxjspay.php b/plugins/swiftpass/wxjspay.php new file mode 100644 index 0000000..4ddf142 --- /dev/null +++ b/plugins/swiftpass/wxjspay.php @@ -0,0 +1,160 @@ +GetOpenid(); +//②、统一下单 +require(PAY_ROOT.'inc/class/Utils.class.php'); +require(PAY_ROOT.'inc/config.php'); +require(PAY_ROOT.'inc/class/RequestHandler.class.php'); +require(PAY_ROOT.'inc/class/ClientResponseHandler.class.php'); +require(PAY_ROOT.'inc/class/PayHttpClient.class.php'); + +$resHandler = new ClientResponseHandler(); +$reqHandler = new RequestHandler(); +$pay = new PayHttpClient(); +$cfg = new Config(); + +$reqHandler->setGateUrl($cfg->C('url')); +$reqHandler->setSignType($cfg->C('sign_type')); +$reqHandler->setRSAKey($cfg->C('private_rsa_key')); +$reqHandler->setParameter('service','pay.weixin.jspay');//接口类型 +$reqHandler->setParameter('mch_id',$cfg->C('mchId'));//必填项,商户号,由平台分配 +$reqHandler->setParameter('version',$cfg->C('version')); +$reqHandler->setParameter('sign_type',$cfg->C('sign_type')); +$reqHandler->setParameter('is_raw','1'); +$reqHandler->setParameter('body',$order['name']); +$reqHandler->setParameter('sub_appid',WxPayConfig::APPID); +$reqHandler->setParameter('sub_openid',$openId); +$reqHandler->setParameter('total_fee',strval($order['money']*100)); +$reqHandler->setParameter('mch_create_ip',$clientip); +$reqHandler->setParameter('out_trade_no',TRADE_NO); +$reqHandler->setParameter('device_info', 'AND_WAP');//应用类型 +$reqHandler->setParameter('notify_url',$conf['localurl'].'pay/swiftpass/notify/'.TRADE_NO.'/'); +$reqHandler->setParameter('nonce_str',mt_rand(time(),time()+rand()));//随机字符串,必填项,不长于 32 位 +$reqHandler->createSign();//创建签名 + +$data = Utils::toXml($reqHandler->getAllParameters()); +//var_dump($data); + +$pay->setReqContent($reqHandler->getGateURL(),$data); +if($pay->call()){ + $resHandler->setContent($pay->getResContent()); + $resHandler->setRSAKey($cfg->C('public_rsa_key')); + if($resHandler->isTenpaySign()){ + //当返回状态与业务结果都为0时才返回支付二维码,其它结果请查看接口文档 + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $pay_info = $resHandler->getParameter('pay_info'); + }else{ + sysmsg('微信支付下单失败 ['.$resHandler->getParameter('err_code').']'.$resHandler->getParameter('err_msg')); + } + }else{ + sysmsg('微信支付下单失败 ['.$resHandler->getParameter('status').']'.$resHandler->getParameter('message')); + } +}else{ + sysmsg('支付接口调用失败 ['.$pay->getResponseCode().']'.$pay->getErrInfo()); +} +if($_GET['d']==1){ + $redirect_url='window.location.href=data.backurl'; +}else{ + $redirect_url='WeixinJSBridge.invoke("closeWindow", {}, function(e) {});'; +} +?> + + + + + + + + + +
    +

    微信安全支付

    +
    +
    +
    +
    +正在跳转... + + +
    +
    + + \ No newline at end of file diff --git a/plugins/swiftpass/wxpay.php b/plugins/swiftpass/wxpay.php new file mode 100644 index 0000000..5ce2924 --- /dev/null +++ b/plugins/swiftpass/wxpay.php @@ -0,0 +1,161 @@ +setGateUrl($cfg->C('url')); +$reqHandler->setSignType($cfg->C('sign_type')); +$reqHandler->setRSAKey($cfg->C('private_rsa_key')); +$reqHandler->setParameter('service','pay.weixin.native');//接口类型 +$reqHandler->setParameter('mch_id',$cfg->C('mchId'));//必填项,商户号,由平台分配 +$reqHandler->setParameter('version',$cfg->C('version')); +$reqHandler->setParameter('sign_type',$cfg->C('sign_type')); +$reqHandler->setParameter('body',$order['name']); +$reqHandler->setParameter('total_fee',strval($order['money']*100)); +$reqHandler->setParameter('mch_create_ip',$clientip); +$reqHandler->setParameter('out_trade_no',TRADE_NO); +$reqHandler->setParameter('notify_url',$conf['localurl'].'pay/swiftpass/notify/'.TRADE_NO.'/'); +$reqHandler->setParameter('nonce_str',mt_rand(time(),time()+rand()));//随机字符串,必填项,不长于 32 位 +$reqHandler->createSign();//创建签名 + +$data = Utils::toXml($reqHandler->getAllParameters()); +//var_dump($data); + +$pay->setReqContent($reqHandler->getGateURL(),$data); +if($pay->call()){ + $resHandler->setContent($pay->getResContent()); + $resHandler->setRSAKey($cfg->C('public_rsa_key')); + if($resHandler->isTenpaySign()){ + //当返回状态与业务结果都为0时才返回支付二维码,其它结果请查看接口文档 + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $code_url = $resHandler->getParameter('code_url'); + }else{ + sysmsg('微信支付下单失败 ['.$resHandler->getParameter('err_code').']'.$resHandler->getParameter('err_msg')); + } + }else{ + sysmsg('微信支付下单失败 ['.$resHandler->getParameter('status').']'.$resHandler->getParameter('message')); + } +}else{ + sysmsg('支付接口调用失败 ['.$pay->getResponseCode().']'.$pay->getErrInfo()); +} + +?> + + + + + + +微信安全支付 - <?php echo $sitename?> + + + +
    +

    +微信支付 +

    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +

    请使用微信扫一扫

    +

    扫描二维码完成支付

    +
    +
    +
    +
    +
    +
    +
    +

    手机用户可保存上方二维码到手机中

    +

    在微信扫一扫中选择“相册”即可

    +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/plugins/swiftpass/wxwappay.php b/plugins/swiftpass/wxwappay.php new file mode 100644 index 0000000..4de0e55 --- /dev/null +++ b/plugins/swiftpass/wxwappay.php @@ -0,0 +1,106 @@ + + + + + + 微信支付 + + + + +
    +
    +

    + 微信支付手机版 +

    +
    +
    长按保存到相册使用扫码扫码完成支付
    +
    +
    +
    +
    或复制以下链接到微信打开:
    +
    +
    +
    +
    提示:你可以将以上链接发到自己微信的聊天框(在微信顶部搜索框可以搜到自己的微信),即可点击进入支付
    + +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/plugins/unionpay/alipay.php b/plugins/unionpay/alipay.php new file mode 100644 index 0000000..9fa96c2 --- /dev/null +++ b/plugins/unionpay/alipay.php @@ -0,0 +1,181 @@ +setGateUrl($cfg->C('url')); +$reqHandler->setSignType($cfg->C('sign_type')); +$reqHandler->setKey($cfg->C('key')); +$reqHandler->setParameter('service','unified.trade.native');//接口类型 +$reqHandler->setParameter('mch_id',$cfg->C('mchId'));//必填项,商户号,由平台分配 +$reqHandler->setParameter('version',$cfg->C('version')); +$reqHandler->setParameter('sign_type',$cfg->C('sign_type')); +$reqHandler->setParameter('body',$ordername); +$reqHandler->setParameter('total_fee',strval($order['money']*100)); +$reqHandler->setParameter('mch_create_ip',$clientip); +$reqHandler->setParameter('out_trade_no',TRADE_NO); +$reqHandler->setParameter('notify_url',$conf['localurl'].'pay/unionpay/notify/'.TRADE_NO.'/'); +$reqHandler->setParameter('nonce_str',mt_rand(time(),time()+rand()));//随机字符串,必填项,不长于 32 位 +$reqHandler->createSign();//创建签名 + +$data = Utils::toXml($reqHandler->getAllParameters()); +//var_dump($data); + +$pay->setReqContent($reqHandler->getGateURL(),$data); +if($pay->call()){ + $resHandler->setContent($pay->getResContent()); + $resHandler->setKey($cfg->C('key')); + if($resHandler->isTenpaySign()){ + //当返回状态与业务结果都为0时才返回支付二维码,其它结果请查看接口文档 + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $code_url = $resHandler->getParameter('code_url'); + }else{ + sysmsg('支付宝支付下单失败 ['.$resHandler->getParameter('err_code').']'.$resHandler->getParameter('err_msg')); + } + }else{ + sysmsg('支付宝支付下单失败 ['.$resHandler->getParameter('status').']'.$resHandler->getParameter('message')); + } +}else{ + sysmsg('支付接口调用失败 ['.$pay->getResponseCode().']'.$pay->getErrInfo()); +} +?> + + + + + + +支付宝扫码支付 - <?php echo $sitename?> + + + +
    +

    +支付宝扫码支付 +

    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +

    请使用支付宝扫一扫

    +

    扫描二维码完成支付

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    正在打开支付宝...

    +

    如果没有打开支付宝,请点此重新唤起

    +
    +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/plugins/unionpay/config.ini b/plugins/unionpay/config.ini new file mode 100644 index 0000000..5168eb6 --- /dev/null +++ b/plugins/unionpay/config.ini @@ -0,0 +1,21 @@ +[config] +;支付插件英文名称,需和目录名称一致,不能有重复 +name = "unionpay" + +;支付插件显示名称 +showname = "银联扫码支付" + +;支付插件作者 +author = "银联" + +;支付插件作者链接 +link = "http://www.95516.com/" + +;支付插件支持的支付方式,多种方式用英文,隔开,可选的有alipay,qqpay,wxpay,bank +types = "alipay,wxpay,bank" + +;支付插件要求传入的参数以及参数显示名称,可选的有appid,appkey,appsecret,appurl,appmchid +inputs = "appid:商户号,appkey:商户密钥" + +;支付插件要求传入的支付方式参数 +select = "" \ No newline at end of file diff --git a/plugins/unionpay/inc/WxPay.JsApiPay.php b/plugins/unionpay/inc/WxPay.JsApiPay.php new file mode 100644 index 0000000..e8c0b59 --- /dev/null +++ b/plugins/unionpay/inc/WxPay.JsApiPay.php @@ -0,0 +1,167 @@ +getMessage(); + } +} + +/** + * + * JSAPI支付实现类 + * 该类实现了从微信公众平台获取code、通过code获取openid和access_token、 + * 生成jsapi支付js接口所需的参数、生成获取共享收货地址所需的参数 + * + * 该类是微信支付提供的样例程序,商户可根据自己的需求修改,或者使用lib中的api自行开发 + * + * @author widy + * + */ +class JsApiPay +{ + /** + * + * 网页授权接口微信服务器返回的数据,返回样例如下 + * { + * "access_token":"ACCESS_TOKEN", + * "expires_in":7200, + * "refresh_token":"REFRESH_TOKEN", + * "openid":"OPENID", + * "scope":"SCOPE", + * "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL" + * } + * 其中access_token可用于获取共享收货地址 + * openid是微信支付jsapi支付接口必须的参数 + * @var array + */ + public $data = null; + + /** + * + * 通过跳转获取用户的openid,跳转流程如下: + * 1、设置自己需要调回的url及其其他参数,跳转到微信服务器https://open.weixin.qq.com/connect/oauth2/authorize + * 2、微信服务处理完成之后会跳转回用户redirect_uri地址,此时会带上一些参数,如:code + * + * @return 用户的openid + */ + public function GetOpenid() + { + //通过code获得openid + if (!isset($_GET['code'])){ + //触发微信返回code码 + $baseUrl = urlencode('http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']); + $url = $this->__CreateOauthUrlForCode($baseUrl); + Header("Location: $url"); + exit(); + } else { + //获取code码,以获取openid + $code = $_GET['code']; + $openid = $this->GetOpenidFromMp($code); + return $openid; + } + } + + /** + * + * 通过code从工作平台获取openid机器access_token + * @param string $code 微信跳转回来带上的code + * + * @return openid + */ + public function GetOpenidFromMp($code) + { + $url = $this->__CreateOauthUrlForOpenid($code); + //初始化curl + $ch = curl_init(); + //设置超时 + curl_setopt($ch, CURLOPT_TIMEOUT, $this->curl_timeout); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); + curl_setopt($ch, CURLOPT_HEADER, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + //运行curl,结果以jason形式返回 + $res = curl_exec($ch); + curl_close($ch); + //取出openid + $data = json_decode($res,true); + $this->data = $data; + $openid = $data['openid']; + return $openid; + } + + /** + * + * 拼接签名字符串 + * @param array $urlObj + * + * @return 返回已经拼接好的字符串 + */ + private function ToUrlParams($urlObj) + { + $buff = ""; + foreach ($urlObj as $k => $v) + { + if($k != "sign"){ + $buff .= $k . "=" . $v . "&"; + } + } + + $buff = trim($buff, "&"); + return $buff; + } + + /** + * + * 构造获取code的url连接 + * @param string $redirectUrl 微信服务器回跳的url,需要url编码 + * + * @return 返回构造好的url + */ + private function __CreateOauthUrlForCode($redirectUrl) + { + $urlObj["appid"] = WxPayConfig::APPID; + $urlObj["redirect_uri"] = $redirectUrl; + $urlObj["response_type"] = "code"; + $urlObj["scope"] = "snsapi_base"; + $urlObj["state"] = "STATE"."#wechat_redirect"; + $bizString = $this->ToUrlParams($urlObj); + return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString; + } + + /** + * + * 构造获取open和access_toke的url地址 + * @param string $code,微信跳转带回的code + * + * @return 请求的url + */ + private function __CreateOauthUrlForOpenid($code) + { + $urlObj["appid"] = WxPayConfig::APPID; + $urlObj["secret"] = WxPayConfig::APPSECRET; + $urlObj["code"] = $code; + $urlObj["grant_type"] = "authorization_code"; + $bizString = $this->ToUrlParams($urlObj); + return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString; + } +} \ No newline at end of file diff --git a/plugins/unionpay/inc/class/ClientResponseHandler.class.php b/plugins/unionpay/inc/class/ClientResponseHandler.class.php new file mode 100644 index 0000000..993cf76 --- /dev/null +++ b/plugins/unionpay/inc/class/ClientResponseHandler.class.php @@ -0,0 +1,236 @@ +ClientResponseHandler(); + } + + function ClientResponseHandler() { + $this->key = ""; + $this->public_rsa_key = ""; + $this->signtype = ""; + $this->parameters = array(); + $this->debugInfo = ""; + $this->content = ""; + } + + /** + *获取密钥 + */ + function getKey() { + return $this->key; + } + + /** + *设置密钥 + */ + function setKey($key) { + $this->key = $key; + } + + /*设置平台公钥*/ + function setRSAKey($key) { + $this->public_rsa_key = $key; + } + + function setSignType($type) { + $this->signtype = $type; + } + + //设置原始内容 + function setContent($content) { + $this->content = $content; + + libxml_disable_entity_loader(true); + $xml = simplexml_load_string($this->content); + $encode = $this->getXmlEncode($this->content); + + if($xml && $xml->children()) { + foreach ($xml->children() as $node){ + //有子节点 + if($node->children()) { + $k = $node->getName(); + $nodeXml = $node->asXML(); + $v = substr($nodeXml, strlen($k)+2, strlen($nodeXml)-2*strlen($k)-5); + + } else { + $k = $node->getName(); + $v = (string)$node; + } + + if($encode!="" && $encode != "UTF-8") { + $k = iconv("UTF-8", $encode, $k); + $v = iconv("UTF-8", $encode, $v); + } + + $this->setParameter($k, $v); + } + } + } + + //获取原始内容 + function getContent() { + return $this->content; + } + + /** + *获取参数值 + */ + function getParameter($parameter) { + return isset($this->parameters[$parameter])?$this->parameters[$parameter] : ''; + } + + /** + *设置参数值 + */ + function setParameter($parameter, $parameterValue) { + $this->parameters[$parameter] = $parameterValue; + } + + /** + *获取所有请求的参数 + *@return array + */ + function getAllParameters() { + return $this->parameters; + } + + /** + *是否平台签名,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。 + *true:是 + *false:否 + */ + function isTenpaySign() { + $swiftpassSign = strtolower($this->getParameter("sign")); + if ($this->getParameter('sign_type') == 'MD5') { + return $this->getMD5Sign() == $swiftpassSign; + } else if ($this->getParameter('sign_type') == 'RSA_1_1' || $this->getParameter('sign_type') == 'RSA_1_256') { + return $this->verifyRSASign(); + } + } + + function getMD5Sign() { + $signPars = ""; + ksort($this->parameters); + foreach($this->parameters as $k => $v) { + if("sign" != $k && "" != $v) { + $signPars .= $k . "=" . $v . "&"; + } + } + $signPars .= "key=" . $this->getKey(); + + return strtolower(md5($signPars)); + } + + function verifyRSASign() { + $signPars = ""; + ksort($this->parameters); + foreach($this->parameters as $k => $v) { + if("sign" != $k && "" != $v) { + $signPars .= $k . "=" . $v . "&"; + } + } + + $signPars = substr($signPars, 0, strlen($signPars) - 1); + $res = openssl_get_publickey($this->public_rsa_key); + if ($this->getParameter('sign_type') == 'RSA_1_1') { + $result = (bool)openssl_verify($signPars, base64_decode($this->getParameter("sign")), $res); + openssl_free_key($res); + return $result; + } else if($this->getParameter('sign_type') == 'RSA_1_256') { + $result = (bool)openssl_verify($signPars, base64_decode($this->getParameter("sign")), $res, OPENSSL_ALGO_SHA256); + openssl_free_key($res); + return $result; + } + } + + /** + *获取debug信息 + */ + function getDebugInfo() { + return $this->debugInfo; + } + + //获取xml编码 + function getXmlEncode($xml) { + $ret = preg_match ("/]* encoding=\"(.*)\"[^>]* ?>/i", $xml, $arr); + if($ret) { + return strtoupper ( $arr[1] ); + } else { + return ""; + } + } + + /** + *设置debug信息 + */ + function _setDebugInfo($debugInfo) { + $this->debugInfo = $debugInfo; + } + + /** + * 是否财付通签名 + * @param signParameterArray 签名的参数数组 + * @return boolean + */ + function _isTenpaySign($signParameterArray) { + + $signPars = ""; + foreach($signParameterArray as $k) { + $v = $this->getParameter($k); + if("sign" != $k && "" != $v) { + $signPars .= $k . "=" . $v . "&"; + } + } + $signPars .= "key=" . $this->getKey(); + + $sign = strtolower(md5($signPars)); + + $tenpaySign = strtolower($this->getParameter("sign")); + + //debug信息 + $this->_setDebugInfo($signPars . " => sign:" . $sign . + " tenpaySign:" . $this->getParameter("sign")); + + return $sign == $tenpaySign; + + + } + +} + + +?> \ No newline at end of file diff --git a/plugins/unionpay/inc/class/PayHttpClient.class.php b/plugins/unionpay/inc/class/PayHttpClient.class.php new file mode 100644 index 0000000..7ba0a7b --- /dev/null +++ b/plugins/unionpay/inc/class/PayHttpClient.class.php @@ -0,0 +1,119 @@ +PayHttpClient(); + } + + + function PayHttpClient() { + $this->reqContent = ""; + $this->resContent = ""; + + $this->errInfo = ""; + + $this->timeOut = 120; + + $this->responseCode = 0; + + } + + //设置请求内容 + function setReqContent($url,$data) { + $this->reqUrl=$url; + $this->reqContent=$data; + } + + //获取结果内容 + function getResContent() { + return $this->resContent; + } + + //获取错误信息 + function getErrInfo() { + return $this->errInfo; + } + + //设置超时时间,单位秒 + function setTimeOut($timeOut) { + $this->timeOut = $timeOut; + } + + //执行http调用 + function call() { + //启动一个CURL会话 + $ch = curl_init(); + + // 设置curl允许执行的最长秒数 + curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeOut); + curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false); + curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); + // 获取的信息以文件流的形式返回,而不是直接输出。 + curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); + + //发送一个常规的POST请求。 + curl_setopt($ch, CURLOPT_POST, 1); + curl_setopt($ch, CURLOPT_URL, $this->reqUrl); + //要传送的所有数据 + curl_setopt($ch, CURLOPT_POSTFIELDS, $this->reqContent); + + // 执行操作 + $res = curl_exec($ch); + $this->responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); + + if ($res == NULL) { + $this->errInfo = "call http err :" . curl_errno($ch) . " - " . curl_error($ch) ; + curl_close($ch); + return false; + } else if($this->responseCode != "200") { + $this->errInfo = "call http err httpcode=" . $this->responseCode ; + curl_close($ch); + return false; + } + + curl_close($ch); + $this->resContent = $res; + + + return true; + } + + function getResponseCode() { + return $this->responseCode; + } + +} +?> \ No newline at end of file diff --git a/plugins/unionpay/inc/class/RequestHandler.class.php b/plugins/unionpay/inc/class/RequestHandler.class.php new file mode 100644 index 0000000..7bd3994 --- /dev/null +++ b/plugins/unionpay/inc/class/RequestHandler.class.php @@ -0,0 +1,225 @@ +RequestHandler(); + } + + function RequestHandler() { + $this->gateUrl = ""; + $this->key = ""; + $this->private_rsa_key = ""; + $this->signtype = ""; + $this->parameters = array(); + $this->debugInfo = ""; + } + + /** + *初始化函数。 + */ + function init() { + //nothing to do + } + + /** + *获取入口地址,不包含参数值 + */ + function getGateURL() { + return $this->gateUrl; + } + + /** + *设置入口地址,不包含参数值 + */ + function setGateURL($gateUrl) { + $this->gateUrl = $gateUrl; + } + + function setSignType($type) { + $this->signtype = $type; + } + + /** + *获取MD5密钥 + */ + function getKey() { + return $this->key; + } + + /** + *设置MD5密钥 + */ + function setKey($key) { + $this->key = $key; + } + + /*设置RSA私钥*/ + function setRSAKey($key) { + $this->private_rsa_key = $key; + } + + /** + *获取参数值 + */ + function getParameter($parameter) { + return isset($this->parameters[$parameter])?$this->parameters[$parameter]:''; + } + + /** + *设置参数值 + */ + function setParameter($parameter, $parameterValue) { + $this->parameters[$parameter] = $parameterValue; + } + + /** + * 一次性设置参数 + */ + function setReqParams($post,$filterField=null){ + if($filterField !== null){ + forEach($filterField as $k=>$v){ + unset($post[$v]); + } + } + + //判断是否存在空值,空值不提交 + forEach($post as $k=>$v){ + if(empty($v)){ + unset($post[$k]); + } + } + + $this->parameters = $post; + } + + /** + *获取所有请求的参数 + *@return array + */ + function getAllParameters() { + return $this->parameters; + } + + /** + *获取带参数的请求URL + */ + function getRequestURL() { + + $this->createSign(); + + $reqPar = ""; + ksort($this->parameters); + foreach($this->parameters as $k => $v) { + $reqPar .= $k . "=" . urlencode($v) . "&"; + } + + //去掉最后一个& + $reqPar = substr($reqPar, 0, strlen($reqPar)-1); + + $requestURL = $this->getGateURL() . "?" . $reqPar; + + return $requestURL; + + } + + /** + *获取debug信息 + */ + function getDebugInfo() { + return $this->debugInfo; + } + + /** + *创建md5摘要,规则是:按参数名称a-z排序,遇到空值的参数不参加签名。 + */ + function createSign() { + if($this->signtype == 'MD5') { + $this->createMD5Sign(); + } else { + $this->createRSASign(); + } + } + + function createMD5Sign() { + $signPars = ""; + ksort($this->parameters); + foreach($this->parameters as $k => $v) { + if("" != $v && "sign" != $k) { + $signPars .= $k . "=" . $v . "&"; + } + } + $signPars .= "key=" . $this->getKey(); + $sign = strtoupper(md5($signPars)); + $this->setParameter("sign", $sign); + + //debug信息 + $this->_setDebugInfo($signPars . " => sign:" . $sign); + } + + function createRSASign() { + $signPars = ""; + ksort($this->parameters); + foreach($this->parameters as $k => $v) { + if("" != $v && "sign" != $k) { + $signPars .= $k . "=" . $v . "&"; + } + } + + $signPars = substr($signPars, 0, strlen($signPars) - 1); + + $res = openssl_get_privatekey($this->private_rsa_key); + if ($this->signtype == 'RSA_1_1') { + openssl_sign($signPars, $sign, $res); + } else if ($this->signtype == 'RSA_1_256') { + openssl_sign($signPars, $sign, $res, OPENSSL_ALGO_SHA256); + } + openssl_free_key($res); + $sign = base64_encode($sign); + $this->setParameter("sign", $sign); + + //debug信息 + $this->_setDebugInfo($signPars . " => sign:" . $sign); + } + + /** + *设置debug信息 + */ + function _setDebugInfo($debugInfo) { + $this->debugInfo = $debugInfo; + } + +} + +?> \ No newline at end of file diff --git a/plugins/unionpay/inc/class/Utils.class.php b/plugins/unionpay/inc/class/Utils.class.php new file mode 100644 index 0000000..813ea4b --- /dev/null +++ b/plugins/unionpay/inc/class/Utils.class.php @@ -0,0 +1,73 @@ +'; + forEach($array as $k=>$v){ + $xml.='<'.$k.'>'; + } + $xml.=''; + return $xml; + } + + public static function dataRecodes($title,$data){ + $handler = fopen('result.txt','a+'); + $content = "================".$title."===================\n"; + if(is_string($data) === true){ + $content .= $data."\n"; + } + if(is_array($data) === true){ + forEach($data as $k=>$v){ + $content .= "key: ".$k." value: ".$v."\n"; + } + } + $flag = fwrite($handler,$content); + fclose($handler); + return $flag; + } + + public static function parseXML($xmlSrc){ + if(empty($xmlSrc)){ + return false; + } + $array = array(); + libxml_disable_entity_loader(true); + $xml = simplexml_load_string($xmlSrc); + $encode = Utils::getXmlEncode($xmlSrc); + + if($xml && $xml->children()) { + foreach ($xml->children() as $node){ + //有子节点 + if($node->children()) { + $k = $node->getName(); + $nodeXml = $node->asXML(); + $v = substr($nodeXml, strlen($k)+2, strlen($nodeXml)-2*strlen($k)-5); + + } else { + $k = $node->getName(); + $v = (string)$node; + } + + if($encode!="" && $encode != "UTF-8") { + $k = iconv("UTF-8", $encode, $k); + $v = iconv("UTF-8", $encode, $v); + } + $array[$k] = $v; + } + } + return $array; + } + + //获取xml编码 + public static function getXmlEncode($xml) { + $ret = preg_match ("/]* encoding=\"(.*)\"[^>]* ?>/i", $xml, $arr); + if($ret) { + return strtoupper ( $arr[1] ); + } else { + return ""; + } + } +} +?> \ No newline at end of file diff --git a/plugins/unionpay/inc/config.php b/plugins/unionpay/inc/config.php new file mode 100644 index 0000000..87c114d --- /dev/null +++ b/plugins/unionpay/inc/config.php @@ -0,0 +1,18 @@ +'https://qra.95516.com/pay/gateway',/*支付请求接口地址,无需更改 */ + 'mchId'=>PAY_API_APPID,/* 测试商户号 */ + 'key'=>PAY_API_KEY, /* 测试密钥 */ + 'version'=>'2.0', + 'sign_type'=>'MD5' + ); + + public function C($cfgName){ + return $this->cfg[$cfgName]; + } +} +?> \ No newline at end of file diff --git a/plugins/unionpay/notify.php b/plugins/unionpay/notify.php new file mode 100644 index 0000000..d665c68 --- /dev/null +++ b/plugins/unionpay/notify.php @@ -0,0 +1,39 @@ +setContent($xml); + +$resHandler->setKey($cfg->C('key')); +if($resHandler->isTenpaySign()){ + + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $transaction_id = $resHandler->getParameter('transaction_id'); + $out_trade_no = $resHandler->getParameter('out_trade_no'); + $total_fee = $resHandler->getParameter('total_fee'); + $fee_type = $resHandler->getParameter('fee_type'); + $openid = $resHandler->getParameter('openid'); + if($out_trade_no == TRADE_NO && $total_fee==strval($order['money']*100) && $order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='".TRADE_NO."'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='$transaction_id',`endtime` ='$date',`buyer` ='$openid',`date`=NOW() where `trade_no`='".TRADE_NO."'"); + processOrder($order); + } + } + //Utils::dataRecodes('ӿڻصյ֪ͨ',$resHandler->getAllParameters()); + echo 'success'; + exit(); + }else{ + echo 'failure1'; + exit(); + } +}else{ + echo 'failure2'; +} +?> \ No newline at end of file diff --git a/plugins/unionpay/refund.php b/plugins/unionpay/refund.php new file mode 100644 index 0000000..311ccb9 --- /dev/null +++ b/plugins/unionpay/refund.php @@ -0,0 +1,49 @@ +setGateUrl($cfg->C('url')); +$reqHandler->setSignType($cfg->C('sign_type')); +$reqHandler->setKey($cfg->C('key')); +$reqHandler->setParameter('service','unified.trade.refund');//接口类型 +$reqHandler->setParameter('version',$cfg->C('version')); +$reqHandler->setParameter('sign_type',$cfg->C('sign_type')); +$reqHandler->setParameter('mch_id',$cfg->C('mchId'));//必填项,商户号,由平台分配 +$reqHandler->setParameter('transaction_id',$order['api_trade_no']); +$reqHandler->setParameter('out_refund_no',$order['trade_no']); +$reqHandler->setParameter('total_fee',strval($order['realmoney']*100)); +$reqHandler->setParameter('refund_fee',strval($order['realmoney']*100)); +$reqHandler->setParameter('nonce_str',mt_rand(time(),time()+rand()));//随机字符串,必填项,不长于 32 位 +$reqHandler->createSign();//创建签名 + +$data = Utils::toXml($reqHandler->getAllParameters()); +//var_dump($data); + +$pay->setReqContent($reqHandler->getGateURL(),$data); +if($pay->call()){ + $resHandler->setContent($pay->getResContent()); + $resHandler->setKey($cfg->C('key')); + if($resHandler->isTenpaySign()){ + //当返回状态与业务结果都为0时才返回支付二维码,其它结果请查看接口文档 + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $result = ['code'=>0, 'trade_no'=>$resHandler->getParameter('refund_id'), 'refund_fee'=>$resHandler->getParameter('refund_fee')]; + }else{ + $result = ['code'=>-1, 'msg'=>'['.$resHandler->getParameter('err_code').']'.$resHandler->getParameter('err_msg')]; + } + }else{ + $result = ['code'=>-1, 'msg'=>'['.$resHandler->getParameter('status').']'.$resHandler->getParameter('message')]; + } +}else{ + $result = ['code'=>-1, 'msg'=>'退款接口调用失败 ['.$pay->getResponseCode().']'.$pay->getErrInfo()]; +} +return $result; \ No newline at end of file diff --git a/plugins/unionpay/submit.php b/plugins/unionpay/submit.php new file mode 100644 index 0000000..d55b2bc --- /dev/null +++ b/plugins/unionpay/submit.php @@ -0,0 +1,16 @@ +window.location.href='/pay/unionpay/alipay/{$trade_no}/';"; +}elseif($order['typename']=='wxpay'){ + if(strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger')!==false){ + echo ""; + }elseif(checkmobile()==true){ + echo ""; + }else{ + echo ""; + } +}elseif($order['typename']=='bank'){ + echo ""; +} diff --git a/plugins/unionpay/wxjspay.php b/plugins/unionpay/wxjspay.php new file mode 100644 index 0000000..8f3c903 --- /dev/null +++ b/plugins/unionpay/wxjspay.php @@ -0,0 +1,160 @@ +GetOpenid(); +//②、统一下单 +require(PAY_ROOT.'inc/class/Utils.class.php'); +require(PAY_ROOT.'inc/config.php'); +require(PAY_ROOT.'inc/class/RequestHandler.class.php'); +require(PAY_ROOT.'inc/class/ClientResponseHandler.class.php'); +require(PAY_ROOT.'inc/class/PayHttpClient.class.php'); + +$resHandler = new ClientResponseHandler(); +$reqHandler = new RequestHandler(); +$pay = new PayHttpClient(); +$cfg = new Config(); + +$reqHandler->setGateUrl($cfg->C('url')); +$reqHandler->setSignType($cfg->C('sign_type')); +$reqHandler->setKey($cfg->C('key')); +$reqHandler->setParameter('service','pay.weixin.jspay');//接口类型 +$reqHandler->setParameter('mch_id',$cfg->C('mchId'));//必填项,商户号,由平台分配 +$reqHandler->setParameter('version',$cfg->C('version')); +$reqHandler->setParameter('sign_type',$cfg->C('sign_type')); +$reqHandler->setParameter('is_raw','1'); +$reqHandler->setParameter('body',$ordername); +$reqHandler->setParameter('sub_appid',WxPayConfig::APPID); +$reqHandler->setParameter('sub_openid',$openId); +$reqHandler->setParameter('total_fee',strval($order['money']*100)); +$reqHandler->setParameter('mch_create_ip',$clientip); +$reqHandler->setParameter('out_trade_no',TRADE_NO); +$reqHandler->setParameter('device_info', 'AND_WAP');//应用类型 +$reqHandler->setParameter('notify_url',$conf['localurl'].'pay/unionpay/notify/'.TRADE_NO.'/'); +$reqHandler->setParameter('nonce_str',mt_rand(time(),time()+rand()));//随机字符串,必填项,不长于 32 位 +$reqHandler->createSign();//创建签名 + +$data = Utils::toXml($reqHandler->getAllParameters()); +//var_dump($data); + +$pay->setReqContent($reqHandler->getGateURL(),$data); +if($pay->call()){ + $resHandler->setContent($pay->getResContent()); + $resHandler->setKey($cfg->C('key')); + if($resHandler->isTenpaySign()){ + //当返回状态与业务结果都为0时才返回支付二维码,其它结果请查看接口文档 + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $pay_info = $resHandler->getParameter('pay_info'); + }else{ + sysmsg('微信支付下单失败 ['.$resHandler->getParameter('err_code').']'.$resHandler->getParameter('err_msg')); + } + }else{ + sysmsg('微信支付下单失败 ['.$resHandler->getParameter('status').']'.$resHandler->getParameter('message')); + } +}else{ + sysmsg('支付接口调用失败 ['.$pay->getResponseCode().']'.$pay->getErrInfo()); +} +if($_GET['d']==1){ + $redirect_url='window.location.href=data.backurl'; +}else{ + $redirect_url='WeixinJSBridge.invoke("closeWindow", {}, function(e) {});'; +} +?> + + + + + + + + + +
    +

    微信安全支付

    +
    +
    +
    +
    +正在跳转... + + +
    +
    + + \ No newline at end of file diff --git a/plugins/unionpay/wxpay.php b/plugins/unionpay/wxpay.php new file mode 100644 index 0000000..544a710 --- /dev/null +++ b/plugins/unionpay/wxpay.php @@ -0,0 +1,161 @@ +setGateUrl($cfg->C('url')); +$reqHandler->setSignType($cfg->C('sign_type')); +$reqHandler->setKey($cfg->C('key')); +$reqHandler->setParameter('service','unified.trade.native');//接口类型 +$reqHandler->setParameter('mch_id',$cfg->C('mchId'));//必填项,商户号,由平台分配 +$reqHandler->setParameter('version',$cfg->C('version')); +$reqHandler->setParameter('sign_type',$cfg->C('sign_type')); +$reqHandler->setParameter('body',$ordername); +$reqHandler->setParameter('total_fee',strval($order['money']*100)); +$reqHandler->setParameter('mch_create_ip',$clientip); +$reqHandler->setParameter('out_trade_no',TRADE_NO); +$reqHandler->setParameter('notify_url',$conf['localurl'].'pay/unionpay/notify/'.TRADE_NO.'/'); +$reqHandler->setParameter('nonce_str',mt_rand(time(),time()+rand()));//随机字符串,必填项,不长于 32 位 +$reqHandler->createSign();//创建签名 + +$data = Utils::toXml($reqHandler->getAllParameters()); +//var_dump($data); + +$pay->setReqContent($reqHandler->getGateURL(),$data); +if($pay->call()){ + $resHandler->setContent($pay->getResContent()); + $resHandler->setKey($cfg->C('key')); + if($resHandler->isTenpaySign()){ + //当返回状态与业务结果都为0时才返回支付二维码,其它结果请查看接口文档 + if($resHandler->getParameter('status') == 0 && $resHandler->getParameter('result_code') == 0){ + $code_url = $resHandler->getParameter('code_url'); + }else{ + sysmsg('微信支付下单失败 ['.$resHandler->getParameter('err_code').']'.$resHandler->getParameter('err_msg')); + } + }else{ + sysmsg('微信支付下单失败 ['.$resHandler->getParameter('status').']'.$resHandler->getParameter('message')); + } +}else{ + sysmsg('支付接口调用失败 ['.$pay->getResponseCode().']'.$pay->getErrInfo()); +} + +?> + + + + + + +微信安全支付 - <?php echo $sitename?> + + + +
    +

    +微信支付 +

    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +

    请使用微信扫一扫

    +

    扫描二维码完成支付

    +
    +
    +
    +
    +
    +
    +
    +

    手机用户可保存上方二维码到手机中

    +

    在微信扫一扫中选择“相册”即可

    +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/plugins/unionpay/wxwappay.php b/plugins/unionpay/wxwappay.php new file mode 100644 index 0000000..738d6ce --- /dev/null +++ b/plugins/unionpay/wxwappay.php @@ -0,0 +1,106 @@ + + + + + + 微信支付 + + + + +
    +
    +

    + 微信支付手机版 +

    +
    +
    长按保存到相册使用扫码扫码完成支付
    +
    +
    +
    +
    或复制以下链接到微信打开:
    +
    +
    +
    +
    提示:你可以将以上链接发到自己微信的聊天框(在微信顶部搜索框可以搜到自己的微信),即可点击进入支付
    + +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/plugins/wxpay/cert/apiclient_cert.pem b/plugins/wxpay/cert/apiclient_cert.pem new file mode 100644 index 0000000..d147c5c --- /dev/null +++ b/plugins/wxpay/cert/apiclient_cert.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIIEaTCCA9KgAwIBAgIEANG/jDANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMC +Q04xEjAQBgNVBAgTCUd1YW5nZG9uZzERMA8GA1UEBxMIU2hlbnpoZW4xEDAOBgNV +BAoTB1RlbmNlbnQxDDAKBgNVBAsTA1dYRzETMBEGA1UEAxMKTW1wYXltY2hDQTEf +MB0GCSqGSIb3DQEJARYQbW1wYXltY2hAdGVuY2VudDAeFw0xNzAzMjkwNTAwMTVa +Fw0yNzAzMjcwNTAwMTVaMIGYMQswCQYDVQQGEwJDTjESMBAGA1UECBMJR3Vhbmdk +b25nMREwDwYDVQQHEwhTaGVuemhlbjEQMA4GA1UEChMHVGVuY2VudDEOMAwGA1UE +CxMFTU1QYXkxLTArBgNVBAMUJOmDkeW3nui/veaipue9kee7nOenkeaKgOaciemZ +kOWFrOWPuDERMA8GA1UEBBMIMjMxNzM3OTQwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQDY/WCuI8RuyJpasVZqBBmUxqxjM4gmF7Wj1U/gp+wGusRs9gtO +Bf4NTlfZDO9ou5sdWYa3kJwahVIeItfkgGiv8177ahDiTgfvdvx4+BLrn05FhrhF ++EvPwsuxE/FA3Isz/QK2rsszZOPQMhEOAkGQxqXC/V6q46vyYa+SmUoxkMRC6Wfz +Wu2lLPE0CAzgiLndWyIRM3vaoCbbFcTWh5BwBUVTG6hg47LBSG7a5eZQi+c0RwIh +nT4CWXQC1c7WbI8StUqFfSPrRE3m8GpeLrj72GZ9UaYJq70zMXjq/V/+I7r82Gnb ++3sWAtxNb/PMTRhTAWIYMZzFA4ipPcIOh98xAgMBAAGjggFGMIIBQjAJBgNVHRME +AjAAMCwGCWCGSAGG+EIBDQQfFh0iQ0VTLUNBIEdlbmVyYXRlIENlcnRpZmljYXRl +IjAdBgNVHQ4EFgQUDv+iqN6c2wuMEtuh30OQNIIL/NYwgb8GA1UdIwSBtzCBtIAU +PgUm9iJitBVbiM1kfrDUYqflhnShgZCkgY0wgYoxCzAJBgNVBAYTAkNOMRIwEAYD +VQQIEwlHdWFuZ2RvbmcxETAPBgNVBAcTCFNoZW56aGVuMRAwDgYDVQQKEwdUZW5j +ZW50MQwwCgYDVQQLEwNXWEcxEzARBgNVBAMTCk1tcGF5bWNoQ0ExHzAdBgkqhkiG +9w0BCQEWEG1tcGF5bWNoQHRlbmNlbnSCCQC7VJcrvADoVzAOBgNVHQ8BAf8EBAMC +BsAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQEFBQADgYEAivnt +rYQqtdb7Z5USL6qSrhEHm62m8VYlQEYEENr+AUs5C7SaHunHM6TVLeTIY6Cnl2C8 +NQDnBWWc5BiciwygAvfnXnM7VU60llLnuksFWkLqfqEx7ZI9FquTvXqMcicwv8bx +5B6HrkdgmF2H5/EYkvVnFTXk5/wXBnKiLg5hz4s= +-----END CERTIFICATE----- diff --git a/plugins/wxpay/cert/apiclient_key.pem b/plugins/wxpay/cert/apiclient_key.pem new file mode 100644 index 0000000..25c55ad --- /dev/null +++ b/plugins/wxpay/cert/apiclient_key.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDY/WCuI8RuyJpa +sVZqBBmUxqxjM4gmF7Wj1U/gp+wGusRs9gtOBf4NTlfZDO9ou5sdWYa3kJwahVIe +ItfkgGiv8177ahDiTgfvdvx4+BLrn05FhrhF+EvPwsuxE/FA3Isz/QK2rsszZOPQ +MhEOAkGQxqXC/V6q46vyYa+SmUoxkMRC6WfzWu2lLPE0CAzgiLndWyIRM3vaoCbb +FcTWh5BwBUVTG6hg47LBSG7a5eZQi+c0RwIhnT4CWXQC1c7WbI8StUqFfSPrRE3m +8GpeLrj72GZ9UaYJq70zMXjq/V/+I7r82Gnb+3sWAtxNb/PMTRhTAWIYMZzFA4ip +PcIOh98xAgMBAAECggEATG7sGEsXDWLyJBIle1CYZjSZUpQ7WBev7tbbvSnJVRGC +0VLV5pTryWoYPad1yXGUEQGRF6YDpr/hjiX94EpvFdNnWK4i5mRQHUTPaBkSKRdD +bfAnhtYQdk2KjISWzZ8iFZ0A0LK/dwoJyTNpmIKo78NZblbresyZq9ZHDx+Z590N +btQE8d5mWjsWOfXkmUd4QSwuVzpqWQhTUEKcNRXHm2lNYxAE+nMIBT7hn1MNm/3p +0v1pIqkLl4Lw+Xe92xeHWAK+xnHA62nURvxTjK2iSvEilFSBvlghfD7RxSLMRVb1 +tvbuD8YGUFXoOKSCZLs64SdqLLQBnpXe0Q04BdWqZQKBgQD0R0q2TtPIXiskVkVE +QtCALOxEmQv4RHFTU4ZRQRujRROxlNVeCCS2/rciaLTGtORwrtvQne2lUbKC7Ilg +X19YEjjC/RyjNSxhhBhuK/08WeRTG2I0sA4yCiAcAuTN25h/r4SzUF5BnDal4ob9 +3jbFDwBjptH3NBqaKRyWRuBp4wKBgQDjZt8/hbqK8xaZWBkvvCjPhdKTZfs/5xs0 +iJevjw5vRzYwlqLouJS6N+JMJPUbq7eLcrJ2xGm9vqyi5uTw7y3shOeUCh4g3QJV +7S2LoIJXIf+i3/oh1yCRPo5JEW5gYtlbMjecsvsS1gxkY2131x0xpjV0WDiCLE0K +8iD1oSeu2wKBgGHjJ6dCk09ZnQQkpgEinRaf6dXbVpaYJqlzcQGii4azqZ6hu5bA +wKWsEIrzVm3CE0CscV15y79Rq60XSD2cOkK6mpBYiV9FcZFqM7gCXKoQg5RiBsqC +Ok4HDLLs3e84LjYMiaqpa/vys1tqGRomL+BrkIZeVQkwkfBwxQnbQRZtAoGACtRO +U2cZ8B4NeHYClQxf4SodUhmsMmneGM1cc+bbKB97DCtQTMblhky9ASVNaujtj72B +lDhcVMXs0MEwK+0oAbh+ksU8lBISV2c5IQoeyul6lBYYgl4NVf1lp0MmP37VnQsy +LMs1O7tn0awOfYOIB2JD72t4HXLgpGHNggUPr7sCgYEA5L3VNRo5OFb7O9kpDWBh +VZllfyaPz/C2UOnMjbmUYRsVDIAeWun/Rb8gOqgZh1H74Cm2WbBmutgUDX6HJ1TW +NklWS1x9cByxLcvDCdfWJJ0yGoYbhFjGAM0+pwg5kWGM+6TugdOHvKxLO/X9dziR +4t0uaLPYY5bneoNkXdstRBk= +-----END PRIVATE KEY----- diff --git a/plugins/wxpay/config.ini b/plugins/wxpay/config.ini new file mode 100644 index 0000000..741f902 --- /dev/null +++ b/plugins/wxpay/config.ini @@ -0,0 +1,21 @@ +[config] +;支付插件英文名称,需和目录名称一致,不能有重复 +name = "wxpay" + +;支付插件显示名称 +showname = "微信官方支付" + +;支付插件作者 +author = "微信" + +;支付插件作者链接 +link = "https://pay.weixin.qq.com/" + +;支付插件支持的支付方式,多种方式用英文,隔开,可选的有alipay,qqpay,wxpay,bank +types = "wxpay" + +;支付插件要求传入的参数以及参数显示名称,可选的有appid,appkey,appsecret,appurl,appmchid +inputs = "appid:公众号APPID,appmchid:商户号,appkey:商户支付密钥,appsecret:公众号SECRET" + +;支付插件要求传入的支付方式参数 +select = "1:扫码支付,2:公众号支付,3:H5支付" \ No newline at end of file diff --git a/plugins/wxpay/h5.php b/plugins/wxpay/h5.php new file mode 100644 index 0000000..10efeb0 --- /dev/null +++ b/plugins/wxpay/h5.php @@ -0,0 +1,32 @@ +SetBody($ordername); +$input->SetOut_trade_no(TRADE_NO); +$input->SetTotal_fee(strval($order['money']*100)); +$input->SetSpbill_create_ip($clientip); +$input->SetTime_start(date("YmdHis")); +$input->SetTime_expire(date("YmdHis", time() + 600)); +$input->SetNotify_url($conf['localurl'].'pay/wxpay/notify/'.TRADE_NO.'/'); +$input->SetTrade_type("MWEB"); +$result = $notify->GetPayUrl($input); +if($result["result_code"]=='SUCCESS'){ + $redirect_url=$siteurl.'pay/wxpay/return/'.TRADE_NO.'/'; + $url=$result['mweb_url'].'&redirect_url='.urlencode($redirect_url); + exit(""); +}elseif(isset($result["err_code"])){ + sysmsg('微信支付下单失败!['.$result["err_code"].'] '.$result["err_code_des"]); +}else{ + sysmsg('微信支付下单失败!['.$result["return_code"].'] '.$result["return_msg"]); +} + +?> \ No newline at end of file diff --git a/plugins/wxpay/inc/WxPay.Api.php b/plugins/wxpay/inc/WxPay.Api.php new file mode 100644 index 0000000..33effc8 --- /dev/null +++ b/plugins/wxpay/inc/WxPay.Api.php @@ -0,0 +1,616 @@ +IsOut_trade_noSet()) { + throw new WxPayException("缺少统一支付接口必填参数out_trade_no!"); + }else if(!$inputObj->IsBodySet()){ + throw new WxPayException("缺少统一支付接口必填参数body!"); + }else if(!$inputObj->IsTotal_feeSet()) { + throw new WxPayException("缺少统一支付接口必填参数total_fee!"); + }else if(!$inputObj->IsTrade_typeSet()) { + throw new WxPayException("缺少统一支付接口必填参数trade_type!"); + } + + //关联参数 + if($inputObj->GetTrade_type() == "JSAPI" && !$inputObj->IsOpenidSet()){ + throw new WxPayException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!"); + } + if($inputObj->GetTrade_type() == "JSAPI" && !$inputObj->IsProduct_idSet()){ + throw new WxPayException("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!"); + } + + //异步通知url未设置,则使用配置文件中的url + if(!$inputObj->IsNotify_urlSet()){ + $inputObj->SetNotify_url(WxPayConfig::NOTIFY_URL);//异步通知url + } + + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + //签名 + $inputObj->SetSign(); + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 查询订单,WxPayOrderQuery中out_trade_no、transaction_id至少填一个 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayOrderQuery $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function orderQuery($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/pay/orderquery"; + //检测必填参数 + if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) { + throw new WxPayException("订单查询接口中,out_trade_no、transaction_id至少填一个!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 关闭订单,WxPayCloseOrder中out_trade_no必填 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayCloseOrder $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function closeOrder($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/pay/closeorder"; + //检测必填参数 + if(!$inputObj->IsOut_trade_noSet()) { + throw new WxPayException("订单查询接口中,out_trade_no必填!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 申请退款,WxPayRefund中out_trade_no、transaction_id至少填一个且 + * out_refund_no、total_fee、refund_fee、op_user_id为必填参数 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayRefund $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function refund($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/secapi/pay/refund"; + //检测必填参数 + if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) { + throw new WxPayException("退款申请接口中,out_trade_no、transaction_id至少填一个!"); + }else if(!$inputObj->IsOut_refund_noSet()){ + throw new WxPayException("退款申请接口中,缺少必填参数out_refund_no!"); + }else if(!$inputObj->IsTotal_feeSet()){ + throw new WxPayException("退款申请接口中,缺少必填参数total_fee!"); + }else if(!$inputObj->IsRefund_feeSet()){ + throw new WxPayException("退款申请接口中,缺少必填参数refund_fee!"); + }else if(!$inputObj->IsOp_user_idSet()){ + throw new WxPayException("退款申请接口中,缺少必填参数op_user_id!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, true, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 查询退款 + * 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时, + * 用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。 + * WxPayRefundQuery中out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayRefundQuery $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function refundQuery($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/pay/refundquery"; + //检测必填参数 + if(!$inputObj->IsOut_refund_noSet() && + !$inputObj->IsOut_trade_noSet() && + !$inputObj->IsTransaction_idSet() && + !$inputObj->IsRefund_idSet()) { + throw new WxPayException("退款查询接口中,out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * 下载对账单,WxPayDownloadBill中bill_date为必填参数 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayDownloadBill $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function downloadBill($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/pay/downloadbill"; + //检测必填参数 + if(!$inputObj->IsBill_dateSet()) { + throw new WxPayException("对账单接口中,缺少必填参数bill_date!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $response = self::postXmlCurl($xml, $url, false, $timeOut); + if(substr($response, 0 , 5) == ""){ + return ""; + } + return $response; + } + + /** + * 提交被扫支付API + * 收银员使用扫码设备读取微信用户刷卡授权码以后,二维码或条码信息传送至商户收银台, + * 由商户收银台或者商户后台调用该接口发起支付。 + * WxPayWxPayMicroPay中body、out_trade_no、total_fee、auth_code参数必填 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayWxPayMicroPay $inputObj + * @param int $timeOut + */ + public static function micropay($inputObj, $timeOut = 10) + { + $url = "https://api.mch.weixin.qq.com/pay/micropay"; + //检测必填参数 + if(!$inputObj->IsBodySet()) { + throw new WxPayException("提交被扫支付API接口中,缺少必填参数body!"); + } else if(!$inputObj->IsOut_trade_noSet()) { + throw new WxPayException("提交被扫支付API接口中,缺少必填参数out_trade_no!"); + } else if(!$inputObj->IsTotal_feeSet()) { + throw new WxPayException("提交被扫支付API接口中,缺少必填参数total_fee!"); + } else if(!$inputObj->IsAuth_codeSet()) { + throw new WxPayException("提交被扫支付API接口中,缺少必填参数auth_code!"); + } + + $inputObj->SetSpbill_create_ip($_SERVER['REMOTE_ADDR']);//终端ip + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 撤销订单API接口,WxPayReverse中参数out_trade_no和transaction_id必须填写一个 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayReverse $inputObj + * @param int $timeOut + * @throws WxPayException + */ + public static function reverse($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/secapi/pay/reverse"; + //检测必填参数 + if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) { + throw new WxPayException("撤销订单API接口中,参数out_trade_no和transaction_id必须填写一个!"); + } + + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, true, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 企业付款,WxPayTransfer中partner_trade_no必填 + * partner_trade_no、openid、check_name、amount、desc为必填参数 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayTransfer $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function transfer($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; + //检测必填参数 + if(!$inputObj->IsPartner_trade_noSet()){ + throw new WxPayException("企业付款接口中,缺少必填参数partner_trade_no!"); + }else if(!$inputObj->IsOpenidSet()){ + throw new WxPayException("企业付款接口中,缺少必填参数openid!"); + }else if(!$inputObj->IsCheck_nameSet()){ + throw new WxPayException("企业付款接口中,缺少必填参数check_name!"); + }else if(!$inputObj->IsAmountSet()){ + throw new WxPayException("企业付款接口中,缺少必填参数amount!"); + }else if(!$inputObj->IsDescSet()){ + throw new WxPayException("企业付款接口中,缺少必填参数desc!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + $response = self::postXmlCurl($xml, $url, true, $timeOut); + $result = WxPayResults::Init2($response); + + return $result; + } + + /** + * + * 测速上报,该方法内部封装在report中,使用时请注意异常流程 + * WxPayReport中interface_url、return_code、result_code、user_ip、execute_time_必填 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayReport $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function report($inputObj, $timeOut = 1) + { + $url = "https://api.mch.weixin.qq.com/payitil/report"; + //检测必填参数 + if(!$inputObj->IsInterface_urlSet()) { + throw new WxPayException("接口URL,缺少必填参数interface_url!"); + } if(!$inputObj->IsReturn_codeSet()) { + throw new WxPayException("返回状态码,缺少必填参数return_code!"); + } if(!$inputObj->IsResult_codeSet()) { + throw new WxPayException("业务结果,缺少必填参数result_code!"); + } if(!$inputObj->IsUser_ipSet()) { + throw new WxPayException("访问接口IP,缺少必填参数user_ip!"); + } if(!$inputObj->IsExecute_time_Set()) { + throw new WxPayException("接口耗时,缺少必填参数execute_time_!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetUser_ip($_SERVER['REMOTE_ADDR']);//终端ip + $inputObj->SetTime(date("YmdHis"));//商户上报时间 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + return $response; + } + + /** + * + * 生成二维码规则,模式一生成支付二维码 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayBizPayUrl $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function bizpayurl($inputObj, $timeOut = 6) + { + if(!$inputObj->IsProduct_idSet()){ + throw new WxPayException("生成二维码,缺少必填参数product_id!"); + } + + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetTime_stamp(time());//时间戳 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + + return $inputObj->GetValues(); + } + + /** + * + * 转换短链接 + * 该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX), + * 减小二维码数据量,提升扫描速度和精确度。 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayShortUrl $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function shorturl($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/tools/shorturl"; + //检测必填参数 + if(!$inputObj->IsLong_urlSet()) { + throw new WxPayException("需要转换的URL,签名用原串,传输需URL encode!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 支付结果通用通知 + * @param function $callback + * 直接回调函数使用方法: notify(you_function); + * 回调类成员函数方法:notify(array($this, you_function)); + * $callback 原型为:function function_name($data){} + */ + public static function notify($callback, &$msg) + { + //获取通知的数据 + $xml = file_get_contents("php://input"); + //如果返回成功则验证签名 + try { + $result = WxPayResults::Init($xml); + } catch (WxPayException $e){ + $msg = $e->errorMessage(); + return false; + } + + return call_user_func($callback, $result); + } + + /** + * + * 产生随机字符串,不长于32位 + * @param int $length + * @return 产生的随机字符串 + */ + public static function getNonceStr($length = 32) + { + $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; + $str =""; + for ( $i = 0; $i < $length; $i++ ) { + $str .= substr($chars, mt_rand(0, strlen($chars)-1), 1); + } + return $str; + } + + /** + * 直接输出xml + * @param string $xml + */ + public static function replyNotify($xml) + { + echo $xml; + } + + /** + * + * 上报数据, 上报的时候将屏蔽所有异常流程 + * @param string $usrl + * @param int $startTimeStamp + * @param array $data + */ + private static function reportCostTime($url, $startTimeStamp, $data) + { + //如果不需要上报数据 + if(WxPayConfig::REPORT_LEVENL == 0){ + return; + } + //如果仅失败上报 + if(WxPayConfig::REPORT_LEVENL == 1 && + array_key_exists("return_code", $data) && + $data["return_code"] == "SUCCESS" && + array_key_exists("result_code", $data) && + $data["result_code"] == "SUCCESS") + { + return; + } + + //上报逻辑 + $endTimeStamp = self::getMillisecond(); + $objInput = new WxPayReport(); + $objInput->SetInterface_url($url); + $objInput->SetExecute_time_($endTimeStamp - $startTimeStamp); + //返回状态码 + if(array_key_exists("return_code", $data)){ + $objInput->SetReturn_code($data["return_code"]); + } + //返回信息 + if(array_key_exists("return_msg", $data)){ + $objInput->SetReturn_msg($data["return_msg"]); + } + //业务结果 + if(array_key_exists("result_code", $data)){ + $objInput->SetResult_code($data["result_code"]); + } + //错误代码 + if(array_key_exists("err_code", $data)){ + $objInput->SetErr_code($data["err_code"]); + } + //错误代码描述 + if(array_key_exists("err_code_des", $data)){ + $objInput->SetErr_code_des($data["err_code_des"]); + } + //商户订单号 + if(array_key_exists("out_trade_no", $data)){ + $objInput->SetOut_trade_no($data["out_trade_no"]); + } + //设备号 + if(array_key_exists("device_info", $data)){ + $objInput->SetDevice_info($data["device_info"]); + } + + try{ + self::report($objInput); + } catch (WxPayException $e){ + //不做任何处理 + } + } + + /** + * 以post方式提交xml到对应的接口url + * + * @param string $xml 需要post的xml数据 + * @param string $url url + * @param bool $useCert 是否需要证书,默认不需要 + * @param int $second url执行超时时间,默认30s + * @throws WxPayException + */ + private static function postXmlCurl($xml, $url, $useCert = false, $second = 30) + { + $ch = curl_init(); + //设置超时 + curl_setopt($ch, CURLOPT_TIMEOUT, $second); + + //如果有配置代理这里就设置代理 + if(WxPayConfig::CURL_PROXY_HOST != "0.0.0.0" + && WxPayConfig::CURL_PROXY_PORT != 0){ + curl_setopt($ch,CURLOPT_PROXY, WxPayConfig::CURL_PROXY_HOST); + curl_setopt($ch,CURLOPT_PROXYPORT, WxPayConfig::CURL_PROXY_PORT); + } + curl_setopt($ch,CURLOPT_URL, $url); + curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); + curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); + //设置header + curl_setopt($ch, CURLOPT_HEADER, FALSE); + //要求结果为字符串且输出到屏幕上 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + + if($useCert == true){ + //设置证书 + //使用证书:cert 与 key 分别属于两个.pem文件 + curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLCERT, WxPayConfig::SSLCERT_PATH); + curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLKEY, WxPayConfig::SSLKEY_PATH); + } + //post提交方式 + curl_setopt($ch, CURLOPT_POST, TRUE); + curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); + //运行curl + $data = curl_exec($ch); + //返回结果 + if($data){ + curl_close($ch); + return $data; + } else { + $error = curl_errno($ch); + curl_close($ch); + throw new WxPayException("curl出错,错误码:$error"); + } + } + + /** + * 获取毫秒级别的时间戳 + */ + private static function getMillisecond() + { + //获取毫秒的时间戳 + $time = explode ( " ", microtime () ); + $time = $time[1] . ($time[0] * 1000); + $time2 = explode( ".", $time ); + $time = $time2[0]; + return $time; + } +} + diff --git a/plugins/wxpay/inc/WxPay.Config.php b/plugins/wxpay/inc/WxPay.Config.php new file mode 100644 index 0000000..dd84318 --- /dev/null +++ b/plugins/wxpay/inc/WxPay.Config.php @@ -0,0 +1,63 @@ +MakeSign(); + $this->values['sign'] = $sign; + return $sign; + } + + /** + * 获取签名,详见签名生成算法的值 + * @return 值 + **/ + public function GetSign() + { + return $this->values['sign']; + } + + /** + * 判断签名,详见签名生成算法是否存在 + * @return true 或 false + **/ + public function IsSignSet() + { + return array_key_exists('sign', $this->values); + } + + /** + * 输出xml字符 + * @throws WxPayException + **/ + public function ToXml() + { + if(!is_array($this->values) + || count($this->values) <= 0) + { + throw new WxPayException("数组数据异常!"); + } + + $xml = ""; + foreach ($this->values as $key=>$val) + { + if (is_numeric($val)){ + $xml.="<".$key.">".$val.""; + }else{ + $xml.="<".$key.">"; + } + } + $xml.=""; + return $xml; + } + + /** + * 将xml转为array + * @param string $xml + * @throws WxPayException + */ + public function FromXml($xml) + { + if(!$xml){ + throw new WxPayException("xml数据异常!"); + } + //将XML转为array + //禁止引用外部xml实体 + libxml_disable_entity_loader(true); + $this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); + return $this->values; + } + + /** + * 格式化参数格式化成url参数 + */ + public function ToUrlParams() + { + $buff = ""; + foreach ($this->values as $k => $v) + { + if($k != "sign" && $v != "" && !is_array($v)){ + $buff .= $k . "=" . $v . "&"; + } + } + + $buff = trim($buff, "&"); + return $buff; + } + + /** + * 生成签名 + * @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值 + */ + public function MakeSign() + { + //签名步骤一:按字典序排序参数 + ksort($this->values); + $string = $this->ToUrlParams(); + //签名步骤二:在string后加入KEY + $string = $string . "&key=".WxPayConfig::KEY; + //签名步骤三:MD5加密 + $string = md5($string); + //签名步骤四:所有字符转为大写 + $result = strtoupper($string); + return $result; + } + + /** + * 获取设置的值 + */ + public function GetValues() + { + return $this->values; + } +} + +/** + * + * 接口调用结果类 + * @author widyhu + * + */ +class WxPayResults extends WxPayDataBase +{ + /** + * + * 检测签名 + */ + public function CheckSign() + { + //fix异常 + if(!$this->IsSignSet()){ + throw new WxPayException("签名错误!"); + } + + $sign = $this->MakeSign(); + if($this->GetSign() == $sign){ + return true; + } + throw new WxPayException("签名错误!"); + } + + /** + * + * 使用数组初始化 + * @param array $array + */ + public function FromArray($array) + { + $this->values = $array; + } + + /** + * + * 使用数组初始化对象 + * @param array $array + * @param 是否检测签名 $noCheckSign + */ + public static function InitFromArray($array, $noCheckSign = false) + { + $obj = new self(); + $obj->FromArray($array); + if($noCheckSign == false){ + $obj->CheckSign(); + } + return $obj; + } + + /** + * + * 设置参数 + * @param string $key + * @param string $value + */ + public function SetData($key, $value) + { + $this->values[$key] = $value; + } + + /** + * 将xml转为array + * @param string $xml + * @throws WxPayException + */ + public static function Init($xml) + { + $obj = new self(); + $obj->FromXml($xml); + //fix bug 2015-06-29 + if($obj->values['return_code'] != 'SUCCESS'){ + return $obj->GetValues(); + } + $obj->CheckSign(); + return $obj->GetValues(); + } + + /** + * 将xml转为array(无签名校验) + * @param string $xml + * @throws WxPayException + */ + public static function Init2($xml) + { + $obj = new self(); + $obj->FromXml($xml); + if($obj->values['return_code'] != 'SUCCESS'){ + return $obj->GetValues(); + } + return $obj->GetValues(); + } +} + +/** + * + * 回调基础类 + * @author widyhu + * + */ +class WxPayNotifyReply extends WxPayDataBase +{ + /** + * + * 设置错误码 FAIL 或者 SUCCESS + * @param string + */ + public function SetReturn_code($return_code) + { + $this->values['return_code'] = $return_code; + } + + /** + * + * 获取错误码 FAIL 或者 SUCCESS + * @return string $return_code + */ + public function GetReturn_code() + { + return $this->values['return_code']; + } + + /** + * + * 设置错误信息 + * @param string $return_code + */ + public function SetReturn_msg($return_msg) + { + $this->values['return_msg'] = $return_msg; + } + + /** + * + * 获取错误信息 + * @return string + */ + public function GetReturn_msg() + { + return $this->values['return_msg']; + } + + /** + * + * 设置返回参数 + * @param string $key + * @param string $value + */ + public function SetData($key, $value) + { + $this->values[$key] = $value; + } +} + +/** + * + * 统一下单输入对象 + * @author widyhu + * + */ +class WxPayUnifiedOrder extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,商户自定义 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,商户自定义的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,商户自定义是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置商品或支付单简要描述 + * @param string $value + **/ + public function SetBody($value) + { + $this->values['body'] = $value; + } + /** + * 获取商品或支付单简要描述的值 + * @return 值 + **/ + public function GetBody() + { + return $this->values['body']; + } + /** + * 判断商品或支付单简要描述是否存在 + * @return true 或 false + **/ + public function IsBodySet() + { + return array_key_exists('body', $this->values); + } + + + /** + * 设置商品名称明细列表 + * @param string $value + **/ + public function SetDetail($value) + { + $this->values['detail'] = $value; + } + /** + * 获取商品名称明细列表的值 + * @return 值 + **/ + public function GetDetail() + { + return $this->values['detail']; + } + /** + * 判断商品名称明细列表是否存在 + * @return true 或 false + **/ + public function IsDetailSet() + { + return array_key_exists('detail', $this->values); + } + + + /** + * 设置附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 + * @param string $value + **/ + public function SetAttach($value) + { + $this->values['attach'] = $value; + } + /** + * 获取附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据的值 + * @return 值 + **/ + public function GetAttach() + { + return $this->values['attach']; + } + /** + * 判断附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据是否存在 + * @return true 或 false + **/ + public function IsAttachSet() + { + return array_key_exists('attach', $this->values); + } + + + /** + * 设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 + * @param string $value + **/ + public function SetFee_type($value) + { + $this->values['fee_type'] = $value; + } + /** + * 获取符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型的值 + * @return 值 + **/ + public function GetFee_type() + { + return $this->values['fee_type']; + } + /** + * 判断符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型是否存在 + * @return true 或 false + **/ + public function IsFee_typeSet() + { + return array_key_exists('fee_type', $this->values); + } + + + /** + * 设置订单总金额,只能为整数,详见支付金额 + * @param string $value + **/ + public function SetTotal_fee($value) + { + $this->values['total_fee'] = $value; + } + /** + * 获取订单总金额,只能为整数,详见支付金额的值 + * @return 值 + **/ + public function GetTotal_fee() + { + return $this->values['total_fee']; + } + /** + * 判断订单总金额,只能为整数,详见支付金额是否存在 + * @return true 或 false + **/ + public function IsTotal_feeSet() + { + return array_key_exists('total_fee', $this->values); + } + + + /** + * 设置APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。 + * @param string $value + **/ + public function SetSpbill_create_ip($value) + { + $this->values['spbill_create_ip'] = $value; + } + /** + * 获取APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。的值 + * @return 值 + **/ + public function GetSpbill_create_ip() + { + return $this->values['spbill_create_ip']; + } + /** + * 判断APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。是否存在 + * @return true 或 false + **/ + public function IsSpbill_create_ipSet() + { + return array_key_exists('spbill_create_ip', $this->values); + } + + + /** + * 设置订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则 + * @param string $value + **/ + public function SetTime_start($value) + { + $this->values['time_start'] = $value; + } + /** + * 获取订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则的值 + * @return 值 + **/ + public function GetTime_start() + { + return $this->values['time_start']; + } + /** + * 判断订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTime_startSet() + { + return array_key_exists('time_start', $this->values); + } + + + /** + * 设置订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则 + * @param string $value + **/ + public function SetTime_expire($value) + { + $this->values['time_expire'] = $value; + } + /** + * 获取订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则的值 + * @return 值 + **/ + public function GetTime_expire() + { + return $this->values['time_expire']; + } + /** + * 判断订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTime_expireSet() + { + return array_key_exists('time_expire', $this->values); + } + + + /** + * 设置商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠 + * @param string $value + **/ + public function SetGoods_tag($value) + { + $this->values['goods_tag'] = $value; + } + /** + * 获取商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠的值 + * @return 值 + **/ + public function GetGoods_tag() + { + return $this->values['goods_tag']; + } + /** + * 判断商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠是否存在 + * @return true 或 false + **/ + public function IsGoods_tagSet() + { + return array_key_exists('goods_tag', $this->values); + } + + + /** + * 设置接收微信支付异步通知回调地址 + * @param string $value + **/ + public function SetNotify_url($value) + { + $this->values['notify_url'] = $value; + } + /** + * 获取接收微信支付异步通知回调地址的值 + * @return 值 + **/ + public function GetNotify_url() + { + return $this->values['notify_url']; + } + /** + * 判断接收微信支付异步通知回调地址是否存在 + * @return true 或 false + **/ + public function IsNotify_urlSet() + { + return array_key_exists('notify_url', $this->values); + } + + + /** + * 设置取值如下:JSAPI,NATIVE,APP,详细说明见参数规定 + * @param string $value + **/ + public function SetTrade_type($value) + { + $this->values['trade_type'] = $value; + } + /** + * 获取取值如下:JSAPI,NATIVE,APP,详细说明见参数规定的值 + * @return 值 + **/ + public function GetTrade_type() + { + return $this->values['trade_type']; + } + /** + * 判断取值如下:JSAPI,NATIVE,APP,详细说明见参数规定是否存在 + * @return true 或 false + **/ + public function IsTrade_typeSet() + { + return array_key_exists('trade_type', $this->values); + } + + + /** + * 设置trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。 + * @param string $value + **/ + public function SetProduct_id($value) + { + $this->values['product_id'] = $value; + } + /** + * 获取trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。的值 + * @return 值 + **/ + public function GetProduct_id() + { + return $this->values['product_id']; + } + /** + * 判断trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。是否存在 + * @return true 或 false + **/ + public function IsProduct_idSet() + { + return array_key_exists('product_id', $this->values); + } + + + /** + * 设置trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 + * @param string $value + **/ + public function SetOpenid($value) + { + $this->values['openid'] = $value; + } + /** + * 获取trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 的值 + * @return 值 + **/ + public function GetOpenid() + { + return $this->values['openid']; + } + /** + * 判断trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 是否存在 + * @return true 或 false + **/ + public function IsOpenidSet() + { + return array_key_exists('openid', $this->values); + } +} + +/** + * + * 订单查询输入对象 + * @author widyhu + * + */ +class WxPayOrderQuery extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信的订单号,优先使用 + * @param string $value + **/ + public function SetTransaction_id($value) + { + $this->values['transaction_id'] = $value; + } + /** + * 获取微信的订单号,优先使用的值 + * @return 值 + **/ + public function GetTransaction_id() + { + return $this->values['transaction_id']; + } + /** + * 判断微信的订单号,优先使用是否存在 + * @return true 或 false + **/ + public function IsTransaction_idSet() + { + return array_key_exists('transaction_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号,当没提供transaction_id时需要传这个。 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,当没提供transaction_id时需要传这个。的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,当没提供transaction_id时需要传这个。是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } +} + +/** + * + * 关闭订单输入对象 + * @author widyhu + * + */ +class WxPayCloseOrder extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } +} + +/** + * + * 提交退款输入对象 + * @author widyhu + * + */ +class WxPayRefund extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,与下单一致 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,与下单一致的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,与下单一致是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置微信订单号 + * @param string $value + **/ + public function SetTransaction_id($value) + { + $this->values['transaction_id'] = $value; + } + /** + * 获取微信订单号的值 + * @return 值 + **/ + public function GetTransaction_id() + { + return $this->values['transaction_id']; + } + /** + * 判断微信订单号是否存在 + * @return true 或 false + **/ + public function IsTransaction_idSet() + { + return array_key_exists('transaction_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔 + * @param string $value + **/ + public function SetOut_refund_no($value) + { + $this->values['out_refund_no'] = $value; + } + /** + * 获取商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔的值 + * @return 值 + **/ + public function GetOut_refund_no() + { + return $this->values['out_refund_no']; + } + /** + * 判断商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔是否存在 + * @return true 或 false + **/ + public function IsOut_refund_noSet() + { + return array_key_exists('out_refund_no', $this->values); + } + + + /** + * 设置订单总金额,单位为分,只能为整数,详见支付金额 + * @param string $value + **/ + public function SetTotal_fee($value) + { + $this->values['total_fee'] = $value; + } + /** + * 获取订单总金额,单位为分,只能为整数,详见支付金额的值 + * @return 值 + **/ + public function GetTotal_fee() + { + return $this->values['total_fee']; + } + /** + * 判断订单总金额,单位为分,只能为整数,详见支付金额是否存在 + * @return true 或 false + **/ + public function IsTotal_feeSet() + { + return array_key_exists('total_fee', $this->values); + } + + + /** + * 设置退款总金额,订单总金额,单位为分,只能为整数,详见支付金额 + * @param string $value + **/ + public function SetRefund_fee($value) + { + $this->values['refund_fee'] = $value; + } + /** + * 获取退款总金额,订单总金额,单位为分,只能为整数,详见支付金额的值 + * @return 值 + **/ + public function GetRefund_fee() + { + return $this->values['refund_fee']; + } + /** + * 判断退款总金额,订单总金额,单位为分,只能为整数,详见支付金额是否存在 + * @return true 或 false + **/ + public function IsRefund_feeSet() + { + return array_key_exists('refund_fee', $this->values); + } + + + /** + * 设置货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 + * @param string $value + **/ + public function SetRefund_fee_type($value) + { + $this->values['refund_fee_type'] = $value; + } + /** + * 获取货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型的值 + * @return 值 + **/ + public function GetRefund_fee_type() + { + return $this->values['refund_fee_type']; + } + /** + * 判断货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型是否存在 + * @return true 或 false + **/ + public function IsRefund_fee_typeSet() + { + return array_key_exists('refund_fee_type', $this->values); + } + + + /** + * 设置操作员帐号, 默认为商户号 + * @param string $value + **/ + public function SetOp_user_id($value) + { + $this->values['op_user_id'] = $value; + } + /** + * 获取操作员帐号, 默认为商户号的值 + * @return 值 + **/ + public function GetOp_user_id() + { + return $this->values['op_user_id']; + } + /** + * 判断操作员帐号, 默认为商户号是否存在 + * @return true 或 false + **/ + public function IsOp_user_idSet() + { + return array_key_exists('op_user_id', $this->values); + } +} + +/** + * + * 退款查询输入对象 + * @author widyhu + * + */ +class WxPayRefundQuery extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置微信订单号 + * @param string $value + **/ + public function SetTransaction_id($value) + { + $this->values['transaction_id'] = $value; + } + /** + * 获取微信订单号的值 + * @return 值 + **/ + public function GetTransaction_id() + { + return $this->values['transaction_id']; + } + /** + * 判断微信订单号是否存在 + * @return true 或 false + **/ + public function IsTransaction_idSet() + { + return array_key_exists('transaction_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置商户退款单号 + * @param string $value + **/ + public function SetOut_refund_no($value) + { + $this->values['out_refund_no'] = $value; + } + /** + * 获取商户退款单号的值 + * @return 值 + **/ + public function GetOut_refund_no() + { + return $this->values['out_refund_no']; + } + /** + * 判断商户退款单号是否存在 + * @return true 或 false + **/ + public function IsOut_refund_noSet() + { + return array_key_exists('out_refund_no', $this->values); + } + + + /** + * 设置微信退款单号refund_id、out_refund_no、out_trade_no、transaction_id四个参数必填一个,如果同时存在优先级为:refund_id>out_refund_no>transaction_id>out_trade_no + * @param string $value + **/ + public function SetRefund_id($value) + { + $this->values['refund_id'] = $value; + } + /** + * 获取微信退款单号refund_id、out_refund_no、out_trade_no、transaction_id四个参数必填一个,如果同时存在优先级为:refund_id>out_refund_no>transaction_id>out_trade_no的值 + * @return 值 + **/ + public function GetRefund_id() + { + return $this->values['refund_id']; + } + /** + * 判断微信退款单号refund_id、out_refund_no、out_trade_no、transaction_id四个参数必填一个,如果同时存在优先级为:refund_id>out_refund_no>transaction_id>out_trade_no是否存在 + * @return true 或 false + **/ + public function IsRefund_idSet() + { + return array_key_exists('refund_id', $this->values); + } +} + +/** + * + * 下载对账单输入对象 + * @author widyhu + * + */ +class WxPayDownloadBill extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,填写此字段,只下载该设备号的对账单 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,填写此字段,只下载该设备号的对账单的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,填写此字段,只下载该设备号的对账单是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置下载对账单的日期,格式:20140603 + * @param string $value + **/ + public function SetBill_date($value) + { + $this->values['bill_date'] = $value; + } + /** + * 获取下载对账单的日期,格式:20140603的值 + * @return 值 + **/ + public function GetBill_date() + { + return $this->values['bill_date']; + } + /** + * 判断下载对账单的日期,格式:20140603是否存在 + * @return true 或 false + **/ + public function IsBill_dateSet() + { + return array_key_exists('bill_date', $this->values); + } + + + /** + * 设置ALL,返回当日所有订单信息,默认值SUCCESS,返回当日成功支付的订单REFUND,返回当日退款订单REVOKED,已撤销的订单 + * @param string $value + **/ + public function SetBill_type($value) + { + $this->values['bill_type'] = $value; + } + /** + * 获取ALL,返回当日所有订单信息,默认值SUCCESS,返回当日成功支付的订单REFUND,返回当日退款订单REVOKED,已撤销的订单的值 + * @return 值 + **/ + public function GetBill_type() + { + return $this->values['bill_type']; + } + /** + * 判断ALL,返回当日所有订单信息,默认值SUCCESS,返回当日成功支付的订单REFUND,返回当日退款订单REVOKED,已撤销的订单是否存在 + * @return true 或 false + **/ + public function IsBill_typeSet() + { + return array_key_exists('bill_type', $this->values); + } +} + +/** + * + * 测速上报输入对象 + * @author widyhu + * + */ +class WxPayReport extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,商户自定义 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,商户自定义的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,商户自定义是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + + /** + * 设置上报对应的接口的完整URL,类似:https://api.mch.weixin.qq.com/pay/unifiedorder对于被扫支付,为更好的和商户共同分析一次业务行为的整体耗时情况,对于两种接入模式,请都在门店侧对一次被扫行为进行一次单独的整体上报,上报URL指定为:https://api.mch.weixin.qq.com/pay/micropay/total关于两种接入模式具体可参考本文档章节:被扫支付商户接入模式其它接口调用仍然按照调用一次,上报一次来进行。 + * @param string $value + **/ + public function SetInterface_url($value) + { + $this->values['interface_url'] = $value; + } + /** + * 获取上报对应的接口的完整URL,类似:https://api.mch.weixin.qq.com/pay/unifiedorder对于被扫支付,为更好的和商户共同分析一次业务行为的整体耗时情况,对于两种接入模式,请都在门店侧对一次被扫行为进行一次单独的整体上报,上报URL指定为:https://api.mch.weixin.qq.com/pay/micropay/total关于两种接入模式具体可参考本文档章节:被扫支付商户接入模式其它接口调用仍然按照调用一次,上报一次来进行。的值 + * @return 值 + **/ + public function GetInterface_url() + { + return $this->values['interface_url']; + } + /** + * 判断上报对应的接口的完整URL,类似:https://api.mch.weixin.qq.com/pay/unifiedorder对于被扫支付,为更好的和商户共同分析一次业务行为的整体耗时情况,对于两种接入模式,请都在门店侧对一次被扫行为进行一次单独的整体上报,上报URL指定为:https://api.mch.weixin.qq.com/pay/micropay/total关于两种接入模式具体可参考本文档章节:被扫支付商户接入模式其它接口调用仍然按照调用一次,上报一次来进行。是否存在 + * @return true 或 false + **/ + public function IsInterface_urlSet() + { + return array_key_exists('interface_url', $this->values); + } + + + /** + * 设置接口耗时情况,单位为毫秒 + * @param string $value + **/ + public function SetExecute_time_($value) + { + $this->values['execute_time_'] = $value; + } + /** + * 获取接口耗时情况,单位为毫秒的值 + * @return 值 + **/ + public function GetExecute_time_() + { + return $this->values['execute_time_']; + } + /** + * 判断接口耗时情况,单位为毫秒是否存在 + * @return true 或 false + **/ + public function IsExecute_time_Set() + { + return array_key_exists('execute_time_', $this->values); + } + + + /** + * 设置SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断 + * @param string $value + **/ + public function SetReturn_code($value) + { + $this->values['return_code'] = $value; + } + /** + * 获取SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断的值 + * @return 值 + **/ + public function GetReturn_code() + { + return $this->values['return_code']; + } + /** + * 判断SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断是否存在 + * @return true 或 false + **/ + public function IsReturn_codeSet() + { + return array_key_exists('return_code', $this->values); + } + + + /** + * 设置返回信息,如非空,为错误原因签名失败参数格式校验错误 + * @param string $value + **/ + public function SetReturn_msg($value) + { + $this->values['return_msg'] = $value; + } + /** + * 获取返回信息,如非空,为错误原因签名失败参数格式校验错误的值 + * @return 值 + **/ + public function GetReturn_msg() + { + return $this->values['return_msg']; + } + /** + * 判断返回信息,如非空,为错误原因签名失败参数格式校验错误是否存在 + * @return true 或 false + **/ + public function IsReturn_msgSet() + { + return array_key_exists('return_msg', $this->values); + } + + + /** + * 设置SUCCESS/FAIL + * @param string $value + **/ + public function SetResult_code($value) + { + $this->values['result_code'] = $value; + } + /** + * 获取SUCCESS/FAIL的值 + * @return 值 + **/ + public function GetResult_code() + { + return $this->values['result_code']; + } + /** + * 判断SUCCESS/FAIL是否存在 + * @return true 或 false + **/ + public function IsResult_codeSet() + { + return array_key_exists('result_code', $this->values); + } + + + /** + * 设置ORDERNOTEXIST—订单不存在SYSTEMERROR—系统错误 + * @param string $value + **/ + public function SetErr_code($value) + { + $this->values['err_code'] = $value; + } + /** + * 获取ORDERNOTEXIST—订单不存在SYSTEMERROR—系统错误的值 + * @return 值 + **/ + public function GetErr_code() + { + return $this->values['err_code']; + } + /** + * 判断ORDERNOTEXIST—订单不存在SYSTEMERROR—系统错误是否存在 + * @return true 或 false + **/ + public function IsErr_codeSet() + { + return array_key_exists('err_code', $this->values); + } + + + /** + * 设置结果信息描述 + * @param string $value + **/ + public function SetErr_code_des($value) + { + $this->values['err_code_des'] = $value; + } + /** + * 获取结果信息描述的值 + * @return 值 + **/ + public function GetErr_code_des() + { + return $this->values['err_code_des']; + } + /** + * 判断结果信息描述是否存在 + * @return true 或 false + **/ + public function IsErr_code_desSet() + { + return array_key_exists('err_code_des', $this->values); + } + + + /** + * 设置商户系统内部的订单号,商户可以在上报时提供相关商户订单号方便微信支付更好的提高服务质量。 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,商户可以在上报时提供相关商户订单号方便微信支付更好的提高服务质量。 的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,商户可以在上报时提供相关商户订单号方便微信支付更好的提高服务质量。 是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置发起接口调用时的机器IP + * @param string $value + **/ + public function SetUser_ip($value) + { + $this->values['user_ip'] = $value; + } + /** + * 获取发起接口调用时的机器IP 的值 + * @return 值 + **/ + public function GetUser_ip() + { + return $this->values['user_ip']; + } + /** + * 判断发起接口调用时的机器IP 是否存在 + * @return true 或 false + **/ + public function IsUser_ipSet() + { + return array_key_exists('user_ip', $this->values); + } + + + /** + * 设置系统时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则 + * @param string $value + **/ + public function SetTime($value) + { + $this->values['time'] = $value; + } + /** + * 获取系统时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则的值 + * @return 值 + **/ + public function GetTime() + { + return $this->values['time']; + } + /** + * 判断系统时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTimeSet() + { + return array_key_exists('time', $this->values); + } +} + +/** + * + * 短链转换输入对象 + * @author widyhu + * + */ +class WxPayShortUrl extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置需要转换的URL,签名用原串,传输需URL encode + * @param string $value + **/ + public function SetLong_url($value) + { + $this->values['long_url'] = $value; + } + /** + * 获取需要转换的URL,签名用原串,传输需URL encode的值 + * @return 值 + **/ + public function GetLong_url() + { + return $this->values['long_url']; + } + /** + * 判断需要转换的URL,签名用原串,传输需URL encode是否存在 + * @return true 或 false + **/ + public function IsLong_urlSet() + { + return array_key_exists('long_url', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } +} + +/** + * + * 提交被扫输入对象 + * @author widyhu + * + */ +class WxPayMicroPay extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置终端设备号(商户自定义,如门店编号) + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取终端设备号(商户自定义,如门店编号)的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断终端设备号(商户自定义,如门店编号)是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置商品或支付单简要描述 + * @param string $value + **/ + public function SetBody($value) + { + $this->values['body'] = $value; + } + /** + * 获取商品或支付单简要描述的值 + * @return 值 + **/ + public function GetBody() + { + return $this->values['body']; + } + /** + * 判断商品或支付单简要描述是否存在 + * @return true 或 false + **/ + public function IsBodySet() + { + return array_key_exists('body', $this->values); + } + + + /** + * 设置商品名称明细列表 + * @param string $value + **/ + public function SetDetail($value) + { + $this->values['detail'] = $value; + } + /** + * 获取商品名称明细列表的值 + * @return 值 + **/ + public function GetDetail() + { + return $this->values['detail']; + } + /** + * 判断商品名称明细列表是否存在 + * @return true 或 false + **/ + public function IsDetailSet() + { + return array_key_exists('detail', $this->values); + } + + + /** + * 设置附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 + * @param string $value + **/ + public function SetAttach($value) + { + $this->values['attach'] = $value; + } + /** + * 获取附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据的值 + * @return 值 + **/ + public function GetAttach() + { + return $this->values['attach']; + } + /** + * 判断附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据是否存在 + * @return true 或 false + **/ + public function IsAttachSet() + { + return array_key_exists('attach', $this->values); + } + + + /** + * 设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置订单总金额,单位为分,只能为整数,详见支付金额 + * @param string $value + **/ + public function SetTotal_fee($value) + { + $this->values['total_fee'] = $value; + } + /** + * 获取订单总金额,单位为分,只能为整数,详见支付金额的值 + * @return 值 + **/ + public function GetTotal_fee() + { + return $this->values['total_fee']; + } + /** + * 判断订单总金额,单位为分,只能为整数,详见支付金额是否存在 + * @return true 或 false + **/ + public function IsTotal_feeSet() + { + return array_key_exists('total_fee', $this->values); + } + + + /** + * 设置符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 + * @param string $value + **/ + public function SetFee_type($value) + { + $this->values['fee_type'] = $value; + } + /** + * 获取符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型的值 + * @return 值 + **/ + public function GetFee_type() + { + return $this->values['fee_type']; + } + /** + * 判断符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型是否存在 + * @return true 或 false + **/ + public function IsFee_typeSet() + { + return array_key_exists('fee_type', $this->values); + } + + + /** + * 设置调用微信支付API的机器IP + * @param string $value + **/ + public function SetSpbill_create_ip($value) + { + $this->values['spbill_create_ip'] = $value; + } + /** + * 获取调用微信支付API的机器IP 的值 + * @return 值 + **/ + public function GetSpbill_create_ip() + { + return $this->values['spbill_create_ip']; + } + /** + * 判断调用微信支付API的机器IP 是否存在 + * @return true 或 false + **/ + public function IsSpbill_create_ipSet() + { + return array_key_exists('spbill_create_ip', $this->values); + } + + + /** + * 设置订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则 + * @param string $value + **/ + public function SetTime_start($value) + { + $this->values['time_start'] = $value; + } + /** + * 获取订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则的值 + * @return 值 + **/ + public function GetTime_start() + { + return $this->values['time_start']; + } + /** + * 判断订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTime_startSet() + { + return array_key_exists('time_start', $this->values); + } + + + /** + * 设置订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。详见时间规则 + * @param string $value + **/ + public function SetTime_expire($value) + { + $this->values['time_expire'] = $value; + } + /** + * 获取订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。详见时间规则的值 + * @return 值 + **/ + public function GetTime_expire() + { + return $this->values['time_expire']; + } + /** + * 判断订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTime_expireSet() + { + return array_key_exists('time_expire', $this->values); + } + + + /** + * 设置商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠 + * @param string $value + **/ + public function SetGoods_tag($value) + { + $this->values['goods_tag'] = $value; + } + /** + * 获取商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠的值 + * @return 值 + **/ + public function GetGoods_tag() + { + return $this->values['goods_tag']; + } + /** + * 判断商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠是否存在 + * @return true 或 false + **/ + public function IsGoods_tagSet() + { + return array_key_exists('goods_tag', $this->values); + } + + + /** + * 设置扫码支付授权码,设备读取用户微信中的条码或者二维码信息 + * @param string $value + **/ + public function SetAuth_code($value) + { + $this->values['auth_code'] = $value; + } + /** + * 获取扫码支付授权码,设备读取用户微信中的条码或者二维码信息的值 + * @return 值 + **/ + public function GetAuth_code() + { + return $this->values['auth_code']; + } + /** + * 判断扫码支付授权码,设备读取用户微信中的条码或者二维码信息是否存在 + * @return true 或 false + **/ + public function IsAuth_codeSet() + { + return array_key_exists('auth_code', $this->values); + } +} + +/** + * + * 撤销输入对象 + * @author widyhu + * + */ +class WxPayReverse extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信的订单号,优先使用 + * @param string $value + **/ + public function SetTransaction_id($value) + { + $this->values['transaction_id'] = $value; + } + /** + * 获取微信的订单号,优先使用的值 + * @return 值 + **/ + public function GetTransaction_id() + { + return $this->values['transaction_id']; + } + /** + * 判断微信的订单号,优先使用是否存在 + * @return true 或 false + **/ + public function IsTransaction_idSet() + { + return array_key_exists('transaction_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } +} + +/** + * + * 提交JSAPI输入对象 + * @author widyhu + * + */ +class WxPayJsApiPay extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appId'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appId']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appId', $this->values); + } + + + /** + * 设置支付时间戳 + * @param string $value + **/ + public function SetTimeStamp($value) + { + $this->values['timeStamp'] = $value; + } + /** + * 获取支付时间戳的值 + * @return 值 + **/ + public function GetTimeStamp() + { + return $this->values['timeStamp']; + } + /** + * 判断支付时间戳是否存在 + * @return true 或 false + **/ + public function IsTimeStampSet() + { + return array_key_exists('timeStamp', $this->values); + } + + /** + * 随机字符串 + * @param string $value + **/ + public function SetNonceStr($value) + { + $this->values['nonceStr'] = $value; + } + /** + * 获取notify随机字符串值 + * @return 值 + **/ + public function GetReturn_code() + { + return $this->values['nonceStr']; + } + /** + * 判断随机字符串是否存在 + * @return true 或 false + **/ + public function IsReturn_codeSet() + { + return array_key_exists('nonceStr', $this->values); + } + + + /** + * 设置订单详情扩展字符串 + * @param string $value + **/ + public function SetPackage($value) + { + $this->values['package'] = $value; + } + /** + * 获取订单详情扩展字符串的值 + * @return 值 + **/ + public function GetPackage() + { + return $this->values['package']; + } + /** + * 判断订单详情扩展字符串是否存在 + * @return true 或 false + **/ + public function IsPackageSet() + { + return array_key_exists('package', $this->values); + } + + /** + * 设置签名方式 + * @param string $value + **/ + public function SetSignType($value) + { + $this->values['signType'] = $value; + } + /** + * 获取签名方式 + * @return 值 + **/ + public function GetSignType() + { + return $this->values['signType']; + } + /** + * 判断签名方式是否存在 + * @return true 或 false + **/ + public function IsSignTypeSet() + { + return array_key_exists('signType', $this->values); + } + + /** + * 设置签名方式 + * @param string $value + **/ + public function SetPaySign($value) + { + $this->values['paySign'] = $value; + } + /** + * 获取签名方式 + * @return 值 + **/ + public function GetPaySign() + { + return $this->values['paySign']; + } + /** + * 判断签名方式是否存在 + * @return true 或 false + **/ + public function IsPaySignSet() + { + return array_key_exists('paySign', $this->values); + } +} + +/** + * + * 扫码支付模式一生成二维码参数 + * @author widyhu + * + */ +class WxPayBizPayUrl extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + /** + * 设置支付时间戳 + * @param string $value + **/ + public function SetTime_stamp($value) + { + $this->values['time_stamp'] = $value; + } + /** + * 获取支付时间戳的值 + * @return 值 + **/ + public function GetTime_stamp() + { + return $this->values['time_stamp']; + } + /** + * 判断支付时间戳是否存在 + * @return true 或 false + **/ + public function IsTime_stampSet() + { + return array_key_exists('time_stamp', $this->values); + } + + /** + * 设置随机字符串 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置商品ID + * @param string $value + **/ + public function SetProduct_id($value) + { + $this->values['product_id'] = $value; + } + /** + * 获取商品ID的值 + * @return 值 + **/ + public function GetProduct_id() + { + return $this->values['product_id']; + } + /** + * 判断商品ID是否存在 + * @return true 或 false + **/ + public function IsProduct_idSet() + { + return array_key_exists('product_id', $this->values); + } +} + + +/** + * + * 提交企业付款输入对象 + * @author widyhu + * + */ +class WxPayTransfer extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['mch_appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['mch_appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('mch_appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mchid'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mchid']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mchid', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,与下单一致 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,与下单一致的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,与下单一致是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + + /** + * 设置商户订单号,需保持唯一性 + * @param string $value + **/ + public function SetPartner_trade_no($value) + { + $this->values['partner_trade_no'] = $value; + } + /** + * 获取商户订单号,需保持唯一性 + * @return 值 + **/ + public function GetPartner_trade_no() + { + return $this->values['partner_trade_no']; + } + /** + * 判断商户订单号,需保持唯一性 + * @return true 或 false + **/ + public function IsPartner_trade_noSet() + { + return array_key_exists('partner_trade_no', $this->values); + } + + + /** + * 设置商户appid下,某用户的openid + * @param string $value + **/ + public function SetOpenid($value) + { + $this->values['openid'] = $value; + } + /** + * 获取商户appid下,某用户的openid + * @return 值 + **/ + public function GetOpenid() + { + return $this->values['openid']; + } + /** + * 判断商户appid下,某用户的openid + * @return true 或 false + **/ + public function IsOpenidSet() + { + return array_key_exists('openid', $this->values); + } + + + /** + * 设置是否校验真实姓名,NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名 + * @param string $value + **/ + public function SetCheck_name($value) + { + $this->values['check_name'] = $value; + } + /** + * 获取是否校验真实姓名,NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名 + * @return 值 + **/ + public function GetCheck_name() + { + return $this->values['check_name']; + } + /** + * 判断是否校验真实姓名 + * @return true 或 false + **/ + public function IsCheck_nameSet() + { + return array_key_exists('check_name', $this->values); + } + + + /** + * 设置收款用户真实姓名。如果check_name设置为FORCE_CHECK,则必填用户真实姓名 + * @param string $value + **/ + public function SetRe_user_name($value) + { + $this->values['re_user_name'] = $value; + } + /** + * 获取收款用户真实姓名 + * @return 值 + **/ + public function GetRe_user_name() + { + return $this->values['re_user_name']; + } + /** + * 判断收款用户真实姓名 + * @return true 或 false + **/ + public function IsRe_user_nameSet() + { + return array_key_exists('re_user_name', $this->values); + } + + + /** + * 设置企业付款金额,单位为分 + * @param string $value + **/ + public function SetAmount($value) + { + $this->values['amount'] = $value; + } + /** + * 获取企业付款金额,单位为分 + * @return 值 + **/ + public function GetAmount() + { + return $this->values['amount']; + } + /** + * 判断企业付款金额,单位为分 + * @return true 或 false + **/ + public function IsAmountSet() + { + return array_key_exists('amount', $this->values); + } + + + /** + * 设置企业付款操作说明信息。必填。 + * @param string $value + **/ + public function SetDesc($value) + { + $this->values['desc'] = $value; + } + /** + * 获取企业付款操作说明信息。必填。 + * @return 值 + **/ + public function GetDesc() + { + return $this->values['desc']; + } + /** + * 判断企业付款操作说明信息。必填。 + * @return true 或 false + **/ + public function IsDescSet() + { + return array_key_exists('desc', $this->values); + } + + + /** + * 设置调用微信支付API的机器IP + * @param string $value + **/ + public function SetSpbill_create_ip($value) + { + $this->values['spbill_create_ip'] = $value; + } + /** + * 获取调用微信支付API的机器IP 的值 + * @return 值 + **/ + public function GetSpbill_create_ip() + { + return $this->values['spbill_create_ip']; + } + /** + * 判断调用微信支付API的机器IP 是否存在 + * @return true 或 false + **/ + public function IsSpbill_create_ipSet() + { + return array_key_exists('spbill_create_ip', $this->values); + } +} \ No newline at end of file diff --git a/plugins/wxpay/inc/WxPay.Exception.php b/plugins/wxpay/inc/WxPay.Exception.php new file mode 100644 index 0000000..98c91e5 --- /dev/null +++ b/plugins/wxpay/inc/WxPay.Exception.php @@ -0,0 +1,13 @@ +getMessage(); + } +} diff --git a/plugins/wxpay/inc/WxPay.JsApiPay.php b/plugins/wxpay/inc/WxPay.JsApiPay.php new file mode 100644 index 0000000..d7dd862 --- /dev/null +++ b/plugins/wxpay/inc/WxPay.JsApiPay.php @@ -0,0 +1,206 @@ +__CreateOauthUrlForCode($baseUrl); + Header("Location: $url"); + exit(); + } else { + //获取code码,以获取openid + $code = $_GET['code']; + $openid = $this->GetOpenidFromMp($code); + return $openid; + } + } + + /** + * + * 获取jsapi支付的参数 + * @param array $UnifiedOrderResult 统一支付接口返回的数据 + * @throws WxPayException + * + * @return json数据,可直接填入js函数作为参数 + */ + public function GetJsApiParameters($UnifiedOrderResult) + { + if(!array_key_exists("appid", $UnifiedOrderResult) + || !array_key_exists("prepay_id", $UnifiedOrderResult) + || $UnifiedOrderResult['prepay_id'] == "") + { + throw new WxPayException("参数错误"); + } + $jsapi = new WxPayJsApiPay(); + $jsapi->SetAppid($UnifiedOrderResult["appid"]); + $timeStamp = time(); + $jsapi->SetTimeStamp("$timeStamp"); + $jsapi->SetNonceStr(WxPayApi::getNonceStr()); + $jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']); + $jsapi->SetSignType("MD5"); + $jsapi->SetPaySign($jsapi->MakeSign()); + $parameters = json_encode($jsapi->GetValues()); + return $parameters; + } + + /** + * + * 通过code从工作平台获取openid机器access_token + * @param string $code 微信跳转回来带上的code + * + * @return openid + */ + public function GetOpenidFromMp($code) + { + $url = $this->__CreateOauthUrlForOpenid($code); + //初始化curl + $ch = curl_init(); + //设置超时 + curl_setopt($ch, CURLOPT_TIMEOUT, $this->curl_timeout); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); + curl_setopt($ch, CURLOPT_HEADER, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + if(WxPayConfig::CURL_PROXY_HOST != "0.0.0.0" + && WxPayConfig::CURL_PROXY_PORT != 0){ + curl_setopt($ch,CURLOPT_PROXY, WxPayConfig::CURL_PROXY_HOST); + curl_setopt($ch,CURLOPT_PROXYPORT, WxPayConfig::CURL_PROXY_PORT); + } + //运行curl,结果以jason形式返回 + $res = curl_exec($ch); + curl_close($ch); + //取出openid + $data = json_decode($res,true); + $this->data = $data; + $openid = $data['openid']; + return $openid; + } + + /** + * + * 拼接签名字符串 + * @param array $urlObj + * + * @return 返回已经拼接好的字符串 + */ + private function ToUrlParams($urlObj) + { + $buff = ""; + foreach ($urlObj as $k => $v) + { + if($k != "sign"){ + $buff .= $k . "=" . $v . "&"; + } + } + + $buff = trim($buff, "&"); + return $buff; + } + + /** + * + * 获取地址js参数 + * + * @return 获取共享收货地址js函数需要的参数,json格式可以直接做参数使用 + */ + public function GetEditAddressParameters() + { + $getData = $this->data; + $data = array(); + $data["appid"] = WxPayConfig::APPID; + $data["url"] = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; + $time = time(); + $data["timestamp"] = "$time"; + $data["noncestr"] = "1234568"; + $data["accesstoken"] = $getData["access_token"]; + ksort($data); + $params = $this->ToUrlParams($data); + $addrSign = sha1($params); + + $afterData = array( + "addrSign" => $addrSign, + "signType" => "sha1", + "scope" => "jsapi_address", + "appId" => WxPayConfig::APPID, + "timeStamp" => $data["timestamp"], + "nonceStr" => $data["noncestr"] + ); + $parameters = json_encode($afterData); + return $parameters; + } + + /** + * + * 构造获取code的url连接 + * @param string $redirectUrl 微信服务器回跳的url,需要url编码 + * + * @return 返回构造好的url + */ + private function __CreateOauthUrlForCode($redirectUrl) + { + $urlObj["appid"] = WxPayConfig::APPID; + $urlObj["redirect_uri"] = "$redirectUrl"; + $urlObj["response_type"] = "code"; + $urlObj["scope"] = "snsapi_base"; + $urlObj["state"] = "STATE"."#wechat_redirect"; + $bizString = $this->ToUrlParams($urlObj); + return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString; + } + + /** + * + * 构造获取open和access_toke的url地址 + * @param string $code,微信跳转带回的code + * + * @return 请求的url + */ + private function __CreateOauthUrlForOpenid($code) + { + $urlObj["appid"] = WxPayConfig::APPID; + $urlObj["secret"] = WxPayConfig::APPSECRET; + $urlObj["code"] = $code; + $urlObj["grant_type"] = "authorization_code"; + $bizString = $this->ToUrlParams($urlObj); + return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString; + } +} \ No newline at end of file diff --git a/plugins/wxpay/inc/WxPay.NativePay.php b/plugins/wxpay/inc/WxPay.NativePay.php new file mode 100644 index 0000000..f4e0cf8 --- /dev/null +++ b/plugins/wxpay/inc/WxPay.NativePay.php @@ -0,0 +1,52 @@ +SetProduct_id($productId); + $values = WxpayApi::bizpayurl($biz); + $url = "weixin://wxpay/bizpayurl?" . $this->ToUrlParams($values); + return $url; + } + + /** + * + * 参数数组转换为url参数 + * @param array $urlObj + */ + private function ToUrlParams($urlObj) + { + $buff = ""; + foreach ($urlObj as $k => $v) + { + $buff .= $k . "=" . $v . "&"; + } + + $buff = trim($buff, "&"); + return $buff; + } + + /** + * + * 生成直接支付url,支付url有效期为2小时,模式二 + * @param UnifiedOrderInput $input + */ + public function GetPayUrl($input) + { + $result = WxPayApi::unifiedOrder($input); + return $result; + } +} \ No newline at end of file diff --git a/plugins/wxpay/inc/WxPay.Notify.php b/plugins/wxpay/inc/WxPay.Notify.php new file mode 100644 index 0000000..31e0440 --- /dev/null +++ b/plugins/wxpay/inc/WxPay.Notify.php @@ -0,0 +1,84 @@ +SetReturn_code("FAIL"); + $this->SetReturn_msg($msg); + $this->ReplyNotify(false); + return; + } else { + //该分支在成功回调到NotifyCallBack方法,处理完成之后流程 + $this->SetReturn_code("SUCCESS"); + $this->SetReturn_msg("OK"); + } + $this->ReplyNotify($needSign); + } + + /** + * + * 回调方法入口,子类可重写该方法 + * 注意: + * 1、微信回调超时时间为2s,建议用户使用异步处理流程,确认成功之后立刻回复微信服务器 + * 2、微信服务器在调用失败或者接到回包为非确认包的时候,会发起重试,需确保你的回调是可以重入 + * @param array $data 回调解释出的参数 + * @param string $msg 如果回调处理失败,可以将错误信息输出到该方法 + * @return true回调出来完成不需要继续回调,false回调处理未完成需要继续回调 + */ + public function NotifyProcess($data, &$msg) + { + //TODO 用户基础该类之后需要重写该方法,成功的时候返回true,失败返回false + } + + /** + * + * notify回调方法,该方法中需要赋值需要输出的参数,不可重写 + * @param array $data + * @return true回调出来完成不需要继续回调,false回调处理未完成需要继续回调 + */ + final public function NotifyCallBack($data) + { + $msg = "OK"; + $result = $this->NotifyProcess($data, $msg); + + if($result == true){ + $this->SetReturn_code("SUCCESS"); + $this->SetReturn_msg("OK"); + } else { + $this->SetReturn_code("FAIL"); + $this->SetReturn_msg($msg); + } + return $result; + } + + /** + * + * 回复通知 + * @param bool $needSign 是否需要签名输出 + */ + final private function ReplyNotify($needSign = true) + { + //如果需要签名 + if($needSign == true && + $this->GetReturn_code($return_code) == "SUCCESS") + { + $this->SetSign(); + } + WxpayApi::replyNotify($this->ToXml()); + } +} \ No newline at end of file diff --git a/plugins/wxpay/jspay.php b/plugins/wxpay/jspay.php new file mode 100644 index 0000000..5367f6f --- /dev/null +++ b/plugins/wxpay/jspay.php @@ -0,0 +1,131 @@ +GetOpenid(); +if(!$openId)sysmsg('OpenId获取失败'); +$DB->query("update `pre_order` set `buyer` ='$openId' where `trade_no`='".TRADE_NO."'"); + +//②、统一下单 +$input = new WxPayUnifiedOrder(); +$input->SetBody($ordername); +$input->SetOut_trade_no(TRADE_NO); +$input->SetTotal_fee(strval($order['money']*100)); +$input->SetTime_start(date("YmdHis")); +$input->SetTime_expire(date("YmdHis", time() + 600)); +$input->SetNotify_url($conf['localurl'].'pay/wxpay/notify/'.TRADE_NO.'/'); +$input->SetTrade_type("JSAPI"); +$input->SetProduct_id("01001"); +$input->SetOpenid($openId); +$order = WxPayApi::unifiedOrder($input); + +if($order["result_code"]=='SUCCESS'){ + $jsApiParameters = $tools->GetJsApiParameters($order); +}else{ + sysmsg('微信支付下单失败!['.$order["return_code"].'] '.$order["return_msg"].'['.$order["err_code"].'] '.$order["err_code_des"]); +} +$_SESSION[$trade_no.'_wxpay'] = $jsApiParameters; +} + +if($_GET['d']==1){ + $redirect_url='data.backurl'; +}else{ + $redirect_url='\'/pay/wxpay/ok/'.TRADE_NO.'/\''; +} +?> + + + + + + + + + +
    +

    微信安全支付

    +
    +
    +
    +
    +正在跳转... + + + +
    +
    + + \ No newline at end of file diff --git a/plugins/wxpay/notify.php b/plugins/wxpay/notify.php new file mode 100644 index 0000000..a6e8790 --- /dev/null +++ b/plugins/wxpay/notify.php @@ -0,0 +1,71 @@ +SetTransaction_id($transaction_id); + $result = WxPayApi::orderQuery($input); + //Log::DEBUG("query:" . json_encode($result)); + if(array_key_exists("return_code", $result) + && array_key_exists("result_code", $result) + && $result["return_code"] == "SUCCESS" + && $result["result_code"] == "SUCCESS") + { + return true; + } + return false; + } + + //重写回调处理函数 + public function NotifyProcess($data, &$msg) + { + //file_put_contents('log.txt',"call back:" . json_encode($data)); + $notfiyOutput = array(); + + if(!array_key_exists("transaction_id", $data)){ + $msg = "输入参数不正确"; + return false; + } + //查询订单,判断订单真实性 + if(!$this->Queryorder($data["transaction_id"])){ + $msg = "订单查询失败"; + return false; + } + global $DB,$date,$order; + if($data['return_code']=='SUCCESS'){ + if($data['result_code']=='SUCCESS'){ + if($data['out_trade_no'] == TRADE_NO && $data['total_fee']==strval($order['money']*100) && $order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='".TRADE_NO."'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='{$data['transaction_id']}',`endtime` ='$date',`buyer` ='{$data['openid']}',`date`=NOW() where `trade_no`='".TRADE_NO."'"); + processOrder($order); + } + return true; + }else{ + $msg='该订单已经处理'; + return true; + } + }else{ + $msg='['.$data['err_code'].']'.$data['err_code_des']; + return false; + } + }else{ + $msg='['.$data['return_code'].']'.$data['return_msg']; + return false; + } + return true; + } +} + +//Log::DEBUG("begin notify"); +$notify = new PayNotifyCallBack(); +$notify->Handle(false); diff --git a/plugins/wxpay/ok.php b/plugins/wxpay/ok.php new file mode 100644 index 0000000..dea8a19 --- /dev/null +++ b/plugins/wxpay/ok.php @@ -0,0 +1,31 @@ + + + + + + + + + + +
    +

    支付结果页面

    +
    +
    +
    +
    +支付成功,请关闭此页面 +
    +
    + + + \ No newline at end of file diff --git a/plugins/wxpay/qrcode.php b/plugins/wxpay/qrcode.php new file mode 100644 index 0000000..b664f6f --- /dev/null +++ b/plugins/wxpay/qrcode.php @@ -0,0 +1,140 @@ +SetBody($ordername); +$input->SetOut_trade_no(TRADE_NO); +$input->SetTotal_fee(strval($order['money']*100)); +$input->SetSpbill_create_ip($clientip); +$input->SetTime_start(date("YmdHis")); +$input->SetTime_expire(date("YmdHis", time() + 600)); +$input->SetNotify_url($conf['localurl'].'pay/wxpay/notify/'.TRADE_NO.'/'); +$input->SetTrade_type("NATIVE"); +$result = $notify->GetPayUrl($input); +if($result["result_code"]=='SUCCESS'){ + $code_url=$result['code_url']; +}elseif(isset($result["err_code"])){ + sysmsg('微信支付下单失败!['.$result["err_code"].'] '.$result["err_code_des"]); +}else{ + sysmsg('微信支付下单失败!['.$result["return_code"].'] '.$result["return_msg"]); +} + +?> + + + + + + +微信安全支付 - <?php echo $sitename?> + + + +
    +

    +微信支付 +

    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +

    请使用微信扫一扫

    +

    扫描二维码完成支付

    +
    +
    +
    +
    +
    +
    +
    +

    手机用户可保存上方二维码到手机中

    +

    在微信扫一扫中选择“相册”即可

    +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/plugins/wxpay/refund.php b/plugins/wxpay/refund.php new file mode 100644 index 0000000..9c883a0 --- /dev/null +++ b/plugins/wxpay/refund.php @@ -0,0 +1,28 @@ +SetTransaction_id($order['api_trade_no']); + $input->SetTotal_fee(strval($order['realmoney']*100)); + $input->SetRefund_fee(strval($order['realmoney']*100)); + $input->SetOut_refund_no($order['trade_no']); + $input->SetOp_user_id(WxPayConfig::MCHID); + $result = WxPayApi::refund($input); + if($result['return_code']=='SUCCESS' && $result['result_code']=='SUCCESS'){ + $result = ['code'=>0, 'trade_no'=>$result['transaction_id'], 'refund_fee'=>$result['refund_fee']]; + }elseif(isset($result["err_code"])){ + $result = ['code'=>-1, 'msg'=>'['.$result["err_code"].']'.$result["err_code_des"]]; + }else{ + $result = ['code'=>-1, 'msg'=>'['.$result["return_code"].']'.$result["return_msg"]]; + } +} catch(Exception $e) { + $result = ['code'=>-1, 'msg'=>$e->getMessage()]; +} + +return $result; \ No newline at end of file diff --git a/plugins/wxpay/return.php b/plugins/wxpay/return.php new file mode 100644 index 0000000..d681c91 --- /dev/null +++ b/plugins/wxpay/return.php @@ -0,0 +1,64 @@ + + + + + + + + + + +
    +

    订单处理结果

    +
    +
    +
    +
    +正在检测付款结果... + + + +
    +
    + + \ No newline at end of file diff --git a/plugins/wxpay/submit.php b/plugins/wxpay/submit.php new file mode 100644 index 0000000..417a7d1 --- /dev/null +++ b/plugins/wxpay/submit.php @@ -0,0 +1,25 @@ +window.location.href='{$conf['localurl_alipay']}pay/wxpay/jspay/{$trade_no}/?d=1';";exit; + } + echo ""; +}elseif(checkmobile()==true){ + if(in_array('3',$channel['apptype'])){ + if(!empty($conf['localurl_wxpay']) && !strpos($conf['localurl_wxpay'],$_SERVER['HTTP_HOST'])){ + echo "";exit; + } + echo ""; + }elseif(in_array('2',$channel['apptype'])){ + if(!empty($conf['localurl_wxpay']) && !strpos($conf['localurl_wxpay'],$_SERVER['HTTP_HOST'])){ + echo "";exit; + } + echo ""; + }else{ + echo ""; + } +}else{ + echo ""; +} diff --git a/plugins/wxpay/wap.php b/plugins/wxpay/wap.php new file mode 100644 index 0000000..bd614b1 --- /dev/null +++ b/plugins/wxpay/wap.php @@ -0,0 +1,111 @@ + + + + + + 微信支付 + + + + +
    +
    +

    + 微信支付手机版 +

    +
    +
    长按保存到相册使用扫码扫码完成支付
    +
    +
    +
    +
    或复制以下链接到微信打开:
    +
    +
    +
    +
    提示:你可以将以上链接发到自己微信的聊天框(在微信顶部搜索框可以搜到自己的微信),即可点击进入支付
    + +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/plugins/wxpaysl/config.ini b/plugins/wxpaysl/config.ini new file mode 100644 index 0000000..cc0904f --- /dev/null +++ b/plugins/wxpaysl/config.ini @@ -0,0 +1,21 @@ +[config] +;支付插件英文名称,需和目录名称一致,不能有重复 +name = "wxpaysl" + +;支付插件显示名称 +showname = "微信官方支付服务商版" + +;支付插件作者 +author = "微信" + +;支付插件作者链接 +link = "https://pay.weixin.qq.com/partner/public/home" + +;支付插件支持的支付方式,多种方式用英文,隔开,可选的有alipay,qqpay,wxpay,bank +types = "wxpay" + +;支付插件要求传入的参数以及参数显示名称,可选的有appid,appkey,appsecret,appurl,appmchid +inputs = "appid:公众号APPID,appmchid:商户号,appkey:商户支付密钥,appsecret:公众号SECRET,appurl:子商户号" + +;支付插件要求传入的支付方式参数 +select = "1:扫码支付,2:公众号支付,3:H5支付" \ No newline at end of file diff --git a/plugins/wxpaysl/h5.php b/plugins/wxpaysl/h5.php new file mode 100644 index 0000000..0090093 --- /dev/null +++ b/plugins/wxpaysl/h5.php @@ -0,0 +1,32 @@ +SetBody($ordername); +$input->SetOut_trade_no(TRADE_NO); +$input->SetTotal_fee(strval($order['money']*100)); +$input->SetSpbill_create_ip($clientip); +$input->SetTime_start(date("YmdHis")); +$input->SetTime_expire(date("YmdHis", time() + 600)); +$input->SetNotify_url($conf['localurl'].'pay/wxpaysl/notify/'.TRADE_NO.'/'); +$input->SetTrade_type("MWEB"); +$result = $notify->GetPayUrl($input); +if($result["result_code"]=='SUCCESS'){ + $redirect_url=$siteurl.'pay/wxpay/return/'.TRADE_NO.'/'; + $url=$result['mweb_url'].'&redirect_url='.urlencode($redirect_url); + exit(""); +}elseif(isset($result["err_code"])){ + sysmsg('微信支付下单失败!['.$result["err_code"].'] '.$result["err_code_des"]); +}else{ + sysmsg('微信支付下单失败!['.$result["return_code"].'] '.$result["return_msg"]); +} + +?> \ No newline at end of file diff --git a/plugins/wxpaysl/inc/WxPay.Api.php b/plugins/wxpaysl/inc/WxPay.Api.php new file mode 100644 index 0000000..c16b99b --- /dev/null +++ b/plugins/wxpaysl/inc/WxPay.Api.php @@ -0,0 +1,636 @@ +IsOut_trade_noSet()) { + throw new WxPayException("缺少统一支付接口必填参数out_trade_no!"); + }else if(!$inputObj->IsBodySet()){ + throw new WxPayException("缺少统一支付接口必填参数body!"); + }else if(!$inputObj->IsTotal_feeSet()) { + throw new WxPayException("缺少统一支付接口必填参数total_fee!"); + }else if(!$inputObj->IsTrade_typeSet()) { + throw new WxPayException("缺少统一支付接口必填参数trade_type!"); + } + + //关联参数 + if($inputObj->GetTrade_type() == "JSAPI" && !$inputObj->IsOpenidSet()){ + throw new WxPayException("统一支付接口中,缺少必填参数openid!trade_type为JSAPI时,openid为必填参数!"); + } + if($inputObj->GetTrade_type() == "JSAPI" && !$inputObj->IsProduct_idSet()){ + throw new WxPayException("统一支付接口中,缺少必填参数product_id!trade_type为JSAPI时,product_id为必填参数!"); + } + + //异步通知url未设置,则使用配置文件中的url + if(!$inputObj->IsNotify_urlSet()){ + $inputObj->SetNotify_url(WxPayConfig::NOTIFY_URL);//异步通知url + } + + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetSubAppid(WxPayConfig::SUB_APPID);//子商户公众账号ID + $inputObj->SetSubMch_id(WxPayConfig::SUB_MCHID);//子商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + //签名 + $inputObj->SetSign(); + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 查询订单,WxPayOrderQuery中out_trade_no、transaction_id至少填一个 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayOrderQuery $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function orderQuery($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/pay/orderquery"; + //检测必填参数 + if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) { + throw new WxPayException("订单查询接口中,out_trade_no、transaction_id至少填一个!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetSubAppid(WxPayConfig::SUB_APPID);//子商户公众账号ID + $inputObj->SetSubMch_id(WxPayConfig::SUB_MCHID);//子商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 关闭订单,WxPayCloseOrder中out_trade_no必填 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayCloseOrder $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function closeOrder($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/pay/closeorder"; + //检测必填参数 + if(!$inputObj->IsOut_trade_noSet()) { + throw new WxPayException("订单查询接口中,out_trade_no必填!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetSubAppid(WxPayConfig::SUB_APPID);//子商户公众账号ID + $inputObj->SetSubMch_id(WxPayConfig::SUB_MCHID);//子商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 申请退款,WxPayRefund中out_trade_no、transaction_id至少填一个且 + * out_refund_no、total_fee、refund_fee、op_user_id为必填参数 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayRefund $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function refund($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/secapi/pay/refund"; + //检测必填参数 + if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) { + throw new WxPayException("退款申请接口中,out_trade_no、transaction_id至少填一个!"); + }else if(!$inputObj->IsOut_refund_noSet()){ + throw new WxPayException("退款申请接口中,缺少必填参数out_refund_no!"); + }else if(!$inputObj->IsTotal_feeSet()){ + throw new WxPayException("退款申请接口中,缺少必填参数total_fee!"); + }else if(!$inputObj->IsRefund_feeSet()){ + throw new WxPayException("退款申请接口中,缺少必填参数refund_fee!"); + }else if(!$inputObj->IsOp_user_idSet()){ + throw new WxPayException("退款申请接口中,缺少必填参数op_user_id!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetSubAppid(WxPayConfig::SUB_APPID);//子商户公众账号ID + $inputObj->SetSubMch_id(WxPayConfig::SUB_MCHID);//子商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, true, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 查询退款 + * 提交退款申请后,通过调用该接口查询退款状态。退款有一定延时, + * 用零钱支付的退款20分钟内到账,银行卡支付的退款3个工作日后重新查询退款状态。 + * WxPayRefundQuery中out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayRefundQuery $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function refundQuery($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/pay/refundquery"; + //检测必填参数 + if(!$inputObj->IsOut_refund_noSet() && + !$inputObj->IsOut_trade_noSet() && + !$inputObj->IsTransaction_idSet() && + !$inputObj->IsRefund_idSet()) { + throw new WxPayException("退款查询接口中,out_refund_no、out_trade_no、transaction_id、refund_id四个参数必填一个!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetSubAppid(WxPayConfig::SUB_APPID);//子商户公众账号ID + $inputObj->SetSubMch_id(WxPayConfig::SUB_MCHID);//子商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * 下载对账单,WxPayDownloadBill中bill_date为必填参数 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayDownloadBill $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function downloadBill($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/pay/downloadbill"; + //检测必填参数 + if(!$inputObj->IsBill_dateSet()) { + throw new WxPayException("对账单接口中,缺少必填参数bill_date!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetSubAppid(WxPayConfig::SUB_APPID);//子商户公众账号ID + $inputObj->SetSubMch_id(WxPayConfig::SUB_MCHID);//子商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $response = self::postXmlCurl($xml, $url, false, $timeOut); + if(substr($response, 0 , 5) == ""){ + return ""; + } + return $response; + } + + /** + * 提交被扫支付API + * 收银员使用扫码设备读取微信用户刷卡授权码以后,二维码或条码信息传送至商户收银台, + * 由商户收银台或者商户后台调用该接口发起支付。 + * WxPayWxPayMicroPay中body、out_trade_no、total_fee、auth_code参数必填 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayWxPayMicroPay $inputObj + * @param int $timeOut + */ + public static function micropay($inputObj, $timeOut = 10) + { + $url = "https://api.mch.weixin.qq.com/pay/micropay"; + //检测必填参数 + if(!$inputObj->IsBodySet()) { + throw new WxPayException("提交被扫支付API接口中,缺少必填参数body!"); + } else if(!$inputObj->IsOut_trade_noSet()) { + throw new WxPayException("提交被扫支付API接口中,缺少必填参数out_trade_no!"); + } else if(!$inputObj->IsTotal_feeSet()) { + throw new WxPayException("提交被扫支付API接口中,缺少必填参数total_fee!"); + } else if(!$inputObj->IsAuth_codeSet()) { + throw new WxPayException("提交被扫支付API接口中,缺少必填参数auth_code!"); + } + + $inputObj->SetSpbill_create_ip($_SERVER['REMOTE_ADDR']);//终端ip + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetSubAppid(WxPayConfig::SUB_APPID);//子商户公众账号ID + $inputObj->SetSubMch_id(WxPayConfig::SUB_MCHID);//子商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 撤销订单API接口,WxPayReverse中参数out_trade_no和transaction_id必须填写一个 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayReverse $inputObj + * @param int $timeOut + * @throws WxPayException + */ + public static function reverse($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/secapi/pay/reverse"; + //检测必填参数 + if(!$inputObj->IsOut_trade_noSet() && !$inputObj->IsTransaction_idSet()) { + throw new WxPayException("撤销订单API接口中,参数out_trade_no和transaction_id必须填写一个!"); + } + + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetSubAppid(WxPayConfig::SUB_APPID);//子商户公众账号ID + $inputObj->SetSubMch_id(WxPayConfig::SUB_MCHID);//子商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, true, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 企业付款,WxPayTransfer中partner_trade_no必填 + * partner_trade_no、openid、check_name、amount、desc为必填参数 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayTransfer $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function transfer($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/promotion/transfers"; + //检测必填参数 + if(!$inputObj->IsPartner_trade_noSet()){ + throw new WxPayException("企业付款接口中,缺少必填参数partner_trade_no!"); + }else if(!$inputObj->IsOpenidSet()){ + throw new WxPayException("企业付款接口中,缺少必填参数openid!"); + }else if(!$inputObj->IsCheck_nameSet()){ + throw new WxPayException("企业付款接口中,缺少必填参数check_name!"); + }else if(!$inputObj->IsAmountSet()){ + throw new WxPayException("企业付款接口中,缺少必填参数amount!"); + }else if(!$inputObj->IsDescSet()){ + throw new WxPayException("企业付款接口中,缺少必填参数desc!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetSubAppid(WxPayConfig::SUB_APPID);//子商户公众账号ID + $inputObj->SetSubMch_id(WxPayConfig::SUB_MCHID);//子商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + $response = self::postXmlCurl($xml, $url, true, $timeOut); + $result = WxPayResults::Init2($response); + + return $result; + } + + /** + * + * 测速上报,该方法内部封装在report中,使用时请注意异常流程 + * WxPayReport中interface_url、return_code、result_code、user_ip、execute_time_必填 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayReport $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function report($inputObj, $timeOut = 1) + { + $url = "https://api.mch.weixin.qq.com/payitil/report"; + //检测必填参数 + if(!$inputObj->IsInterface_urlSet()) { + throw new WxPayException("接口URL,缺少必填参数interface_url!"); + } if(!$inputObj->IsReturn_codeSet()) { + throw new WxPayException("返回状态码,缺少必填参数return_code!"); + } if(!$inputObj->IsResult_codeSet()) { + throw new WxPayException("业务结果,缺少必填参数result_code!"); + } if(!$inputObj->IsUser_ipSet()) { + throw new WxPayException("访问接口IP,缺少必填参数user_ip!"); + } if(!$inputObj->IsExecute_time_Set()) { + throw new WxPayException("接口耗时,缺少必填参数execute_time_!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetSubAppid(WxPayConfig::SUB_APPID);//子商户公众账号ID + $inputObj->SetSubMch_id(WxPayConfig::SUB_MCHID);//子商户号 + $inputObj->SetUser_ip($_SERVER['REMOTE_ADDR']);//终端ip + $inputObj->SetTime(date("YmdHis"));//商户上报时间 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + return $response; + } + + /** + * + * 生成二维码规则,模式一生成支付二维码 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayBizPayUrl $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function bizpayurl($inputObj, $timeOut = 6) + { + if(!$inputObj->IsProduct_idSet()){ + throw new WxPayException("生成二维码,缺少必填参数product_id!"); + } + + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetTime_stamp(time());//时间戳 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + + return $inputObj->GetValues(); + } + + /** + * + * 转换短链接 + * 该接口主要用于扫码原生支付模式一中的二维码链接转成短链接(weixin://wxpay/s/XXXXXX), + * 减小二维码数据量,提升扫描速度和精确度。 + * appid、mchid、spbill_create_ip、nonce_str不需要填入 + * @param WxPayShortUrl $inputObj + * @param int $timeOut + * @throws WxPayException + * @return 成功时返回,其他抛异常 + */ + public static function shorturl($inputObj, $timeOut = 6) + { + $url = "https://api.mch.weixin.qq.com/tools/shorturl"; + //检测必填参数 + if(!$inputObj->IsLong_urlSet()) { + throw new WxPayException("需要转换的URL,签名用原串,传输需URL encode!"); + } + $inputObj->SetAppid(WxPayConfig::APPID);//公众账号ID + $inputObj->SetMch_id(WxPayConfig::MCHID);//商户号 + $inputObj->SetNonce_str(self::getNonceStr());//随机字符串 + + $inputObj->SetSign();//签名 + $xml = $inputObj->ToXml(); + + $startTimeStamp = self::getMillisecond();//请求开始时间 + $response = self::postXmlCurl($xml, $url, false, $timeOut); + $result = WxPayResults::Init($response); + self::reportCostTime($url, $startTimeStamp, $result);//上报请求花费时间 + + return $result; + } + + /** + * + * 支付结果通用通知 + * @param function $callback + * 直接回调函数使用方法: notify(you_function); + * 回调类成员函数方法:notify(array($this, you_function)); + * $callback 原型为:function function_name($data){} + */ + public static function notify($callback, &$msg) + { + //获取通知的数据 + $xml = file_get_contents("php://input"); + //如果返回成功则验证签名 + try { + $result = WxPayResults::Init($xml); + } catch (WxPayException $e){ + $msg = $e->errorMessage(); + return false; + } + + return call_user_func($callback, $result); + } + + /** + * + * 产生随机字符串,不长于32位 + * @param int $length + * @return 产生的随机字符串 + */ + public static function getNonceStr($length = 32) + { + $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; + $str =""; + for ( $i = 0; $i < $length; $i++ ) { + $str .= substr($chars, mt_rand(0, strlen($chars)-1), 1); + } + return $str; + } + + /** + * 直接输出xml + * @param string $xml + */ + public static function replyNotify($xml) + { + echo $xml; + } + + /** + * + * 上报数据, 上报的时候将屏蔽所有异常流程 + * @param string $usrl + * @param int $startTimeStamp + * @param array $data + */ + private static function reportCostTime($url, $startTimeStamp, $data) + { + //如果不需要上报数据 + if(WxPayConfig::REPORT_LEVENL == 0){ + return; + } + //如果仅失败上报 + if(WxPayConfig::REPORT_LEVENL == 1 && + array_key_exists("return_code", $data) && + $data["return_code"] == "SUCCESS" && + array_key_exists("result_code", $data) && + $data["result_code"] == "SUCCESS") + { + return; + } + + //上报逻辑 + $endTimeStamp = self::getMillisecond(); + $objInput = new WxPayReport(); + $objInput->SetInterface_url($url); + $objInput->SetExecute_time_($endTimeStamp - $startTimeStamp); + //返回状态码 + if(array_key_exists("return_code", $data)){ + $objInput->SetReturn_code($data["return_code"]); + } + //返回信息 + if(array_key_exists("return_msg", $data)){ + $objInput->SetReturn_msg($data["return_msg"]); + } + //业务结果 + if(array_key_exists("result_code", $data)){ + $objInput->SetResult_code($data["result_code"]); + } + //错误代码 + if(array_key_exists("err_code", $data)){ + $objInput->SetErr_code($data["err_code"]); + } + //错误代码描述 + if(array_key_exists("err_code_des", $data)){ + $objInput->SetErr_code_des($data["err_code_des"]); + } + //商户订单号 + if(array_key_exists("out_trade_no", $data)){ + $objInput->SetOut_trade_no($data["out_trade_no"]); + } + //设备号 + if(array_key_exists("device_info", $data)){ + $objInput->SetDevice_info($data["device_info"]); + } + + try{ + self::report($objInput); + } catch (WxPayException $e){ + //不做任何处理 + } + } + + /** + * 以post方式提交xml到对应的接口url + * + * @param string $xml 需要post的xml数据 + * @param string $url url + * @param bool $useCert 是否需要证书,默认不需要 + * @param int $second url执行超时时间,默认30s + * @throws WxPayException + */ + private static function postXmlCurl($xml, $url, $useCert = false, $second = 30) + { + $ch = curl_init(); + //设置超时 + curl_setopt($ch, CURLOPT_TIMEOUT, $second); + + //如果有配置代理这里就设置代理 + if(WxPayConfig::CURL_PROXY_HOST != "0.0.0.0" + && WxPayConfig::CURL_PROXY_PORT != 0){ + curl_setopt($ch,CURLOPT_PROXY, WxPayConfig::CURL_PROXY_HOST); + curl_setopt($ch,CURLOPT_PROXYPORT, WxPayConfig::CURL_PROXY_PORT); + } + curl_setopt($ch,CURLOPT_URL, $url); + curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE); + curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,FALSE); + //设置header + curl_setopt($ch, CURLOPT_HEADER, FALSE); + //要求结果为字符串且输出到屏幕上 + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + + if($useCert == true){ + //设置证书 + //使用证书:cert 与 key 分别属于两个.pem文件 + curl_setopt($ch,CURLOPT_SSLCERTTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLCERT, WxPayConfig::SSLCERT_PATH); + curl_setopt($ch,CURLOPT_SSLKEYTYPE,'PEM'); + curl_setopt($ch,CURLOPT_SSLKEY, WxPayConfig::SSLKEY_PATH); + } + //post提交方式 + curl_setopt($ch, CURLOPT_POST, TRUE); + curl_setopt($ch, CURLOPT_POSTFIELDS, $xml); + //运行curl + $data = curl_exec($ch); + //返回结果 + if($data){ + curl_close($ch); + return $data; + } else { + $error = curl_errno($ch); + curl_close($ch); + throw new WxPayException("curl出错,错误码:$error"); + } + } + + /** + * 获取毫秒级别的时间戳 + */ + private static function getMillisecond() + { + //获取毫秒的时间戳 + $time = explode ( " ", microtime () ); + $time = $time[1] . ($time[0] * 1000); + $time2 = explode( ".", $time ); + $time = $time2[0]; + return $time; + } +} + diff --git a/plugins/wxpaysl/inc/WxPay.Config.php b/plugins/wxpaysl/inc/WxPay.Config.php new file mode 100644 index 0000000..bcf3434 --- /dev/null +++ b/plugins/wxpaysl/inc/WxPay.Config.php @@ -0,0 +1,68 @@ +MakeSign(); + $this->values['sign'] = $sign; + return $sign; + } + + /** + * 获取签名,详见签名生成算法的值 + * @return 值 + **/ + public function GetSign() + { + return $this->values['sign']; + } + + /** + * 判断签名,详见签名生成算法是否存在 + * @return true 或 false + **/ + public function IsSignSet() + { + return array_key_exists('sign', $this->values); + } + + /** + * 输出xml字符 + * @throws WxPayException + **/ + public function ToXml() + { + if(!is_array($this->values) + || count($this->values) <= 0) + { + throw new WxPayException("数组数据异常!"); + } + + $xml = ""; + foreach ($this->values as $key=>$val) + { + if (is_numeric($val)){ + $xml.="<".$key.">".$val.""; + }else{ + $xml.="<".$key.">"; + } + } + $xml.=""; + return $xml; + } + + /** + * 将xml转为array + * @param string $xml + * @throws WxPayException + */ + public function FromXml($xml) + { + if(!$xml){ + throw new WxPayException("xml数据异常!"); + } + //将XML转为array + //禁止引用外部xml实体 + libxml_disable_entity_loader(true); + $this->values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true); + return $this->values; + } + + /** + * 格式化参数格式化成url参数 + */ + public function ToUrlParams() + { + $buff = ""; + foreach ($this->values as $k => $v) + { + if($k != "sign" && $v != "" && !is_array($v)){ + $buff .= $k . "=" . $v . "&"; + } + } + + $buff = trim($buff, "&"); + return $buff; + } + + /** + * 生成签名 + * @return 签名,本函数不覆盖sign成员变量,如要设置签名需要调用SetSign方法赋值 + */ + public function MakeSign() + { + //签名步骤一:按字典序排序参数 + ksort($this->values); + $string = $this->ToUrlParams(); + //签名步骤二:在string后加入KEY + $string = $string . "&key=".WxPayConfig::KEY; + //签名步骤三:MD5加密 + $string = md5($string); + //签名步骤四:所有字符转为大写 + $result = strtoupper($string); + return $result; + } + + /** + * 获取设置的值 + */ + public function GetValues() + { + return $this->values; + } +} + +/** + * + * 接口调用结果类 + * @author widyhu + * + */ +class WxPayResults extends WxPayDataBase +{ + /** + * + * 检测签名 + */ + public function CheckSign() + { + //fix异常 + if(!$this->IsSignSet()){ + throw new WxPayException("签名错误!"); + } + + $sign = $this->MakeSign(); + if($this->GetSign() == $sign){ + return true; + } + throw new WxPayException("签名错误!"); + } + + /** + * + * 使用数组初始化 + * @param array $array + */ + public function FromArray($array) + { + $this->values = $array; + } + + /** + * + * 使用数组初始化对象 + * @param array $array + * @param 是否检测签名 $noCheckSign + */ + public static function InitFromArray($array, $noCheckSign = false) + { + $obj = new self(); + $obj->FromArray($array); + if($noCheckSign == false){ + $obj->CheckSign(); + } + return $obj; + } + + /** + * + * 设置参数 + * @param string $key + * @param string $value + */ + public function SetData($key, $value) + { + $this->values[$key] = $value; + } + + /** + * 将xml转为array + * @param string $xml + * @throws WxPayException + */ + public static function Init($xml) + { + $obj = new self(); + $obj->FromXml($xml); + //fix bug 2015-06-29 + if($obj->values['return_code'] != 'SUCCESS'){ + return $obj->GetValues(); + } + $obj->CheckSign(); + return $obj->GetValues(); + } + + /** + * 将xml转为array(无签名校验) + * @param string $xml + * @throws WxPayException + */ + public static function Init2($xml) + { + $obj = new self(); + $obj->FromXml($xml); + if($obj->values['return_code'] != 'SUCCESS'){ + return $obj->GetValues(); + } + return $obj->GetValues(); + } +} + +/** + * + * 回调基础类 + * @author widyhu + * + */ +class WxPayNotifyReply extends WxPayDataBase +{ + /** + * + * 设置错误码 FAIL 或者 SUCCESS + * @param string + */ + public function SetReturn_code($return_code) + { + $this->values['return_code'] = $return_code; + } + + /** + * + * 获取错误码 FAIL 或者 SUCCESS + * @return string $return_code + */ + public function GetReturn_code() + { + return $this->values['return_code']; + } + + /** + * + * 设置错误信息 + * @param string $return_code + */ + public function SetReturn_msg($return_msg) + { + $this->values['return_msg'] = $return_msg; + } + + /** + * + * 获取错误信息 + * @return string + */ + public function GetReturn_msg() + { + return $this->values['return_msg']; + } + + /** + * + * 设置返回参数 + * @param string $key + * @param string $value + */ + public function SetData($key, $value) + { + $this->values[$key] = $value; + } +} + +/** + * + * 统一下单输入对象 + * @author widyhu + * + */ +class WxPayUnifiedOrder extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 微信分配的子商户公众账号ID + * @param string $value + **/ + public function SetSubAppid($value) + { + $this->values['sub_appid'] = $value; + } + /** + * 获取微信分配的子商户公众账号ID + * @return 值 + **/ + public function GetSubAppid() + { + return $this->values['sub_appid']; + } + /** + * 判断微信分配的子商户公众账号ID是否存在 + * @return true 或 false + **/ + public function IsSubAppidSet() + { + return array_key_exists('sub_appid', $this->values); + } + + + /** + * 设置微信支付分配的子商户号 + * @param string $value + **/ + public function SetSubMch_id($value) + { + $this->values['sub_mch_id'] = $value; + } + /** + * 获取微信支付分配的子商户号的值 + * @return 值 + **/ + public function GetSubMch_id() + { + return $this->values['sub_mch_id']; + } + /** + * 判断微信支付分配的子商户号是否存在 + * @return true 或 false + **/ + public function IsSubMch_idSet() + { + return array_key_exists('sub_mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,商户自定义 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,商户自定义的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,商户自定义是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置商品或支付单简要描述 + * @param string $value + **/ + public function SetBody($value) + { + $this->values['body'] = $value; + } + /** + * 获取商品或支付单简要描述的值 + * @return 值 + **/ + public function GetBody() + { + return $this->values['body']; + } + /** + * 判断商品或支付单简要描述是否存在 + * @return true 或 false + **/ + public function IsBodySet() + { + return array_key_exists('body', $this->values); + } + + + /** + * 设置商品名称明细列表 + * @param string $value + **/ + public function SetDetail($value) + { + $this->values['detail'] = $value; + } + /** + * 获取商品名称明细列表的值 + * @return 值 + **/ + public function GetDetail() + { + return $this->values['detail']; + } + /** + * 判断商品名称明细列表是否存在 + * @return true 或 false + **/ + public function IsDetailSet() + { + return array_key_exists('detail', $this->values); + } + + + /** + * 设置附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 + * @param string $value + **/ + public function SetAttach($value) + { + $this->values['attach'] = $value; + } + /** + * 获取附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据的值 + * @return 值 + **/ + public function GetAttach() + { + return $this->values['attach']; + } + /** + * 判断附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据是否存在 + * @return true 或 false + **/ + public function IsAttachSet() + { + return array_key_exists('attach', $this->values); + } + + + /** + * 设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 + * @param string $value + **/ + public function SetFee_type($value) + { + $this->values['fee_type'] = $value; + } + /** + * 获取符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型的值 + * @return 值 + **/ + public function GetFee_type() + { + return $this->values['fee_type']; + } + /** + * 判断符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型是否存在 + * @return true 或 false + **/ + public function IsFee_typeSet() + { + return array_key_exists('fee_type', $this->values); + } + + + /** + * 设置订单总金额,只能为整数,详见支付金额 + * @param string $value + **/ + public function SetTotal_fee($value) + { + $this->values['total_fee'] = $value; + } + /** + * 获取订单总金额,只能为整数,详见支付金额的值 + * @return 值 + **/ + public function GetTotal_fee() + { + return $this->values['total_fee']; + } + /** + * 判断订单总金额,只能为整数,详见支付金额是否存在 + * @return true 或 false + **/ + public function IsTotal_feeSet() + { + return array_key_exists('total_fee', $this->values); + } + + + /** + * 设置APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。 + * @param string $value + **/ + public function SetSpbill_create_ip($value) + { + $this->values['spbill_create_ip'] = $value; + } + /** + * 获取APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。的值 + * @return 值 + **/ + public function GetSpbill_create_ip() + { + return $this->values['spbill_create_ip']; + } + /** + * 判断APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP。是否存在 + * @return true 或 false + **/ + public function IsSpbill_create_ipSet() + { + return array_key_exists('spbill_create_ip', $this->values); + } + + + /** + * 设置订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则 + * @param string $value + **/ + public function SetTime_start($value) + { + $this->values['time_start'] = $value; + } + /** + * 获取订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则的值 + * @return 值 + **/ + public function GetTime_start() + { + return $this->values['time_start']; + } + /** + * 判断订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTime_startSet() + { + return array_key_exists('time_start', $this->values); + } + + + /** + * 设置订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则 + * @param string $value + **/ + public function SetTime_expire($value) + { + $this->values['time_expire'] = $value; + } + /** + * 获取订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则的值 + * @return 值 + **/ + public function GetTime_expire() + { + return $this->values['time_expire']; + } + /** + * 判断订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTime_expireSet() + { + return array_key_exists('time_expire', $this->values); + } + + + /** + * 设置商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠 + * @param string $value + **/ + public function SetGoods_tag($value) + { + $this->values['goods_tag'] = $value; + } + /** + * 获取商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠的值 + * @return 值 + **/ + public function GetGoods_tag() + { + return $this->values['goods_tag']; + } + /** + * 判断商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠是否存在 + * @return true 或 false + **/ + public function IsGoods_tagSet() + { + return array_key_exists('goods_tag', $this->values); + } + + + /** + * 设置接收微信支付异步通知回调地址 + * @param string $value + **/ + public function SetNotify_url($value) + { + $this->values['notify_url'] = $value; + } + /** + * 获取接收微信支付异步通知回调地址的值 + * @return 值 + **/ + public function GetNotify_url() + { + return $this->values['notify_url']; + } + /** + * 判断接收微信支付异步通知回调地址是否存在 + * @return true 或 false + **/ + public function IsNotify_urlSet() + { + return array_key_exists('notify_url', $this->values); + } + + + /** + * 设置取值如下:JSAPI,NATIVE,APP,详细说明见参数规定 + * @param string $value + **/ + public function SetTrade_type($value) + { + $this->values['trade_type'] = $value; + } + /** + * 获取取值如下:JSAPI,NATIVE,APP,详细说明见参数规定的值 + * @return 值 + **/ + public function GetTrade_type() + { + return $this->values['trade_type']; + } + /** + * 判断取值如下:JSAPI,NATIVE,APP,详细说明见参数规定是否存在 + * @return true 或 false + **/ + public function IsTrade_typeSet() + { + return array_key_exists('trade_type', $this->values); + } + + + /** + * 设置trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。 + * @param string $value + **/ + public function SetProduct_id($value) + { + $this->values['product_id'] = $value; + } + /** + * 获取trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。的值 + * @return 值 + **/ + public function GetProduct_id() + { + return $this->values['product_id']; + } + /** + * 判断trade_type=NATIVE,此参数必传。此id为二维码中包含的商品ID,商户自行定义。是否存在 + * @return true 或 false + **/ + public function IsProduct_idSet() + { + return array_key_exists('product_id', $this->values); + } + + + /** + * 设置trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 + * @param string $value + **/ + public function SetOpenid($value) + { + $this->values['openid'] = $value; + } + /** + * 获取trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 的值 + * @return 值 + **/ + public function GetOpenid() + { + return $this->values['openid']; + } + /** + * 判断trade_type=JSAPI,此参数必传,用户在商户appid下的唯一标识。下单前需要调用【网页授权获取用户信息】接口获取到用户的Openid。 是否存在 + * @return true 或 false + **/ + public function IsOpenidSet() + { + return array_key_exists('openid', $this->values); + } +} + +/** + * + * 订单查询输入对象 + * @author widyhu + * + */ +class WxPayOrderQuery extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信的订单号,优先使用 + * @param string $value + **/ + public function SetTransaction_id($value) + { + $this->values['transaction_id'] = $value; + } + /** + * 获取微信的订单号,优先使用的值 + * @return 值 + **/ + public function GetTransaction_id() + { + return $this->values['transaction_id']; + } + /** + * 判断微信的订单号,优先使用是否存在 + * @return true 或 false + **/ + public function IsTransaction_idSet() + { + return array_key_exists('transaction_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号,当没提供transaction_id时需要传这个。 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,当没提供transaction_id时需要传这个。的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,当没提供transaction_id时需要传这个。是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } +} + +/** + * + * 关闭订单输入对象 + * @author widyhu + * + */ +class WxPayCloseOrder extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } +} + +/** + * + * 提交退款输入对象 + * @author widyhu + * + */ +class WxPayRefund extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,与下单一致 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,与下单一致的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,与下单一致是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置微信订单号 + * @param string $value + **/ + public function SetTransaction_id($value) + { + $this->values['transaction_id'] = $value; + } + /** + * 获取微信订单号的值 + * @return 值 + **/ + public function GetTransaction_id() + { + return $this->values['transaction_id']; + } + /** + * 判断微信订单号是否存在 + * @return true 或 false + **/ + public function IsTransaction_idSet() + { + return array_key_exists('transaction_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔 + * @param string $value + **/ + public function SetOut_refund_no($value) + { + $this->values['out_refund_no'] = $value; + } + /** + * 获取商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔的值 + * @return 值 + **/ + public function GetOut_refund_no() + { + return $this->values['out_refund_no']; + } + /** + * 判断商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔是否存在 + * @return true 或 false + **/ + public function IsOut_refund_noSet() + { + return array_key_exists('out_refund_no', $this->values); + } + + + /** + * 设置订单总金额,单位为分,只能为整数,详见支付金额 + * @param string $value + **/ + public function SetTotal_fee($value) + { + $this->values['total_fee'] = $value; + } + /** + * 获取订单总金额,单位为分,只能为整数,详见支付金额的值 + * @return 值 + **/ + public function GetTotal_fee() + { + return $this->values['total_fee']; + } + /** + * 判断订单总金额,单位为分,只能为整数,详见支付金额是否存在 + * @return true 或 false + **/ + public function IsTotal_feeSet() + { + return array_key_exists('total_fee', $this->values); + } + + + /** + * 设置退款总金额,订单总金额,单位为分,只能为整数,详见支付金额 + * @param string $value + **/ + public function SetRefund_fee($value) + { + $this->values['refund_fee'] = $value; + } + /** + * 获取退款总金额,订单总金额,单位为分,只能为整数,详见支付金额的值 + * @return 值 + **/ + public function GetRefund_fee() + { + return $this->values['refund_fee']; + } + /** + * 判断退款总金额,订单总金额,单位为分,只能为整数,详见支付金额是否存在 + * @return true 或 false + **/ + public function IsRefund_feeSet() + { + return array_key_exists('refund_fee', $this->values); + } + + + /** + * 设置货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 + * @param string $value + **/ + public function SetRefund_fee_type($value) + { + $this->values['refund_fee_type'] = $value; + } + /** + * 获取货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型的值 + * @return 值 + **/ + public function GetRefund_fee_type() + { + return $this->values['refund_fee_type']; + } + /** + * 判断货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型是否存在 + * @return true 或 false + **/ + public function IsRefund_fee_typeSet() + { + return array_key_exists('refund_fee_type', $this->values); + } + + + /** + * 设置操作员帐号, 默认为商户号 + * @param string $value + **/ + public function SetOp_user_id($value) + { + $this->values['op_user_id'] = $value; + } + /** + * 获取操作员帐号, 默认为商户号的值 + * @return 值 + **/ + public function GetOp_user_id() + { + return $this->values['op_user_id']; + } + /** + * 判断操作员帐号, 默认为商户号是否存在 + * @return true 或 false + **/ + public function IsOp_user_idSet() + { + return array_key_exists('op_user_id', $this->values); + } +} + +/** + * + * 退款查询输入对象 + * @author widyhu + * + */ +class WxPayRefundQuery extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置微信订单号 + * @param string $value + **/ + public function SetTransaction_id($value) + { + $this->values['transaction_id'] = $value; + } + /** + * 获取微信订单号的值 + * @return 值 + **/ + public function GetTransaction_id() + { + return $this->values['transaction_id']; + } + /** + * 判断微信订单号是否存在 + * @return true 或 false + **/ + public function IsTransaction_idSet() + { + return array_key_exists('transaction_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置商户退款单号 + * @param string $value + **/ + public function SetOut_refund_no($value) + { + $this->values['out_refund_no'] = $value; + } + /** + * 获取商户退款单号的值 + * @return 值 + **/ + public function GetOut_refund_no() + { + return $this->values['out_refund_no']; + } + /** + * 判断商户退款单号是否存在 + * @return true 或 false + **/ + public function IsOut_refund_noSet() + { + return array_key_exists('out_refund_no', $this->values); + } + + + /** + * 设置微信退款单号refund_id、out_refund_no、out_trade_no、transaction_id四个参数必填一个,如果同时存在优先级为:refund_id>out_refund_no>transaction_id>out_trade_no + * @param string $value + **/ + public function SetRefund_id($value) + { + $this->values['refund_id'] = $value; + } + /** + * 获取微信退款单号refund_id、out_refund_no、out_trade_no、transaction_id四个参数必填一个,如果同时存在优先级为:refund_id>out_refund_no>transaction_id>out_trade_no的值 + * @return 值 + **/ + public function GetRefund_id() + { + return $this->values['refund_id']; + } + /** + * 判断微信退款单号refund_id、out_refund_no、out_trade_no、transaction_id四个参数必填一个,如果同时存在优先级为:refund_id>out_refund_no>transaction_id>out_trade_no是否存在 + * @return true 或 false + **/ + public function IsRefund_idSet() + { + return array_key_exists('refund_id', $this->values); + } +} + +/** + * + * 下载对账单输入对象 + * @author widyhu + * + */ +class WxPayDownloadBill extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,填写此字段,只下载该设备号的对账单 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,填写此字段,只下载该设备号的对账单的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,填写此字段,只下载该设备号的对账单是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置下载对账单的日期,格式:20140603 + * @param string $value + **/ + public function SetBill_date($value) + { + $this->values['bill_date'] = $value; + } + /** + * 获取下载对账单的日期,格式:20140603的值 + * @return 值 + **/ + public function GetBill_date() + { + return $this->values['bill_date']; + } + /** + * 判断下载对账单的日期,格式:20140603是否存在 + * @return true 或 false + **/ + public function IsBill_dateSet() + { + return array_key_exists('bill_date', $this->values); + } + + + /** + * 设置ALL,返回当日所有订单信息,默认值SUCCESS,返回当日成功支付的订单REFUND,返回当日退款订单REVOKED,已撤销的订单 + * @param string $value + **/ + public function SetBill_type($value) + { + $this->values['bill_type'] = $value; + } + /** + * 获取ALL,返回当日所有订单信息,默认值SUCCESS,返回当日成功支付的订单REFUND,返回当日退款订单REVOKED,已撤销的订单的值 + * @return 值 + **/ + public function GetBill_type() + { + return $this->values['bill_type']; + } + /** + * 判断ALL,返回当日所有订单信息,默认值SUCCESS,返回当日成功支付的订单REFUND,返回当日退款订单REVOKED,已撤销的订单是否存在 + * @return true 或 false + **/ + public function IsBill_typeSet() + { + return array_key_exists('bill_type', $this->values); + } +} + +/** + * + * 测速上报输入对象 + * @author widyhu + * + */ +class WxPayReport extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,商户自定义 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,商户自定义的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,商户自定义是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + + /** + * 设置上报对应的接口的完整URL,类似:https://api.mch.weixin.qq.com/pay/unifiedorder对于被扫支付,为更好的和商户共同分析一次业务行为的整体耗时情况,对于两种接入模式,请都在门店侧对一次被扫行为进行一次单独的整体上报,上报URL指定为:https://api.mch.weixin.qq.com/pay/micropay/total关于两种接入模式具体可参考本文档章节:被扫支付商户接入模式其它接口调用仍然按照调用一次,上报一次来进行。 + * @param string $value + **/ + public function SetInterface_url($value) + { + $this->values['interface_url'] = $value; + } + /** + * 获取上报对应的接口的完整URL,类似:https://api.mch.weixin.qq.com/pay/unifiedorder对于被扫支付,为更好的和商户共同分析一次业务行为的整体耗时情况,对于两种接入模式,请都在门店侧对一次被扫行为进行一次单独的整体上报,上报URL指定为:https://api.mch.weixin.qq.com/pay/micropay/total关于两种接入模式具体可参考本文档章节:被扫支付商户接入模式其它接口调用仍然按照调用一次,上报一次来进行。的值 + * @return 值 + **/ + public function GetInterface_url() + { + return $this->values['interface_url']; + } + /** + * 判断上报对应的接口的完整URL,类似:https://api.mch.weixin.qq.com/pay/unifiedorder对于被扫支付,为更好的和商户共同分析一次业务行为的整体耗时情况,对于两种接入模式,请都在门店侧对一次被扫行为进行一次单独的整体上报,上报URL指定为:https://api.mch.weixin.qq.com/pay/micropay/total关于两种接入模式具体可参考本文档章节:被扫支付商户接入模式其它接口调用仍然按照调用一次,上报一次来进行。是否存在 + * @return true 或 false + **/ + public function IsInterface_urlSet() + { + return array_key_exists('interface_url', $this->values); + } + + + /** + * 设置接口耗时情况,单位为毫秒 + * @param string $value + **/ + public function SetExecute_time_($value) + { + $this->values['execute_time_'] = $value; + } + /** + * 获取接口耗时情况,单位为毫秒的值 + * @return 值 + **/ + public function GetExecute_time_() + { + return $this->values['execute_time_']; + } + /** + * 判断接口耗时情况,单位为毫秒是否存在 + * @return true 或 false + **/ + public function IsExecute_time_Set() + { + return array_key_exists('execute_time_', $this->values); + } + + + /** + * 设置SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断 + * @param string $value + **/ + public function SetReturn_code($value) + { + $this->values['return_code'] = $value; + } + /** + * 获取SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断的值 + * @return 值 + **/ + public function GetReturn_code() + { + return $this->values['return_code']; + } + /** + * 判断SUCCESS/FAIL此字段是通信标识,非交易标识,交易是否成功需要查看trade_state来判断是否存在 + * @return true 或 false + **/ + public function IsReturn_codeSet() + { + return array_key_exists('return_code', $this->values); + } + + + /** + * 设置返回信息,如非空,为错误原因签名失败参数格式校验错误 + * @param string $value + **/ + public function SetReturn_msg($value) + { + $this->values['return_msg'] = $value; + } + /** + * 获取返回信息,如非空,为错误原因签名失败参数格式校验错误的值 + * @return 值 + **/ + public function GetReturn_msg() + { + return $this->values['return_msg']; + } + /** + * 判断返回信息,如非空,为错误原因签名失败参数格式校验错误是否存在 + * @return true 或 false + **/ + public function IsReturn_msgSet() + { + return array_key_exists('return_msg', $this->values); + } + + + /** + * 设置SUCCESS/FAIL + * @param string $value + **/ + public function SetResult_code($value) + { + $this->values['result_code'] = $value; + } + /** + * 获取SUCCESS/FAIL的值 + * @return 值 + **/ + public function GetResult_code() + { + return $this->values['result_code']; + } + /** + * 判断SUCCESS/FAIL是否存在 + * @return true 或 false + **/ + public function IsResult_codeSet() + { + return array_key_exists('result_code', $this->values); + } + + + /** + * 设置ORDERNOTEXIST—订单不存在SYSTEMERROR—系统错误 + * @param string $value + **/ + public function SetErr_code($value) + { + $this->values['err_code'] = $value; + } + /** + * 获取ORDERNOTEXIST—订单不存在SYSTEMERROR—系统错误的值 + * @return 值 + **/ + public function GetErr_code() + { + return $this->values['err_code']; + } + /** + * 判断ORDERNOTEXIST—订单不存在SYSTEMERROR—系统错误是否存在 + * @return true 或 false + **/ + public function IsErr_codeSet() + { + return array_key_exists('err_code', $this->values); + } + + + /** + * 设置结果信息描述 + * @param string $value + **/ + public function SetErr_code_des($value) + { + $this->values['err_code_des'] = $value; + } + /** + * 获取结果信息描述的值 + * @return 值 + **/ + public function GetErr_code_des() + { + return $this->values['err_code_des']; + } + /** + * 判断结果信息描述是否存在 + * @return true 或 false + **/ + public function IsErr_code_desSet() + { + return array_key_exists('err_code_des', $this->values); + } + + + /** + * 设置商户系统内部的订单号,商户可以在上报时提供相关商户订单号方便微信支付更好的提高服务质量。 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,商户可以在上报时提供相关商户订单号方便微信支付更好的提高服务质量。 的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,商户可以在上报时提供相关商户订单号方便微信支付更好的提高服务质量。 是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置发起接口调用时的机器IP + * @param string $value + **/ + public function SetUser_ip($value) + { + $this->values['user_ip'] = $value; + } + /** + * 获取发起接口调用时的机器IP 的值 + * @return 值 + **/ + public function GetUser_ip() + { + return $this->values['user_ip']; + } + /** + * 判断发起接口调用时的机器IP 是否存在 + * @return true 或 false + **/ + public function IsUser_ipSet() + { + return array_key_exists('user_ip', $this->values); + } + + + /** + * 设置系统时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则 + * @param string $value + **/ + public function SetTime($value) + { + $this->values['time'] = $value; + } + /** + * 获取系统时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则的值 + * @return 值 + **/ + public function GetTime() + { + return $this->values['time']; + } + /** + * 判断系统时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。其他详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTimeSet() + { + return array_key_exists('time', $this->values); + } +} + +/** + * + * 短链转换输入对象 + * @author widyhu + * + */ +class WxPayShortUrl extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置需要转换的URL,签名用原串,传输需URL encode + * @param string $value + **/ + public function SetLong_url($value) + { + $this->values['long_url'] = $value; + } + /** + * 获取需要转换的URL,签名用原串,传输需URL encode的值 + * @return 值 + **/ + public function GetLong_url() + { + return $this->values['long_url']; + } + /** + * 判断需要转换的URL,签名用原串,传输需URL encode是否存在 + * @return true 或 false + **/ + public function IsLong_urlSet() + { + return array_key_exists('long_url', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } +} + +/** + * + * 提交被扫输入对象 + * @author widyhu + * + */ +class WxPayMicroPay extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置终端设备号(商户自定义,如门店编号) + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取终端设备号(商户自定义,如门店编号)的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断终端设备号(商户自定义,如门店编号)是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置商品或支付单简要描述 + * @param string $value + **/ + public function SetBody($value) + { + $this->values['body'] = $value; + } + /** + * 获取商品或支付单简要描述的值 + * @return 值 + **/ + public function GetBody() + { + return $this->values['body']; + } + /** + * 判断商品或支付单简要描述是否存在 + * @return true 或 false + **/ + public function IsBodySet() + { + return array_key_exists('body', $this->values); + } + + + /** + * 设置商品名称明细列表 + * @param string $value + **/ + public function SetDetail($value) + { + $this->values['detail'] = $value; + } + /** + * 获取商品名称明细列表的值 + * @return 值 + **/ + public function GetDetail() + { + return $this->values['detail']; + } + /** + * 判断商品名称明细列表是否存在 + * @return true 或 false + **/ + public function IsDetailSet() + { + return array_key_exists('detail', $this->values); + } + + + /** + * 设置附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据 + * @param string $value + **/ + public function SetAttach($value) + { + $this->values['attach'] = $value; + } + /** + * 获取附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据的值 + * @return 值 + **/ + public function GetAttach() + { + return $this->values['attach']; + } + /** + * 判断附加数据,在查询API和支付通知中原样返回,该字段主要用于商户携带订单的自定义数据是否存在 + * @return true 或 false + **/ + public function IsAttachSet() + { + return array_key_exists('attach', $this->values); + } + + + /** + * 设置商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号 + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,32个字符内、可包含字母, 其他说明见商户订单号是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置订单总金额,单位为分,只能为整数,详见支付金额 + * @param string $value + **/ + public function SetTotal_fee($value) + { + $this->values['total_fee'] = $value; + } + /** + * 获取订单总金额,单位为分,只能为整数,详见支付金额的值 + * @return 值 + **/ + public function GetTotal_fee() + { + return $this->values['total_fee']; + } + /** + * 判断订单总金额,单位为分,只能为整数,详见支付金额是否存在 + * @return true 或 false + **/ + public function IsTotal_feeSet() + { + return array_key_exists('total_fee', $this->values); + } + + + /** + * 设置符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型 + * @param string $value + **/ + public function SetFee_type($value) + { + $this->values['fee_type'] = $value; + } + /** + * 获取符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型的值 + * @return 值 + **/ + public function GetFee_type() + { + return $this->values['fee_type']; + } + /** + * 判断符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型是否存在 + * @return true 或 false + **/ + public function IsFee_typeSet() + { + return array_key_exists('fee_type', $this->values); + } + + + /** + * 设置调用微信支付API的机器IP + * @param string $value + **/ + public function SetSpbill_create_ip($value) + { + $this->values['spbill_create_ip'] = $value; + } + /** + * 获取调用微信支付API的机器IP 的值 + * @return 值 + **/ + public function GetSpbill_create_ip() + { + return $this->values['spbill_create_ip']; + } + /** + * 判断调用微信支付API的机器IP 是否存在 + * @return true 或 false + **/ + public function IsSpbill_create_ipSet() + { + return array_key_exists('spbill_create_ip', $this->values); + } + + + /** + * 设置订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则 + * @param string $value + **/ + public function SetTime_start($value) + { + $this->values['time_start'] = $value; + } + /** + * 获取订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则的值 + * @return 值 + **/ + public function GetTime_start() + { + return $this->values['time_start']; + } + /** + * 判断订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTime_startSet() + { + return array_key_exists('time_start', $this->values); + } + + + /** + * 设置订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。详见时间规则 + * @param string $value + **/ + public function SetTime_expire($value) + { + $this->values['time_expire'] = $value; + } + /** + * 获取订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。详见时间规则的值 + * @return 值 + **/ + public function GetTime_expire() + { + return $this->values['time_expire']; + } + /** + * 判断订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。详见时间规则是否存在 + * @return true 或 false + **/ + public function IsTime_expireSet() + { + return array_key_exists('time_expire', $this->values); + } + + + /** + * 设置商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠 + * @param string $value + **/ + public function SetGoods_tag($value) + { + $this->values['goods_tag'] = $value; + } + /** + * 获取商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠的值 + * @return 值 + **/ + public function GetGoods_tag() + { + return $this->values['goods_tag']; + } + /** + * 判断商品标记,代金券或立减优惠功能的参数,说明详见代金券或立减优惠是否存在 + * @return true 或 false + **/ + public function IsGoods_tagSet() + { + return array_key_exists('goods_tag', $this->values); + } + + + /** + * 设置扫码支付授权码,设备读取用户微信中的条码或者二维码信息 + * @param string $value + **/ + public function SetAuth_code($value) + { + $this->values['auth_code'] = $value; + } + /** + * 获取扫码支付授权码,设备读取用户微信中的条码或者二维码信息的值 + * @return 值 + **/ + public function GetAuth_code() + { + return $this->values['auth_code']; + } + /** + * 判断扫码支付授权码,设备读取用户微信中的条码或者二维码信息是否存在 + * @return true 或 false + **/ + public function IsAuth_codeSet() + { + return array_key_exists('auth_code', $this->values); + } +} + +/** + * + * 撤销输入对象 + * @author widyhu + * + */ +class WxPayReverse extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + + /** + * 设置微信的订单号,优先使用 + * @param string $value + **/ + public function SetTransaction_id($value) + { + $this->values['transaction_id'] = $value; + } + /** + * 获取微信的订单号,优先使用的值 + * @return 值 + **/ + public function GetTransaction_id() + { + return $this->values['transaction_id']; + } + /** + * 判断微信的订单号,优先使用是否存在 + * @return true 或 false + **/ + public function IsTransaction_idSet() + { + return array_key_exists('transaction_id', $this->values); + } + + + /** + * 设置商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no + * @param string $value + **/ + public function SetOut_trade_no($value) + { + $this->values['out_trade_no'] = $value; + } + /** + * 获取商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no的值 + * @return 值 + **/ + public function GetOut_trade_no() + { + return $this->values['out_trade_no']; + } + /** + * 判断商户系统内部的订单号,transaction_id、out_trade_no二选一,如果同时存在优先级:transaction_id> out_trade_no是否存在 + * @return true 或 false + **/ + public function IsOut_trade_noSet() + { + return array_key_exists('out_trade_no', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } +} + +/** + * + * 提交JSAPI输入对象 + * @author widyhu + * + */ +class WxPayJsApiPay extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appId'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appId']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appId', $this->values); + } + + + /** + * 设置支付时间戳 + * @param string $value + **/ + public function SetTimeStamp($value) + { + $this->values['timeStamp'] = $value; + } + /** + * 获取支付时间戳的值 + * @return 值 + **/ + public function GetTimeStamp() + { + return $this->values['timeStamp']; + } + /** + * 判断支付时间戳是否存在 + * @return true 或 false + **/ + public function IsTimeStampSet() + { + return array_key_exists('timeStamp', $this->values); + } + + /** + * 随机字符串 + * @param string $value + **/ + public function SetNonceStr($value) + { + $this->values['nonceStr'] = $value; + } + /** + * 获取notify随机字符串值 + * @return 值 + **/ + public function GetReturn_code() + { + return $this->values['nonceStr']; + } + /** + * 判断随机字符串是否存在 + * @return true 或 false + **/ + public function IsReturn_codeSet() + { + return array_key_exists('nonceStr', $this->values); + } + + + /** + * 设置订单详情扩展字符串 + * @param string $value + **/ + public function SetPackage($value) + { + $this->values['package'] = $value; + } + /** + * 获取订单详情扩展字符串的值 + * @return 值 + **/ + public function GetPackage() + { + return $this->values['package']; + } + /** + * 判断订单详情扩展字符串是否存在 + * @return true 或 false + **/ + public function IsPackageSet() + { + return array_key_exists('package', $this->values); + } + + /** + * 设置签名方式 + * @param string $value + **/ + public function SetSignType($value) + { + $this->values['signType'] = $value; + } + /** + * 获取签名方式 + * @return 值 + **/ + public function GetSignType() + { + return $this->values['signType']; + } + /** + * 判断签名方式是否存在 + * @return true 或 false + **/ + public function IsSignTypeSet() + { + return array_key_exists('signType', $this->values); + } + + /** + * 设置签名方式 + * @param string $value + **/ + public function SetPaySign($value) + { + $this->values['paySign'] = $value; + } + /** + * 获取签名方式 + * @return 值 + **/ + public function GetPaySign() + { + return $this->values['paySign']; + } + /** + * 判断签名方式是否存在 + * @return true 或 false + **/ + public function IsPaySignSet() + { + return array_key_exists('paySign', $this->values); + } +} + +/** + * + * 扫码支付模式一生成二维码参数 + * @author widyhu + * + */ +class WxPayBizPayUrl extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mch_id'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mch_id']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mch_id', $this->values); + } + + /** + * 设置支付时间戳 + * @param string $value + **/ + public function SetTime_stamp($value) + { + $this->values['time_stamp'] = $value; + } + /** + * 获取支付时间戳的值 + * @return 值 + **/ + public function GetTime_stamp() + { + return $this->values['time_stamp']; + } + /** + * 判断支付时间戳是否存在 + * @return true 或 false + **/ + public function IsTime_stampSet() + { + return array_key_exists('time_stamp', $this->values); + } + + /** + * 设置随机字符串 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + /** + * 设置商品ID + * @param string $value + **/ + public function SetProduct_id($value) + { + $this->values['product_id'] = $value; + } + /** + * 获取商品ID的值 + * @return 值 + **/ + public function GetProduct_id() + { + return $this->values['product_id']; + } + /** + * 判断商品ID是否存在 + * @return true 或 false + **/ + public function IsProduct_idSet() + { + return array_key_exists('product_id', $this->values); + } +} + + +/** + * + * 提交企业付款输入对象 + * @author widyhu + * + */ +class WxPayTransfer extends WxPayDataBase +{ + /** + * 设置微信分配的公众账号ID + * @param string $value + **/ + public function SetAppid($value) + { + $this->values['mch_appid'] = $value; + } + /** + * 获取微信分配的公众账号ID的值 + * @return 值 + **/ + public function GetAppid() + { + return $this->values['mch_appid']; + } + /** + * 判断微信分配的公众账号ID是否存在 + * @return true 或 false + **/ + public function IsAppidSet() + { + return array_key_exists('mch_appid', $this->values); + } + + + /** + * 设置微信支付分配的商户号 + * @param string $value + **/ + public function SetMch_id($value) + { + $this->values['mchid'] = $value; + } + /** + * 获取微信支付分配的商户号的值 + * @return 值 + **/ + public function GetMch_id() + { + return $this->values['mchid']; + } + /** + * 判断微信支付分配的商户号是否存在 + * @return true 或 false + **/ + public function IsMch_idSet() + { + return array_key_exists('mchid', $this->values); + } + + + /** + * 设置微信支付分配的终端设备号,与下单一致 + * @param string $value + **/ + public function SetDevice_info($value) + { + $this->values['device_info'] = $value; + } + /** + * 获取微信支付分配的终端设备号,与下单一致的值 + * @return 值 + **/ + public function GetDevice_info() + { + return $this->values['device_info']; + } + /** + * 判断微信支付分配的终端设备号,与下单一致是否存在 + * @return true 或 false + **/ + public function IsDevice_infoSet() + { + return array_key_exists('device_info', $this->values); + } + + + /** + * 设置随机字符串,不长于32位。推荐随机数生成算法 + * @param string $value + **/ + public function SetNonce_str($value) + { + $this->values['nonce_str'] = $value; + } + /** + * 获取随机字符串,不长于32位。推荐随机数生成算法的值 + * @return 值 + **/ + public function GetNonce_str() + { + return $this->values['nonce_str']; + } + /** + * 判断随机字符串,不长于32位。推荐随机数生成算法是否存在 + * @return true 或 false + **/ + public function IsNonce_strSet() + { + return array_key_exists('nonce_str', $this->values); + } + + + /** + * 设置商户订单号,需保持唯一性 + * @param string $value + **/ + public function SetPartner_trade_no($value) + { + $this->values['partner_trade_no'] = $value; + } + /** + * 获取商户订单号,需保持唯一性 + * @return 值 + **/ + public function GetPartner_trade_no() + { + return $this->values['partner_trade_no']; + } + /** + * 判断商户订单号,需保持唯一性 + * @return true 或 false + **/ + public function IsPartner_trade_noSet() + { + return array_key_exists('partner_trade_no', $this->values); + } + + + /** + * 设置商户appid下,某用户的openid + * @param string $value + **/ + public function SetOpenid($value) + { + $this->values['openid'] = $value; + } + /** + * 获取商户appid下,某用户的openid + * @return 值 + **/ + public function GetOpenid() + { + return $this->values['openid']; + } + /** + * 判断商户appid下,某用户的openid + * @return true 或 false + **/ + public function IsOpenidSet() + { + return array_key_exists('openid', $this->values); + } + + + /** + * 设置是否校验真实姓名,NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名 + * @param string $value + **/ + public function SetCheck_name($value) + { + $this->values['check_name'] = $value; + } + /** + * 获取是否校验真实姓名,NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名 + * @return 值 + **/ + public function GetCheck_name() + { + return $this->values['check_name']; + } + /** + * 判断是否校验真实姓名 + * @return true 或 false + **/ + public function IsCheck_nameSet() + { + return array_key_exists('check_name', $this->values); + } + + + /** + * 设置收款用户真实姓名。如果check_name设置为FORCE_CHECK,则必填用户真实姓名 + * @param string $value + **/ + public function SetRe_user_name($value) + { + $this->values['re_user_name'] = $value; + } + /** + * 获取收款用户真实姓名 + * @return 值 + **/ + public function GetRe_user_name() + { + return $this->values['re_user_name']; + } + /** + * 判断收款用户真实姓名 + * @return true 或 false + **/ + public function IsRe_user_nameSet() + { + return array_key_exists('re_user_name', $this->values); + } + + + /** + * 设置企业付款金额,单位为分 + * @param string $value + **/ + public function SetAmount($value) + { + $this->values['amount'] = $value; + } + /** + * 获取企业付款金额,单位为分 + * @return 值 + **/ + public function GetAmount() + { + return $this->values['amount']; + } + /** + * 判断企业付款金额,单位为分 + * @return true 或 false + **/ + public function IsAmountSet() + { + return array_key_exists('amount', $this->values); + } + + + /** + * 设置企业付款操作说明信息。必填。 + * @param string $value + **/ + public function SetDesc($value) + { + $this->values['desc'] = $value; + } + /** + * 获取企业付款操作说明信息。必填。 + * @return 值 + **/ + public function GetDesc() + { + return $this->values['desc']; + } + /** + * 判断企业付款操作说明信息。必填。 + * @return true 或 false + **/ + public function IsDescSet() + { + return array_key_exists('desc', $this->values); + } + + + /** + * 设置调用微信支付API的机器IP + * @param string $value + **/ + public function SetSpbill_create_ip($value) + { + $this->values['spbill_create_ip'] = $value; + } + /** + * 获取调用微信支付API的机器IP 的值 + * @return 值 + **/ + public function GetSpbill_create_ip() + { + return $this->values['spbill_create_ip']; + } + /** + * 判断调用微信支付API的机器IP 是否存在 + * @return true 或 false + **/ + public function IsSpbill_create_ipSet() + { + return array_key_exists('spbill_create_ip', $this->values); + } +} \ No newline at end of file diff --git a/plugins/wxpaysl/inc/WxPay.Exception.php b/plugins/wxpaysl/inc/WxPay.Exception.php new file mode 100644 index 0000000..98c91e5 --- /dev/null +++ b/plugins/wxpaysl/inc/WxPay.Exception.php @@ -0,0 +1,13 @@ +getMessage(); + } +} diff --git a/plugins/wxpaysl/inc/WxPay.JsApiPay.php b/plugins/wxpaysl/inc/WxPay.JsApiPay.php new file mode 100644 index 0000000..d7dd862 --- /dev/null +++ b/plugins/wxpaysl/inc/WxPay.JsApiPay.php @@ -0,0 +1,206 @@ +__CreateOauthUrlForCode($baseUrl); + Header("Location: $url"); + exit(); + } else { + //获取code码,以获取openid + $code = $_GET['code']; + $openid = $this->GetOpenidFromMp($code); + return $openid; + } + } + + /** + * + * 获取jsapi支付的参数 + * @param array $UnifiedOrderResult 统一支付接口返回的数据 + * @throws WxPayException + * + * @return json数据,可直接填入js函数作为参数 + */ + public function GetJsApiParameters($UnifiedOrderResult) + { + if(!array_key_exists("appid", $UnifiedOrderResult) + || !array_key_exists("prepay_id", $UnifiedOrderResult) + || $UnifiedOrderResult['prepay_id'] == "") + { + throw new WxPayException("参数错误"); + } + $jsapi = new WxPayJsApiPay(); + $jsapi->SetAppid($UnifiedOrderResult["appid"]); + $timeStamp = time(); + $jsapi->SetTimeStamp("$timeStamp"); + $jsapi->SetNonceStr(WxPayApi::getNonceStr()); + $jsapi->SetPackage("prepay_id=" . $UnifiedOrderResult['prepay_id']); + $jsapi->SetSignType("MD5"); + $jsapi->SetPaySign($jsapi->MakeSign()); + $parameters = json_encode($jsapi->GetValues()); + return $parameters; + } + + /** + * + * 通过code从工作平台获取openid机器access_token + * @param string $code 微信跳转回来带上的code + * + * @return openid + */ + public function GetOpenidFromMp($code) + { + $url = $this->__CreateOauthUrlForOpenid($code); + //初始化curl + $ch = curl_init(); + //设置超时 + curl_setopt($ch, CURLOPT_TIMEOUT, $this->curl_timeout); + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE); + curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,FALSE); + curl_setopt($ch, CURLOPT_HEADER, FALSE); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); + if(WxPayConfig::CURL_PROXY_HOST != "0.0.0.0" + && WxPayConfig::CURL_PROXY_PORT != 0){ + curl_setopt($ch,CURLOPT_PROXY, WxPayConfig::CURL_PROXY_HOST); + curl_setopt($ch,CURLOPT_PROXYPORT, WxPayConfig::CURL_PROXY_PORT); + } + //运行curl,结果以jason形式返回 + $res = curl_exec($ch); + curl_close($ch); + //取出openid + $data = json_decode($res,true); + $this->data = $data; + $openid = $data['openid']; + return $openid; + } + + /** + * + * 拼接签名字符串 + * @param array $urlObj + * + * @return 返回已经拼接好的字符串 + */ + private function ToUrlParams($urlObj) + { + $buff = ""; + foreach ($urlObj as $k => $v) + { + if($k != "sign"){ + $buff .= $k . "=" . $v . "&"; + } + } + + $buff = trim($buff, "&"); + return $buff; + } + + /** + * + * 获取地址js参数 + * + * @return 获取共享收货地址js函数需要的参数,json格式可以直接做参数使用 + */ + public function GetEditAddressParameters() + { + $getData = $this->data; + $data = array(); + $data["appid"] = WxPayConfig::APPID; + $data["url"] = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; + $time = time(); + $data["timestamp"] = "$time"; + $data["noncestr"] = "1234568"; + $data["accesstoken"] = $getData["access_token"]; + ksort($data); + $params = $this->ToUrlParams($data); + $addrSign = sha1($params); + + $afterData = array( + "addrSign" => $addrSign, + "signType" => "sha1", + "scope" => "jsapi_address", + "appId" => WxPayConfig::APPID, + "timeStamp" => $data["timestamp"], + "nonceStr" => $data["noncestr"] + ); + $parameters = json_encode($afterData); + return $parameters; + } + + /** + * + * 构造获取code的url连接 + * @param string $redirectUrl 微信服务器回跳的url,需要url编码 + * + * @return 返回构造好的url + */ + private function __CreateOauthUrlForCode($redirectUrl) + { + $urlObj["appid"] = WxPayConfig::APPID; + $urlObj["redirect_uri"] = "$redirectUrl"; + $urlObj["response_type"] = "code"; + $urlObj["scope"] = "snsapi_base"; + $urlObj["state"] = "STATE"."#wechat_redirect"; + $bizString = $this->ToUrlParams($urlObj); + return "https://open.weixin.qq.com/connect/oauth2/authorize?".$bizString; + } + + /** + * + * 构造获取open和access_toke的url地址 + * @param string $code,微信跳转带回的code + * + * @return 请求的url + */ + private function __CreateOauthUrlForOpenid($code) + { + $urlObj["appid"] = WxPayConfig::APPID; + $urlObj["secret"] = WxPayConfig::APPSECRET; + $urlObj["code"] = $code; + $urlObj["grant_type"] = "authorization_code"; + $bizString = $this->ToUrlParams($urlObj); + return "https://api.weixin.qq.com/sns/oauth2/access_token?".$bizString; + } +} \ No newline at end of file diff --git a/plugins/wxpaysl/inc/WxPay.NativePay.php b/plugins/wxpaysl/inc/WxPay.NativePay.php new file mode 100644 index 0000000..f4e0cf8 --- /dev/null +++ b/plugins/wxpaysl/inc/WxPay.NativePay.php @@ -0,0 +1,52 @@ +SetProduct_id($productId); + $values = WxpayApi::bizpayurl($biz); + $url = "weixin://wxpay/bizpayurl?" . $this->ToUrlParams($values); + return $url; + } + + /** + * + * 参数数组转换为url参数 + * @param array $urlObj + */ + private function ToUrlParams($urlObj) + { + $buff = ""; + foreach ($urlObj as $k => $v) + { + $buff .= $k . "=" . $v . "&"; + } + + $buff = trim($buff, "&"); + return $buff; + } + + /** + * + * 生成直接支付url,支付url有效期为2小时,模式二 + * @param UnifiedOrderInput $input + */ + public function GetPayUrl($input) + { + $result = WxPayApi::unifiedOrder($input); + return $result; + } +} \ No newline at end of file diff --git a/plugins/wxpaysl/inc/WxPay.Notify.php b/plugins/wxpaysl/inc/WxPay.Notify.php new file mode 100644 index 0000000..31e0440 --- /dev/null +++ b/plugins/wxpaysl/inc/WxPay.Notify.php @@ -0,0 +1,84 @@ +SetReturn_code("FAIL"); + $this->SetReturn_msg($msg); + $this->ReplyNotify(false); + return; + } else { + //该分支在成功回调到NotifyCallBack方法,处理完成之后流程 + $this->SetReturn_code("SUCCESS"); + $this->SetReturn_msg("OK"); + } + $this->ReplyNotify($needSign); + } + + /** + * + * 回调方法入口,子类可重写该方法 + * 注意: + * 1、微信回调超时时间为2s,建议用户使用异步处理流程,确认成功之后立刻回复微信服务器 + * 2、微信服务器在调用失败或者接到回包为非确认包的时候,会发起重试,需确保你的回调是可以重入 + * @param array $data 回调解释出的参数 + * @param string $msg 如果回调处理失败,可以将错误信息输出到该方法 + * @return true回调出来完成不需要继续回调,false回调处理未完成需要继续回调 + */ + public function NotifyProcess($data, &$msg) + { + //TODO 用户基础该类之后需要重写该方法,成功的时候返回true,失败返回false + } + + /** + * + * notify回调方法,该方法中需要赋值需要输出的参数,不可重写 + * @param array $data + * @return true回调出来完成不需要继续回调,false回调处理未完成需要继续回调 + */ + final public function NotifyCallBack($data) + { + $msg = "OK"; + $result = $this->NotifyProcess($data, $msg); + + if($result == true){ + $this->SetReturn_code("SUCCESS"); + $this->SetReturn_msg("OK"); + } else { + $this->SetReturn_code("FAIL"); + $this->SetReturn_msg($msg); + } + return $result; + } + + /** + * + * 回复通知 + * @param bool $needSign 是否需要签名输出 + */ + final private function ReplyNotify($needSign = true) + { + //如果需要签名 + if($needSign == true && + $this->GetReturn_code($return_code) == "SUCCESS") + { + $this->SetSign(); + } + WxpayApi::replyNotify($this->ToXml()); + } +} \ No newline at end of file diff --git a/plugins/wxpaysl/jspay.php b/plugins/wxpaysl/jspay.php new file mode 100644 index 0000000..76cc347 --- /dev/null +++ b/plugins/wxpaysl/jspay.php @@ -0,0 +1,131 @@ +GetOpenid(); +if(!$openId)sysmsg('OpenId获取失败'); +$DB->query("update `pre_order` set `buyer` ='$openId' where `trade_no`='".TRADE_NO."'"); + +//②、统一下单 +$input = new WxPayUnifiedOrder(); +$input->SetBody($ordername); +$input->SetOut_trade_no(TRADE_NO); +$input->SetTotal_fee(strval($order['money']*100)); +$input->SetTime_start(date("YmdHis")); +$input->SetTime_expire(date("YmdHis", time() + 600)); +$input->SetNotify_url($conf['localurl'].'pay/wxpaysl/notify/'.TRADE_NO.'/'); +$input->SetTrade_type("JSAPI"); +$input->SetProduct_id("01001"); +$input->SetOpenid($openId); +$order = WxPayApi::unifiedOrder($input); + +if($order["result_code"]=='SUCCESS'){ + $jsApiParameters = $tools->GetJsApiParameters($order); +}else{ + sysmsg('微信支付下单失败!['.$order["return_code"].'] '.$order["return_msg"].'['.$order["err_code"].'] '.$order["err_code_des"]); +} +$_SESSION[$trade_no.'_wxpay'] = $jsApiParameters; +} + +if($_GET['d']==1){ + $redirect_url='data.backurl'; +}else{ + $redirect_url='\'/pay/wxpay/ok/'.TRADE_NO.'/\''; +} +?> + + + + + + + + + +
    +

    微信安全支付

    +
    +
    +
    +
    +正在跳转... + + + +
    +
    + + \ No newline at end of file diff --git a/plugins/wxpaysl/notify.php b/plugins/wxpaysl/notify.php new file mode 100644 index 0000000..a6e8790 --- /dev/null +++ b/plugins/wxpaysl/notify.php @@ -0,0 +1,71 @@ +SetTransaction_id($transaction_id); + $result = WxPayApi::orderQuery($input); + //Log::DEBUG("query:" . json_encode($result)); + if(array_key_exists("return_code", $result) + && array_key_exists("result_code", $result) + && $result["return_code"] == "SUCCESS" + && $result["result_code"] == "SUCCESS") + { + return true; + } + return false; + } + + //重写回调处理函数 + public function NotifyProcess($data, &$msg) + { + //file_put_contents('log.txt',"call back:" . json_encode($data)); + $notfiyOutput = array(); + + if(!array_key_exists("transaction_id", $data)){ + $msg = "输入参数不正确"; + return false; + } + //查询订单,判断订单真实性 + if(!$this->Queryorder($data["transaction_id"])){ + $msg = "订单查询失败"; + return false; + } + global $DB,$date,$order; + if($data['return_code']=='SUCCESS'){ + if($data['result_code']=='SUCCESS'){ + if($data['out_trade_no'] == TRADE_NO && $data['total_fee']==strval($order['money']*100) && $order['status']==0){ + if($DB->exec("update `pre_order` set `status` ='1' where `trade_no`='".TRADE_NO."'")){ + $DB->exec("update `pre_order` set `api_trade_no` ='{$data['transaction_id']}',`endtime` ='$date',`buyer` ='{$data['openid']}',`date`=NOW() where `trade_no`='".TRADE_NO."'"); + processOrder($order); + } + return true; + }else{ + $msg='该订单已经处理'; + return true; + } + }else{ + $msg='['.$data['err_code'].']'.$data['err_code_des']; + return false; + } + }else{ + $msg='['.$data['return_code'].']'.$data['return_msg']; + return false; + } + return true; + } +} + +//Log::DEBUG("begin notify"); +$notify = new PayNotifyCallBack(); +$notify->Handle(false); diff --git a/plugins/wxpaysl/ok.php b/plugins/wxpaysl/ok.php new file mode 100644 index 0000000..dea8a19 --- /dev/null +++ b/plugins/wxpaysl/ok.php @@ -0,0 +1,31 @@ + + + + + + + + + + +
    +

    支付结果页面

    +
    +
    +
    +
    +支付成功,请关闭此页面 +
    +
    + + + \ No newline at end of file diff --git a/plugins/wxpaysl/qrcode.php b/plugins/wxpaysl/qrcode.php new file mode 100644 index 0000000..2920e02 --- /dev/null +++ b/plugins/wxpaysl/qrcode.php @@ -0,0 +1,140 @@ +SetBody($ordername); +$input->SetOut_trade_no(TRADE_NO); +$input->SetTotal_fee(strval($order['money']*100)); +$input->SetSpbill_create_ip($clientip); +$input->SetTime_start(date("YmdHis")); +$input->SetTime_expire(date("YmdHis", time() + 600)); +$input->SetNotify_url($conf['localurl'].'pay/wxpaysl/notify/'.TRADE_NO.'/'); +$input->SetTrade_type("NATIVE"); +$result = $notify->GetPayUrl($input); +if($result["result_code"]=='SUCCESS'){ + $code_url=$result['code_url']; +}elseif(isset($result["err_code"])){ + sysmsg('微信支付下单失败!['.$result["err_code"].'] '.$result["err_code_des"]); +}else{ + sysmsg('微信支付下单失败!['.$result["return_code"].'] '.$result["return_msg"]); +} + +?> + + + + + + +微信安全支付 - <?php echo $sitename?> + + + +
    +

    +微信支付 +

    +
    +
    +
    +
    +
    +
    + +
    + + +
    +
    + + +
    +
    +

    请使用微信扫一扫

    +

    扫描二维码完成支付

    +
    +
    +
    +
    +
    +
    +
    +

    手机用户可保存上方二维码到手机中

    +

    在微信扫一扫中选择“相册”即可

    +
    +
    +
    + + + + + + \ No newline at end of file diff --git a/plugins/wxpaysl/refund.php b/plugins/wxpaysl/refund.php new file mode 100644 index 0000000..9c883a0 --- /dev/null +++ b/plugins/wxpaysl/refund.php @@ -0,0 +1,28 @@ +SetTransaction_id($order['api_trade_no']); + $input->SetTotal_fee(strval($order['realmoney']*100)); + $input->SetRefund_fee(strval($order['realmoney']*100)); + $input->SetOut_refund_no($order['trade_no']); + $input->SetOp_user_id(WxPayConfig::MCHID); + $result = WxPayApi::refund($input); + if($result['return_code']=='SUCCESS' && $result['result_code']=='SUCCESS'){ + $result = ['code'=>0, 'trade_no'=>$result['transaction_id'], 'refund_fee'=>$result['refund_fee']]; + }elseif(isset($result["err_code"])){ + $result = ['code'=>-1, 'msg'=>'['.$result["err_code"].']'.$result["err_code_des"]]; + }else{ + $result = ['code'=>-1, 'msg'=>'['.$result["return_code"].']'.$result["return_msg"]]; + } +} catch(Exception $e) { + $result = ['code'=>-1, 'msg'=>$e->getMessage()]; +} + +return $result; \ No newline at end of file diff --git a/plugins/wxpaysl/return.php b/plugins/wxpaysl/return.php new file mode 100644 index 0000000..d681c91 --- /dev/null +++ b/plugins/wxpaysl/return.php @@ -0,0 +1,64 @@ + + + + + + + + + + +
    +

    订单处理结果

    +
    +
    +
    +
    +正在检测付款结果... + + + +
    +
    + + \ No newline at end of file diff --git a/plugins/wxpaysl/submit.php b/plugins/wxpaysl/submit.php new file mode 100644 index 0000000..417a7d1 --- /dev/null +++ b/plugins/wxpaysl/submit.php @@ -0,0 +1,25 @@ +window.location.href='{$conf['localurl_alipay']}pay/wxpay/jspay/{$trade_no}/?d=1';";exit; + } + echo ""; +}elseif(checkmobile()==true){ + if(in_array('3',$channel['apptype'])){ + if(!empty($conf['localurl_wxpay']) && !strpos($conf['localurl_wxpay'],$_SERVER['HTTP_HOST'])){ + echo "";exit; + } + echo ""; + }elseif(in_array('2',$channel['apptype'])){ + if(!empty($conf['localurl_wxpay']) && !strpos($conf['localurl_wxpay'],$_SERVER['HTTP_HOST'])){ + echo "";exit; + } + echo ""; + }else{ + echo ""; + } +}else{ + echo ""; +} diff --git a/plugins/wxpaysl/wap.php b/plugins/wxpaysl/wap.php new file mode 100644 index 0000000..bd614b1 --- /dev/null +++ b/plugins/wxpaysl/wap.php @@ -0,0 +1,111 @@ + + + + + + 微信支付 + + + + +
    +
    +

    + 微信支付手机版 +

    +
    +
    长按保存到相册使用扫码扫码完成支付
    +
    +
    +
    +
    或复制以下链接到微信打开:
    +
    +
    +
    +
    提示:你可以将以上链接发到自己微信的聊天框(在微信顶部搜索框可以搜到自己的微信),即可点击进入支付
    + +
    +
    +
    + + + + + + + \ No newline at end of file diff --git a/submit.php b/submit.php new file mode 100644 index 0000000..16688d7 --- /dev/null +++ b/submit.php @@ -0,0 +1,125 @@ + + + + + + 正在为您跳转到支付页面,请稍候... + + + +query("SELECT `uid`,`gid`,`key`,`mode`,`pay`,`cert`,`status` FROM `pre_user` WHERE `uid`='{$pid}' LIMIT 1")->fetch(); +if(!$userrow)sysmsg('商户不存在!'); +if(!PayUtils::md5Verify($prestr, $queryArr['sign'], $userrow['key']))sysmsg('签名校验失败,请返回重试!'); + +if($userrow['status']==0 || $userrow['pay']==0)sysmsg('商户已封禁,无法支付!'); + +$type=daddslashes($queryArr['type']); +$out_trade_no=daddslashes($queryArr['out_trade_no']); +$notify_url=htmlspecialchars(daddslashes($queryArr['notify_url'])); +$return_url=htmlspecialchars(daddslashes($queryArr['return_url'])); +$name=htmlspecialchars(daddslashes($queryArr['name'])); +$money=daddslashes($queryArr['money']); +$sitename=urlencode(base64_encode($queryArr['sitename'])); + + +if(empty($out_trade_no))sysmsg('订单号(out_trade_no)不能为空'); +if(empty($notify_url))sysmsg('通知地址(notify_url)不能为空'); +if(empty($return_url))sysmsg('回调地址(return_url)不能为空'); +if(empty($name))sysmsg('商品名称(name)不能为空'); +if(empty($money))sysmsg('金额(money)不能为空'); +if($money<=0 || !is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))sysmsg('金额不合法'); +if($conf['pay_maxmoney']>0 && $money>$conf['pay_maxmoney'])sysmsg('最大支付金额是'.$conf['pay_maxmoney'].'元'); +if($conf['pay_minmoney']>0 && $money<$conf['pay_minmoney'])sysmsg('最小支付金额是'.$conf['pay_minmoney'].'元'); +if(!preg_match('/^[a-zA-Z0-9.\_\-|]+$/',$out_trade_no))sysmsg('订单号(out_trade_no)格式不正确'); + +$domain=getdomain($notify_url); + +if(!empty($conf['blockname'])){ + $block_name = explode('|',$conf['blockname']); + foreach($block_name as $rows){ + if(strpos($name,$rows)!==false){ + $DB->exec("INSERT INTO `pre_risk` (`uid`, `url`, `content`, `date`) VALUES (:uid, :domain, :rows, NOW())", [':uid'=>$pid,':domain'=>$domain,':rows'=>$rows]); + sysmsg($conf['blockalert']?$conf['blockalert']:'该商品禁止出售'); + } + } +} +if($conf['cert_force']==1 && $userrow['cert']==0){ + sysmsg('当前商户未完成实名认证,无法收款'); +} + +$trade_no=date("YmdHis").rand(11111,99999); +if(!$DB->exec("INSERT INTO `pre_order` (`trade_no`,`out_trade_no`,`uid`,`addtime`,`name`,`money`,`notify_url`,`return_url`,`domain`,`ip`,`status`) VALUES (:trade_no, :out_trade_no, :uid, NOW(), :name, :money, :notify_url, :return_url, :domain, :clientip, 0)", [':trade_no'=>$trade_no, ':out_trade_no'=>$out_trade_no, ':uid'=>$pid, ':name'=>$name, ':money'=>$money, ':notify_url'=>$notify_url, ':return_url'=>$return_url, ':domain'=>$domain, ':clientip'=>$clientip]))sysmsg('创建订单失败,请返回重试!'); + +if(empty($type)){ + echo ""; + exit; +} + +// 获取订单支付方式ID、支付插件、支付通道、支付费率 +$submitData = \lib\Channel::submit($type, $userrow['gid']); + +if($submitData){ + if($userrow['mode']==1){ + $realmoney = round($money*(100+100-$submitData['rate'])/100,2); + $getmoney = $money; + }else{ + $realmoney = $money; + $getmoney = round($money*$submitData['rate']/100,2); + } + $DB->exec("UPDATE pre_order SET type='{$submitData['typeid']}',channel='{$submitData['channel']}',realmoney='$realmoney',getmoney='$getmoney' WHERE trade_no='$trade_no'"); +}else{ //选择其他支付方式 + echo ""; + exit; +} + +$order['trade_no'] = $trade_no; +$order['out_trade_no'] = $out_trade_no; +$order['uid'] = $pid; +$order['addtime'] = $date; +$order['name'] = $name; +$order['money'] = $realmoney; +$order['type'] = $submitData['typeid']; +$order['channel'] = $submitData['channel']; +$order['typename'] = $submitData['typename']; +$order['apptype'] = explode(',',$submitData['apptype']); + +$loadfile = \lib\Plugin::load2($submitData['plugin'], 'submit', $trade_no); +$channel = \lib\Channel::get($order['channel']); +if(!$channel || $channel['plugin']!=PAY_PLUGIN)sysmsg('当前支付通道信息不存在'); +$channel['apptype'] = explode(',',$channel['apptype']); +$ordername = !empty($conf['ordername'])?ordername_replace($conf['ordername'],$order['name'],$order['uid']):$order['name']; +include $loadfile; +?> +

    正在为您跳转到支付页面,请稍候...

    + + \ No newline at end of file diff --git a/submit2.php b/submit2.php new file mode 100644 index 0000000..4d139ff --- /dev/null +++ b/submit2.php @@ -0,0 +1,65 @@ + + + + + 正在为您跳转到支付页面,请稍候... + + + +getRow("SELECT * FROM pre_order WHERE trade_no='{$trade_no}' LIMIT 1"); +if(!$order)sysmsg('该订单号不存在,请返回来源地重新发起请求!'); + +$userrow = $DB->getRow("SELECT gid,mode FROM pre_user WHERE uid='{$order['uid']}' LIMIT 1"); + +// 获取订单支付方式ID、支付插件、支付通道、支付费率 +$submitData = \lib\Channel::submit2($typeid, $userrow['gid']); + +if($submitData){ + if($userrow['mode']==1 && $order['tid']!=4 || $order['tid']==2){ + $realmoney = round($order['money']*(100+100-$submitData['rate'])/100,2); + $getmoney = $order['money']; + }else{ + $realmoney = $order['money']; + $getmoney = round($order['money']*$submitData['rate']/100,2); + } + $DB->exec("UPDATE pre_order SET type='{$submitData['typeid']}',channel='{$submitData['channel']}',realmoney='$realmoney',getmoney='$getmoney' WHERE trade_no='$trade_no'"); +}else{ + sysmsg('
    当前支付方式无法使用
    ', '跳转提示'); +} + +$order['type'] = $submitData['typeid']; +$order['channel'] = $submitData['channel']; +$order['typename'] = $submitData['typename']; +$order['apptype'] = explode(',',$submitData['apptype']); +$order['money'] = $realmoney; + +$loadfile = \lib\Plugin::load2($submitData['plugin'], 'submit', $trade_no); +$channel = \lib\Channel::get($order['channel']); +if(!$channel || $channel['plugin']!=PAY_PLUGIN)sysmsg('当前支付通道信息不存在'); +$channel['apptype'] = explode(',',$channel['apptype']); +$ordername = !empty($conf['ordername'])?ordername_replace($conf['ordername'],$order['name'],$order['uid']):$order['name']; +include $loadfile; +?> +

    正在为您跳转到支付页面,请稍候...

    + + \ No newline at end of file diff --git a/template/default/agreement.php b/template/default/agreement.php new file mode 100644 index 0000000..fa3bfe3 --- /dev/null +++ b/template/default/agreement.php @@ -0,0 +1,48 @@ + + + +
    + + +
    +
    服务条款
    +
    请使用本支付系统前,先认真阅读商户服务条款,系统有权力随时更新条款,请您严格遵守我们服务条款内的条约,注册商户后则默认代表您已同意我们的服务条款。
    +
    +
    +
    + + +
    + + +
    + +
    +
    +
    +

    +

    特别提示:

    本协议由系统和你共同签订,具有合同法律效力。

    请你务必审慎阅读并充分理解各条款内容,特别是免除或者限制责任的条款、争议解决和法律适用条款。免除或者限制责任的条款可能以加粗字体显示,你应重点阅读。除非你已阅读并接受本协议所有条款,否则你无权使用本服务。你使用本服务即视为你已阅读并同意本协议的约束。如你对本协议有任何疑问的,应向客服咨询。

    一、定义

    如无特别说明,下列术语在本协议中的定义为:

    1.1商户号:指你凭以登录,操作商户平台的账号,你成功申请商户号后,系统将向你在本协议中载明的联系邮箱发送电子邮件,告知你的商户平台登录账号及初始密码,你可在商户平台中修改该初始密码,你亦可根据需要在商户平台中为该登录账号设置对应的商户密钥,用来查询和操作系统商户号。

    1.2商户密钥:指你凭以登录,操作商户平台的账号密码,你成功申请商户号后,系统将向你在本协议中载明的联系邮箱发送电子邮件,告知你的商户平台登录账号及初始密码,你可在商户平台中修改该初始密码,你亦可根据需要在商户平台中为该登录账号设置对应的商户密钥,用来查询和操作系统商户号。

    1.3结算:指用户购买你的商品或服务后,系统在一定周期内将交易资金记账至你的系统商户号,并根据协议约定和你设置提现至你银行账户的行为。

    1.4提现:系统根据你指令或协议约定,在一定周期内向备付金存款银行发出转账指令,要求备付金存款银行将相应资金转账至你指定的合法收款账户的行为。

    二、服务内容

    2.1本服务的场景和功能。系统为你提供货币资金转移服务,当用户购买你的商品或服务时,可通过本服务完成交易。本服务的具体运用包括WAP支付,H5支付等

    2.2服务限制。本服务仅能用于你在商户平台申报并经核准的商品或服务,且每笔订单不能超过系统规定的限额。你了解并同意系统有权根据你经营的商品或服务类型,以及你经营活动的风险状况调整你的交易额度。

    三、系统的权利和义务

    3.1支付系统建设。系统负责支付系统的建设、运行和管理,并确保该系统的安全性。

    3.2交易查询。系统设立网上交易查询系统及查询接口,为你提供商户信息管理和交易信息查询服务。

    3.3支付指令校验。系统依据你的商户平台登录账号、登录密码来校验你支付指令的真实性、有效性。当你的商户平台登录账号和登录密码均校验通过时,即视为系你本人操作系统商户号,系统无需校验其他信息即可执行支付指令。

    3.4交易纠纷处理。系统仅为你提供货币资金转移服务,你与用户或其他主体之间的纠纷由你自行负责处理,与系统无关,但是,因系统系统故障引起的资金转移服务纠纷除外。

    3.5商户经营审核。系统有权定期或不定期审核你的业务类型,以及通过本服务售卖的物品和服务,若你违反本协议第2.2条约定或从事不符合国家相关法律法规规定的经营活动时,系统有权暂停或终止提供服务。

    3.6交易停滞。你自开户之日起6个月内无交易记录,或连续180个自然日未利用本服务产生交易额的,系统有权暂停服务并要求你重新核实身份,你不予配合或身份核实未通过的,系统有权终止本协议且无需承担任何法律责任。如果你的受理终端或收款码连续3个月内未发生交易,系统有权暂停服务并要求你重新核实身份,你不予配合或身份核实未通过的,系统有权停止为你提供收款服务。如果你的受理终端或收款码连续12个月内未发生交易的,系统有权停止为你提供收款服务。

    3.7延迟结算。系统发现你可能存在洗钱、恐怖融资、欺诈交易、信用卡套现、恶意倒闭或其他违法违规行为,或系统发现你存在集中转入分散转出等可疑交易特征的交易或存在争议交易时,系统可以对你系统商户号中的相应资金进行延迟结算,已经结算的,系统可以延迟转账到你指定银行帐户和支付帐户。对于延迟结算、延迟转账的资金,直至排除违法违规嫌疑时,系统才恢复该部分资金的结算和转账。你的行为导致系统遭受损失的,你还应当承担赔偿责任。

    3.8身份验证和授权。你使用本服务,即表明你同意系统收集、记录和使用你使用本服务过程中产生的相关信息和数据,包括但不限于你及其法定代表人、负责人的身份信息、账户信息和交易信息等,并将前述信息提交国家机关、金融机构和其他企事业单位进行身份验证和鉴权。系统有权根据需要收集、保存、核实你法定代表人、负责人的音频和视频资料。为更好地提供服务,系统及关联公司有权在法律允许的范围内自行收集、记录、使用上述信息和数据。

    3.9系统有权对你的业务进行风险管理,持续监测和分析交易金额、笔数、类型、时间、频率和收款方、付款方等特征,完善可疑交易监测模型。如系统发现交易金额、时间、频率与特约商户经营范围、规模不相符等异常情形的,有权对你采取延迟资金结算、设置收款限额、暂停银行卡交易、暂停使用权限等措施。

    四、你的权利和义务

    4.1账号开立和身份验证。你在申请开立系统商户号时,应向系统如实提供相关的个人信息。你应保证所提交的上述资料的准确性、真实性、完整性。你上述信息发生变更,或你迁址、停业、变更域名或联系电话等资料信息,应提前通知系统,否则,系统有权视具体情况暂停服务,你未及时通知导致的一切投诉和纠纷,均由你承担。系统有权根据国家法律法规、规章制度、行业规范、政策要求的规定,要求你补充提交相关信息和资料,你逾期未提交或未通过系统核验的,系统有权解除本协议或暂停你系统商户号的全部或部分功能。

    4.2账号使用。你不得把系统商户号、系统提供的技术接口、安全协议及证书用于本协议范围以外的用途,也不得出租、转让给第三方使用。你不得将其他商户的交易假冒成自己的交易与系统结算。你应充分了解并清楚知晓出租、出借、出售、购买账号的相关法律责任和惩戒措施,承诺依法依规开立和使用你的账号。

    4.3禁止存储用户敏感信息。你不得存储用户银行账户密码、银行卡的磁道信息或芯片信息、银行卡验证码和有效期等敏感信息,不得泄露用户信用卡信息和借记卡信息等。

    4.4账号保管和挂失。你应妥善保管系统商户号及其密码,以及手机短信验证码、API Key等。系统商户号下的一切行为均视为你的行为。若你需对系统商户号挂失,应及时与客服人员联系并按照客服人员的指引进行操作,若客服人员要求你提供书面证明材料才能进行下一步挂失操作的,你应及时提交书面证明材料。若你发现系统商户号被盗用,应立即向系统发起挂失。因你管理不善导致系统商户号被盗用的,一切损失由你自行承担。

    4.5止付和撤销。由于系统系统的实时性和不可更改性,你向系统发起的任何支付指令,在系统执行后,均为不可撤销或更改的。支付指令一旦被系统执行,你不得要求止付、更改或撤销。

    4.6规范使用。未经系统书面授权,你不得转载、复制、截取、篡改系统的商标、标识、Logo等内容或制作与该内容有关的衍生产品。未经系统另行书面授权,除了在商户中心登记的域名外,你不得在任何网页或APP页面展示与系统有关的链接、弹窗或与H5支付有关的内容及其衍生产品。

    4.7商户系统安全与维护。你应负责自身的硬件平台搭建并承担相关的设备费用及通讯费用。你应严格按照本服务和商户平台的接入技术规范来建设和运行自己的计算机系统并确保自身系统的安全性。你应在系统交易过程中验证系统请求和响应数据包中的签名真实性,并保障支付信息数据传输过程中的安全性、保密性。你应向系统明确各方数据传输协议、安全机制、硬件需求以及物理连接等诸多技术细节的具体需求,并妥善处理系统反馈的各种交易异常情况。

    4.8真实交易背景。你承诺发起的本服务交易基于真实的交易,不得利用本服务从事虚假交易。

    4.9保存订单信息。你应保证订单信息的合法性、真实性、准确性和完整性。你在受理用户订单时,须记录包括但不限于以下信息:用户姓名、手机号码,订购产品的产品名称、产品编号、产品单价、合计索取价格、配送信息。你应按系统的要求向系统提供详细的、真实可信的交易字段,包括但不限于订单号、商品名称、商品描述等。你还应妥善保留有关交易数据和凭证,包括但不限于订单和用户接受货物时签字的有关单据,由交易发生之日起或本协议终止之日起,至少保留三年。在协议有效期内和协议终止之日起三年内,对系统提出的查询通知及调单要求,你应在接到系统通知后,以信件或传真的方式在两个工作日内将相关单据交付给系统。

    4.10第三方网络交易平台。若你经营第三方网络交易平台,不得利用本服务从事非法支付结算业务,并应配备相应的系统、人员和完善的制度。你应当识别二级商户的身份信息和经营资质,并收集、保存二级商户的营业执照、税务登记证、组织机构代码证、法定代表人身份证明等,若二级商户从事国家规定专营、专控或需要取得国家前置行政许可的经营活动,还应提供该相关资质证照。你应保证二级商户所提交的上述资料的准确性、真实性、完整性。同时,你还应收集、保存并向系统传输二级商户的交易订单信息,包括但不限于:用户姓名、手机号码,订购产品的产品名称、产品编号、产品单价、合计索取价格、配送信息。你还应妥善保留二级商户的交易数据和凭证,包括但不限于订单和用户接受货物时签字的有关单据,由交易发生之日起或本协议终止之日起,至少保留五年。在协议有效期和协议终止之日起五年内,对系统提出的查询通知及调单要求,你应在接到系统通知后,以信件或传真的方式在两个工作日内将相关单据回复给系统。对系统提出的风险交易,你应按系统要求对其二级商户交易进行有效识别、追溯及在必要时实施暂停业务管理的措施,同时承担因二级商户发展和管理不善造成的全部风险损失,你应保证二级商户不再发展下一级商户。

    第三方网络交易平台,指在网络商品交易活动中为交易双方或者多方提供网页空间、虚拟经营场所、交易规则、交易撮合、信息发布等服务,供交易双方或者多方独立开展交易活动的信息网络系统。

    二级商户,指在你经营的第三方网络交易平台中销售商品或服务的自然人或企事业单位。

    4.11第三方网络交易平台的风险防范。若你经营第三方网络交易平台,则你需对二级商户的交易行为的真实性、合法性进行监控和管理,你应防止二级商户利用系统从事信用卡套现、洗钱、虚假交易等违法违规活动。若出现二级商户利用系统从事信用卡套现、洗钱、虚假交易等违法违规活动的,则系统有权解除本协议,并追究你的违约责任。

    4.12反套现、反洗钱。你不得主动或协助持卡人进行信用卡套现、洗钱、交易分单等违法经营行为,不得出现虚假申请、恶意倒闭等严重风险行为,否则,系统有权暂停或终止提供本协议服务,并将你的信息报送至中国人民银行和公安部及相关监管机构。

    4.13实物和虚拟。你需利用本服务同时经营实物类和虚拟类的商品或服务时,应当针对实物类和虚拟类的商品或服务分别申请系统商户号,不得用同一系统商户号同时经营实物类和虚拟类的商品或服务。否则,系统有权解除本协议,并追究你的违约责任。

    实物类,指需要物流配送的实物商品或需要记录和核实消费者身份信息的商品或服务;虚拟类,指非实物且不记录购买者身份信息,也无需物流配送的商品或服务。

    4.14安全守则。你不得对系统的计算机系统和程序采取反向工程手段进行破解,不得对前述系统和程序(包括但不限于源程序、目标程序、软件文档、运行在本地电脑内存中的数据、客户端至服务器端的数据、服务器数据等)进行复制、修改、编译、整合和篡改,不得修改或增加系统提供的任何服务的软件系统的原有功能。

    4.15你应切实维护消费者合法权益,不得对采用不同支付方式的消费者采取歧视性措施。

    4.16你应当遵守的其他义务:

    (1)不得将签购单、签购结算单、业务受理标识牌、终端机具用于系统核准范围以外的用途,也不得给协议许可范围以外的第三方使用;

    (2)不得将系统接口委托或转让给第三方;

    (3)不得招聘无本人身份证原件的人员作为收银员,不得让未经培训合格的收银员操作受理终端;

    (4)金饰店、珠宝店、名牌钟表店、金银币专卖店等风险较高的你必须加装录像监控设施,对支付过程进行清晰记录,录像资料保留时间不少于3个月;

    (5)对单笔交易金额超过(含)5万元人民币的系统交易核对用户身份证原件;

    (6)根据协议约定规范受理系统,在协议有效期内不得拒绝受理系统;

    (7)不得代其他商户发起交易,不得转卖、租借受理终端(网络支付接口)和银行结算账户;

    (8)不得要求其他商户代理发起交易,不得使用转卖、租借的受理终端(网络支付接口)和银行结算账户;

    (9)妥善保管交易数据信息,确保只有授权人员接触,建立健全的内部结算管理制度;

    (10)不得向使用消费者征收任何附加费或额外费用,或提供低于现金支付水平的服务;

    4.17保障消费者合法权益。你应切实维护用户合法权益,确保使用各种支付方式的用户均享受一致性公平待遇,不得向使用特定支付方式的用户转嫁或变相转嫁系统收取的服务费用,不得无理拒绝用户使用已经开通的支付方式。

    五、服务费用和交易结算

    5.1系统手续费(含税)

    5.1.1你使用本服务,应向系统缴纳系统手续费(以下简称”支付手续费”)。

    5.1.2系统将从你的每笔交易款中扣除一定费率的支付手续费,支付手续费的费率以商户平台核准记录的为准;在合作过程中,你可能因满足相关优惠条件而在一定期限内享受系统给予的优惠费率,当你不再满足优惠条件或优惠期限届满时,系统有权将费率恢复为原有费率,具体以商户平台核准记录的为准。

    5.1.3若遇国家政策调整,或中国人民银行、合作机构的政策调整,系统有权据此调整支付手续费率并对你进行通知,你在收到系统通知后五个工作日内对调整后的支付手续费率未提出书面异议的,按调整后的费率执行。双方无法就费率变更达成一致意见的,可终止本协议。

    5.2误差

    各方确认并同意,涉及费率结算如因小数点后两位进位而产生微小误差,各方均予以认可。

    5.3交易结算

    5.3.1系统在扣除支付手续费后,将剩余交易款记账至你的系统商户号。

    5.3.2你的提现账户为你申请本服务时提交的同名银行账户或其他存在合法资金管理关系的单位银行账户,若因你或银行的原因导致交易款项无法按时提现至你提交的银行账户的,系统不承担任何责任。

    5.3.3若你需变更提现账户或需授权结算,应与系统另行签订补充协议或在商户平台自助修改。因你变更账户或指定收款人但未及时通知系统导致增加的额外成本或任何损失,由你承担。

    5.3.4对于发生在T日的交易,若你没有进行特殊设置或操作,系统将按照商户平台核准记录的期限将扣除支付手续费后的交易款项提现至你银行账户,款项到账时间取决于银行系统的清算周期(若你是金融机构或是从事金融业务的其他机构,系统有权根据系统商户平台公告的时间,定期对你的系统商户号余额进行清零,并将对应资金提现至你的银行账户。你应在商户号被清零后及时充值,以免影响手续费、退款等资金结算)。

    5.3.5你可根据商户平台和系统客服的指引申请变更提现规则,最终以商户平台核准记录的为准。

    5.3.6若你接入本服务不满90日或者接入本服务后连续正常交易不满30日,系统不提供T+0资金提现服务,系统将该类你T日的交易资金记账至系统商户号的,你不得在T日划转该交易资金。无论你何时接入本服务,系统均有权根据你的经营状况、业务变化及实际赔付情况调整提现周期,并以电子邮件通知的方式通知你。

    5.3.7你与系统对账数据不一致的,以系统数据为准。

    5.3.8若你要求系统开具发票,应在首次开票前按照系统要求及时提交准确、完整的发票信息,系统每月就系统手续费向你开具上月增值税服务费发票。若你要求开具增值税专用发票,应向系统提交相关资质材料。

    六、保证金

    6.1系统有权要求你缴纳风险保证金,保证金额度以商户平台核准记录的为准。在本协议有效期内,风险保证金款项冻结于你保证金账户中,你不得提前解冻、提取或使用。

    6.2系统有权根据你的经营状况、业务变化及实际赔付情况调整你应当缴纳的保证金额度,并以电子邮件通知的方式通知你补足保证金金额,如你未能在收到通知后的五个工作日内补足保证金,则系统有权暂停为你提供服务。如你在收到上述通知后的三十天内未补足保证金,系统可单方解除本合同而无需承担任何法律责任。

    6.3若你在使用公众账号和本服务过程中没有违约行为,且你主动注销本服务满一年仍未受到任何第三方投诉或发生交易纠纷的,应解冻保证金账户的风险保证金,你可自主提取保证金本金,在此之前,你无权动用保证金本金,保证金解冻后无息归还你。

    6.4若你违反国家法律、法规、政策、法令或你违反对用户的承诺或违反与系统的约定致用户或系统受损时,系统有权直接使用你缴纳的保证金对用户或系统进行赔付,保证金不足以赔偿的,系统可以直接从你的待结算款项中扣划,仍不足以赔偿的,可以继续向你追偿。

    七、退款条款

    对于你的交易中出现的退款情形,按如下规则处理:

    7.1当你向系统提出退款请求时,你在自己的系统商户号中应有足够资金用于退款,系统有权直接从你的系统商户号中扣除退款金额完成退款,如因你资金不足导致无法退款的,其后果由你自行承担。系统按照你的退款请求处理退款时,如因银行原因或用户原因导致退款失败的,系统可将退款金额退至你的系统商户号,你可再次发起退款请求或自行处理退款。

    7.2退款时,系统不再另行收取交易手续费,但若银行方面需要向系统另行收取相关费用的,则此费用应由你自行承担,系统可在为你垫付该费用后在你的交易款中扣除。

    7.3你负责解决和承担用户拒付交易款项而导致的退款纠纷或责任。

    八、保密条款

    8.1除本协议另有约定外,未经一方书面同意,任何一方不得将本协议内容、用户个人信息、用户支付信息以及接口技术、安全协议及证书等透露给第三方。

    8.2各方对在履行协议中获得的商业机密和技术秘密负保密责任。出现下列任一情况时,系统有权披露你的相关商业信息:

    (1)人民银行或银保监会、证监会等金融业监管机构要求系统提供你的相关商业信息的;

    (2)公安机关、人民法院、人民检察院或有权行政机关要求系统提供你的相关商业信息的;

    (3)用户投诉,要求系统提供你的相关商业信息,经系统查实后认为可以提供的。

    本协议所称商业信息包括但不限于你与用户之间的交易单号、交易凭证、资金流水等交易信息。

    8.3各方保证其雇员及代理人履行本条的保密义务。

    8.4上述保密义务在本协议终止后五年内有效。

    九、违约责任

    9.1各方中的任何一方违反本协议中所做约定的义务,均构成违约。

    9.2你有下列情形之一的,系统有权单方面解除本协议并要求你承担相关赔偿责任:

    (1)直接或间接参与欺诈,或出租、出借、出售、购买银行账户(含银行卡)或支付账户,或在网上买卖POS机(包括MPOS)、刷卡器等受理终端,或涉嫌实施其他违法犯罪活动的;

    (2)经营及财务状况恶化无法正常经营,或被全国企业信用信息公示系统列入“严重违法失信企业名单”,或单位注册地址不存在或者虚构经营场所的;

    (3)你或其法定代表人、负责人被中国支付清算协会、银行卡清算机构、其他国家机关、企事业单位列入黑名单,或存在被国家机关、行业协会的处罚记录的;

    (4)实施违规操作,或违反本协议、《系统服务条款》、《微信公众平台服务协议》等约定,且经指出拒不改正或在合理期间内虽有改正但无法达到系统整改要求和目标的;

    (5)无理拒绝或故意拖延系统交易查询、调单查询或监查要求的;

    (6)进入破产程序、解散、营业执照被吊销;

    (7)实施有损系统或腾讯利益行为的;

    (8)违反本协议或利用系统提供的服务从事非法业务的;

    (9)你的软硬件系统存在安全问题,经系统通知后拒不整改的;

    (10)出现风险事件或经系统判断交易异常的;

    (11)违反系统的相关规则和制度的。

    十、账号注销

    10.1发生下列情形之一的,系统有权注销你的系统商户号,法律另有规定或本协议另有约定的除外:

    (1)你主动申请注销系统商户号的;

    (2)本协议解除或终止的;

    (3)你利用本服务从事非法活动的;

    (4)你违反本协议或违反与系统签订的其他协议的。

    10.2无论你的系统商户号是否被注销,系统均有权依据法律规定或国家机关的合法要求,冻结、扣划你系统商户号中的资金。

    十一、免责条款

    11.1因受不可抗力影响而不能履行或不能完全履行本协议的一方可以免除责任。不可抗力是指本协议各方不能预见、不能避免、不能克服的客观情况。此外,鉴于网络之特殊属性,发生包括但不限于下列任何情形导致系统不能履行本协议下义务的,各方可以免责:

    (1)黑客攻击、计算机病毒侵入或发作;

    (2)计算机系统遭到破坏、瘫痪或无法正常使用而导致信息或纪录的丢失、系统不能提供本协议项下之服务的;

    (3)电信部门技术调整导致之重大影响的;

    (4)因政府管制而造成服务终止的;

    (5)其它非各方原因造成的。

    11.2遇上述不可抗力事件的任何一方,应将该事件立即书面通知其他方。各方按照事件对协议履行的影响程度,再行决定是否继续履行本协议。

    十二、风险提示及特别约定

    12.1各方对于“中国国内电子商务环境尚未成熟,电子商务立法以及信用体制还不完善”的现状以及开展电子商务业务存在的风险性均完全知悉,各方均承诺采取合理的风险防范措施,以尽量避免或减小风险。

    12.2本服务交易过程中,你应积极防范银行卡持卡人拒付风险,及时解决交易中出现的问题:

    (1)若在交易中如出现包括但不限于交易不真实、欺诈、伪冒交易、持卡人账户信息泄漏或你违反国家法律规定或你违反对用户的承诺以及你违反与系统的约定之情形,你应自行承担上述情形造成的全部损失;

    (2)若在交易中如出现持卡人否认交易、持卡人拒付、集中转入分散转出等可疑情形的,你应依据本协议第4.8和4.9条之要求向系统提供相应的交易凭证,若你怠于提供凭证,或你提供的凭证不符合相关行业内标准,或在系统书面通知(含电子邮件通知)后你未及时停止可疑交易、控制相应资金的等,你应自行承担上述情形造成的全部损失。

    你因上述情形给系统造成损失的,系统有权直接从你的保证金中扣回与损失金额同等的金额,你需及时补足保证金。保证金不足以赔偿的,系统可以直接从你的待结算款项中扣划,仍不足以赔偿的,可以继续向你追偿。

    12.3你在进行支付交易的过程中,应严格遵守中国人民银行网上银行业务和信用卡交易相关的政策法规,不得进行虚假交易、非法套现、洗钱等行为。你不得直接或变相从事互联网赌博、色情平台,互联网销售彩票平台,非法外汇、贵金属投资交易平台,非法证券期货类交易平台,代币发行融资及虚拟货币交易平台,也不得未经监管部门批准通过互联网开展资产管理业务以及未取得省级政府批文的大宗商品交易场所等非法交易,否则系统有权终止为其提供支付结算服务。

    12.4如你申请开通大额支付功能,应确认并同意遵守如下条款:“你保证将系统所提供的大额支付功能用于实名制业务,否则,你应承担因违反上述承诺而造成的一切风险和法律责任,你应对受损方作出无条件的先行赔付。

    实名制业务,指用户使用系统提供的在线支付服务购买商品或服务时,该用户提交了所购买商品或服务的最终接收方(或服务的最终受益方)的姓名、身份证号码等真实身份信息的业务

    十三、知识产权

    13.1系统在本合作中提供的内容(包括但不限于商标、标识、网页、文字、图片等)的知识产权归系统所有。

    13.2除另有特别声明外,系统在本合作中提供的软件系统、技术接口、安全证书等所依托的著作权、专利权及其他知识产权均归系统所有。

    13.3上述知识产权均受到法律保护,未经系统或相关权利人许可,不得以任何形式进行使用或创造相关衍生作品。

    13.4系统对带有系统字样、标识、logo、图片等信息的物料、宣传资料和扫码设备享有知识产权,你不得在经营场所实施或协助、放任他人实施替换、遮盖、涂抹、藏匿、毁坏带有系统字样、标识、logo、图片等信息的物料、宣传资料和扫码设备的行为,否则,你应按照系统的要求恢复原状、赔偿损失。

    十四、协议变更

    系统有权根据需要不时地制定、修改本协议,如本协议有任何变更,财付将对变更事项在商户平台进行公告。如你不同意相关变更,必须立即以书面的方式通知系统终止为你提供服务。任何修订或新协议将按照法律法规及监管规定在微信公众平台上公布生效。你登录或继续使用服务即表示你接受经修订的协议。

    十五、适用法律及争议解决

    15.1本协议之解释、适用、争议解决等一切事宜,均适用中华人民共和国大陆地区法律。

    15.2因本协议产生任何纠纷时,各方应友好协商,协商不成的,各方应将争议提交系统所在地有管辖权的人民法院诉讼解决。

    十六、协议有效期、自动续期和提前终止协议

    16.1本协议的有效时间以商户平台确认的时间为准,默认为长期有效;除本协议5.1.2、5.1.3条约定之情形外,若系统在协议有效期内提出费率变更请求,并以微信消息、电子邮件或商户平台信息等形式通知你,自信息发出之日起30日内,你继续使用本服务的,系统有权自30日届满之日起按照变更后的费率向你收取手续费,并从你的待结算款中扣除。

    16.2各方有权基于各自的营运需要提前终止本协议,且无需承担任何法律责任。需提前终止本协议的,主动提出方应提前一个月以书面或电子邮件形式通知各方。

    16.3协议解除或终止后,涉及到保证金、退款和保密的条款依然有效,各方应继续遵照执行。

    16.4本协议一式貳份,双方各执壹份,具有同等法律效力。

    + +
    +
    +
    +
    + +
    + + \ No newline at end of file diff --git a/template/default/assets/css/common.css b/template/default/assets/css/common.css new file mode 100644 index 0000000..2613f52 --- /dev/null +++ b/template/default/assets/css/common.css @@ -0,0 +1,1119 @@ +body { + font-size:14px; + font-family:"Helvetica Neue",Helvetica,"Hiragino Sans GB",STHeitiSC-Light,"Microsoft YaHei","微软雅黑",Arial,sans-serif; + color:#888 +} +.logo { + display:inline-block; + width:160px; + height:40px; + background:url(logo.png) no-repeat; + background-size:95%; + background-position:0 0; + position:relative; + top:13px; + left:-10px +} +.container { + margin-right:auto; + margin-left:auto +} +@media (min-width:768px) { + .container { + width:750px +} +}@media (min-width:992px) { + .container { + width:970px +} +}@media (min-width:1200px) { + .container { + width:1170px +} +}img { + vertical-align:middle; + max-width:90% +} +img.user_icon { + height:36px; + border-radius:50% +} +::-webkit-scrollbar { + width:10px; + height:10px +} +::-webkit-scrollbar-button:vertical { + display:none +} +::-webkit-scrollbar-track:vertical { + background-color:#000 +} +::-webkit-scrollbar-track-piece { + background-color:#f5f5f5 +} +::-webkit-scrollbar-thumb:vertical { + margin-right:10px; + background-color:#a6a6a6 +} +::-webkit-scrollbar-thumb:vertical:hover { + background-color:#aaa +} +::-webkit-scrollbar-corner:vertical { + background-color:#535353 +} +::-webkit-scrollbar-resizer:vertical { + background-color:#ff6e00 +} +::-webkit-scrollbar-thumb { + border-radius:5px +} +.address footer { + min-width:320px; + width:100%; + position:relative; + overflow:hidden; + background:#14181C +} +.address footer ul { + margin:0; + float:left; + padding-top:50px; + width:25% +} +.address footer ul li { + list-style:none; + line-height:40px; + color:#ccc +} +.address footer ul li a { + color:#898B8D; + text-decoration:none +} +.address footer ul li a:hover { + color:#e8e7e7 +} +.address footer .normal { + width:auto +} +.xinxi { + height:100px; + line-height:150px; + font-size:12px; + color:#686A6B; + width:100%; + text-align:center +} +.loading { + text-align:center; + margin-bottom:20px; + padding:10px 50px +} +.loadingRepo .loading { + min-height:300px; + height:300px +} +.comment-head { + clear:both; + margin-bottom:10px; + margin-top:50px +} +.footer-head { + font-size:18px +} +.h3 { + font-size:24px; + font-family:inherit; + font-weight:500; + line-height:1.1; + color:inherit +} +.front-show { + height:300px; + width:100%; + position:relative +} +.front-show { + height:300px; + width:100%; + position:relative +} +.front-show .front-text { + position:absolute; + left:40%; + top:100px; + color:#fff; + font-size:1.5em +} +.front-show .front-text a { + color:#eee; + margin-right:26px; + opacity:.8; + cursor:pointer +} +.front-show .front-text a:hover { + opacity:1 +} +.front-show .front-text .default-label { + opacity:1; + color:#fff +} +.front-show .mirror-search { + position:absolute; + top:140px; + width:50%; + left:28%; + font-size:1.6rem; + color:#eee +} +.front-show .mirror-search .send-search { + width:80px; + height:50px; + background:#fff; + border-radius:3px; + color:#127BBA; + display:inline-block; + cursor:pointer; + border:0; + line-height:50px; + text-align:center; + font-size:1.8rem +} +.front-show .mirror-search .selectType { + width:100px; + float:left; + line-height:48px; + border-radius:3px 0 0 3px; + border:1px solid #fff; + border-right:0; + cursor:pointer +} +.front-show .mirror-search .selectType i { + margin-left:10px; + margin-right:5px; + transition:all .2s +} +.front-show .mirror-search .selectType i.rotate { + transform:rotate(90deg) +} +.front-show .mirror-search #typeList { + background:0 0; + color:#fff; + border:1px solid rgba(255,255,255,.8) +} +.front-show .mirror-search #typeList li:hover { + background:rgba(255,255,255,.1) +} +.front-show .mirror-search #typeList li { + background:rgba(59,164,210,0) +} +.front-show .mirror-search .image-search-input { + height:50px; + width:60%; + background:0 0; + border:1px solid #fff; + text-indent:15px; + vertical-align:bottom; + border-radius:0 3px 3px 0 +} +.front-show .mirror-search .image-search-input::-webkit-input-placeholder { + color:#eee +} +.front-show .mirror-search .image-search-input:-moz-placeholder { + color:#eee +} +.front-show .mirror-search .image-search-input::-moz-placeholder { + color:#eee +} +.front-show .mirror-search .image-search-input:-ms-input-placeholder { + color:#eee +} +.front-show .search-notice { + color:#eee; + opacity:.8; + font-size:1.2em; + line-height:40px; + letter-spacing:2px +} +.front-show .front-label { + font-size:1.2em; + line-height:40px; + letter-spacing:2px +} +.front-show .front-label a { + color:#eee; + margin-right:20px; + opacity:.8 +} +.front-show .front-label a:hover { + opacity:1 +} +.front-show::before { + content:''; + position:absolute; + top:0; + left:0; + width:100%; + height:100%; + background:url(../images/hub.banner.jpg) no-repeat; + background-size:100% +} +.front-mirror .col-xx-4:nth-of-type(1) { + margin-left:0 +} +.front-mirror .col-xx-4:nth-of-type(4) { + margin-left:0 +} +.front-mirror .col-xx-4:nth-of-type(7) { + margin-left:0 +} +.recommend .col-xx-4:nth-of-type(1) { + margin-left:0 +} +.recommend .col-xx-4:nth-of-type(4) { + margin-left:0 +} +li .font_size { + padding:5px 15px +} +.logo-head .ant-menu { + line-height:65px; + border:0 +} +.logo-head .ant-menu .go_console { + display:block +} +.logo-head .ant-menu .go_logout { + display:block +} +.logo-head .ant-menu .li-new { + display:block +} +.logo-head .ant-menu>li { + float:right +} +.logo-head .ant-menu>li li { + float:left +} +.footer_icon { + width:50px; + display:inline-block; + opacity:.8 +} +.hot-info { + height:50px; + overflow:hidden; + line-height:50px; + border:1px solid #DADADA; + background:#f5f6f6 +} +.item-panel { + height:220px; + width:100%; + border:1px solid #e5e5e5; + border-radius:2px; + position:relative; + overflow:hidden; + transition:all .3s +} +.item-img { + width:100%; + height:150px; + position:relative +} +.mirror-hint-info { + padding:5%; + width:100%; + height:100px; + text-align:center +} +.item-info { + height:70px; + overflow:hidden; + border-top:1px solid #e5e5e5; + margin-top:-1px +} +.img-icon { + width:100%; + height:70px; + text-align:center; + position:relative; + top:20px +} +.img-icon .master-approve { + position:absolute; + right:5px; + width:70px; + text-align:center; + top:-20px +} +.img-icon .btn-approve { + display:none; + margin-top:8px; + border:1px solid #C9C9C9; + padding:3px; + font-size:12px; + color:#999; + background:#F8F8F8 +} +.img-icon .master-approve:hover .btn-approve { + display:inline-block +} +.recommend-ranking { + height:50px; + overflow:hidden; + line-height:50px; + border:1px solid #dadada; + padding-left:20px +} +.icon-small { + height:60px; + margin:0 auto +} +.reg-hr { + line-height:25px; + border-top:1px solid #dadada +} +.dodon-list { + border:1px solid #e5e5e5; + border-top:0; + border-right:0 +} +.small-reg-itme { + width:45%; + height:90px; + margin-left:40px; + text-align:center; + border:1px solid #dadada +} +.ant-menu-sub.ant-menu-inline>.mirror-li,.ant-menu-vertical>.mirror-li { + min-height:35px; + height:auto; + line-height:normal +} +.ant-menu-sub.ant-menu-inline>.mirror-li:hover { + background:0 0 +} +.app-name { + line-height:35px; + margin-left:20px; + cursor:pointer +} +.border-radius { + border-radius:50%; + display:block; + max-width:100% +} +.user-head-img { + float:left; + height:40px; + width:40px; + margin-right:10px; + padding-top:5px +} +.ranking-info { + height:50px; + line-height:50px +} +.ranklist { + border:1px solid #e5e5e5; + border-top:0 +} +.mirror-info { + padding:10px 15px; + border:1px solid #e5e5e5; + border-top:0; + line-height:35px +} +.mirror-info button { + margin-right:5px +} +.mar-top-3 { + margin-top:30px +} +.mar-top-2 { + margin-top:20px +} +.mar-top-1 { + margin-top:10px +} +.pad-right-3 { + padding-right:3% +} +.cursor { + cursor:pointer +} +.drop-cursor { + cursor:no-drop +} +a.default { + color:#666 +} +.btn-link { + font-weight:400; + color:#2db7f5; + border-radius:0 +} +.btn-deploy { + border:1px solid; + padding:5px 8px; + border-radius:3px; + transition:all .3s +} +.btn-deploy:hover { + background:#2db7f5; + color:#fff; + border-radius:3px; + border-color:transparent +} +.hot-docker { + text-align:center; + color:#fff; + font-size:20px; + line-height:50px +} +#q { + height:50px; + font-size:16px; + width:100%; + border:0; + border-radius:5px 0 0 5px; + text-indent:10px +} +.dropdown-list { + padding-left:7px +} +form .ant-input-group .ant-select-selection--single { + height:50px +} +form .ant-input-group .ant-select-selection--single .ant-select-selection__rendered { + line-height:50px +} +.btn { + display:inline-block; + padding:6px 12px; + margin-bottom:0; + font-size:14px; + font-weight:400; + line-height:1.42857143; + text-align:center; + white-space:nowrap; + vertical-align:middle; + -ms-touch-action:manipulation; + touch-action:manipulation; + cursor:pointer; + -webkit-user-select:none; + -moz-user-select:none; + -ms-user-select:none; + user-select:none; + border-radius:4px +} +.item-panel .item-info .ant-menu-item { + height:auto; + line-height:35px +} +.hot-mirror-row { + height:50px; + line-height:75px; + font-size:1.2em; + display:block +} +.mirror-row-border { + display:inline-block; + width:15px; + height:30px; + border-left:8px solid #FF9008; + position:relative; + top:8px +} +.mirror-content { + margin-bottom:50px; + padding-top:40px +} +pre { + background:#f5f5f5; + padding:9.5px; + border-radius:4px; + font-size:14px; + display:block; + word-break:break-all; + word-wrap:break-word +} +p,pre { + margin-bottom:10px +} +.h4 { + font-weight:600; + line-height:1.1; + color:inherit; + font-size:18px +} +.table_list img { + max-width:100% +} +.item-panel:hover { + background:#F8F8F8; + box-shadow:0 0 8px rgba(0,0,0,.2) +} +.ant-select { + font-size:14px +} +.images { + float:left; + width:150px; + height:140px; + border:1px solid #DCDCDC; + background:#fff; + display:table; + margin-right:30px; + position:relative +} +.imgIcon { + margin:0 auto +} +.type-info { + float:left; + height:100%; + width:27% +} +.ant-input-group { + width:100% +} +#click-copy { + left:74% +} +.registry-owner { + border:1px solid #DCDCDC; + background:#fff +} +.registry-owner i { + display:inline-block; + width:23px; + vertical-align:middle; + margin-left:15px; + margin-right:5px; + text-align:center +} +.name-head { + background:#F9F9F9; + line-height:60px!important; + height:60px!important; + border-bottom:1px solid #DCDCDC +} +#detail-contents { + background:#fff; + border:1px solid #DCDCDC; + min-height:150px; + position:relative; + padding:30px 15px +} +.ant-menu-vertical>.ant-menu-item,.ant-menu-inline>.ant-menu-item,.ant-menu-vertical>.ant-menu-submenu>.ant-menu-submenu-title,.ant-menu-inline>.ant-menu-submenu>.ant-menu-submenu-title { + font-size:14px; + padding-left:16px +} +.exception.ant-menu-item-active,.ant-menu-item.exception { + border-bottom:0; + padding:0 10px +} +.ant-menu-item.exception:nth-of-type(1) { + padding-right:0 +} +.anticon-arrow-left { + font-weight:700 +} +.ant-form-item>.input-label { + line-height:30px; + font-size:14px; + text-align:left +} +.ant-tabs-nav .ant-tabs-tab>.ant-tabs-tab-inner { + line-height:45px +} +.body-center { + overflow:hidden; + padding-bottom:80px; + padding-top:20px +} +.pull-mirror { + position:absolute; + top:20px; + right:20px +} +.table_list { + width:100%; + border:1px solid #DCDCDC; + height:auto +} +.table_list>.ant-tabs-content { + padding:0 15px; + word-wrap:break-word; + word-break:break-all; + min-height:150px +} +.user-table-info { + width:100%; + border-top:1px dashed #999 +} +.user-table-info td { + line-height:40px; + text-align:center +} +.text-center { + text-align:center; + line-height:40px +} +.img-responsive { + display:block; + margin:0 auto; + max-width:100%; + max-height:100% +} +.uaer-main { + border-radius:3px; + border:1px solid #999; + margin-top:30px; + width:90%; + position:absolute +} +.main-img { + width:70px; + margin:10px auto +} +.main-img img { + height:70px; + border-radius:50% +} +.item-info { + height:70px; + overflow:hidden; + padding:0 20px; + border-top:1px solid #e5e5e5; + margin-top:-1px +} +.item-info .titleber { + line-height:35px; + text-overflow:ellipsis; + overflow:hidden; + white-space:nowrap +} +.mirror-text { + line-height:25px; + overflow:hidden; + text-align:center; + width:100%; + height:48px +} +.text-overflow { + overflow:hidden; + white-space:nowrap; + text-overflow:ellipsis +} +.span5 { + width:50%; + float:left +} +.span4 { + width:38%; + float:left +} +.span3 { + width:30%; + float:left +} +.span2 { + width:20%; + float:left +} +.box { + border:1px solid #999; + border-radius:5px; + transition:all .5s ease; + overflow:hidden +} +.box:hover { + border-color:#ff8c00 +} +.sendMirror button { + opacity:0; + transition:opacity .3s ease +} +.box:hover .sendMirror button { + opacity:1 +} +header { + box-shadow:0 3px 3px rgba(0,0,0,.175); + position:relative; + top:0; + width:100%; + font-size:1.15em; + z-index:10 +} +header .default .doc { + position:relative; + left:5px +} +header .logo_img { + color:#666 +} +header .logo_img .user_icon { + position:relative; + left:5px +} +header .logo-head .ant-menu .ant-menu-submenu-horizontal .ant-menu .ant-menu-item { + padding:0; + width:100%; + text-align:center +} +.default i.anticon,.logo_img i.anticon { + font-size:12px; + margin-right:6px; + transition:all .3s; + position:relative; + left:10px +} +.ant-menu-submenu-horizontal:hover .default i.anticon { + transform:rotate(180deg) +} +.ant-menu-submenu-horizontal:hover .logo_img i.anticon { + transform:rotate(180deg) +} +.goback { + position:relative; + top:-10px; + color:#666; + line-height:40px +} +.ant-spin-spining { + line-height:50px +} +.exception>a { + margin-top:18px; + line-height:30px; + padding:0 13px; + border:1px solid #666; + border-radius:5px; + margin-left:20px; + color:#666; + float:left +} +.exception>a:hover { + color:#2db7f5 +} +.goback .back { + padding:6px 12px; + cursor:pointer +} +.images .imgIcon { + display:block; + margin:30px auto; + max-width:90% +} +.mirror-head .type-info span.title { + display:inline-block; + width:500px; + height:36px; + font-size:20px; + white-space:nowrap +} +.download-mirror label { + font-size:14px; + line-height:35px; + text-align:center +} +.mirror-head { + width:100%; + height:190px +} +.mirror-head .images { + float:left; + width:150px; + height:140px; + border:1px solid #DCDCDC; + background:#fff; + display:table; + margin-right:30px; + position:relative +} +.mirror-head .images .uploadImg { + position:absolute; + bottom:0; + background:rgba(142,152,160,.2); + width:100%; + left:0; + text-align:center +} +.mirror-head .images #collectImage { + position:absolute; + right:0; + text-indent:10px +} +.mirror-head .type-info { + float:left; + height:100%; + width:35% +} +.mirror-head .type-info span.title { + display:inline-block; + width:100%; + height:36px; + font-size:20px; + white-space:nowrap +} +.mirror-head .type-info .fork { + cursor:pointer; + font-size:14px +} +.mirror-head .type-info .fork:hover { + color:orange +} +.mirror-head .type-info .downloadNumber { + margin:0 10px; + font-size:14px +} +.mirror-head .type-info #registryLock { + text-align:left +} +.mirror-head .type-info .list-content { + height:65px; + width:95%; + display:block; + line-height:20px; + font-size:14px; + overflow:hidden +} +.mirror-head .type-info .star-style { + margin-right:5px +} +.mirror-head .list-download { + position:absolute; + right:0; + height:100%; + width:48% +} +.mirror-head .list-download .download-mirror { + position:relative; + top:65px +} +.mirror-head .list-download .download-mirror .download-src { + width:75%; + height:35px; + text-indent:10px; + border:1px solid #4280CB; + color:#4280CB +} +.mirror-head .list-download .download-mirror #click-copy { + border:1px solid #4280CB; + width:65px; + height:35px; + display:inline-block; + position:absolute; + top:0; + border-left:0; + cursor:pointer; + background:url(../images/bj_registry_list.png) no-repeat; + background-position:23px 5px +} +.ant-tabs-tabs-bar { + margin-bottom:0 +} +.format { + padding:30px 15px; + min-height:168px +} +.format ul { + padding-left:20px; + list-style:disc +} +.format ul li { + list-style:disc +} +.format img { + max-width:100% +} +.download-ranking { + font-size:1.2em +} +#downRanking ul,#favRanking ul { + padding-bottom:5px +} +.ant-menu-item-active,.ant-menu-submenu-title:hover { + background:0 0 +} +.logo-head .ant-menu-vertical li.ant-menu-item-active:hover { + background-color:#eaf8fe +} +.btn-primary { + color:#fff; + background:#4B80CB +} +.btn-lg { + height:50px; + font-size:1.1em; + padding:0 26px; + line-height:50px; + cursor:pointer; + display:block; + text-align:center +} +.listing:nth-of-type(1) { + margin-top:30px +} +.listing { + height:100px; + margin-top:20px +} +.listing .list-item-img { + margin:25px auto; + width:80% +} +.listing .list-item-img img { + margin:0 auto; + height:50px +} +.listing .list-item-description { + margin-top:25px +} +.listing .list-item-middle { + line-height:100px +} +.listing .list-item-middle .fa-star-o { + font-size:1.2em; + color:#efa11b +} +.rankinglist { + position:absolute; + width:90%; + min-height:340px +} +.rankinglist .ranking-li { + height:50px +} +.rankinglist .ant-menu-vertical { + border:0 +} +.ranking-row { + height:58px; + line-height:60px; + border-bottom:1px solid #dadada; + margin-bottom:10px; + font-size:1.2em +} +.search-result { + line-height:50px; + color:orange +} +.allcomment { + border-bottom:1px dashed #ddd; + margin-bottom:100px +} +.allcomment .comment-list,.allcomment .reply-list { + border-top:1px dashed #ddd; + padding-top:8px; + display:table; + width:100% +} +.allcomment .comment-list .user-info,.allcomment .reply-list .user-info { + width:80px +} +.allcomment .comment-list .user-info .user-head,.allcomment .reply-list .user-info .user-head { + width:50px; + border-radius:50% +} +.allcomment .comment-list .comm-content,.allcomment .reply-list .comm-content { + width:calc(100% - 80px); + position:relative +} +.allcomment .comment-list .comm-content .contributor,.allcomment .reply-list .comm-content .contributor { + color:#44ACFF; + margin-right:20px +} +.allcomment .comment-list .comm-content .push-time,.allcomment .reply-list .comm-content .push-time { + font-size:12px; + color:#999 +} +.allcomment .comment-list .comm-content .revert-content,.allcomment .reply-list .comm-content .revert-content { + line-height:22px +} +.comment-content { + min-height:100px; + max-width:100%; + padding:5px; + width:100%; + border:1px solid #A9A9A9 +} +.ant-dropdown { + width:410px +} +.emojiList { + background:#fff; + border:1px solid #ccc; + border:1px solid rgba(0,0,0,.15); + box-shadow:0 6px 12px rgba(0,0,0,.175); + padding:5px; + border-radius:4px +} +.emoji { + width:1.8em; + height:1.8em; + display:inline-block; + margin-bottom:-.25em; + background-size:contain; + cursor:pointer; + margin:2px +} +.loadmore { + height:40px; + width:100%; + padding:0; + border:1px solid #337ab7; + color:#337ab7; + line-height:40px; + text-align:center; + cursor:pointer; + margin-bottom:24px +} +.loadmore:hover { + color:#999 +} +.allcomment .comm-content .hover-reply { + visibility:hidden; + color:#44ACFF; + cursor:pointer +} +.comment-detail { + overflow:hidden +} +.comment-detail:hover .zan-box .hover-reply { + visibility:visible +} +.reply-list:hover div .hover-reply { + visibility:visible +} +.contributor li { + line-height:42px +} +#scroll_Top { + z-index:20; + opacity:0; + position:fixed; + bottom:20px; + right:10px; + border-radius:10px; + text-align:center; + color:#333; + background:#F1F1F1; + width:60px; + height:60px; + cursor:pointer; + border-radius:40px; + line-height:30px; + vertical-align:middle; + transition:all .5s +} +#scroll_Top i { + font-size:18px; + display:block; + margin-top:10px +} +#scroll_Top.show { + opacity:1 +} \ No newline at end of file diff --git a/template/default/assets/css/index-top.css b/template/default/assets/css/index-top.css new file mode 100644 index 0000000..21730db --- /dev/null +++ b/template/default/assets/css/index-top.css @@ -0,0 +1 @@ +*{margin:0;padding:0}body{width:100%;font-family:"Microsoft YaHei",Arial,"Hiragino Sans GB",STHeiti,"WenQuanYi Micro Hei",SimSun,sans-serif}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-button:vertical{display:none}::-webkit-scrollbar-track:vertical{background-color:#000}::-webkit-scrollbar-track-piece{background-color:#F5F5F5}::-webkit-scrollbar-thumb:vertical{margin-right:10px;background-color:#A6A6A6}::-webkit-scrollbar-thumb:vertical:hover{background-color:#aaa}::-webkit-scrollbar-corner:vertical{background-color:#535353}::-webkit-scrollbar-resizer:vertical{background-color:#FF6E00}.navbar-default{background:#fff;border:0}::-webkit-scrollbar-thumb{border-radius:5px}img.user_icon{height:36px;border-radius:50%}.logo{display:inline-block;width:160px;height:40px;background:url(logo.png) no-repeat;background-size:95%;background-position:0 0;position:relative;top:13px;left:15px}.logo_blue{background-position:0 -40px}.header-actions .logo_img{padding-top:13px}.header-actions:hover b.caret.user_caret{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}b.caret.user_caret{position:absolute;top:30px;right:3px;-webkit-transition:200ms;-ms-transition:200ms;-moz-transition:200ms;-o-transition:200ms;transition:200ms}a:focus{border:none;outline:0}.header-actions{position:relative}.select_go{box-shadow:0 0 10px rgba(0,0,0,.3);min-width:100px;background:#fff;position:absolute;left:-15px;border:1px solid #e5e5e5;-webkit-transition:all .6s cubic-bezier(0.175,.885,.32,1.275);-moz-transition:all .6s cubic-bezier(0.175,.885,.32,1.275);-o-transition:all .6s cubic-bezier(0.175,.885,.32,1.275);transition:all .6s cubic-bezier(0.175,.885,.32,1.275);opacity:0;-webkit-transform:scale3d(0,0,0);-moz-transform:scale3d(0,0,0);-ms-transform:scale3d(0,0,0);-o-transform:scale3d(0,0,0);transform:scale3d(0,0,0);-webkit-transform-origin:40px top;-moz-transform-origin:40px top;-ms-transform-origin:40px top;-o-transform-origin:40px top;transform-origin:40px top}.select_go .go_console,.select_go .go_logout{display:block;width:100%;height:40px;line-height:40px;color:#333}.select_go .go_console:hover,.select_go .go_logout:hover{transition:.2s;background:#f5f5f5}.nav-new{box-shadow:0 0 10px rgba(0,0,0,.3);min-width:100px;background:#fff;left:calc(50% - 48px);border:1px solid #e5e5e5;position:absolute;white-space:nowrap;-webkit-transition:all .6s cubic-bezier(0.175,.885,.32,1.275);-moz-transition:all .6s cubic-bezier(0.175,.885,.32,1.275);-o-transition:all .6s cubic-bezier(0.175,.885,.32,1.275);transition:all .6s cubic-bezier(0.175,.885,.32,1.275);opacity:0;-webkit-transform:scale3d(0,0,0);-moz-transform:scale3d(0,0,0);-ms-transform:scale3d(0,0,0);-o-transform:scale3d(0,0,0);transform:scale3d(0,0,0);-webkit-transform-origin:40px top;-moz-transform-origin:40px top;-ms-transform-origin:40px top;-o-transform-origin:40px top;transform-origin:40px top}.nav-new .li-new{display:block;width:100%;height:40px;line-height:40px;color:#333}.nav-new .li-new:hover{transition:.2s;background:#f5f5f5}.nav-new:after{content:"";display:block;height:0;clear:both;visibility:hidden}.header-doc:hover .nav-new{-webkit-transform:scale3d(1,1,1);-moz-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);-o-transform:scale3d(1,1,1);transform:scale3d(1,1,1);opacity:1}.header-actions:hover .select_go{-webkit-transform:scale3d(1,1,1);-moz-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);-o-transform:scale3d(1,1,1);transform:scale3d(1,1,1);opacity:1}li{list-style:none}@media (min-width:768px) and (max-width:992px){.container{padding-left:10px}header ul.c_navbar li{margin-left:20px}header ul.c_navbar li a.font_size{margin-left:0}header ul.z_navbar li a{padding:0 5px}.screen .h4{line-height:2.2em}.proceed{font-size:1em;padding:10px 25px}.bottom_line{width:100%;height:200px;margin-top:10%}.bottom_line ul.ico-img{width:auto;padding:0;margin-left:38%}.bottom_line ul.ico-img li{float:left;width:50px}.bottom_line ul.ico-img li a{color:#898B8D;font-size:2em}.soso{position:absolute;top:55%;left:40%}.soso img{width:110px}}@media (min-width:992px){ul.z_navbar li a{padding:0 20px}.banner2 .ban2_content{font-size:1.5em;line-height:40px}.banner2 .ban2_text .ban2_middle{font-size:3em}.banner2 .ban2_text .ban3_middle{font-size:3em}.banner3 .ban3_content{font-size:1.5em;line-height:40px}.banner3 .ban3_text .ban3_middle{font-size:3em}header ul.c_navbar li{margin-left:20px}.screen .h4{line-height:2.2em}.proceed{font-size:1.4em;padding:12px 40px}.address footer ul li a{letter-spacing:2px}.bottom_line{width:100%;height:200px;margin-top:20%;border-left:1px solid #404346}.bottom_line ul.ico-img{width:auto;padding:0;margin-left:38%}.bottom_line ul.ico-img li{float:left;width:50px}.bottom_line ul.ico-img li a{color:#898B8D;font-size:2em}.soso{position:absolute;top:120px;left:43%}.soso img{width:110px;height:110px}}@media (max-width:682px){.banner2 .ban2_content{font-size:1em}.banner2 .ban2_text .ban2_middle,.banner3 .ban3_middle{font-size:1.5em}.banner3 .ban3_content{font-size:1em}.banner3 .ban3_text .ban3_middle{font-size:1.2em}.address footer ul li a{letter-spacing:0}header ul.c_navbar li a.font_size{margin-left:15px;width:50%;margin:0 auto;height:40px;line-height:30px}.navbar-top-collapse{margin-bottom:20px}.navbar-top-collapse ul.z_navbar li a{line-height:30px}.proceed{font-size:1em;padding:8px 25px}.bottom_line{width:100%;height:200px;margin-top:20%}.bottom_line ul.ico-img{width:auto;padding:0;margin-left:30%}.bottom_line ul.ico-img li{float:left;width:50px}.bottom_line ul.ico-img li a{color:#898B8D;font-size:2em}.soso{position:absolute;top:120px;left:35%}.soso img{width:110px;height:110px}}header{position:relative;top:0;width:100%;font-size:1.15em;z-index:10}header a:hover{text-decoration:none}header ul.z_navbar{margin:0;line-height:65px;text-align:center}header ul.z_navbar li a{line-height:65px}header ul.z_navbar li a.active{color:#4280cb}header ul.z_navbar li .li-new{padding:0}header ul.z_navbar li ul.items{display:none;background:#fff;min-width:100px;position:absolute;top:65px;left:-12%;border:1px solid #e5e5e5}header ul.z_navbar li ul.items li{clear:both;width:100%;height:40px;line-height:40px}header ul.z_navbar li ul.items li a{width:100%;display:inline-block;color:#333}header ul.z_navbar li ul.items li a:hover{transition:.2s}header ul.z_navbar li ul.items li:hover{background:#F5F5F5;transition:.2s}header ul.c_navbar{margin:0;line-height:65px;text-align:center}header ul.c_navbar li a.font_size{margin-top:15px;border:1px solid #666;border-radius:5px;-webkit-transition:background .4s ease;transition:background .4s ease}header ul.c_navbar li a.font_size:hover{background:#fff;color:#666}#scroll_Top{z-index:20;display:none;position:fixed;bottom:20px;right:10px;border-radius:10px;text-align:center;color:#56585A;background:#F1F1F1;width:60px;height:60px;border-radius:40px;line-height:30px;vertical-align:middle}#scroll_Top a.TopTop{font-size:12px;text-decoration:none;color:#56585A;display:block;line-height:normal}.dropdown-menu{min-width:100px}.dropdown-menu li{text-align:center}.dropdown-menu.pull-right{left:-38px;top:200%}.select_go .rows,.nav-new .rows{position:absolute;left:40px;top:-16px;width:0;height:0;font-size:0;border-width:8px;border-style:dashed dashed solid;border-color:rgba(0,0,0,0)rgba(0,0,0,0)#fff}p.focus{color:#fff;font-size:18px}.address footer{min-width:320px;width:100%;position:relative;overflow:hidden;background:#14181C}.address footer ul{margin:0;float:left;padding-top:50px;width:25%}.address footer ul h4{color:#fff}.address footer ul li{list-style:none;line-height:40px;color:#ccc}.address footer ul li a{color:#898B8D;text-decoration:none}.address footer ul li a:hover{color:#e8e7e7}.xinxi{position:relative;top:30px;width:100%;text-align:center}.xinxi p{line-height:60px;color:#686A6B;font-size:12px;margin-bottom:30px}#main-nav{margin:0;min-height:65px}a.font_size{padding:5px 15px;border:1px solid #666;border-radius:5px;-moz-transition:background .4s ease;-ms-transition:background .4s ease;-webkit-transition:background .4s ease;transition:background .4s ease}a.font_size:hover{background:#fff;color:#666}#products-move{position:relative;left:0;top:100px;font-size:28px;letter-spacing:0;width:auto}#page #masthead{text-shadow:none}#ie9{height:20px;line-height:20px;background:red;color:#fff;text-align:center;position:fixed;top:0;width:60%;left:20%;z-index:10000;display:none;font-size:12px}.closeIE{color:#fff;position:absolute;right:20px;cursor:pointer} \ No newline at end of file diff --git a/template/default/assets/css/index.css b/template/default/assets/css/index.css new file mode 100644 index 0000000..c914551 --- /dev/null +++ b/template/default/assets/css/index.css @@ -0,0 +1,877 @@ +header { + position:fixed; + background:#fff +} +@media screen and (min-width:992px) { + html,body { + height:100% +} +.center_content { + padding-left:10% +} +#myCarousel,.banner2,.banner3 { + height:100%; + min-height:450px +} +#myCarousel .carousel-inner,.carousel-inner>.item { + height:100% +} +.banner2 .container { + height:100% +} +.banner2 .container .row { + height:100% +} +.banner2 .container .row .col-md-6 { + height:100% +} +.banner2 .container .row .col-md-6 .cloud_host_img { + top:22% +} +.banner2 .container .row .col-md-6 .ban2_text { + height:100% +} +.ban2_text { + position:relative +} +.ban2_text .ban2_status,.ban2_text .ban3_status { + position:absolute; + top:30% +} +.ban2_text .ban2_status .ban2_middle,.ban2_text .ban3_status .ban2_middle,.ban2_text .ban2_status .ban3_middle,.ban2_text .ban3_status .ban3_middle { + color:#fff; + position:relative; + letter-spacing:6px; + top:35%; + left:10% +} +.ban2_content,.ban3_content { + color:#fff; + width:90%; + position:relative; + letter-spacing:1px; + top:37%; + left:10% +} +.ban2_experience { + font-size:1.2em; + color:#fff; + margin-top:30px; + position:relative; + left:10% +} +.cloud_host_img { + position:absolute +} +.blog-article { + padding:20px +} +.cloud_db_img { + position:absolute; + top:20% +} +}@media (min-width:682px) and (max-width:992px) { + header { + position:fixed; + background:#fff +} +html,body { + height:100% +} +.center_content { + padding-left:5% +} +#myCarousel,.banner2,.banner3 { + height:100%; + min-height:450px +} +#myCarousel .carousel-inner,.carousel-inner>.item { + height:100% +} +.banner2 .container { + height:100% +} +.banner2 .container .row { + height:100% +} +.banner2 .container .row .col-md-6 { + height:100% +} +.banner2 .container .row .col-md-6 .ban2_text { + height:100% +} +.ban2_text { + position:relative +} +.ban2_text .ban2_status,.ban2_text .ban3_status { + position:absolute; + top:30% +} +.ban2_text .ban2_status .ban2_middle,.ban2_text .ban3_status .ban2_middle,.ban2_text .ban2_status .ban3_middle,.ban2_text .ban3_status .ban3_middle { + color:#fff; + position:relative; + letter-spacing:6px; + top:35%; + left:10%; + font-size:20px +} +.ban2_content,.ban3_content { + color:#fff; + width:90%; + position:relative; + letter-spacing:1px; + top:37%; + left:10% +} +.ban2_experience,.ban3_experience { + font-size:1.2em; + color:#fff; + margin-top:30px; + position:relative; + left:10% +} +.cloud_host_img,.cloud_db_img { + position:absolute; + top:22% +} +.blog-article { + padding:15px +} +}@media (max-width:682px) { + html,body { + height:100%; + min-width:400px; + font-size:12px +} +#myCarousel,.banner2,.banner3 { + height:100% +} +.docker { + top:0!important +} +#myCarousel .carousel-inner,.carousel-inner>.item { + height:100% +} +.banner2 .container { + height:100% +} +.banner2 .container .row { + height:100% +} +.banner2 .container .row .col-xs-12 { + height:50% +} +.banner2 .container .row .col-xs-12 .ban2_text { + height:100% +} +.banner2 .ban2_text .ban2_status { + text-align:center; + font-size:1.5em +} +.cloud_host_img,.cloud_db_img { + width:60%; + margin-left:20%; + margin-top:10% +} +.ban2_text { + position:relative +} +.ban2_text .ban3_status { + position:absolute; + text-align:center; + font-size:1.5em +} +.ban2_text .ban3_status .ban3_middle { + color:#fff; + letter-spacing:6px +} +.ban2_text .ban3_status .ban3_content { + color:#fff; + width:100%; + letter-spacing:3px +} +.ban2_text .ban2_status { + position:absolute; + top:15% +} +.ban2_text .ban2_status .ban2_middle { + color:#fff; + position:relative; + letter-spacing:6px; + top:35% +} +.ban2_content { + color:#fff; + width:100%; + position:relative; + letter-spacing:3px; + top:37% +} +.ban2_experience { + color:#fff; + margin-top:30px; + position:relative +} +.blog-article { + padding:5px +} +.blog-article .h4 { + font-size:14px +} +.blog-article .h5 { + margin-top:5px; + font-size:12px +} +.screen4 .safe-content { + font-size:14px +} +.tenxcloud_news { + margin-top:10px +} +.screen6 .collaborate li a div { + margin:0 auto +} +}#nav-top { + box-shadow:0 3px 3px rgba(0,0,0,.175) +} +.proceed { + color:#fff; + border:1px solid #fff; + border-radius:5px; + -moz-transition:background .4s ease; + -ms-transition:background .4s ease; + -webkit-transition:background .4s ease; + transition:background .4s ease +} +.proceed-foot { + color:#D9EFF0; + padding:10px 50px; + font-size:2em; + border:1px solid #fff +} +.proceed-2,.proceed-3,.proceed-4 { + color:#eee; + border:1px solid #eee +} +.proceed:hover { + color:#3F5061; + background:#fff; + border-color:#fff +} +#youremail { + border-radius:4px; + width:380px; + height:50px; + color:#eee; + font-size:18px; + border:1px solid #eee; + background:0 0; + vertical-align:middle; + text-indent:10px; + line-height:normal +} +#youremail::-webkit-input-placeholder { + color:#eee +} +#youremail:-moz-placeholder { + color:#eee +} +#youremail::-moz-placeholder { + color:#eee +} +#youremail:-ms-input-placeholder { + color:#eee +} +#apply-for { + margin-left:10px; + line-height:35px; + background:#4280CB; + vertical-align:top; + border-radius:4px; + height:50px; + width:126px; + font-size:18px; + cursor:pointer; + -moz-transition:background .4s ease; + -ms-transition:background .4s ease; + -webkit-transition:background .4s ease; + transition:background .4s ease; + font-family:Microsoft Yahei,Hiragino Sans GB,WenQuanYi Micro Hei,sans-serif +} +#apply-for:hover { + background:#DFDFDF; + color:#555 +} +#apply-bottom { + margin-left:10px; + line-height:35px; + background:#eee; + vertical-align:middle; + border-radius:4px; + height:50px; + padding:8px 12px; + font-size:18px; + cursor:pointer; + -moz-transition:background .4s ease; + -ms-transition:background .4s ease; + -webkit-transition:background .4s ease; + transition:background .4s ease; + font-family:Microsoft Yahei,Hiragino Sans GB,WenQuanYi Micro Hei,sans-serif +} +a { + color:inherit +} +a:hover { + text-decoration:none +} +.carousel-indicators li { + margin:0 8px +} +.carousel-indicators .active { + margin:0 7px +} +.screen1 { + margin-top:65px; + height:calc(100% - 65px) +} +.screen1 #myCarousel { + width:100%; + overflow:hidden +} +.carousel-indicators { + bottom:20px +} +.move_cloud { + width:100%; + height:200px; + position:absolute; + background:url(../images/hostingupline.png) no-repeat; + -webkit-animation:move_top 10s ease-out alternate infinite; + -moz-animation:move_top 10s ease-out alternate infinite; + -ms-animation:move_top 10s ease-out alternate infinite; + animation:move_top 10s ease-out alternate infinite +} +.banner2 { + width:100%; + background:url(../images/hostingupline.png) no-repeat; + background-size:100%; + position:relative +} +.banner2:after { + content:''; + background:#4280cb; + background:-webkit-gradient(linear,0 0,0 100%,from(#4585d2),to(#4280cb)); + background:-moz-linear-gradient(top,#4585d2,#4280cb); + background:linear-gradient(to bottom,#4585d2,#4280cb); + position:absolute; + top:0; + left:0; + height:100%; + width:100%; + z-index:-1 +} +.banner3:after { + content:''; + background:#02bf8b; + background:-webkit-gradient(linear,0 0,0 100%,from(#02bf8b),to(#01ad7f)); + background:-moz-linear-gradient(top,#02bf8b,#01ad7f); + background:linear-gradient(to bottom,#02bf8b,#01ad7f); + position:absolute; + top:0; + left:0; + height:100%; + width:100%; + z-index:-1 +} +.banner3 { + width:100% +} +.banner4:after { + content:''; + background:#33405a; + background:-webkit-gradient(linear,0 0,0 100%,from(#3e3e4a),to(#3e3e4a)); + background:-moz-linear-gradient(top,#33405a,#24314e); + background:linear-gradient(to bottom,#33405a,#24314e); + position:absolute; + top:0; + left:0; + height:100%; + width:100%; + z-index:-1 +} +#trun_left { + position:absolute; + width:8%; + top:0; + left:0; + text-align:center; + height:100%; + z-index:3 +} +#trun_left ._left { + display:none; + font-size:5em; + padding:200px 10px; + color:#eee +} +#trun_left:hover ._left { + display:block +} +#trun_right:hover ._right { + display:block +} +#trun_right { + height:100%; + width:8%; + top:0; + position:absolute; + right:0; + z-index:3; + text-align:center +} +#trun_right ._right { + display:none; + font-size:5em; + color:#eee; + padding:200px 10px +} +.tenxcloud_news { + font-size:1.5em +} +.spring_icon { + margin:0 auto; + width:160px; + height:160px; + background:url(../images/shensuo.png) no-repeat +} +.screen2 { + width:100%; + padding:80px 0 +} +.screen2 .center_content { + margin:20px auto; + transition:.3s all +} +.screen2 .center_content .servers { + height:70px; + width:70px; + float:left; + background:url(../images/server_item.png) no-repeat; + transition:.5s background ease-in-out +} +.screen2 .center_content .s_item { + background-position:0 0 +} +.screen2 .center_content .r_item { + background-position:0 -80px +} +.screen2 .center_content .m_item { + background-position:0 -160px +} +.screen2 .center_content .a_item { + background-position:0 -240px +} +.screen2 .process:hover { + color:#4280CB +} +.screen2 .process:hover .s_item { + background-position:-100px 0 +} +.screen2 .containers:hover { + color:#4280CB +} +.screen2 .containers:hover .r_item { + background-position:-100px -80px +} +.screen2 .primer:hover { + color:#4280CB +} +.screen2 .primer:hover .m_item { + background-position:-95px -160px +} +.screen2 .appstore:hover { + color:#4280CB +} +.screen2 .appstore:hover .a_item { + background-position:-100px -240px +} +.screen3 { + width:100%; + background:#FAFAFB; + position:relative; + padding:50px 0 +} +.screen3 .cloud_server { + text-align:center; + margin:20px 0; + color:#696969; + font-size:16px +} +.screen3 .cloud_server .more { + margin:10px 0; + font-size:1.2em; + background:#fff; + border:1px solid #333; + padding:10px 20px; + border-radius:2px; + -moz-transition:background .4s ease; + -ms-transition:background .4s ease; + -webkit-transition:background .4s ease; + transition:background .4s ease +} +.screen3 .server-head { + margin-top:20px; + color:#696969; + text-align:center +} +.screen3 .server_item { + background:url(../images/container_server_icon.png) no-repeat; + height:135px; + width:140px; + transition:.5s background; + margin:0 auto +} +.screen3 .h5 { + margin-bottom:50px +} +.screen3 .container_server { + background-position:0 0 +} +.screen3 .arrange { + background-position:2px -148px +} +.screen3 .codebuild { + background-position:2px -300px +} +.screen3 .server-market { + background-position:2px -449px +} +.screen3 .registry { + background-position:3px -605px +} +.screen3 .ci { + background-position:3px -757px +} +.screen3 .hosting { + background-position:2px -905px +} +.screen3 .private { + background-position:2px -1049px +} +.screen3 #container_server:hover .server-head { + color:#55C782 +} +.screen3 #container_server:hover .container_server { + background-position:-146px 0 +} +.screen3 #server-arrange:hover .server-head { + color:#4280CB +} +.screen3 #server-arrange:hover .arrange { + background-position:-146px -148px +} +.screen3 #codebuild:hover .server-head { + color:#F4B329 +} +.screen3 #codebuild:hover .codebuild { + background-position:-146px -300px +} +.screen3 #server-market:hover .server-head { + color:#8376B6 +} +.screen3 #server-market:hover .server-market { + background-position:-146px -449px +} +.screen3 #registry:hover .server-head { + color:#55c782 +} +.screen3 #registry:hover .registry { + background-position:-146px -605px +} +.screen3 #ci:hover .server-head { + color:#4280cb +} +.screen3 #ci:hover .ci { + background-position:-146px -757px +} +.screen3 #hosting:hover .server-head { + color:#f4b329 +} +.screen3 #hosting:hover .hosting { + background-position:-146px -905px +} +.screen3 #private:hover .server-head { + color:#998fc3 +} +.screen3 #private:hover .private { + background-position:-146px -1049px +} +.screen4 { + width:100%; + text-align:center; + padding:40px 0 80px; + color:#fff; + background:url(../images/tese.jpg) no-repeat; + background-size:100% 100% +} +.screen4 .cloud_server { + text-align:center; + font-size:16px +} +.screen4 .safe-content { + line-height:1.5em +} +.screen4 .design_safe { + width:100px; + height:110px; + margin:10px auto; + background:url(../images/tesetubiao.png) no-repeat +} +.screen4 .safe_ease { + background-position:0 0 +} +.screen4 .design_safe.tall { + background-position:0 -110px +} +.screen4 .design_safe.seeyou { + background-position:0 -218px +} +.screen4 .design_safe.mix { + background-position:0 -320px +} +.screen5 { + padding:40px 0 80px; + background:#FAFAFB +} +.screen5 .blog-head { + text-align:center; + margin-bottom:30px; + color:#696969 +} +.screen5 .blog-date { + font-size:20px; + color:#fff; + text-align:center; + margin-bottom:20px; + width:100px; + height:110px; + background:#4B80CB +} +.screen5 .blog-date .hrs { + margin:10px auto; + width:60%; + border-color:#a9c3e6 +} +.screen5 .blog-article { + width:calc(100% - 100px); + height:110px; + background:#fff +} +.screen5 .blog-article .h5 { + line-height:1.3em +} +.screen5 .blog-body:hover .blog-date { + background-color:#2fba66 +} +.screen6 { + width:100%; + background:#FAFAFB; + padding:40px 0 80px; + text-align:center +} +.screen6 .cloud_server { + color:#696969; + height:100px +} +.screen6 .collaborate { + width:400%; + position:relative; + height:150px +} +.screen6 .collaborate ul { + height:110px; + width:25%; + float:left +} +.screen6 .collaborate ul li { + float:left; + width:20%; + min-width:180px; + height:55px +} +.screen6 .collaborate ul li .partner { + width:190px; + height:46px; + background:url(../images/partner.png) no-repeat +} +.screen6 .collaborate ul li .aliyun { + background-position:-206px 0 +} +.screen6 .collaborate ul li .amazon { + background-position:-191px -60px +} +.screen6 .collaborate ul li .qingcloud { + background-position:-191px -120px +} +.screen6 .collaborate ul li .segmentfault { + background-position:-191px -170px +} +.screen6 .collaborate ul li .oschina { + background-position:-191px -223px +} +.screen6 .collaborate ul li .coding { + background-position:-191px -282px +} +.screen6 .collaborate ul li .fir_im { + background-position:-191px -345px +} +.screen6 .collaborate ul li .gitcafe { + background-position:-191px -400px +} +.screen6 .collaborate ul li .appcan { + background-position:-191px -473px +} +.screen6 .collaborate ul li .jisuanke { + background-position:-191px -528px +} +.screen6 .collaborate ul li .partner2 { + width:190px; + height:46px; + background:url(../images/partner2.png) no-repeat +} +.screen6 .collaborate ul li .kaiyuanshe { + background-position:-15px 0 +} +.screen6 .collaborate ul li .meituan { + background-position:-25px -53px +} +.screen6 .collaborate ul li .easemob { + background-position:0 -108px +} +.screen6 .collaborate ul li .wilddog { + background-position:0 -162px +} +.screen6 .collaborate ul li .yuntongxun { + background-position:0 -215px +} +.screen6 .collaborate ul li .cloudwise { + background-position:10px -260px +} +.screen6 .collaborate ul li .udesk { + background-position:-5px -319px +} +.screen6 .collaborate ul li .upcloud { + background-position:-5px -365px +} +.screen6 .collaborate ul li .gbtags { + background-position:-5px -470px +} +.screen6 .collaborate ul li .oneapm { + background-position:-5px -415px +} +.screen6 .collaborate ul li .partner3 { + width:190px; + height:46px; + background:url(../images/partner3.png?rev=0.21) no-repeat +} +.screen6 .collaborate ul li .qiniu { + background-position:0 0 +} +.screen6 .collaborate ul li .anchnet { + background-position:10px -60px +} +.screen6 .collaborate ul li .rongkecloud { + background-position:-15px -116px +} +.screen6 .collaborate ul li .zhugeio { + background-position:-15px -176px +} +.screen6 .collaborate ul li .yuantuan { + background-position:-15px -242px +} +.screen6 .collaborate ul li .kr36 { + background-position:-15px -360px +} +.screen6 .collaborate ul li .kf5 { + background-position:-15px -300px +} +.screen6 .collaborate ul li .bee { + background-position:0 -418px +} +.screen6 .collaborate ul li .bmob { + background-position:10px -465px +} +.screen6 .collaborate ul li .unisound { + background-position:-10px -533px +} +.screen6 .collaborate ul li .safedog { + background-position:-10px -591px +} +.screen6 .collaborate ul li .apistore { + background-position:-10px -650px +} +.screen6 .collaborate .partnerRun { + position:absolute; + bottom:0; + left:10px; + width:24.6%; + text-align:center +} +.screen6 .collaborate .partnerRun .slide { + display:inline-block; + width:10px; + height:10px; + border-radius:10px; + border:1px solid #9C9C9C; + margin:0 8px; + cursor:pointer; + transition:all .3s +} +.screen6 .collaborate .partnerRun .slide.active { + background:#9C9C9C +} +.screen7 { + padding:60px 0 100px +} +.screen7 .cloud_server { + text-align:center; + margin-bottom:30px; + color:#696969 +} +.screen7 .media-item { + width:150px; + height:70px +} +.screen7 .media-content { + line-height:1.2em +} +@keyframes move_top { + from { + left:0; + top:0 +} +to { + left:10% +} +}@-moz-keyframes move_top { + from { + left:0 +} +to { + left:10% +} +}@-webkit-keyframes move_top { + from { + left:0 +} +to { + left:10% +} +}@-o-keyframes move_top { + from { + left:0 +} +to { + left:10% +} +} \ No newline at end of file diff --git a/template/default/assets/images/alipay.png b/template/default/assets/images/alipay.png new file mode 100644 index 0000000..1054261 Binary files /dev/null and b/template/default/assets/images/alipay.png differ diff --git a/template/default/assets/images/banner4.png b/template/default/assets/images/banner4.png new file mode 100644 index 0000000..3413824 Binary files /dev/null and b/template/default/assets/images/banner4.png differ diff --git a/template/default/assets/images/bj_registry_list.png b/template/default/assets/images/bj_registry_list.png new file mode 100644 index 0000000..385d87f Binary files /dev/null and b/template/default/assets/images/bj_registry_list.png differ diff --git a/template/default/assets/images/container_server_icon.png b/template/default/assets/images/container_server_icon.png new file mode 100644 index 0000000..06e7847 Binary files /dev/null and b/template/default/assets/images/container_server_icon.png differ diff --git a/template/default/assets/images/hostingupline.png b/template/default/assets/images/hostingupline.png new file mode 100644 index 0000000..ed723c3 Binary files /dev/null and b/template/default/assets/images/hostingupline.png differ diff --git a/template/default/assets/images/hub.banner.jpg b/template/default/assets/images/hub.banner.jpg new file mode 100644 index 0000000..915e162 Binary files /dev/null and b/template/default/assets/images/hub.banner.jpg differ diff --git a/template/default/assets/images/qqpay.png b/template/default/assets/images/qqpay.png new file mode 100644 index 0000000..8888496 Binary files /dev/null and b/template/default/assets/images/qqpay.png differ diff --git a/template/default/assets/images/server_item.png b/template/default/assets/images/server_item.png new file mode 100644 index 0000000..ba3b8f1 Binary files /dev/null and b/template/default/assets/images/server_item.png differ diff --git a/template/default/assets/images/tenpay.png b/template/default/assets/images/tenpay.png new file mode 100644 index 0000000..bf945b3 Binary files /dev/null and b/template/default/assets/images/tenpay.png differ diff --git a/template/default/assets/images/tese.jpg b/template/default/assets/images/tese.jpg new file mode 100644 index 0000000..0f2ce6e Binary files /dev/null and b/template/default/assets/images/tese.jpg differ diff --git a/template/default/assets/images/tesetubiao.png b/template/default/assets/images/tesetubiao.png new file mode 100644 index 0000000..a066614 Binary files /dev/null and b/template/default/assets/images/tesetubiao.png differ diff --git a/template/default/assets/images/wxpay.png b/template/default/assets/images/wxpay.png new file mode 100644 index 0000000..5c85197 Binary files /dev/null and b/template/default/assets/images/wxpay.png differ diff --git a/template/default/doc.php b/template/default/doc.php new file mode 100644 index 0000000..9905698 --- /dev/null +++ b/template/default/doc.php @@ -0,0 +1,325 @@ + + + +
    + + +
    +
    开发文档
    + +
    +
    +
    + + +
    + + +
    + + +
    +
    +
    +
    +
    +

    + 协议规则 +

    +

    传输方式:HTTP

    +

    数据格式:JSON

    +

    签名算法:MD5

    +

    字符编码:UTF-8

    +
    +
    +

    + [API]创建商户 +

    +

    API权限:该API只能合作支付商户调用

    +

    URL地址:api.php?act=apply&token={合作者身份TOKEN}&url={商户域名}

    +

    请求参数说明:

    + + + + + + + +
    字段名变量名必填类型示例值描述
    操作类型actStringapply此API固定值
    合作者TOKENtokenString9ddab6c4f2c87ce442de371b04f36d68需要事先申请
    商户域名urlStringpay.v8jisu.cn
    +

    返回结果:

    + + + + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    返回信息msgString添加支付商户成功!
    商户IDpidInt1001所创建的商户ID
    商户密钥keyString(32)89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i所创建的商户密钥
    商户类型typeInt1此值暂无用
    +
    +
    +

    + [API]查询商户信息与结算规则 +

    +

    URL地址:api.php?act=query&pid={商户ID}&key={商户密钥}

    +

    请求参数说明:

    + + + + + + + +
    字段名变量名必填类型示例值描述
    操作类型actStringquery此API固定值
    商户IDpidInt1001
    商户密钥keyString89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i
    +

    返回结果:

    + + + + + + + + + + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    商户IDpidInt1001所创建的商户ID
    商户密钥keyString(32)89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i所创建的商户密钥
    商户类型typeInt1此值暂无用
    商户状态activeInt11为正常,0为封禁
    商户余额moneyString0.00商户所拥有的余额
    结算账号accountStringpay@cccyun.cn结算的支付宝账号
    结算姓名usernameString张三结算的支付宝姓名
    满多少自动结算settle_moneyString30此值为系统预定义
    手动结算手续费settle_feeString1此值为系统预定义
    每笔订单分成比例money_rateString98此值为系统预定义
    +
    +
    +

    + [API]修改结算账号 +

    +

    URL地址:api.php?act=change&pid={商户ID}&key={商户密钥}&account={结算账号}&username={结算姓名}

    +

    注:为了保障资金安全,已经设置结算账号的无法再进行修改,如需修改请联系客服

    +

    请求参数说明:

    + + + + + + + + + +
    字段名变量名必填类型示例值描述
    操作类型actStringchange此API固定值
    商户IDpidInt1001
    商户密钥keyString89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i
    结算账号accountStringpay@cccyun.cn结算的支付宝账号
    结算姓名usernameString张三结算的支付宝姓名
    +

    返回结果:

    + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    返回信息msgString修改收款账号成功!
    +
    +
    +

    + [API]查询结算记录 +

    +

    URL地址:api.php?act=settle&pid={商户ID}&key={商户密钥}

    +

    请求参数说明:

    + + + + + + + +
    字段名变量名必填类型示例值描述
    操作类型actStringsettle此API固定值
    商户IDpidInt1001
    商户密钥keyString89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i
    +

    返回结果:

    + + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    返回信息msgString查询结算记录成功!
    结算记录dataArray结算记录列表
    +
    +
    +

    + [API]查询单个订单 +

    +

    URL地址:api.php?act=order&pid={商户ID}&key={商户密钥}&out_trade_no={商户订单号}

    +

    请求参数说明:

    + + + + + + + + +
    字段名变量名必填类型示例值描述
    操作类型actStringorder此API固定值
    商户IDpidInt1001
    商户密钥keyString89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i
    商户订单号out_trade_noString20160806151343349
    +

    返回结果:

    + + + + + + + + + + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    返回信息msgString查询订单号成功!
    易支付订单号trade_noString2016080622555342651订单号
    商户订单号out_trade_noString20160806151343349商户系统内部的订单号
    支付方式typeStringalipayalipay:支付宝,tenpay:财付通,
    qqpay:QQ钱包,wxpay:微信支付
    商户IDpidInt1001发起支付的商户ID
    创建订单时间addtimeString2016-08-06 22:55:52
    完成交易时间endtimeString2016-08-06 22:55:52
    商品名称nameStringVIP会员
    商品金额moneyString1.00
    支付状态statusInt01为支付成功,0为未支付
    +
    +
    +

    + [API]批量查询订单 +

    +

    URL地址:api.php?act=orders&pid={商户ID}&key={商户密钥}

    +

    请求参数说明:

    + + + + + + + + + +
    字段名变量名必填类型示例值描述
    操作类型actStringorders此API固定值
    商户IDpidInt1001
    商户密钥keyString89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i
    查询订单数量limitInt20返回的订单数量,最大50
    页码pageInt1当前查询的页码
    +

    返回结果:

    + + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    返回信息msgString查询结算记录成功!
    订单列表dataArray订单列表
    +
    +
    +

    + [API]二维码下单接口 +

    +

    此接口可用于服务器后端发起支付请求,会返回支付二维码链接

    +

    URL地址:qrcode.php?pid={商户ID}&type={支付方式}&out_trade_no={商户订单号}&notify_url={服务器异步通知地址}&name={商品名称}&money={金额}&sign={签名字符串}&sign_type=MD5

    +

    请求参数说明:

    + + + + + + + + + + + + +
    字段名变量名必填类型示例值描述
    商户IDpidInt1001
    支付方式typeStringalipayqqpay:QQ钱包,wxpay:微信支付
    商户订单号out_trade_noString20160806151343349
    异步通知地址notify_urlStringhttp://www.cccyun.cc/notify_url.php服务器异步通知地址
    商品名称nameStringVIP会员
    商品金额moneyString1.00
    签名字符串signString202cb962ac59075b964b07152d234b70签名算法与支付宝签名算法相同
    签名类型sign_typeStringMD5默认为MD5
    +

    返回结果:

    + + + + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    返回信息msgString下单成功!
    订单号trade_noString20160806151343349
    商户订单号out_trade_noString20160806151343349
    二维码链接code_urlStringweixin://wxpay/bizpayurl?pr=04IPMKM
    +
    +
    +
    +

    + 发起支付请求 +

    +

    URL地址:submit.php

    +

    POST数据:pid={商户ID}&type={支付方式}&out_trade_no={商户订单号}&notify_url={服务器异步通知地址}&return_url={页面跳转通知地址}&name={商品名称}&money={金额}&sitename={网站名称}&sign={签名字符串}&sign_type=MD5

    +

    请求参数说明:

    + + + + + + + + + + + + + + +
    字段名变量名必填类型示例值描述
    商户IDpidInt1001
    支付方式typeStringalipayalipay:支付宝,tenpay:财付通,
    qqpay:QQ钱包,wxpay:微信支付
    商户订单号out_trade_noString20160806151343349
    异步通知地址notify_urlStringhttp://www.cccyun.cc/notify_url.php服务器异步通知地址
    跳转通知地址return_urlStringhttp://www.cccyun.cc/return_url.php页面跳转通知地址
    商品名称nameStringVIP会员
    商品金额moneyString1.00
    网站名称sitenameString彩虹云任务
    签名字符串signString202cb962ac59075b964b07152d234b70签名算法与支付宝签名算法相同
    签名类型sign_typeStringMD5默认为MD5
    +
    +
    +

    + 支付结果通知 +

    +

    通知类型:服务器异步通知(notify_url)、页面跳转通知(return_url)

    +

    请求方式:GET

    +

    请求参数说明:

    + + + + + + + + + + + + + +
    字段名变量名必填类型示例值描述
    商户IDpidInt1001
    易支付订单号trade_noString20160806151343349021订单号
    商户订单号out_trade_noString20160806151343349商户系统内部的订单号
    支付方式typeStringalipayalipay:支付宝,tenpay:财付通,
    qqpay:QQ钱包,wxpay:微信支付,
    alipaycode:支付宝扫码,jdpay:京东支付
    商品名称nameStringVIP会员
    商品金额moneyString1.00
    支付状态trade_statusStringTRADE_SUCCESS
    签名字符串signString202cb962ac59075b964b07152d234b70签名算法与支付宝签名算法相同
    签名类型sign_typeStringMD5默认为MD5
    +
    +
    +
    +

    + SDK下载 +

    +
    +SDK.zip
    +SDK版本:V1.1 +
    +
    + +
    +
    +
    +
    + +
    + + \ No newline at end of file diff --git a/template/default/foot.php b/template/default/foot.php new file mode 100644 index 0000000..ef58dee --- /dev/null +++ b/template/default/foot.php @@ -0,0 +1,40 @@ + + +
    +
    +
    +
    +
    + +
      +

      关于我们

      +
    • 旗下的免签约支付产品
    • +
    +
      +

      联系我们

      +
    • QQ:
    • +
    • Email:
    • +
    +
    + +
    +
    +

      ©2020 All Rights Reserved.  

    +
    + +
    +
    +
    +
    + + \ No newline at end of file diff --git a/template/default/head.php b/template/default/head.php new file mode 100644 index 0000000..39a40f6 --- /dev/null +++ b/template/default/head.php @@ -0,0 +1,73 @@ + + + + + +<?php echo $conf['title']?> + + + + + + + + + + + + + + + + + + +
    +
    + +
    +
    你当前的浏览器版本过低,请您升级至IE9以上版本,以达到最佳效果,谢谢!X
    +
    + +TOP
    + \ No newline at end of file diff --git a/template/default/index.php b/template/default/index.php new file mode 100644 index 0000000..b69a355 --- /dev/null +++ b/template/default/index.php @@ -0,0 +1,106 @@ + +
    +
    + +
    +
    +
    +
    +
    ®免签约支付产品
    +
    +
    +
    +
    +
    多种支付方式 +
    支持财付通 支付宝 微信 QQ钱包
    +
    +
    +
    +
    +
    +
    +
    对接费率超低 +
    每笔交易手续费低至2%,比其它平台更便宜
    +
    +
    +
    +
    +
    +
    +
    无需自主提现 +
    满一定金额即可自动提现到你的支付宝账号
    +
    +
    +
    + + +
    +
    +
    + + +
    +
    +
    +
    +
    平台合作伙伴
    +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    + + +
    +
    +
    + + \ No newline at end of file diff --git a/template/default/preview.png b/template/default/preview.png new file mode 100644 index 0000000..7a1041f Binary files /dev/null and b/template/default/preview.png differ diff --git a/template/index1/aboutUs.php b/template/index1/aboutUs.php new file mode 100644 index 0000000..4e27ecf --- /dev/null +++ b/template/index1/aboutUs.php @@ -0,0 +1,197 @@ + +
    +
    + +
    +
    +
    +
    +

    +
    成立于2016年10月,公司业务面向企业SAAS服务,
    主要核心产品是支付清结算云服务:云支付、云结算、云钱包、云电商、大数据;
    在此核心产品基础上为企业提供全面整套的互联网+解决方案,与企业开放、合作、共赢!
    我们为企业提供网上支付SAAS系统方案,企业只需要在平台注册商务服务账号,
    通过SAAS前台服务填写对应的参数,签订好相关的法律协议即可使用,
    无需企业再次开发相应支付系统,根据使用接口的情况收取服务费用,
    仅收取相应套餐费用和套餐内增值业务费用。 +

    +
    +
    +
    +

    + 发展历程 +

    +
    +
    +

    + 2016年 +

    +
    +
      +
    • +
      +
      +

      + 10月 +

      +
      +

      + 我们的公司成立了! +

      +
      +

      + 2016年10月,在中国注册成立。 +

      +
      +
      +
    • +
    • +
      +
      +

      + 11月15日 +

      +
      +

      + 开始制作我们的产品——! +

      +
      +

      + 2016年11月15日,团队组建完毕,一切准备就绪,终于要开始制作我们的产品了。 +

      +
      +
      +
    • +
    +
    +

    + 2017年 +

    +
    +
      +
    • +
      +
      +

      + 2月15日 +

      +
      +

      + 上线了! +

      +
      +

      + 2017年2月15日,经过三个月多月的努力和磨合,我们的产品要上线了! +

      +
      +
      +
    • +
    • +
      +
      +

      + 6月8日 +

      +
      +

      + 进行系统升级! +

      +
      +

      + 2017年6月8日,经过三个多月的运营,从中汲取经验后再由策划专业分析,我们的产品要升级了! +

      +
      +
      +
    • +
    • +
      +
      +

      + 12月7日 +

      +
      +

      + V2.0上线了! +

      +
      +

      + 2017年12月15日,经过两个月的努力技术开发和业务整改,我们的系统终于完成升级了! +

      +
      +
      +
    • +
    +
    +
    +
    +
    + +
    +

    + 联系我们 +

    +
    +
    +
    + ‍ +
    +

    + 公司地址 +

    +
    + 深圳市龙岗区布吉街道三联社区景芬路9号 +
    +

    + 邮编:230011 +

    +

    +

    +
    +
    +
    +
    +
    + ‍ +
    +

    + 联系方式 +

    +

    + QQ: +

    +

    + 邮箱: +

    +

    +

    +
    +
    +
    +
    +
    + ‍ +
    +

    + 关注我们 +

    +
    + +
    +
    +
    +
    +
    +
    +
    +

    + 加入我们 +

    +
    +

    + 如果你有兴趣成为我们的团队的一部分,请把你的简历和求职信至 + ,
    我们将很快与您联系。 +

    +
    +
    + \ No newline at end of file diff --git a/template/index1/agreement.php b/template/index1/agreement.php new file mode 100644 index 0000000..b79ac9a --- /dev/null +++ b/template/index1/agreement.php @@ -0,0 +1,20 @@ + +
    +
    +
    +

    服务条款

    +

    请使用本支付系统前,先认真阅读商户服务条款,系统有权力随时更新条款,请您严格遵守我们服务条款内的条约,注册商户后则默认代表您已同意我们的服务条款。

    +
    +
    +
    +
    +
    +

    特别提示:

    本协议由系统和你共同签订,具有合同法律效力。

    请你务必审慎阅读并充分理解各条款内容,特别是免除或者限制责任的条款、争议解决和法律适用条款。免除或者限制责任的条款可能以加粗字体显示,你应重点阅读。除非你已阅读并接受本协议所有条款,否则你无权使用本服务。你使用本服务即视为你已阅读并同意本协议的约束。如你对本协议有任何疑问的,应向客服咨询。

    一、定义

    如无特别说明,下列术语在本协议中的定义为:

    1.1商户号:指你凭以登录,操作商户平台的账号,你成功申请商户号后,系统将向你在本协议中载明的联系邮箱发送电子邮件,告知你的商户平台登录账号及初始密码,你可在商户平台中修改该初始密码,你亦可根据需要在商户平台中为该登录账号设置对应的商户密钥,用来查询和操作系统商户号。

    1.2商户密钥:指你凭以登录,操作商户平台的账号密码,你成功申请商户号后,系统将向你在本协议中载明的联系邮箱发送电子邮件,告知你的商户平台登录账号及初始密码,你可在商户平台中修改该初始密码,你亦可根据需要在商户平台中为该登录账号设置对应的商户密钥,用来查询和操作系统商户号。

    1.3结算:指用户购买你的商品或服务后,系统在一定周期内将交易资金记账至你的系统商户号,并根据协议约定和你设置提现至你银行账户的行为。

    1.4提现:系统根据你指令或协议约定,在一定周期内向备付金存款银行发出转账指令,要求备付金存款银行将相应资金转账至你指定的合法收款账户的行为。

    二、服务内容

    2.1本服务的场景和功能。系统为你提供货币资金转移服务,当用户购买你的商品或服务时,可通过本服务完成交易。本服务的具体运用包括WAP支付,H5支付等

    2.2服务限制。本服务仅能用于你在商户平台申报并经核准的商品或服务,且每笔订单不能超过系统规定的限额。你了解并同意系统有权根据你经营的商品或服务类型,以及你经营活动的风险状况调整你的交易额度。

    三、系统的权利和义务

    3.1支付系统建设。系统负责支付系统的建设、运行和管理,并确保该系统的安全性。

    3.2交易查询。系统设立网上交易查询系统及查询接口,为你提供商户信息管理和交易信息查询服务。

    3.3支付指令校验。系统依据你的商户平台登录账号、登录密码来校验你支付指令的真实性、有效性。当你的商户平台登录账号和登录密码均校验通过时,即视为系你本人操作系统商户号,系统无需校验其他信息即可执行支付指令。

    3.4交易纠纷处理。系统仅为你提供货币资金转移服务,你与用户或其他主体之间的纠纷由你自行负责处理,与系统无关,但是,因系统系统故障引起的资金转移服务纠纷除外。

    3.5商户经营审核。系统有权定期或不定期审核你的业务类型,以及通过本服务售卖的物品和服务,若你违反本协议第2.2条约定或从事不符合国家相关法律法规规定的经营活动时,系统有权暂停或终止提供服务。

    3.6交易停滞。你自开户之日起6个月内无交易记录,或连续180个自然日未利用本服务产生交易额的,系统有权暂停服务并要求你重新核实身份,你不予配合或身份核实未通过的,系统有权终止本协议且无需承担任何法律责任。如果你的受理终端或收款码连续3个月内未发生交易,系统有权暂停服务并要求你重新核实身份,你不予配合或身份核实未通过的,系统有权停止为你提供收款服务。如果你的受理终端或收款码连续12个月内未发生交易的,系统有权停止为你提供收款服务。

    3.7延迟结算。系统发现你可能存在洗钱、恐怖融资、欺诈交易、信用卡套现、恶意倒闭或其他违法违规行为,或系统发现你存在集中转入分散转出等可疑交易特征的交易或存在争议交易时,系统可以对你系统商户号中的相应资金进行延迟结算,已经结算的,系统可以延迟转账到你指定银行帐户和支付帐户。对于延迟结算、延迟转账的资金,直至排除违法违规嫌疑时,系统才恢复该部分资金的结算和转账。你的行为导致系统遭受损失的,你还应当承担赔偿责任。

    3.8身份验证和授权。你使用本服务,即表明你同意系统收集、记录和使用你使用本服务过程中产生的相关信息和数据,包括但不限于你及其法定代表人、负责人的身份信息、账户信息和交易信息等,并将前述信息提交国家机关、金融机构和其他企事业单位进行身份验证和鉴权。系统有权根据需要收集、保存、核实你法定代表人、负责人的音频和视频资料。为更好地提供服务,系统及关联公司有权在法律允许的范围内自行收集、记录、使用上述信息和数据。

    3.9系统有权对你的业务进行风险管理,持续监测和分析交易金额、笔数、类型、时间、频率和收款方、付款方等特征,完善可疑交易监测模型。如系统发现交易金额、时间、频率与特约商户经营范围、规模不相符等异常情形的,有权对你采取延迟资金结算、设置收款限额、暂停银行卡交易、暂停使用权限等措施。

    四、你的权利和义务

    4.1账号开立和身份验证。你在申请开立系统商户号时,应向系统如实提供相关的个人信息。你应保证所提交的上述资料的准确性、真实性、完整性。你上述信息发生变更,或你迁址、停业、变更域名或联系电话等资料信息,应提前通知系统,否则,系统有权视具体情况暂停服务,你未及时通知导致的一切投诉和纠纷,均由你承担。系统有权根据国家法律法规、规章制度、行业规范、政策要求的规定,要求你补充提交相关信息和资料,你逾期未提交或未通过系统核验的,系统有权解除本协议或暂停你系统商户号的全部或部分功能。

    4.2账号使用。你不得把系统商户号、系统提供的技术接口、安全协议及证书用于本协议范围以外的用途,也不得出租、转让给第三方使用。你不得将其他商户的交易假冒成自己的交易与系统结算。你应充分了解并清楚知晓出租、出借、出售、购买账号的相关法律责任和惩戒措施,承诺依法依规开立和使用你的账号。

    4.3禁止存储用户敏感信息。你不得存储用户银行账户密码、银行卡的磁道信息或芯片信息、银行卡验证码和有效期等敏感信息,不得泄露用户信用卡信息和借记卡信息等。

    4.4账号保管和挂失。你应妥善保管系统商户号及其密码,以及手机短信验证码、API Key等。系统商户号下的一切行为均视为你的行为。若你需对系统商户号挂失,应及时与客服人员联系并按照客服人员的指引进行操作,若客服人员要求你提供书面证明材料才能进行下一步挂失操作的,你应及时提交书面证明材料。若你发现系统商户号被盗用,应立即向系统发起挂失。因你管理不善导致系统商户号被盗用的,一切损失由你自行承担。

    4.5止付和撤销。由于系统系统的实时性和不可更改性,你向系统发起的任何支付指令,在系统执行后,均为不可撤销或更改的。支付指令一旦被系统执行,你不得要求止付、更改或撤销。

    4.6规范使用。未经系统书面授权,你不得转载、复制、截取、篡改系统的商标、标识、Logo等内容或制作与该内容有关的衍生产品。未经系统另行书面授权,除了在商户中心登记的域名外,你不得在任何网页或APP页面展示与系统有关的链接、弹窗或与H5支付有关的内容及其衍生产品。

    4.7商户系统安全与维护。你应负责自身的硬件平台搭建并承担相关的设备费用及通讯费用。你应严格按照本服务和商户平台的接入技术规范来建设和运行自己的计算机系统并确保自身系统的安全性。你应在系统交易过程中验证系统请求和响应数据包中的签名真实性,并保障支付信息数据传输过程中的安全性、保密性。你应向系统明确各方数据传输协议、安全机制、硬件需求以及物理连接等诸多技术细节的具体需求,并妥善处理系统反馈的各种交易异常情况。

    4.8真实交易背景。你承诺发起的本服务交易基于真实的交易,不得利用本服务从事虚假交易。

    4.9保存订单信息。你应保证订单信息的合法性、真实性、准确性和完整性。你在受理用户订单时,须记录包括但不限于以下信息:用户姓名、手机号码,订购产品的产品名称、产品编号、产品单价、合计索取价格、配送信息。你应按系统的要求向系统提供详细的、真实可信的交易字段,包括但不限于订单号、商品名称、商品描述等。你还应妥善保留有关交易数据和凭证,包括但不限于订单和用户接受货物时签字的有关单据,由交易发生之日起或本协议终止之日起,至少保留三年。在协议有效期内和协议终止之日起三年内,对系统提出的查询通知及调单要求,你应在接到系统通知后,以信件或传真的方式在两个工作日内将相关单据交付给系统。

    4.10第三方网络交易平台。若你经营第三方网络交易平台,不得利用本服务从事非法支付结算业务,并应配备相应的系统、人员和完善的制度。你应当识别二级商户的身份信息和经营资质,并收集、保存二级商户的营业执照、税务登记证、组织机构代码证、法定代表人身份证明等,若二级商户从事国家规定专营、专控或需要取得国家前置行政许可的经营活动,还应提供该相关资质证照。你应保证二级商户所提交的上述资料的准确性、真实性、完整性。同时,你还应收集、保存并向系统传输二级商户的交易订单信息,包括但不限于:用户姓名、手机号码,订购产品的产品名称、产品编号、产品单价、合计索取价格、配送信息。你还应妥善保留二级商户的交易数据和凭证,包括但不限于订单和用户接受货物时签字的有关单据,由交易发生之日起或本协议终止之日起,至少保留五年。在协议有效期和协议终止之日起五年内,对系统提出的查询通知及调单要求,你应在接到系统通知后,以信件或传真的方式在两个工作日内将相关单据回复给系统。对系统提出的风险交易,你应按系统要求对其二级商户交易进行有效识别、追溯及在必要时实施暂停业务管理的措施,同时承担因二级商户发展和管理不善造成的全部风险损失,你应保证二级商户不再发展下一级商户。

    第三方网络交易平台,指在网络商品交易活动中为交易双方或者多方提供网页空间、虚拟经营场所、交易规则、交易撮合、信息发布等服务,供交易双方或者多方独立开展交易活动的信息网络系统。

    二级商户,指在你经营的第三方网络交易平台中销售商品或服务的自然人或企事业单位。

    4.11第三方网络交易平台的风险防范。若你经营第三方网络交易平台,则你需对二级商户的交易行为的真实性、合法性进行监控和管理,你应防止二级商户利用系统从事信用卡套现、洗钱、虚假交易等违法违规活动。若出现二级商户利用系统从事信用卡套现、洗钱、虚假交易等违法违规活动的,则系统有权解除本协议,并追究你的违约责任。

    4.12反套现、反洗钱。你不得主动或协助持卡人进行信用卡套现、洗钱、交易分单等违法经营行为,不得出现虚假申请、恶意倒闭等严重风险行为,否则,系统有权暂停或终止提供本协议服务,并将你的信息报送至中国人民银行和公安部及相关监管机构。

    4.13实物和虚拟。你需利用本服务同时经营实物类和虚拟类的商品或服务时,应当针对实物类和虚拟类的商品或服务分别申请系统商户号,不得用同一系统商户号同时经营实物类和虚拟类的商品或服务。否则,系统有权解除本协议,并追究你的违约责任。

    实物类,指需要物流配送的实物商品或需要记录和核实消费者身份信息的商品或服务;虚拟类,指非实物且不记录购买者身份信息,也无需物流配送的商品或服务。

    4.14安全守则。你不得对系统的计算机系统和程序采取反向工程手段进行破解,不得对前述系统和程序(包括但不限于源程序、目标程序、软件文档、运行在本地电脑内存中的数据、客户端至服务器端的数据、服务器数据等)进行复制、修改、编译、整合和篡改,不得修改或增加系统提供的任何服务的软件系统的原有功能。

    4.15你应切实维护消费者合法权益,不得对采用不同支付方式的消费者采取歧视性措施。

    4.16你应当遵守的其他义务:

    (1)不得将签购单、签购结算单、业务受理标识牌、终端机具用于系统核准范围以外的用途,也不得给协议许可范围以外的第三方使用;

    (2)不得将系统接口委托或转让给第三方;

    (3)不得招聘无本人身份证原件的人员作为收银员,不得让未经培训合格的收银员操作受理终端;

    (4)金饰店、珠宝店、名牌钟表店、金银币专卖店等风险较高的你必须加装录像监控设施,对支付过程进行清晰记录,录像资料保留时间不少于3个月;

    (5)对单笔交易金额超过(含)5万元人民币的系统交易核对用户身份证原件;

    (6)根据协议约定规范受理系统,在协议有效期内不得拒绝受理系统;

    (7)不得代其他商户发起交易,不得转卖、租借受理终端(网络支付接口)和银行结算账户;

    (8)不得要求其他商户代理发起交易,不得使用转卖、租借的受理终端(网络支付接口)和银行结算账户;

    (9)妥善保管交易数据信息,确保只有授权人员接触,建立健全的内部结算管理制度;

    (10)不得向使用消费者征收任何附加费或额外费用,或提供低于现金支付水平的服务;

    4.17保障消费者合法权益。你应切实维护用户合法权益,确保使用各种支付方式的用户均享受一致性公平待遇,不得向使用特定支付方式的用户转嫁或变相转嫁系统收取的服务费用,不得无理拒绝用户使用已经开通的支付方式。

    五、服务费用和交易结算

    5.1系统手续费(含税)

    5.1.1你使用本服务,应向系统缴纳系统手续费(以下简称”支付手续费”)。

    5.1.2系统将从你的每笔交易款中扣除一定费率的支付手续费,支付手续费的费率以商户平台核准记录的为准;在合作过程中,你可能因满足相关优惠条件而在一定期限内享受系统给予的优惠费率,当你不再满足优惠条件或优惠期限届满时,系统有权将费率恢复为原有费率,具体以商户平台核准记录的为准。

    5.1.3若遇国家政策调整,或中国人民银行、合作机构的政策调整,系统有权据此调整支付手续费率并对你进行通知,你在收到系统通知后五个工作日内对调整后的支付手续费率未提出书面异议的,按调整后的费率执行。双方无法就费率变更达成一致意见的,可终止本协议。

    5.2误差

    各方确认并同意,涉及费率结算如因小数点后两位进位而产生微小误差,各方均予以认可。

    5.3交易结算

    5.3.1系统在扣除支付手续费后,将剩余交易款记账至你的系统商户号。

    5.3.2你的提现账户为你申请本服务时提交的同名银行账户或其他存在合法资金管理关系的单位银行账户,若因你或银行的原因导致交易款项无法按时提现至你提交的银行账户的,系统不承担任何责任。

    5.3.3若你需变更提现账户或需授权结算,应与系统另行签订补充协议或在商户平台自助修改。因你变更账户或指定收款人但未及时通知系统导致增加的额外成本或任何损失,由你承担。

    5.3.4对于发生在T日的交易,若你没有进行特殊设置或操作,系统将按照商户平台核准记录的期限将扣除支付手续费后的交易款项提现至你银行账户,款项到账时间取决于银行系统的清算周期(若你是金融机构或是从事金融业务的其他机构,系统有权根据系统商户平台公告的时间,定期对你的系统商户号余额进行清零,并将对应资金提现至你的银行账户。你应在商户号被清零后及时充值,以免影响手续费、退款等资金结算)。

    5.3.5你可根据商户平台和系统客服的指引申请变更提现规则,最终以商户平台核准记录的为准。

    5.3.6若你接入本服务不满90日或者接入本服务后连续正常交易不满30日,系统不提供T+0资金提现服务,系统将该类你T日的交易资金记账至系统商户号的,你不得在T日划转该交易资金。无论你何时接入本服务,系统均有权根据你的经营状况、业务变化及实际赔付情况调整提现周期,并以电子邮件通知的方式通知你。

    5.3.7你与系统对账数据不一致的,以系统数据为准。

    5.3.8若你要求系统开具发票,应在首次开票前按照系统要求及时提交准确、完整的发票信息,系统每月就系统手续费向你开具上月增值税服务费发票。若你要求开具增值税专用发票,应向系统提交相关资质材料。

    六、保证金

    6.1系统有权要求你缴纳风险保证金,保证金额度以商户平台核准记录的为准。在本协议有效期内,风险保证金款项冻结于你保证金账户中,你不得提前解冻、提取或使用。

    6.2系统有权根据你的经营状况、业务变化及实际赔付情况调整你应当缴纳的保证金额度,并以电子邮件通知的方式通知你补足保证金金额,如你未能在收到通知后的五个工作日内补足保证金,则系统有权暂停为你提供服务。如你在收到上述通知后的三十天内未补足保证金,系统可单方解除本合同而无需承担任何法律责任。

    6.3若你在使用公众账号和本服务过程中没有违约行为,且你主动注销本服务满一年仍未受到任何第三方投诉或发生交易纠纷的,应解冻保证金账户的风险保证金,你可自主提取保证金本金,在此之前,你无权动用保证金本金,保证金解冻后无息归还你。

    6.4若你违反国家法律、法规、政策、法令或你违反对用户的承诺或违反与系统的约定致用户或系统受损时,系统有权直接使用你缴纳的保证金对用户或系统进行赔付,保证金不足以赔偿的,系统可以直接从你的待结算款项中扣划,仍不足以赔偿的,可以继续向你追偿。

    七、退款条款

    对于你的交易中出现的退款情形,按如下规则处理:

    7.1当你向系统提出退款请求时,你在自己的系统商户号中应有足够资金用于退款,系统有权直接从你的系统商户号中扣除退款金额完成退款,如因你资金不足导致无法退款的,其后果由你自行承担。系统按照你的退款请求处理退款时,如因银行原因或用户原因导致退款失败的,系统可将退款金额退至你的系统商户号,你可再次发起退款请求或自行处理退款。

    7.2退款时,系统不再另行收取交易手续费,但若银行方面需要向系统另行收取相关费用的,则此费用应由你自行承担,系统可在为你垫付该费用后在你的交易款中扣除。

    7.3你负责解决和承担用户拒付交易款项而导致的退款纠纷或责任。

    八、保密条款

    8.1除本协议另有约定外,未经一方书面同意,任何一方不得将本协议内容、用户个人信息、用户支付信息以及接口技术、安全协议及证书等透露给第三方。

    8.2各方对在履行协议中获得的商业机密和技术秘密负保密责任。出现下列任一情况时,系统有权披露你的相关商业信息:

    (1)人民银行或银保监会、证监会等金融业监管机构要求系统提供你的相关商业信息的;

    (2)公安机关、人民法院、人民检察院或有权行政机关要求系统提供你的相关商业信息的;

    (3)用户投诉,要求系统提供你的相关商业信息,经系统查实后认为可以提供的。

    本协议所称商业信息包括但不限于你与用户之间的交易单号、交易凭证、资金流水等交易信息。

    8.3各方保证其雇员及代理人履行本条的保密义务。

    8.4上述保密义务在本协议终止后五年内有效。

    九、违约责任

    9.1各方中的任何一方违反本协议中所做约定的义务,均构成违约。

    9.2你有下列情形之一的,系统有权单方面解除本协议并要求你承担相关赔偿责任:

    (1)直接或间接参与欺诈,或出租、出借、出售、购买银行账户(含银行卡)或支付账户,或在网上买卖POS机(包括MPOS)、刷卡器等受理终端,或涉嫌实施其他违法犯罪活动的;

    (2)经营及财务状况恶化无法正常经营,或被全国企业信用信息公示系统列入“严重违法失信企业名单”,或单位注册地址不存在或者虚构经营场所的;

    (3)你或其法定代表人、负责人被中国支付清算协会、银行卡清算机构、其他国家机关、企事业单位列入黑名单,或存在被国家机关、行业协会的处罚记录的;

    (4)实施违规操作,或违反本协议、《系统服务条款》、《微信公众平台服务协议》等约定,且经指出拒不改正或在合理期间内虽有改正但无法达到系统整改要求和目标的;

    (5)无理拒绝或故意拖延系统交易查询、调单查询或监查要求的;

    (6)进入破产程序、解散、营业执照被吊销;

    (7)实施有损系统或腾讯利益行为的;

    (8)违反本协议或利用系统提供的服务从事非法业务的;

    (9)你的软硬件系统存在安全问题,经系统通知后拒不整改的;

    (10)出现风险事件或经系统判断交易异常的;

    (11)违反系统的相关规则和制度的。

    十、账号注销

    10.1发生下列情形之一的,系统有权注销你的系统商户号,法律另有规定或本协议另有约定的除外:

    (1)你主动申请注销系统商户号的;

    (2)本协议解除或终止的;

    (3)你利用本服务从事非法活动的;

    (4)你违反本协议或违反与系统签订的其他协议的。

    10.2无论你的系统商户号是否被注销,系统均有权依据法律规定或国家机关的合法要求,冻结、扣划你系统商户号中的资金。

    十一、免责条款

    11.1因受不可抗力影响而不能履行或不能完全履行本协议的一方可以免除责任。不可抗力是指本协议各方不能预见、不能避免、不能克服的客观情况。此外,鉴于网络之特殊属性,发生包括但不限于下列任何情形导致系统不能履行本协议下义务的,各方可以免责:

    (1)黑客攻击、计算机病毒侵入或发作;

    (2)计算机系统遭到破坏、瘫痪或无法正常使用而导致信息或纪录的丢失、系统不能提供本协议项下之服务的;

    (3)电信部门技术调整导致之重大影响的;

    (4)因政府管制而造成服务终止的;

    (5)其它非各方原因造成的。

    11.2遇上述不可抗力事件的任何一方,应将该事件立即书面通知其他方。各方按照事件对协议履行的影响程度,再行决定是否继续履行本协议。

    十二、风险提示及特别约定

    12.1各方对于“中国国内电子商务环境尚未成熟,电子商务立法以及信用体制还不完善”的现状以及开展电子商务业务存在的风险性均完全知悉,各方均承诺采取合理的风险防范措施,以尽量避免或减小风险。

    12.2本服务交易过程中,你应积极防范银行卡持卡人拒付风险,及时解决交易中出现的问题:

    (1)若在交易中如出现包括但不限于交易不真实、欺诈、伪冒交易、持卡人账户信息泄漏或你违反国家法律规定或你违反对用户的承诺以及你违反与系统的约定之情形,你应自行承担上述情形造成的全部损失;

    (2)若在交易中如出现持卡人否认交易、持卡人拒付、集中转入分散转出等可疑情形的,你应依据本协议第4.8和4.9条之要求向系统提供相应的交易凭证,若你怠于提供凭证,或你提供的凭证不符合相关行业内标准,或在系统书面通知(含电子邮件通知)后你未及时停止可疑交易、控制相应资金的等,你应自行承担上述情形造成的全部损失。

    你因上述情形给系统造成损失的,系统有权直接从你的保证金中扣回与损失金额同等的金额,你需及时补足保证金。保证金不足以赔偿的,系统可以直接从你的待结算款项中扣划,仍不足以赔偿的,可以继续向你追偿。

    12.3你在进行支付交易的过程中,应严格遵守中国人民银行网上银行业务和信用卡交易相关的政策法规,不得进行虚假交易、非法套现、洗钱等行为。你不得直接或变相从事互联网赌博、色情平台,互联网销售彩票平台,非法外汇、贵金属投资交易平台,非法证券期货类交易平台,代币发行融资及虚拟货币交易平台,也不得未经监管部门批准通过互联网开展资产管理业务以及未取得省级政府批文的大宗商品交易场所等非法交易,否则系统有权终止为其提供支付结算服务。

    12.4如你申请开通大额支付功能,应确认并同意遵守如下条款:“你保证将系统所提供的大额支付功能用于实名制业务,否则,你应承担因违反上述承诺而造成的一切风险和法律责任,你应对受损方作出无条件的先行赔付。

    实名制业务,指用户使用系统提供的在线支付服务购买商品或服务时,该用户提交了所购买商品或服务的最终接收方(或服务的最终受益方)的姓名、身份证号码等真实身份信息的业务

    十三、知识产权

    13.1系统在本合作中提供的内容(包括但不限于商标、标识、网页、文字、图片等)的知识产权归系统所有。

    13.2除另有特别声明外,系统在本合作中提供的软件系统、技术接口、安全证书等所依托的著作权、专利权及其他知识产权均归系统所有。

    13.3上述知识产权均受到法律保护,未经系统或相关权利人许可,不得以任何形式进行使用或创造相关衍生作品。

    13.4系统对带有系统字样、标识、logo、图片等信息的物料、宣传资料和扫码设备享有知识产权,你不得在经营场所实施或协助、放任他人实施替换、遮盖、涂抹、藏匿、毁坏带有系统字样、标识、logo、图片等信息的物料、宣传资料和扫码设备的行为,否则,你应按照系统的要求恢复原状、赔偿损失。

    十四、协议变更

    系统有权根据需要不时地制定、修改本协议,如本协议有任何变更,财付将对变更事项在商户平台进行公告。如你不同意相关变更,必须立即以书面的方式通知系统终止为你提供服务。任何修订或新协议将按照法律法规及监管规定在微信公众平台上公布生效。你登录或继续使用服务即表示你接受经修订的协议。

    十五、适用法律及争议解决

    15.1本协议之解释、适用、争议解决等一切事宜,均适用中华人民共和国大陆地区法律。

    15.2因本协议产生任何纠纷时,各方应友好协商,协商不成的,各方应将争议提交系统所在地有管辖权的人民法院诉讼解决。

    十六、协议有效期、自动续期和提前终止协议

    16.1本协议的有效时间以商户平台确认的时间为准,默认为长期有效;除本协议5.1.2、5.1.3条约定之情形外,若系统在协议有效期内提出费率变更请求,并以微信消息、电子邮件或商户平台信息等形式通知你,自信息发出之日起30日内,你继续使用本服务的,系统有权自30日届满之日起按照变更后的费率向你收取手续费,并从你的待结算款中扣除。

    16.2各方有权基于各自的营运需要提前终止本协议,且无需承担任何法律责任。需提前终止本协议的,主动提出方应提前一个月以书面或电子邮件形式通知各方。

    16.3协议解除或终止后,涉及到保证金、退款和保密的条款依然有效,各方应继续遵照执行。

    16.4本协议一式貳份,双方各执壹份,具有同等法律效力。

    +
    +
    +
    +
    + \ No newline at end of file diff --git a/template/index1/assets/css/main.css b/template/index1/assets/css/main.css new file mode 100644 index 0000000..400278f --- /dev/null +++ b/template/index1/assets/css/main.css @@ -0,0 +1,4512 @@ +/* Reset */ + + html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font-size: 100%; + vertical-align: baseline; + font-family:"Microsoft YaHei","Lato","Helvetica Neue",Helvetica,Arial,sans-serif; + font-weight: 400; + } + + article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { + display: block; + } + body,html{ + height: 100%; + } + body { + line-height: 1; + } + + ol, ul,li{ + list-style: none; + } + + blockquote, q { + quotes: none; + } + + blockquote:before, blockquote:after, q:before, q:after { + content: ''; + content: none; + } + + table { + border-collapse: collapse; + border-spacing: 0; + } + + body { + -webkit-text-size-adjust: none; + } + +/* Box Model */ + + *, *:before, *:after { + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + } + +/* Containers */ + + .container { + margin-left: auto; + margin-right: auto; + } + + .container.\31 25\25 { + width: 100%; + max-width: 1200px; + min-width: 960px; + } + + .container.\37 5\25 { + width: 720px; + } + + .container.\35 0\25 { + width: 480px; + } + + .container.\32 5\25 { + width: 240px; + } + + .container { + width: 1200px; + } + + @media screen and (max-width: 1800px) { + + .container.\31 25\25 { + width: 100%; + max-width: 1200px; + min-width: 960px; + } + + .container.\37 5\25 { + width: 720px; + } + + .container.\35 0\25 { + width: 480px; + } + + .container.\32 5\25 { + width: 240px; + } + + .container { + width: 1200px; + } + + } + + @media screen and (max-width: 1280px) { + + .container.\31 25\25 { + width: 100%; + max-width: 1200px; + min-width: 960px; + } + + .container.\37 5\25 { + width: 720px; + } + + .container.\35 0\25 { + width: 480px; + } + + .container.\32 5\25 { + width: 240px; + } + + .container { + width: 960px; + } + + } + + @media screen and (max-width: 980px) { + + .container.\31 25\25 { + width: 100%; + max-width: 1200px; + min-width: 960px; + } + + .container.\37 5\25 { + width: 720px; + } + + .container.\35 0\25 { + width: 480px; + } + + .container.\32 5\25 { + width: 240px; + } + + .container { + width: 800px; + } + + } + @media screen and (max-width: 840px) { + + .container.\31 25\25 { + width: 100%; + max-width: 112.5%; + min-width: 90%; + } + + .container.\37 5\25 { + width: 67.5%; + } + + .container.\35 0\25 { + width: 45%; + } + + .container.\32 5\25 { + width: 22.5%; + } + + .container { + width: 90% !important; + } + + } + + @media screen and (max-width: 736px) { + + .container.\31 25\25 { + width: 100%; + max-width: 1200px; + min-width: 960px; + } + + .container.\37 5\25 { + width: 720px; + } + + .container.\35 0\25 { + width: 480px; + } + + .container.\32 5\25 { + width: 240px; + } + + .container { + width: 90%; + } + + } + + @media screen and (max-width: 480px) { + + .container.\31 25\25 { + width: 100%; + max-width: 1200px; + min-width: 960px; + } + + .container.\37 5\25 { + width: 720px; + } + + .container.\35 0\25 { + width: 480px; + } + + .container.\32 5\25 { + width: 240px; + } + + .container { + width: 90%; + } + + } + +/* Grid */ + + .row { + border-bottom: solid 1px transparent; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + } + + .row > * { + float: left; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + } + + .row:after, .row:before { + content: ''; + display: block; + clear: both; + height: 0; + } + + .row.uniform > * > :first-child { + margin-top: 0; + } + + .row.uniform > * > :last-child { + margin-bottom: 0; + } + + .row.\30 \25 > * { + padding: 0 0 0 0px; + } + + .row.\30 \25 { + margin: 0 0 -1px 0px; + } + + .row.uniform.\30 \25 > * { + padding: 0px 0 0 0px; + } + + .row.uniform.\30 \25 { + margin: 0px 0 -1px 0px; + } + + .row > * { + padding: 0 0 0 40px; + } + + .row { + margin: 0 0 -1px -40px; + } + + .row.uniform > * { + padding: 40px 0 0 40px; + } + + .row.uniform { + margin: -40px 0 -1px -40px; + } + + .row.\32 00\25 > * { + padding: 0 0 0 80px; + } + + .row.\32 00\25 { + margin: 0 0 -1px -80px; + } + + .row.uniform.\32 00\25 > * { + padding: 80px 0 0 80px; + } + + .row.uniform.\32 00\25 { + margin: -80px 0 -1px -80px; + } + + .row.\31 50\25 > * { + padding: 0 0 0 60px; + } + + .row.\31 50\25 { + margin: 0 0 -1px -60px; + } + + .row.uniform.\31 50\25 > * { + padding: 60px 0 0 60px; + } + + .row.uniform.\31 50\25 { + margin: -60px 0 -1px -60px; + } + + .row.\35 0\25 > * { + padding: 0 0 0 20px; + } + + .row.\35 0\25 { + margin: 0 0 -1px -20px; + } + + .row.uniform.\35 0\25 > * { + padding: 20px 0 0 20px; + } + + .row.uniform.\35 0\25 { + margin: -20px 0 -1px -20px; + } + + .row.\32 5\25 > * { + padding: 0 0 0 10px; + } + + .row.\32 5\25 { + margin: 0 0 -1px -10px; + } + + .row.uniform.\32 5\25 > * { + padding: 10px 0 0 10px; + } + + .row.uniform.\32 5\25 { + margin: -10px 0 -1px -10px; + } + + .\31 2u, .\31 2u\24 { + width: 100%; + clear: none; + margin-left: 0; + } + + .\31 1u, .\31 1u\24 { + width: 91.6666666667%; + clear: none; + margin-left: 0; + } + + .\31 0u, .\31 0u\24 { + width: 83.3333333333%; + clear: none; + margin-left: 0; + } + + .\39 u, .\39 u\24 { + width: 75%; + clear: none; + margin-left: 0; + } + + .\38 u, .\38 u\24 { + width: 66.6666666667%; + clear: none; + margin-left: 0; + } + + .\37 u, .\37 u\24 { + width: 58.3333333333%; + clear: none; + margin-left: 0; + } + + .\36 u, .\36 u\24 { + width: 50%; + clear: none; + margin-left: 0; + } + + .\35 u, .\35 u\24 { + width: 41.6666666667%; + clear: none; + margin-left: 0; + } + + .\34 u, .\34 u\24 { + width: 33.3333333333%; + clear: none; + margin-left: 0; + } + + .\33 u, .\33 u\24 { + width: 25%; + clear: none; + margin-left: 0; + } + + .\32 u, .\32 u\24 { + width: 16.6666666667%; + clear: none; + margin-left: 0; + } + + .\31 u, .\31 u\24 { + width: 8.3333333333%; + clear: none; + margin-left: 0; + } + + .\31 2u\24 + *, + .\31 1u\24 + *, + .\31 0u\24 + *, + .\39 u\24 + *, + .\38 u\24 + *, + .\37 u\24 + *, + .\36 u\24 + *, + .\35 u\24 + *, + .\34 u\24 + *, + .\33 u\24 + *, + .\32 u\24 + *, + .\31 u\24 + * { + clear: left; + } + + .\-11u { + margin-left: 91.66667%; + } + + .\-10u { + margin-left: 83.33333%; + } + + .\-9u { + margin-left: 75%; + } + + .\-8u { + margin-left: 66.66667%; + } + + .\-7u { + margin-left: 58.33333%; + } + + .\-6u { + margin-left: 50%; + } + + .\-5u { + margin-left: 41.66667%; + } + + .\-4u { + margin-left: 33.33333%; + } + + .\-3u { + margin-left: 25%; + } + + .\-2u { + margin-left: 16.66667%; + } + + .\-1u { + margin-left: 8.33333%; + } + + @media screen and (min-width: 737px) { + + .row > * { + padding: 50px 0 0 50px; + } + + .row { + margin: -50px 0 -1px -50px; + } + + .row.uniform > * { + padding: 50px 0 0 50px; + } + + .row.uniform { + margin: -50px 0 -1px -50px; + } + + .row.\32 00\25 > * { + padding: 100px 0 0 100px; + } + + .row.\32 00\25 { + margin: -100px 0 -1px -100px; + } + + .row.uniform.\32 00\25 > * { + padding: 100px 0 0 100px; + } + + .row.uniform.\32 00\25 { + margin: -100px 0 -1px -100px; + } + + .row.\31 50\25 > * { + padding: 75px 0 0 75px; + } + + .row.\31 50\25 { + margin: -75px 0 -1px -75px; + } + + .row.uniform.\31 50\25 > * { + padding: 75px 0 0 75px; + } + + .row.uniform.\31 50\25 { + margin: -75px 0 -1px -75px; + } + + .row.\35 0\25 > * { + padding: 25px 0 0 25px; + } + + .row.\35 0\25 { + margin: -25px 0 -1px -25px; + } + + .row.uniform.\35 0\25 > * { + padding: 25px 0 0 25px; + } + + .row.uniform.\35 0\25 { + margin: -25px 0 -1px -25px; + } + + .row.\32 5\25 > * { + padding: 12.5px 0 0 12.5px; + } + + .row.\32 5\25 { + margin: -12.5px 0 -1px -12.5px; + } + + .row.uniform.\32 5\25 > * { + padding: 12.5px 0 0 12.5px; + } + + .row.uniform.\32 5\25 { + margin: -12.5px 0 -1px -12.5px; + } + + .\31 2u\28desktop\29, .\31 2u\24\28desktop\29 { + width: 100%; + clear: none; + margin-left: 0; + } + + .\31 1u\28desktop\29, .\31 1u\24\28desktop\29 { + width: 91.6666666667%; + clear: none; + margin-left: 0; + } + + .\31 0u\28desktop\29, .\31 0u\24\28desktop\29 { + width: 83.3333333333%; + clear: none; + margin-left: 0; + } + + .\39 u\28desktop\29, .\39 u\24\28desktop\29 { + width: 75%; + clear: none; + margin-left: 0; + } + + .\38 u\28desktop\29, .\38 u\24\28desktop\29 { + width: 66.6666666667%; + clear: none; + margin-left: 0; + } + + .\37 u\28desktop\29, .\37 u\24\28desktop\29 { + width: 58.3333333333%; + clear: none; + margin-left: 0; + } + + .\36 u\28desktop\29, .\36 u\24\28desktop\29 { + width: 50%; + clear: none; + margin-left: 0; + } + + .\35 u\28desktop\29, .\35 u\24\28desktop\29 { + width: 41.6666666667%; + clear: none; + margin-left: 0; + } + + .\34 u\28desktop\29, .\34 u\24\28desktop\29 { + width: 33.3333333333%; + clear: none; + margin-left: 0; + } + + .\33 u\28desktop\29, .\33 u\24\28desktop\29 { + width: 25%; + clear: none; + margin-left: 0; + } + + .\32 u\28desktop\29, .\32 u\24\28desktop\29 { + width: 16.6666666667%; + clear: none; + margin-left: 0; + } + + .\31 u\28desktop\29, .\31 u\24\28desktop\29 { + width: 8.3333333333%; + clear: none; + margin-left: 0; + } + + .\31 2u\24\28desktop\29 + *, + .\31 1u\24\28desktop\29 + *, + .\31 0u\24\28desktop\29 + *, + .\39 u\24\28desktop\29 + *, + .\38 u\24\28desktop\29 + *, + .\37 u\24\28desktop\29 + *, + .\36 u\24\28desktop\29 + *, + .\35 u\24\28desktop\29 + *, + .\34 u\24\28desktop\29 + *, + .\33 u\24\28desktop\29 + *, + .\32 u\24\28desktop\29 + *, + .\31 u\24\28desktop\29 + * { + clear: left; + } + + .\-11u\28desktop\29 { + margin-left: 91.66667%; + } + + .\-10u\28desktop\29 { + margin-left: 83.33333%; + } + + .\-9u\28desktop\29 { + margin-left: 75%; + } + + .\-8u\28desktop\29 { + margin-left: 66.66667%; + } + + .\-7u\28desktop\29 { + margin-left: 58.33333%; + } + + .\-6u\28desktop\29 { + margin-left: 50%; + } + + .\-5u\28desktop\29 { + margin-left: 41.66667%; + } + + .\-4u\28desktop\29 { + margin-left: 33.33333%; + } + + .\-3u\28desktop\29 { + margin-left: 25%; + } + + .\-2u\28desktop\29 { + margin-left: 16.66667%; + } + + .\-1u\28desktop\29 { + margin-left: 8.33333%; + } + + } + + @media screen and (min-width: 737px) and (max-width: 1200px) { + + .row > * { + padding: 25px 0 0 25px; + } + + .row { + margin: -25px 0 -1px -25px; + } + + .row.uniform > * { + padding: 25px 0 0 25px; + } + + .row.uniform { + margin: -25px 0 -1px -25px; + } + + .row.\32 00\25 > * { + padding: 50px 0 0 50px; + } + + .row.\32 00\25 { + margin: -50px 0 -1px -50px; + } + + .row.uniform.\32 00\25 > * { + padding: 50px 0 0 50px; + } + + .row.uniform.\32 00\25 { + margin: -50px 0 -1px -50px; + } + + .row.\31 50\25 > * { + padding: 37.5px 0 0 37.5px; + } + + .row.\31 50\25 { + margin: -37.5px 0 -1px -37.5px; + } + + .row.uniform.\31 50\25 > * { + padding: 37.5px 0 0 37.5px; + } + + .row.uniform.\31 50\25 { + margin: -37.5px 0 -1px -37.5px; + } + + .row.\35 0\25 > * { + padding: 12.5px 0 0 12.5px; + } + + .row.\35 0\25 { + margin: -12.5px 0 -1px -12.5px; + } + + .row.uniform.\35 0\25 > * { + padding: 12.5px 0 0 12.5px; + } + + .row.uniform.\35 0\25 { + margin: -12.5px 0 -1px -12.5px; + } + + .row.\32 5\25 > * { + padding: 6.25px 0 0 6.25px; + } + + .row.\32 5\25 { + margin: -6.25px 0 -1px -6.25px; + } + + .row.uniform.\32 5\25 > * { + padding: 6.25px 0 0 6.25px; + } + + .row.uniform.\32 5\25 { + margin: -6.25px 0 -1px -6.25px; + } + + .\31 2u\28tablet\29, .\31 2u\24\28tablet\29 { + width: 100%; + clear: none; + margin-left: 0; + } + + .\31 1u\28tablet\29, .\31 1u\24\28tablet\29 { + width: 91.6666666667%; + clear: none; + margin-left: 0; + } + + .\31 0u\28tablet\29, .\31 0u\24\28tablet\29 { + width: 83.3333333333%; + clear: none; + margin-left: 0; + } + + .\39 u\28tablet\29, .\39 u\24\28tablet\29 { + width: 75%; + clear: none; + margin-left: 0; + } + + .\38 u\28tablet\29, .\38 u\24\28tablet\29 { + width: 66.6666666667%; + clear: none; + margin-left: 0; + } + + .\37 u\28tablet\29, .\37 u\24\28tablet\29 { + width: 58.3333333333%; + clear: none; + margin-left: 0; + } + + .\36 u\28tablet\29, .\36 u\24\28tablet\29 { + width: 50%; + clear: none; + margin-left: 0; + } + + .\35 u\28tablet\29, .\35 u\24\28tablet\29 { + width: 41.6666666667%; + clear: none; + margin-left: 0; + } + + .\34 u\28tablet\29, .\34 u\24\28tablet\29 { + width: 33.3333333333%; + clear: none; + margin-left: 0; + } + + .\33 u\28tablet\29, .\33 u\24\28tablet\29 { + width: 25%; + clear: none; + margin-left: 0; + } + + .\32 u\28tablet\29, .\32 u\24\28tablet\29 { + width: 16.6666666667%; + clear: none; + margin-left: 0; + } + + .\31 u\28tablet\29, .\31 u\24\28tablet\29 { + width: 8.3333333333%; + clear: none; + margin-left: 0; + } + + .\31 2u\24\28tablet\29 + *, + .\31 1u\24\28tablet\29 + *, + .\31 0u\24\28tablet\29 + *, + .\39 u\24\28tablet\29 + *, + .\38 u\24\28tablet\29 + *, + .\37 u\24\28tablet\29 + *, + .\36 u\24\28tablet\29 + *, + .\35 u\24\28tablet\29 + *, + .\34 u\24\28tablet\29 + *, + .\33 u\24\28tablet\29 + *, + .\32 u\24\28tablet\29 + *, + .\31 u\24\28tablet\29 + * { + clear: left; + } + + .\-11u\28tablet\29 { + margin-left: 91.66667%; + } + + .\-10u\28tablet\29 { + margin-left: 83.33333%; + } + + .\-9u\28tablet\29 { + margin-left: 75%; + } + + .\-8u\28tablet\29 { + margin-left: 66.66667%; + } + + .\-7u\28tablet\29 { + margin-left: 58.33333%; + } + + .\-6u\28tablet\29 { + margin-left: 50%; + } + + .\-5u\28tablet\29 { + margin-left: 41.66667%; + } + + .\-4u\28tablet\29 { + margin-left: 33.33333%; + } + + .\-3u\28tablet\29 { + margin-left: 25%; + } + + .\-2u\28tablet\29 { + margin-left: 16.66667%; + } + + .\-1u\28tablet\29 { + margin-left: 8.33333%; + } + + } + + @media screen and (max-width: 736px) { + + .row > * { + padding: 20px 0 0 20px; + } + + .row { + margin: -20px 0 -1px -20px; + } + + .row.uniform > * { + padding: 20px 0 0 20px; + } + + .row.uniform { + margin: -20px 0 -1px -20px; + } + + .row.\32 00\25 > * { + padding: 40px 0 0 40px; + } + + .row.\32 00\25 { + margin: -40px 0 -1px -40px; + } + + .row.uniform.\32 00\25 > * { + padding: 40px 0 0 40px; + } + + .row.uniform.\32 00\25 { + margin: -40px 0 -1px -40px; + } + + .row.\31 50\25 > * { + padding: 30px 0 0 30px; + } + + .row.\31 50\25 { + margin: -30px 0 -1px -30px; + } + + .row.uniform.\31 50\25 > * { + padding: 30px 0 0 30px; + } + + .row.uniform.\31 50\25 { + margin: -30px 0 -1px -30px; + } + + .row.\35 0\25 > * { + padding: 10px 0 0 10px; + } + + .row.\35 0\25 { + margin: -10px 0 -1px -10px; + } + + .row.uniform.\35 0\25 > * { + padding: 10px 0 0 10px; + } + + .row.uniform.\35 0\25 { + margin: -10px 0 -1px -10px; + } + + .row.\32 5\25 > * { + padding: 5px 0 0 5px; + } + + .row.\32 5\25 { + margin: -5px 0 -1px -5px; + } + + .row.uniform.\32 5\25 > * { + padding: 5px 0 0 5px; + } + + .row.uniform.\32 5\25 { + margin: -5px 0 -1px -5px; + } + + .\31 2u\28mobile\29, .\31 2u\24\28mobile\29 { + width: 100%; + clear: none; + margin-left: 0; + } + + .\31 1u\28mobile\29, .\31 1u\24\28mobile\29 { + width: 91.6666666667%; + clear: none; + margin-left: 0; + } + + .\31 0u\28mobile\29, .\31 0u\24\28mobile\29 { + width: 83.3333333333%; + clear: none; + margin-left: 0; + } + + .\39 u\28mobile\29, .\39 u\24\28mobile\29 { + width: 75%; + clear: none; + margin-left: 0; + } + + .\38 u\28mobile\29, .\38 u\24\28mobile\29 { + width: 66.6666666667%; + clear: none; + margin-left: 0; + } + + .\37 u\28mobile\29, .\37 u\24\28mobile\29 { + width: 58.3333333333%; + clear: none; + margin-left: 0; + } + + .\36 u\28mobile\29, .\36 u\24\28mobile\29 { + width: 50%; + clear: none; + margin-left: 0; + } + + .\35 u\28mobile\29, .\35 u\24\28mobile\29 { + width: 41.6666666667%; + clear: none; + margin-left: 0; + } + + .\34 u\28mobile\29, .\34 u\24\28mobile\29 { + width: 33.3333333333%; + clear: none; + margin-left: 0; + } + + .\33 u\28mobile\29, .\33 u\24\28mobile\29 { + width: 25%; + clear: none; + margin-left: 0; + } + + .\32 u\28mobile\29, .\32 u\24\28mobile\29 { + width: 16.6666666667%; + clear: none; + margin-left: 0; + } + + .\31 u\28mobile\29, .\31 u\24\28mobile\29 { + width: 8.3333333333%; + clear: none; + margin-left: 0; + } + + .\31 2u\24\28mobile\29 + *, + .\31 1u\24\28mobile\29 + *, + .\31 0u\24\28mobile\29 + *, + .\39 u\24\28mobile\29 + *, + .\38 u\24\28mobile\29 + *, + .\37 u\24\28mobile\29 + *, + .\36 u\24\28mobile\29 + *, + .\35 u\24\28mobile\29 + *, + .\34 u\24\28mobile\29 + *, + .\33 u\24\28mobile\29 + *, + .\32 u\24\28mobile\29 + *, + .\31 u\24\28mobile\29 + * { + clear: left; + } + + .\-11u\28mobile\29 { + margin-left: 91.66667%; + } + + .\-10u\28mobile\29 { + margin-left: 83.33333%; + } + + .\-9u\28mobile\29 { + margin-left: 75%; + } + + .\-8u\28mobile\29 { + margin-left: 66.66667%; + } + + .\-7u\28mobile\29 { + margin-left: 58.33333%; + } + + .\-6u\28mobile\29 { + margin-left: 50%; + } + + .\-5u\28mobile\29 { + margin-left: 41.66667%; + } + + .\-4u\28mobile\29 { + margin-left: 33.33333%; + } + + .\-3u\28mobile\29 { + margin-left: 25%; + } + + .\-2u\28mobile\29 { + margin-left: 16.66667%; + } + + .\-1u\28mobile\29 { + margin-left: 8.33333%; + } + + } + + +/* Basic */ + + body { + background: #fff; + } + + body.is-loading *, body.is-loading *:before, body.is-loading *:after { + -moz-animation: none !important; + -webkit-animation: none !important; + -ms-animation: none !important; + animation: none !important; + -moz-transition: none !important; + -webkit-transition: none !important; + -ms-transition: none !important; + transition: none !important; + } + + body, input, select, textarea { + color: #777; + font-size: 14pt; + font-weight: 400; + line-height: 1.75em; + } + + a { + -moz-transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out; + -webkit-transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out; + -ms-transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out; + transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out; + color: #2695ef; + text-decoration: none; + } + + a:hover { + border-bottom-color: transparent; + color: #2695ef !important; + text-decoration: none; + } + + strong, b { + color: #787878; + font-weight: 400; + } + + em, i { + font-style: italic; + } + + p { + margin: 0 0 1em 0; + font-size: 0.8em; + } + + h1, h2, h3, h4, h5, h6 { + color: #333; + font-weight: 400; + line-height: 1em; + margin: 0 0 1em 0; + } + + h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { + color: inherit; + text-decoration: none; + } + + h1 { + font-size: 2em; + line-height: 1.5em; + } + + h2 { + font-size: 1.5em; + line-height: 1.5em; + } + + h3 { + font-size: 1.25em; + line-height: 1.5em; + } + + h4 { + font-size: 1.1em; + line-height: 1.5em; + } + + h5 { + font-size: 0.9em; + line-height: 1.5em; + } + + h6 { + font-size: 0.7em; + line-height: 1.5em; + } + + sub { + font-size: 0.8em; + position: relative; + top: 0.5em; + } + + sup { + font-size: 0.8em; + position: relative; + top: -0.5em; + } + + hr { + border: 0; + border-bottom: solid 2px #e0e0e0; + margin: 2em 0; + } + + hr.major { + margin: 3em 0; + } + + blockquote { + border-left: solid 6px #e0e0e0; + font-style: italic; + margin: 0 0 2em 0; + padding: 0.5em 0 0.5em 1.5em; + } + + code { + background: #f7f7f7; + border-radius: 0.35em; + border: solid 2px #e0e0e0; + font-family: "Courier New", monospace; + font-size: 0.9em; + margin: 0 0.25em; + padding: 0.25em 0.65em; + } + + pre { + -webkit-overflow-scrolling: touch; + font-family: "Courier New", monospace; + font-size: 0.9em; + margin: 0 0 2em 0; + } + + pre code { + display: block; + line-height: 1.75em; + padding: 1em 1.5em; + overflow-x: auto; + } + + .align-left { + text-align: left; + } + + .align-center { + text-align: center; + } + + .align-right { + text-align: right; + } + + .float_left{ + float: left; + } + .float_right{ + float: right; + } + .clearfix:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden + } + + .clearfix { + *+height: 1%; + } + .orange{ + color: #e95513; + } + .yellow{ + color: #eba823; + } + .blue{ + color: #0767aa; + } + .green{ + color: #8cbc21; + } + +/* Section/Article */ + + section, article { + margin-bottom: 2.5em; + } + + section > :last-child, section:last-child, article > :last-child, article:last-child { + margin-bottom: 0; + } + + header.major { + position: relative; + text-align: center; + border-top: solid 1px #ccc; + top: 1em; + margin: 0 0 3em 0; + } + + header.major h2 { + background: #fff; + position: relative; + top: -0.75em; + display: inline; + margin: 0; + padding: 0 1em 0 1em; + } + header.white h2 { + color: #FFFFFF; + margin-bottom: 1.5em; + text-align: center; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.5); + } + header.black{ + margin-bottom: 2em; + text-align: center; + } +/* Box */ + + .box { + background: rgba(255,255,255,.8); + padding: 2em 0 2em 0; + } + .box_item { + text-align: center; + padding: 0 2em 0 2em; + } + .box_item .content p{ + line-height: 1.6em; + height: 4.8em; + overflow: hidden; + } + @media screen and (min-width: 736px) and (max-width: 980px) { + .box_item { + padding: 0 1em 0 1em; + } + } + +/* Form */ + + form { + margin: 0 0 1.5em 0; + } + + form > .field { + margin: 0 0 1.5em 0; + position: relative; + } + + form > .field > :last-child { + margin-bottom: 0; + } + + label { + color: #313f47; + display: block; + font-size: 0.9em; + margin: 0 0 0.75em 0; + } + + input[type="text"], + input[type="password"], + input[type="email"], + input[type="tel"], + select, + textarea { + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; + border-radius: 4px; + border: solid 1px #c8cccf; + color: inherit; + display: block; + outline: 0; + padding: 0 1em; + text-decoration: none; + width: 100%; + font-size: 0.9em; + } + + input[type="text"]:invalid, + input[type="password"]:invalid, + input[type="email"]:invalid, + input[type="tel"]:invalid, + select:invalid, + textarea:invalid { + box-shadow: none; + } + + input[type="text"]:focus, + input[type="password"]:focus, + input[type="email"]:focus, + input[type="tel"]:focus, + select:focus, + textarea:focus { + border-color: #B2B2B2; + outline: 0; + } + + input[type="text"].orange_line, + input[type="password"].orange_line, + input[type="email"].orange_line, + input[type="tel"].orange_line, + textarea.orange_line{ + border-color: #e95513; + } + + .select-wrapper { + text-decoration: none; + display: block; + position: relative; + } + + .select-wrapper:before { + content: ""; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + text-transform: none !important; + } + + .select-wrapper:before { + color: #c8cccf; + display: block; + height: 2.75em; + line-height: 2.75em; + pointer-events: none; + position: absolute; + right: 0; + text-align: center; + top: 0; + width: 2.75em; + } + + .select-wrapper select::-ms-expand { + display: none; + } + + input[type="text"], + input[type="password"], + input[type="email"], + select { + height: 2.75em; + } + + textarea { + padding: 0.75em 1em; + } + + input[type="checkbox"], + input[type="radio"] { + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; + display: block; + float: left; + margin-right: -2em; + opacity: 0; + width: 1em; + z-index: -1; + } + + input[type="checkbox"] + label, + input[type="radio"] + label { + text-decoration: none; + color: #414f57; + cursor: pointer; + display: inline-block; + font-size: 1em; + font-weight: 300; + padding-left: 2.4em; + padding-right: 0.75em; + position: relative; + } + + input[type="checkbox"] + label:before, + input[type="radio"] + label:before { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + text-transform: none !important; + } + + input[type="checkbox"] + label:before, + input[type="radio"] + label:before { + border-radius: 4px; + border: solid 1px #c8cccf; + content: ''; + display: inline-block; + height: 1.65em; + left: 0; + line-height: 1.58125em; + position: absolute; + text-align: center; + top: 0.15em; + width: 1.65em; + } + + input[type="checkbox"]:checked + label:before, + input[type="radio"]:checked + label:before { + color: #2695ef; + content: '\f00c'; + } + + input[type="checkbox"]:focus + label:before, + input[type="radio"]:focus + label:before { + border-color: #2695ef; + } + + input[type="checkbox"] + label:before { + border-radius: 4px; + } + + input[type="radio"] + label:before { + border-radius: 100%; + } + + ::-webkit-input-placeholder { + color: #616f77 !important; + opacity: 1.0; + } + + :-moz-placeholder { + color: #616f77 !important; + opacity: 1.0; + } + + ::-moz-placeholder { + color: #616f77 !important; + opacity: 1.0; + } + + :-ms-input-placeholder { + color: #616f77 !important; + opacity: 1.0; + } + + .formerize-placeholder { + color: #616f77 !important; + opacity: 1.0; + } + input.short_input{ + width: 60%; + } + form > .field .button.message{ + padding: 0; + width: 38%; + line-height: 2.75em; + height: 2.75em; + font-size: 0.9em; + position: absolute; + right: 0; + top: 0; + } + + .api_form{ + padding-top: 2em; + } + form > .field.small_field .row{ + padding-top: -20px; + } + form > .field.small_field .row > *{ + padding-top: 20px; + } + form > .field.small_field label{ + font-size: 0.8em; + } + form > .field.small_field input[type="text"], + form > .field.small_field input[type="password"], + form > .field.small_field input[type="email"], + form > .field.small_field input[type="tel"], + form > .field.small_field select, + form > .field.small_field textarea{ + font-size: 0.8em; + } + form > .field.small_field .select-wrapper:before{ + height: 2.25em; + line-height: 2.25em; + } + @media screen and (max-width: 736px) { + form > .field.small_field .row > *{ + padding-top: 5px; + } + } + +/* Icon */ + + .icon { + position: relative; + text-decoration: none; + } + + .icon:before { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + text-transform: none !important; + } + + .icon > .label { + display: none; + } + + .icon.featured { + position: relative; + display: inline-block; + background-color: #f778a5; + width: 7em; + padding: 1.75em 0 0.75em 0; + border-top-left-radius: 5px; + border-top-right-radius: 5px; + margin: 0 0 3.5em 0; + cursor: default; + } + + .icon.featured:before { + font-size: 3.5em; + line-height: 1em; + color: #fff; + } + + .icon.featured:after { + content: ''; + position: absolute; + bottom: -1.99em; + left: 0; + border-top: solid 2em #f778a5; + border-left: solid 3.5em transparent; + border-right: solid 3.5em transparent; + } + + .icon.featured.alt { + background-color: #7ac0fb; + } + + .icon.featured.alt:after { + border-top-color: #7ac0fb; + } + + .icon.featured.alt2 { + background-color: #fccb65; + } + + .icon.featured.alt2:after { + border-top-color: #fccb65; + } + .icon.round_icon{ + position: relative; + display: inline-block; + background-color: #0767aa; + width: 6em; + height: 6em; + line-height: 6em; + border-radius: 100%; + margin: 0 0 1em 0; + cursor: default; + } + .icon.round_icon:before { + font-size: 2.5em; + color: #FFFFFF; + } + .icon.round_icon.bg_red{ + background-color: #f778a5; + } + .icon.round_icon.bg_yellow{ + background-color: #fccb65; + } + .icon.round_icon.bg_blue{ + background-color: #7ac0fb; + } + .icon.round_icon.round_border{ + background-color: #FFFFFF; + border: 1px solid #0767aa; + } + .icon.round_icon.round_border:before { + color: #0767aa; + } + +/* Image */ + + .image { + border: 0; + display: inline-block; + position: relative; + overflow: hidden; + } + + .image img { + display: block; + width: 100%; + } + + .image.left, .image.right { + max-width: 40%; + } + + .image.left img, .image.right img { + width: 100%; + } + + .image.left { + float: left; + margin: 0 1.5em 1em 0; + top: 0.25em; + } + + .image.right { + float: right; + margin: 0 0 1em 1.5em; + top: 0.25em; + } + + .image.fit { + display: block; + margin: 0 0 2em 0; + width: 100%; + } + + .image.fit img { + width: 100%; + } + .image.featured { + display: block; + width: 100%; + margin: 0 0 1em 0; + text-align: center; + } + .image.featured img{ + display: inline-block; + width: 211px; + height: 211px; + } + @media screen and (min-width: 736px) and (max-width: 980px) { + .image.featured img{ + width: 140px; + height: 140px; + } + } + +/* List */ + +ol { + list-style: decimal; + margin: 0 0 2em 0; + padding-left: 1.25em; + } + + ol li { + padding-left: 0.25em; + } + + ul { + list-style: disc; + margin: 0; + padding: 0; + } + + ul li { + margin: 0; + padding: 0; + } + + ul.alt { + list-style: none; + padding-left: 0; + } + + ul.alt li { + border-top-style: solid; + border-top-width: 1px; + padding: 0.5em 0; + } + + ul.alt li:first-child { + border-top: 0; + padding-top: 0; + } + + ul.icons { + cursor: default; + list-style: none; + padding-left: 0; + } + + ul.icons li { + display: inline-block; + padding: 0 1.5em 0 0; + } + + ul.icons li:last-child { + padding-right: 0 !important; + } + + ul.icons li .icon:before { + font-size: 1.75rem; + } + + ul.icons.major li { + padding: 0 2.5em 0 0; + } + + ul.icons.major li .icon:before { + font-size: 2.75rem; + } + + @media screen and (max-width: 736px) { + + ul.icons.major li { + padding: 0 1.25em 0 0; + } + + ul.icons.major li .icon:before { + font-size: 1.75rem; + } + + } + + ul.icons.labeled li { + margin: 1em 0; + padding: 0 2em 0 0; + } + + ul.icons.labeled li .icon:before { + vertical-align: middle; + font-size: 2.25rem; + margin-right: 0.5em; + } + + ul.icons.labeled li .icon .label { + display: inline-block; + vertical-align: middle; + color: #999999; + } + + @media screen and (max-width: 736px) and (orientation: portrait) { + + ul.icons.labeled { + text-align: left; + margin-right: auto; + margin-left: auto; + display: inline-block; + white-space: nowrap; + } + + ul.icons.labeled li { + display: block; + padding: 0; + margin: 1.5em 0 0 0; + } + + ul.icons.labeled li .icon:before { + width: 1.5em; + display: block; + float: left; + margin-right: 0; + } + + ul.icons.labeled li .icon:after { + content: ''; + display: block; + clear: both; + } + + ul.icons.labeled li:first-child { + margin-top: 0; + } + + } + + ul.actions { + cursor: default; + list-style: none; + padding-left: 0; + } + + ul.actions li { + display: inline-block; + padding: 0 1em 0 0; + vertical-align: middle; + } + + ul.actions li:last-child { + padding-right: 0; + } + + ul.actions.small li { + padding: 0 0.5em 0 0; + } + + ul.actions.vertical li { + display: block; + padding: 1em 0 0 0; + } + + ul.actions.vertical li:first-child { + padding-top: 0; + } + + ul.actions.vertical li > * { + margin-bottom: 0; + } + + ul.actions.vertical.small li { + padding: 0.5em 0 0 0; + } + + ul.actions.vertical.small li:first-child { + padding-top: 0; + } + + ul.actions.fit { + display: table; + margin-left: -1em; + padding: 0; + table-layout: fixed; + width: calc(100% + 1em); + } + + ul.actions.fit li { + display: table-cell; + padding: 0 0 0 1em; + } + + ul.actions.fit li > * { + margin-bottom: 0; + } + + ul.actions.fit.small { + margin-left: -0.5em; + width: calc(100% + 0.5em); + } + + ul.actions.fit.small li { + padding: 0 0 0 0.5em; + } + + @media screen and (max-width: 480px) and (orientation: portrait) { + + ul.actions { + margin: 0 0 2em 0; + } + + ul.actions li { + padding: 1em 0 0 0; + display: block; + text-align: center; + width: 100%; + } + + ul.actions li:first-child { + padding-top: 0; + } + + ul.actions li > * { + width: 100%; + margin: 0 !important; + } + + ul.actions li > *.icon:before { + margin-left: -2em; + } + + ul.actions.small li { + padding: 0.5em 0 0 0; + } + + ul.actions.small li:first-child { + padding-top: 0; + } + + } + + ul.alt > li { + border-top-color: #e6e6e6; + } + +/* Spotlight */ + + .spotlight { + margin: 0 0 2em 0; + } + + .spotlight .image { + width: 45%; + float: left; + } + + .spotlight .image img { + display: block; + width: 100%; + } + + .spotlight .content { + width: 55%; + float: right; + text-align: center; + padding-top: 8em; + } + + .spotlight:nth-child(2n) .image { + float: right; + } + + .spotlight:nth-child(2n) .content { + float: left; + } + @media screen and (max-width: 1280px){ + .spotlight .content { + padding-top: 7em; + } + } + @media screen and (max-width: 980px){ + .spotlight .content { + padding-top: 5em; + } + } + @media screen and (max-width: 840px){ + .spotlight .content { + padding-top: 3.5em; + } + } + + @media screen and (max-width: 736px) and (orientation: landscape) { + + .spotlight .image,.spotlight .content { + float: none; + width: 100%; + } + + .spotlight:nth-child(2n) .image,.spotlight:nth-child(2n) .content { + float: none; + } + .spotlight .content{ + padding-top: 1em; + } + .spotlight .image img { + width: 60%; + margin: 0 auto; + } + } + + @media screen and (max-width: 736px) and (orientation: portrait) { + + .spotlight .image,.spotlight .content { + float: none; + width: 100%; + } + + .spotlight:nth-child(2n) .image,.spotlight:nth-child(2n) .content { + float: none; + } + .spotlight .content{ + padding-top: 1em; + } + .spotlight .image img { + width: 60%; + margin: 0 auto; + } + } + @media screen and (max-width: 480px){ + .spotlight .image img { + width: 80%; + } + } + +/* Table */ + + .table-wrapper { + -webkit-overflow-scrolling: touch; + overflow-x: auto; + } + + table { + margin: 0 0 2em 0; + width: 100%; + } + + table tbody tr { + border: solid 1px #e0e0e0; + border-left: 0; + border-right: 0; + } + + table tbody tr:nth-child(2n + 1) { + background-color: #f7f7f7; + } + + table td { + padding: 0.75em 0.75em; + font-size: 0.7em; + line-height: 1.8em; + } + + table th { + color: #787878; + font-size: 0.8em; + font-weight: 400; + padding: 0 0.75em 0.75em 0.75em; + text-align: left; + } + + table thead { + border-bottom: solid 2px #e0e0e0; + } + + table tfoot { + border-top: solid 2px #e0e0e0; + } + + table.alt { + border-collapse: separate; + } + + table.alt tbody tr td { + border: solid 2px #e0e0e0; + border-left-width: 0; + border-top-width: 0; + } + + table.alt tbody tr td:first-child { + border-left-width: 2px; + } + + table.alt tbody tr:first-child td { + border-top-width: 2px; + } + + table.alt thead { + border-bottom: 0; + } + + table.alt tfoot { + border-top: 0; + } + +/* Button */ + + input[type="submit"], + input[type="reset"], + input[type="button"], + .button { + -moz-appearance: none; + -webkit-appearance: none; + -ms-appearance: none; + appearance: none; + -moz-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + -webkit-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + -ms-transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; + background-color: #666; + border-radius: 6px; + border: 0; + color: #ffffff; + cursor: pointer; + display: inline-block; + font-weight: 400; + height: 2.7em; + line-height: 2.7em; + padding: 0 2em; + text-align: center; + text-decoration: none; + white-space: nowrap; + } + + input[type="submit"]:hover, + input[type="reset"]:hover, + input[type="button"]:hover, + .button:hover { + background-color: #737373; + } + + input[type="submit"]:active, + input[type="reset"]:active, + input[type="button"]:active, + .button:active { + background-color: #595959; + } + + input[type="submit"].icon, + input[type="reset"].icon, + input[type="button"].icon, + .button.icon { + padding-left: 1.35em; + } + + input[type="submit"].icon:before, + input[type="reset"].icon:before, + input[type="button"].icon:before, + .button.icon:before { + margin-right: 0.5em; + } + + input[type="submit"].fit, + input[type="reset"].fit, + input[type="button"].fit, + .button.fit { + display: block; + margin: 0 0 1em 0; + width: 100%; + } + + input[type="submit"].small, + input[type="reset"].small, + input[type="button"].small, + .button.small { + font-size: 0.8em; + height: 2.5em; + line-height: 2.5em; + } + + input[type="submit"].big, + input[type="reset"].big, + input[type="button"].big, + .button.big { + font-size: 1.25em; + height: 3em; + line-height: 3em; + } + + input[type="submit"].alt, + input[type="reset"].alt, + input[type="button"].alt, + .button.alt { + background-color: transparent; + border: 1px solid #FFFFFF; + color: #FFFFFF; + } + + input[type="submit"].alt:hover, + input[type="reset"].alt:hover, + input[type="button"].alt:hover, + .button.alt:hover { + background-color: rgba(255,255,255,0.1); + color: #FFFFFF !important; + } + + input[type="submit"].alt:active, + input[type="reset"].alt:active, + input[type="button"].alt:active, + .button.alt:active { + background-color: rgba(255,255,255,0.1); + } + + input[type="submit"].alt.icon:before, + input[type="reset"].alt.icon:before, + input[type="button"].alt.icon:before, + .button.alt.icon:before { + color: #999; + } + + input[type="submit"].special, + input[type="reset"].special, + input[type="button"].special, + button.special, + .button.special { + box-shadow: none; + background-color: #0767aa; + color: #ffffff !important; + } + + input[type="submit"].special:hover, + input[type="reset"].special:hover, + input[type="button"].special:hover, + button.special:hover, + .button.special:hover { + filter:alpha(opacity=80); + -moz-opacity:0.8; + opacity:0.8; + } + + input[type="submit"].special:active, + input[type="reset"].special:active, + input[type="button"].special:active, + button.special:active, + .button.special:active { + background-color: #3089e2; + } + input[type="submit"].green, + input[type="reset"].green, + input[type="button"].green, + button.green, + .button.green { + box-shadow: none; + background-color: #8cbc21; + color: #ffffff !important; + } + + input[type="submit"].green:hover, + input[type="reset"].green:hover, + input[type="button"].green:hover, + button.green:hover, + .button.green:hover { + filter:alpha(opacity=80); + -moz-opacity:0.8; + opacity:0.8; + } + + + input[type="submit"].disabled, input[type="submit"]:disabled, + input[type="reset"].disabled, + input[type="reset"]:disabled, + input[type="button"].disabled, + input[type="button"]:disabled, + .button.disabled, + .button:disabled { + background-color: #777 !important; + box-shadow: inset 0 -0.15em 0 0 rgba(0, 0, 0, 0.15); + color: #f5f5f5 !important; + cursor: default; + opacity: 0.25; + } + +/* 图片预览Poptrox */ + + @-moz-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } + } + + @-webkit-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } + } + + @-ms-keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } + } + + @keyframes spin { + 0% { + -moz-transform: rotate(0deg); + -webkit-transform: rotate(0deg); + -ms-transform: rotate(0deg); + transform: rotate(0deg); + } + + 100% { + -moz-transform: rotate(360deg); + -webkit-transform: rotate(360deg); + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } + } + + .poptrox-popup { + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + -ms-box-sizing: content-box; + box-sizing: content-box; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + background: #fff; + border-radius: 0.35em; + box-shadow: 0 0.1em 0.15em 0 rgba(0, 0, 0, 0.15); + overflow: hidden; + padding-bottom: 3em; + } + + .poptrox-popup .loader { + text-decoration: none; + -moz-animation: spin 1s linear infinite; + -webkit-animation: spin 1s linear infinite; + -ms-animation: spin 1s linear infinite; + animation: spin 1s linear infinite; + font-size: 1.5em; + height: 1em; + left: 50%; + line-height: 1em; + margin: -0.5em 0 0 -0.5em; + position: absolute; + top: 50%; + width: 1em; + } + + .poptrox-popup .loader:before { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + text-transform: none !important; + } + + .poptrox-popup .loader:before { + content: '\f1ce'; + } + + .poptrox-popup .caption { + background: #fff; + bottom: 0; + cursor: default; + font-size: 0.9em; + height: 3em; + left: 0; + line-height: 2.8em; + position: absolute; + text-align: center; + width: 100%; + z-index: 1; + } + + .poptrox-popup .nav-next, + .poptrox-popup .nav-previous { + text-decoration: none; + -moz-transition: opacity 0.2s ease-in-out; + -webkit-transition: opacity 0.2s ease-in-out; + -ms-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + background: rgba(0, 0, 0, 0.01); + cursor: pointer; + height: 100%; + opacity: 0; + position: absolute; + top: 0; + width: 50%; + } + + .poptrox-popup .nav-next:before, + .poptrox-popup .nav-previous:before { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + text-transform: none !important; + } + + .poptrox-popup .nav-next:before, + .poptrox-popup .nav-previous:before { + color: #fff; + font-size: 2.5em; + height: 1em; + line-height: 1em; + margin-top: -0.75em; + position: absolute; + text-align: center; + top: 50%; + width: 1.5em; + } + + .poptrox-popup .nav-next { + right: 0; + } + + .poptrox-popup .nav-next:before { + content: '\f105'; + right: 0; + } + + .poptrox-popup .nav-previous { + left: 0; + } + + .poptrox-popup .nav-previous:before { + content: '\f104'; + left: 0; + } + + .poptrox-popup .closer { + text-decoration: none; + -moz-transition: opacity 0.2s ease-in-out; + -webkit-transition: opacity 0.2s ease-in-out; + -ms-transition: opacity 0.2s ease-in-out; + transition: opacity 0.2s ease-in-out; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + color: #fff; + height: 4em; + line-height: 4em; + opacity: 0; + position: absolute; + right: 0; + text-align: center; + top: 0; + width: 4em; + z-index: 2; + } + + .poptrox-popup .closer:before { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + text-transform: none !important; + } + + .poptrox-popup .closer:before { + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; + -ms-box-sizing: content-box; + box-sizing: content-box; + border-radius: 100%; + border: solid 3px rgba(255, 255, 255, 0.5); + content: '\f00d'; + display: block; + font-size: 1em; + height: 1.75em; + left: 50%; + line-height: 1.75em; + margin: -0.875em 0 0 -0.875em; + position: absolute; + top: 50%; + width: 1.75em; + } + + .poptrox-popup:hover .nav-next, + .poptrox-popup:hover .nav-previous { + opacity: 0.5; + } + + .poptrox-popup:hover .nav-next:hover, + .poptrox-popup:hover .nav-previous:hover { + opacity: 1.0; + } + + .poptrox-popup:hover .closer { + opacity: 0.5; + } + + .poptrox-popup:hover .closer:hover { + opacity: 1.0; + } +/* Work Item */ + + .work-item { + margin: 0 0 2em 0; + } + + .work-item .image { + margin: 0 0 1.5em 0; + } + + .work-item h3 { + font-size: 1em; + margin: 0 0 0.5em 0; + } + + .work-item p { + font-size: 0.8em; + line-height: 1.5em; + margin: 0; + } + +/* Touch */ + + body.is-touch .image.thumb:before { + opacity: 0.5 !important; + } + + body.is-touch .image.thumb:after { + display: none !important; + } + + body.is-touch #header { + background-attachment: scroll; + background-size: auto, cover; + } + + body.is-touch .poptrox-popup .nav-next, + body.is-touch .poptrox-popup .nav-previous, + body.is-touch .poptrox-popup .closer { + opacity: 1.0 !important; + } + +/* ===================Header ===================*/ + + #page-wrapper { + padding-top: 3.25em; + height: 100%; + } + + body.landing #page-wrapper { + padding-top: 0; + } + + @-moz-keyframes reveal-header { + 0% { + top: -5em; + } + + 100% { + top: 0; + } + } + + @-webkit-keyframes reveal-header { + 0% { + top: -5em; + } + + 100% { + top: 0; + } + } + + @-ms-keyframes reveal-header { + 0% { + top: -5em; + } + + 100% { + top: 0; + } + } + + @keyframes reveal-header { + 0% { + top: -5em; + } + + 100% { + top: 0; + } + } + + #header { + background-color:#FFFFFF; + color: #333; + cursor: default; + height: 3.25em; + left: 0; + line-height: 3.25em; + position: fixed; + top: 0; + width: 100%; + z-index: 10000; + box-shadow: 0 0 2px rgba(0, 0, 0, 0.5); + } + + #header h1 { + color: inherit; + height: inherit; + left: 1.25em; + line-height: inherit; + margin: 0; + padding: 0; + position: absolute; + top: 0; + } + #header h1 img{ + display: block; + } + #header nav { + height: inherit; + line-height: inherit; + position: absolute; + top: 0; + vertical-align: middle; + } + #header nav#nav { + left: 13em; + } + #header nav#navRight { + right: 1.5em; + } + #header nav#navRight li a:not(.button) { + margin-right: 1em; + } + + #header nav > ul { + list-style: none; + margin: 0; + padding-left: 0; + } + + #header nav > ul > li { + display: inline-block; + } + + #header nav > ul > li > ul { + display: none; + } + + #header nav > ul > li a { + display: inline-block; + height: 2.3em; + line-height: 2.3em; + font-size: 0.9em; + border-radius: 6px; + } + #header nav > ul > li a:not(.button) { + color: #333; + display: inline-block; + text-decoration: none; + border: 0; + padding: 0 1.2em; + } + + #header nav > ul > li a:not(.button).icon:before { + color: #333; + position: absolute; + right: 0; + top: 0; + } + + #header nav > ul > li:first-child { + margin-left: 0; + } + + #header nav > ul > li .button { + margin: 0 0 0 0.5em; + position: relative; + } + + #header input[type="submit"], + #header input[type="reset"], + #header input[type="button"], + #header .button.register_btn,#header .button.login_btn { + background-color: #0767aa; + box-shadow: 0; + color: #fff; + padding: 0 1.5em; + } + #header .button.register_btn{ + background-color: #8cbc21; + } + + #header input[type="submit"]:hover, + #header input[type="reset"]:hover, + #header input[type="button"]:hover, + #header .button:hover { + filter:alpha(opacity=80); + -moz-opacity:0.8; + opacity:0.8; + color: #FFFFFF !important; + } + + #header input[type="submit"]:active, + #header input[type="reset"]:active, + #header input[type="button"]:active, + #header .button:active { + filter:alpha(opacity=50); + -moz-opacity:0.5; + opacity:0.5; + } + + #header.reveal { + -moz-animation: reveal-header 0.5s; + -webkit-animation: reveal-header 0.5s; + -ms-animation: reveal-header 0.5s; + animation: reveal-header 0.5s; + } + #header.alt { + -moz-animation: none; + -webkit-animation: none; + -ms-animation: none; + animation: none; + position: absolute; + background-color: rgba(255,255,255,.7); + color: #333; + box-shadow: none; + } + .dropotron { + background: #fff; + border-radius: 6px; + box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.065), inset 0 -1px 0 0 #fff, inset 0 0 0 1px rgba(229, 229, 229, 0.5); + list-style: none; + margin: calc(-0.5em + 1px) 0 0 1px; + padding: 0.5em 0; + width: 11em; + } + + .dropotron li { + padding: 0; + } + + .dropotron li a, .dropotron li span { + -moz-transition: none; + -webkit-transition: none; + -ms-transition: none; + transition: none; + border: 0; + color: inherit; + display: block; + padding: 0.15em 1em; + text-align: center; + } + + .dropotron li.active > a, .dropotron li.active > span, .dropotron li:hover > a, .dropotron li:hover > span { + color: #0767aa; + } + + .dropotron.level-0 { + font-size: 0.8em; + margin: 0.8em 0 0 0; + } + + .dropotron.level-0:before { + -moz-transform: rotate(45deg); + -webkit-transform: rotate(45deg); + -ms-transform: rotate(45deg); + transform: rotate(45deg); + background: #fff; + border: solid 1px rgba(229, 229, 229, 0.5); + border-bottom: 0; + border-right: 0; + box-shadow: -0.25em -0.125em 0.125em 0 rgba(0, 0, 0, 0.015); + content: ''; + display: block; + height: 0.75em; + position: absolute; + right: 1.25em; + top: -0.375em; + width: 0.75em; + z-index: 0; + } + + +/*===================banner===================*/ + @-moz-keyframes banner{ + 0% { + -moz-transform: translate3d(2em,0,0); + -webkit-transform: translate3d(2em,0,0); + -ms-transform: translate3d(2em,0,0); + transform: translate3d(2em,0,0); + opacity: 0; + } + + 100% { + -moz-transform: translate3d(0,0,0); + -webkit-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + opacity: 1; + } + } + + @-webkit-keyframes banner { + 0% { + -moz-transform: translate3d(2em,0,0); + -webkit-transform: translate3d(2em,0,0); + -ms-transform: translate3d(2em,0,0); + transform: translate3d(2em,0,0); + opacity: 0; + } + + 100% { + -moz-transform: translate3d(0,0,0); + -webkit-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + opacity: 1; + } + } + + @-ms-keyframes banner{ + 0% { + -moz-transform: translate3d(2em,0,0); + -webkit-transform: translate3d(2em,0,0); + -ms-transform: translate3d(2em,0,0); + transform: translate3d(2em,0,0); + opacity: 0; + } + + 100% { + -moz-transform: translate3d(0,0,0); + -webkit-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + opacity: 1; + } + } + + @keyframes banner { + 0% { + -moz-transform: translate3d(2em,0,0); + -webkit-transform: translate3d(2em,0,0); + -ms-transform: translate3d(2em,0,0); + transform: translate3d(2em,0,0); + opacity: 0; + } + + 100% { + -moz-transform: translate3d(0,0,0); + -webkit-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + opacity: 1; + } + } + + @-moz-keyframes image{ + 0% { + -moz-transform: translate3d(0,2em,0); + -webkit-transform: translate3d(2em,0,0); + -ms-transform: translate3d(0,2em,0); + transform: translate3d(0,2em,0); + opacity: 0; + } + + 100% { + -moz-transform: translate3d(0,0,0); + -webkit-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + opacity: 1; + } + } + + @-webkit-keyframes image { + 0% { + -moz-transform: translate3d(0,2em,0); + -webkit-transform: translate3d(2em,0,0); + -ms-transform: translate3d(0,2em,0); + transform: translate3d(0,2em,0); + opacity: 0; + } + + 100% { + -moz-transform: translate3d(0,0,0); + -webkit-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + opacity: 1; + } + } + + @-ms-keyframes image{ + 0% { + -moz-transform: translate3d(0,2em,0); + -webkit-transform: translate3d(2em,0,0); + -ms-transform: translate3d(0,2em,0); + transform: translate3d(0,2em,0); + opacity: 0; + } + + 100% { + -moz-transform: translate3d(0,0,0); + -webkit-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + opacity: 1; + } + } + + @keyframes image{ + 0% { + -moz-transform: translate3d(0,2em,0); + -webkit-transform: translate3d(2em,0,0); + -ms-transform: translate3d(0,2em,0); + transform: translate3d(0,2em,0); + opacity: 0; + } + + 100% { + -moz-transform: translate3d(0,0,0); + -webkit-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + opacity: 1; + } + } + .banner{ + color: #FFFFFF; + padding: 8.5em 0 2.5em 0; + } + .banner .banner_text { + -moz-animation: banner 1s 0s forwards; + -webkit-animation: banner 1s 0s forwards; + -ms-animation: banner 1s 0s forwards; + animation: banner 1s 0s forwards; + -moz-backface-visibility: hidden; + -webkit-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + -moz-transform: translate3d(0,0,0); + -webkit-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + opacity: 0; + text-align: left; + float: left; + width: 60%; + margin: 4em 0 0 0; + } + .banner .banner_text > :last-child { + margin-bottom: 0; + } + .banner .banner_text h2{ + color: #FFFFFF; + font-size: 2.2em; + margin-bottom: 1em; + } + .banner .banner_text h2 span{ + display: inline-block; + vertical-align: middle; + } + .banner .banner_text h2 img{ + vertical-align: middle; + padding-right: 1em; + border-right: 1px solid #FFFFFF; + margin-right: 1em; + } + .banner .banner_text p{ + font-size: 1.3em; + margin-bottom: 1em; + } + .banner .banner_text p span{ + color: #8cbc21; + padding: 0 5px; + } + .banner .banner_img{ + float: right; + width: 40%; + text-align: center; + } + .banner .banner_img img.ie_img{ + display: none; + } + .banner .image { + -moz-animation: image 1s 0.2s forwards; + -webkit-animation: image 1s 0.2s forwards; + -ms-animation: image 1s 0.2s forwards; + animation: image 1s 0.2s forwards; + -moz-backface-visibility: hidden; + -webkit-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + -moz-transform: translate3d(0,0,0); + -webkit-transform: translate3d(0,0,0); + -ms-transform: translate3d(0,0,0); + transform: translate3d(0,0,0); + opacity: 0; + } + + .banner .image img { + -moz-transition: opacity 0.75s ease; + -webkit-transition: opacity 0.75s ease; + -ms-transition: opacity 0.75s ease; + transition: opacity 0.75s ease; + -moz-transition-delay: 0.75s; + -webkit-transition-delay: 0.75s; + -ms-transition-delay: 0.75s; + transition-delay: 0.75s; + opacity: 1; + max-width: 100%; + width: auto; + } + .image.phone { + box-shadow: none; + border-radius: 0; + margin: 0 0 3em 0; + width: 13em; + } + + .image.phone .inner, .image.phone:before, .image.phone:after { + display: block; + border: solid 2px rgba(255, 255, 255, 0.5); + } + + .image.phone .inner { + position: relative; + } + + .image.phone .inner:before, .image.phone .inner:after { + content: ''; + position: absolute; + left: 50%; + } + + .image.phone .inner:before { + top: -1.375em; + margin-left: -1em; + width: 2em; + height: 0.25em; + border-radius: 0.5em; + background: rgba(255, 255, 255, 0.5); + } + + .image.phone .inner:after { + bottom: -2.75em; + margin-left: -1em; + width: 2em; + height: 2em; + border-radius: 100%; + border: solid 2px rgba(255, 255, 255, 0.5); + } + + .image.phone:before, .image.phone:after { + content: ''; + } + + .image.phone:before { + height: 2.5em; + border-radius: 1em 1em 0 0; + border-bottom: 0; + } + + .image.phone:after { + height: 3.5em; + border-radius: 0 0 1em 1em; + border-top: 0; + } + .slide_box{ + width: 100%; + height: 18.4em; + overflow: hidden; + background-image: url(../images/screen.jpg); + background-repeat: no-repeat; + position: relative; + } + .slider_pic{ + padding: 0; + margin: 0; + } + .slider_pic li{ + height: 100%; + width: 100%; + padding: 0; + margin: 0; + text-align: center; + position: absolute; + top: 0; + left: 100%; + } + .slider_pic li.beijia_img img{ + padding: 2.8em 0.5em; + } + .slider_pic li.weixin_img{ + padding: 2.6em 1.2em; + font-size: 1.2em; + } + .slider_pic li.weixin_img img{ + display: inline-block; + } + .slider_btn{ + position: absolute; + bottom: 0.5em; + left: 0; + text-align: center; + width: 100%; + } + .slider_btn li{ + display: inline-block; + width: 8px; + height: 8px; + border-radius: 100%; + border: 1px solid #FFFFFF; + } + .slider_btn li.on{ + background-color: #FFFFFF; + } + +/* ===================main ===================*/ +.main{ + min-height: 60%; +} +section.main{ + margin-bottom: 0!important; +} +/* 首页 */ + .cd-fixed-bg { + position: relative; + background-size: cover; + background-repeat: no-repeat; + background-position: center center; + background-attachment: fixed; + z-index: 1; + padding: 6em 0; + } + .cd-fixed-bg.banner{ + padding: 8.5em 0 2.5em 0 ; + } + .cd-fixed-bg.cd-bg-1 { + background-image: url(../images/pic01.jpg); + } + .cd-scrolling-bg { + position: relative; + padding: 4em 0; + z-index: 2; + } + .cd-scrolling-bg.bg_white { + background-color: #FFFFFF; + } + .cd-scrolling-bg.bg_gary { + background-color: #eaecf8; + } + .cd-scrolling-bg.bottom_bg{ + padding: 0; + } + @media only screen and (max-width: 1170px) { + .cd-fixed-bg { + background-attachment: scroll; + } + .cd-fixed-bg,.cd-scrolling-bg { + padding: 3em 0; + } + } + @media only screen and (max-width: 840px) { + .cd-fixed-bg,.cd-scrolling-bg { + padding: 2em 0; + } + } + + .use_advantage{ + margin: 0 4em; + } + .advantage_img img{ + width: 7em; + height: 7em; + } + + @media screen and (max-width: 840px) { + .use_advantage{ + margin: 0 2em; + } + } + .konw_morebox{ + padding: 3em 0 3em 0; + background:#0767aa; + } + a.know_more{ + display: block; + text-align: center; + position: relative; + width: 13em; + height: 13em; + padding: 1em; + border-radius: 100%; + background-color: rgba(255,255,255,0.3); + color: #FFFFFF; + margin: 0 auto; + transition: all 0.6s ease 0s; + } + .know_more:before { + font-size: 3em; + line-height: 1.5em; + color: rgba(255,255,255,0.5); + } + a.know_more:hover{ + transform: scale(1.1); + color: #FFFFFF !important; + background-color: rgba(255,255,255,0.4); + } + .know_more h4{ + margin-bottom: 0.5em; + color: #FFFFFF; + } + .know_more p{ + line-height: 1.5em; + } + @media screen and (max-width: 980px) { + a.know_more{ + width: 12em; + height: 12em; + padding: 0.5em; + } + } + @media screen and (max-width: 736px) { + .konw_morebox{ + padding: 4em 0 2em 0; + } + a.know_more{ + width: 13em; + height: 13em; + padding: 1em; + margin-bottom: 1em; + } + } + + +/* 登录 */ + + body.login_bg{ + height: 100%; + background-color: #ffffff; + background-image: url(../images/pic03.jpg); + background-repeat: no-repeat; + background-size: cover; + background-position: top center; + } + + body.is-loading:after { + opacity: 1; + } + + .login_main{ + position: absolute; + top: 50%; + left: 50%; + margin-top: -11em; + margin-left: -12em; + max-width: 100%; + width: 24em; + padding: 3em 3em 2em 3em; + background: #ffffff; + border-radius: 4px; + cursor: default; + opacity: 0.95; + text-align: center; + -moz-transform-origin: 50% 50%; + -webkit-transform-origin: 50% 50%; + -ms-transform-origin: 50% 50%; + transform-origin: 50% 50%; + -moz-transform: rotateX(0deg); + -webkit-transform: rotateX(0deg); + -ms-transform: rotateX(0deg); + transform: rotateX(0deg); + -moz-transition: opacity 1s ease, -moz-transform 1s ease; + -webkit-transition: opacity 1s ease, -webkit-transform 1s ease; + -ms-transition: opacity 1s ease, -ms-transform 1s ease; + transition: opacity 1s ease, transform 1s ease; + } + + .login_main .button{ + width: 100%; + } + + @media screen and (max-width: 480px) { + + .login_main { + min-width: 0; + width: 100%; + padding: 2.5em 2.5em 1.5em 2.5em ; + } + + } + + body.is-loading .login_main { + opacity: 0; + -moz-transform: rotateX(15deg); + -webkit-transform: rotateX(15deg); + -ms-transform: rotateX(15deg); + transform: rotateX(15deg); + } + + .login_warpper { + -moz-perspective: 1000px; + -webkit-perspective: 1000px; + -ms-perspective: 1000px; + perspective: 1000px; + position: relative; + padding: 1.5em; + z-index: 2; + height: 100%; + } + + .login_warpper > * { + z-index: 1; + } + + .login_warpper:before { + content: ''; + display: block; + } + + @media screen and (max-width: 360px) { + .login_warpper { + padding: 1em; + } + } + +/*技术文档*/ + .doc_slide .doc_title{ + font-size: 0.8em; + } + .doc_title a{ + padding: 0 0.8em; + border-radius: 3px; + line-height: 2.6em; + color: #333333; + } + .doc_title.active a{ + background-color: #4696e5; + color: #FFFFFF; + } + .doc_title.active a:hover{ + color: #FFFFFF !important; + } + .doc_slide{ + margin-bottom: 0.5em; + } + .doc_slide a{ + display: block; + } + .doc_slide ul{ + margin-bottom: 0; + padding-left: 1.5em; + } + .doc_slide ul li{ + font-size: 0.8em; + } + .doc_slide ul li a{ + color: #8D8D8D; + } + .doc_slide ul li.active a{ + color: #4696e5; + } + h2.doc_text_title{ + border-bottom: 1px solid #e0e0e0; + padding-bottom: 0.8em; + } + +/*api文档*/ + .api_doc{ + padding-top: 3em; + padding-bottom: 3em; + } + .api_doc_bar{ + height: 500px; + left: 0; + position: fixed; + top: 0; + padding-top: 6.25em; + width: 230px; + } + .api_doc_bar dl{ + padding: 0 0 1.5em 0; + margin: 0; + } + .api_doc_bar dl dt { + font-size: 0.9em; + font-weight: normal; + line-height: 1.5em; + padding-bottom: 0.5em; + width: 100%; + } + .api_doc_bar dd { + font-size: 0.8em; + line-height: 1.2em; + padding: 5px 0 5px 1em; + } + .api_doc_bar dl a{ + cursor: pointer; + color: #333333; + display: block; + padding: 0 1.5em 0 1.5em; + } + .api_doc_bar dl dd a{ + color: #999; + } + .api_doc_bar dl a.active{ + color: #4696e5; + } + .api_doc_bar dl dt a{ + border-left: 3px solid transparent; + } + .api_doc_bar dl dt a.active{ + border-left: 3px solid #4696e5; + } + + + .api_doc_content{ + padding-left: 250px; + } + ..api_doc_content img,.doc_text img{ + max-width: 100%; + } + .result_box img{ + width: 300px; + border: 1px solid #e0e0e0; + } + .api_block{ + margin-bottom: 4em; + } + .produce_block{ + margin-top: 2em; + } + .fund_text h4{ + margin-bottom: 0.5em; + font-size: 1em; + } + .fund_text img{ + max-width: 100%; + } + .fund_text .content p{ + line-height: 1.5em; + margin-bottom: 0.5em; + } + @media screen and (min-width: 1200px){ + .api_doc_bar{ + width: 230px; + } + } + @media screen and (max-width: 1200px) and (min-width: 840px){ + .api_doc_bar{ + width: 170px; + } + } + @media screen and (max-width: 840px) and (min-width: 736px){ + .api_doc_bar{ + width: 140px; + } + .api_doc_bar dl a{ + padding: 0 1em 0 1em; + } + } + @media screen and (max-width: 736px){ + .api_doc_bar{ + width: 100%; + position: static; + height: auto; + padding-top: 1em; + margin-bottom: 2em; + background-color: #f2f2f2; + } + .api_doc_bar dl dt { + border-bottom: 1px solid #E0E0E0; + } + .api_doc{ + padding-top: 1em; + padding-bottom: 1em; + } + } + +/*费用说明*/ + .cost_box{ + border: 1px solid #E0E0E0; + padding: 3em 2em 3em 2em; + position: relative; + min-height: 15.5em; + } + .cost_box .price{ + font-size: 0.8em; + color: #333333; + line-height: 1.5em; + height: 3em; + } + .cost_box .price span{ + font-size: 1.2em; + color: #ff9600; + } + .cost_box p{ + margin-bottom: 0; + line-height: 2em; + } + .cost_tag{ + position: absolute; + top: -5px; + right:-5px; + display: block; + width: 140px; + height: 140px; + background-image: url(../images/tag.png); + background-repeat: no-repeat; + background-size: cover; + } + .cost_tag.tag02{ + background-image: url(../images/tag02.png); + } + @media screen and (max-width: 980px) and (min-width: 736px){ + .cost_tag{ + width: 110px; + height: 110px; + } + } + @media screen and (max-width: 480px){ + .cost_tag{ + width: 100px; + height: 100px; + } + } + +/*关于我们*/ +.about_banner{ + width: 100%; + overflow: hidden; + position: relative; + height: 399px; +} +.about_img{ + position: absolute; + top: 0; + left: 50%; + margin-left: -960px; + width: 1920px; + height: 399px; +} +.about_img img{ + display: block; + max-width: 100%; +} +.block_text{ + padding-top: 6em; + padding-bottom: 6em; + border-bottom: 1px solid #E0E0E0; +} +.block_text:last-child{ + border-bottom: 0; +} +.about_info{ + text-align: center; + width: 800px; + margin: 0 auto; +} +.about_info img{ + margin-bottom: 20px; +} +.about_info p{ + font-size: 18px; + line-height: 40px; +} +@media screen and (max-width: 1600px){ + .about_banner{ + height: 333px; + } + .about_img{ + width: 1600px; + height: 333px; + margin-left: -800px; + } +} +@media screen and (max-width: 1280px){ + .about_banner{ + height: 266px; + } + .about_img{ + width: 1280px; + height: 266px; + margin-left: -640px; + } +} +@media screen and (max-width: 980px){ + .about_banner{ + height: 204px; + } + .about_img{ + width: 980px; + height: 204px; + margin-left: -490px; + } + .block_text{ + padding-top: 4em; + padding-bottom: 4em; + } + .about_info{ + width: 100%; + } + .about_info p{ + font-size: 16px; + } + .about_info p{ + font-size: 14px; + line-height: 30px; + } +} +@media screen and (max-width: 980px){ + .block_text{ + padding-top: 3em; + padding-bottom: 3em; + } +} + +.history{ + position: relative; + width: 960px; + margin: 0 auto; +} +.history_main{ + background: url(../images/line_bg.png) repeat-y 200px top; +} +.history_main p{ + text-indent: 0; + margin-bottom:0; +} +.history_title{ + font-size: 32px; + text-align: center; + margin-bottom: 1.5em; +} +.year_div { + position: relative; + z-index: 100; +} +.year_div h2 { + height: 80px; + width: 80px; + font-size: 18px; + border-radius: 100%; + background-color: #FFFFFF; + border: 4px solid #8cbc21; + text-align: center; + padding: 16px 0; + line-height: 40px; + display: block; + margin-left: 162px; +} +.year_div h2 a { + color: #8cbc21; +} +.year_div h2 i{ + display:block; + position:relative; + height: 0; + width: 0; + left: 50%; + bottom: 0; + margin-left: -6px; + border-width:6px; + border-style:solid; + border-color:#8cbc21 transparent transparent transparent; + -webkit-transition:.5s; + -moz-transition:.5s; + -ms-transition:.5s; + -o-transition:.5s; + transition:.5s; + -webkit-transform-origin:6px 3px; + -moz-transform-origin:6px 3px; + -ms-transform-origin:6px 3px; + -o-transform-origin:6px 3px; + transform-origin:6px 3px +} +.year_div .list{ + margin:10px 0; + position:relative; + overflow:hidden; + -webkit-transition:height 1s cubic-bezier(0.025,0.025,0.000,1.115),opacity 1s; + -moz-transition:height 1s cubic-bezier(0.025,0.025,0.000,1.115),opacity 1s; + -ms-transition:height 1s cubic-bezier(0.025,0.025,0.000,1.115),opacity 1s; + -o-transition:height 1s cubic-bezier(0.025,0.025,0.000,1.115),opacity 1s; + transition:height 1s cubic-bezier(0.025,0.025,0.000,1.115),opacity 1s +} +.year_div .list ul { + top: 0; + padding: 0; + margin: 0; + width: 100%; +} +.year_div .list ul li { + color: #a1a4b8; + width: 760px; + position: relative; + float: right; + clear: both; + padding: 30px 0 30px 40px; +} +.circle{ + background: url(../images/circle.png) no-repeat; + width: 30px; + height: 30px; + display: block; + position: absolute; + left: -13px; + top: 30px; +} +.year_div .list ul li.highlight .circle{ + background-position: 0 -30px; +} +.year_div .list ul li .date{ + font-size:18px; + margin-bottom: 0; + position: absolute; + top: 30px; + text-align: right; + left: -140px; + width: 100px; + height: 30px; + line-height: 30px; +} +.year_div .list ul li .intro, .year_div .list ul li .company_info{ + line-height: 24px; + margin-bottom: 0; +} +.year_div .list ul li .intro { + font-size: 18px; + line-height: 30px; + color: #8cbc21; +} +.year_div .list ul li .company_info p{ + font-size: 14px; + color: #777; +} +.year_div .list ul li.highlight .intro{ + color: #ff9600; +} +.year_div .list ul li .round_div{ + position: relative; +} +.year_div.close h2 i{ + transform:rotate(-90deg); + -webkit-transform:rotate(-90deg); + -moz-transform:rotate(-90deg); + -ms-transform:rotate(-90deg); + -o-transform:rotate(-90deg) +} +.year_div.close .list{ + opacity:0; + height:0!important; +} + @media screen and (max-width: 960px){ + .history{ + width: 800px; + } + .year_div .list ul li { + width: 600px; + } + .history_title{ + font-size: 28px; + margin-bottom: 1em; + } + } + @media screen and (max-width: 800px){ + .history{ + width: 100%; + padding-left: 15px; + padding-right: 15px; + } + .history_main{ + background-position: 30px 0; + } + .year_div h2{ + margin: 0 0 0 -5px; + width: 70px; + height: 70px; + font-size: 16px; + line-height: 35px; + padding: 12px 0; + } + .year_div .list ul li{ + width: 100%; + } + .year_div .list ul li .date{ + position: static; + text-align: left; + margin-bottom: 5px; + padding-left: 30px; + } + .year_div .list ul li .round_div{ + padding-left: 30px; + } + .circle{ + left: 17px; + } + } + + +.contact_block{ + text-align: center; + padding: 1.5em 0 1.5em; + height: 320px; + border: 1px solid #E0E0E0; +} +.contact_text p{ + margin: 0; + font-size: 14px; + line-height: 28px; +} +.contact_text h3{ + margin-bottom: 15px; + font-size: 18px; +} +.button_box{ + padding-top: 20px; + color: #0767aa; +} +.weixin_box img{ + width: 110px; +} +.cooperation{ + text-align: center; +} +.cooperation li{ + display: inline-block; + padding: 10px; +} +.cooperation li a{ + border: 1px solid #E0E0E0; + display: block; + padding: 2px 7px; +} +.cooperation li img{ + display: block; + width: 150px; + height: 60px; +} + +/*帮助中心*/ +.help_top{ + padding: 0; + background: #509ec0; + background: -moz-linear-gradient(left, #6cc9b7 0%, #509ec0 50%, #0767aa 100%); + background: -webkit-gradient(linear, left, right, color-stop(0%, #6cc9b7), color-stop(50%, #509ec0), color-stop(100%, #0767aa)); + background: -webkit-linear-gradient(left, #6cc9b7 0%, #509ec0 50%, #0767aa 100%); + background: -o-linear-gradient(left, #6cc9b7 0%, #509ec0 50%, #0767aa 100%); + background: -ms-linear-gradient(left,#6cc9b7 0%, #509ec0 50%, #0767aa 100%); + background: linear-gradient(to right, #6cc9b7 0%, #509ec0 50%, #0767aa 100%); + filter: progid: DXImageTransform.Microsoft.gradient( startColorstr='#6cc9b7', endColorstr='#0767aa', GradientType=0); +} +:root .gradient{filter:none;} + +.help_top img{ + display: block; + margin: 0 auto; + max-width: 100%; +} +.nav_title{ + font-size: 14px; + padding: 20px 0; +} +.help_conternt{ + padding-bottom: 50px; +} +.help_title{ + font-size: 20px; + color: #333333; + border-bottom: 1px solid #E0E0E0; + line-height: 40px; + margin-bottom: 30px; +} +.help_slide{ + border: 1px solid #E0E0E0; + padding: 10px 15px 15px; +} +.help_slide_title{ + padding-bottom: 10px; + font-size: 16px; + border-bottom: 1px solid #E0E0E0; + color: #333; +} +.help_slide_list li{ + line-height: 30px; + height: 30px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.help_slide_list li a{ + font-size: 14px; +} +.question_list li{ + padding: 15px 0; + border-bottom: 1px solid #E0E0E0; + line-height: 25px; + padding-left: 30px; + background: url(../images/list_style.png) no-repeat left 20px; +} +.question_list li a{ + display: block; + font-size: 16px; +} +.question_list li span{ + display: block; + font-size: 14px; + +} +.question_content p{ + font-size: 14px; + margin-bottom: 0; +} +.question_content img{ + max-width: 100%; +} +.page_box{ + padding: 20px 0; + text-align: center; +} +.page_box a{ + display: inline-block; + padding: 5px 12px; + background-color: #eaecf8; + margin: 0 5px; + color: #333; + font-size: 14px; + line-height: 22px; +} +.page_box a.disabled{ + color: #888; + cursor: default; +} +.page_box a.on{ + background-color: #0767aa; + color: #FFFFFF; +} + +/* ===================footer ===================*/ + .footer{ + background: #222; + color: #FFFFFF; + padding: 2em 0 2em 0; + } + .footer_link h5,.footer_link a{ + color: #FFFFFF; + } + .footer_link p{ + font-size: 0.75em; + line-height: 1.8em; + margin-bottom: 0; + } + .footer_link img{ + width: 70%; + } + +/*===================不同尺寸=====================*/ +/* XLarge */ + + @media screen and (max-width: 1800px) { + + /* Basic */ + + body, input, select, textarea { + font-size: 14pt; + } + + + + } + +/* Large */ + + @media screen and (max-width: 1280px) { + /* Basic */ + + body, input, select, textarea { + font-size: 12pt; + } + + /* Section/Article */ + + header.major { + margin: 0.75em 0 2.5em 0; + } + + header.major h2 { + padding: 0 1em 0 1em; + } + header.white h2 { + margin-bottom: 2em; + } + + /* Header */ + #header h1 img{ + height: 52px; + } + #header nav > ul > li a{ + font-size: 1em; + } + } + +/* Medium */ + + @media screen and (max-width: 980px) { + + /* Basic */ + + body, input, select, textarea { + font-size: 12pt; + } + html, body { + overflow-x: hidden; + } + h1 br, h2 br, h3 br, h4 br, h5 br, h6 br { + display: none; + } + + /* List */ + + ul.icons li .icon { + font-size: 1.25em; + } + + /* Header */ + #header nav > ul > li a{ + font-size: 0.9em; + } + #header nav#nav{ + left: 10em; + } + + + /* banner */ + .banner .banner_text { + margin: 3em 0 0 0; + } + .banner .banner_text h2{ + font-size: 2em; + } + .banner .banner_text h2 img{ + height: 50px; + } + .banner .banner_text p{ + font-size: 1.2em; + } + } + @media screen and (max-width: 980px) and (orientation: portrait) { + /* banner */ + .banner { + padding: 6.5em 2em 2em 2em ; + -moz-flex-direction: column-reverse; + -webkit-flex-direction: column-reverse; + -ms-flex-direction: column-reverse; + flex-direction: column-reverse; + } + .banner .container{ + width: 100% !important; + } + .cd-fixed-bg.banner{ + padding: 6.5em 2em 2em 2em ; + } + + .banner .banner_text { + display: block; + width: 100%; + text-align: center; + margin: 0 0 2em 0; + float: none; + } + .banner .banner_img{ + width: 100%; + float: none; + } + + .banner .image { + overflow: hidden; + } + + + } +/* mediumer */ + #navPanel, #navButton { + display: none; + } + + @media screen and (max-width: 840px) { + /* Basic */ + + body, input, select, textarea { + font-size: 12pt; + } + + /* Header */ + #header nav{ + display: none; + } + + /* Off-Canvas Navigation */ + + #page-wrapper { + -moz-backface-visibility: hidden; + -webkit-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + -moz-transition: -moz-transform 0.5s ease; + -webkit-transition: -webkit-transform 0.5s ease; + -ms-transition: -ms-transform 0.5s ease; + transition: transform 0.5s ease; + padding-bottom: 1px; + } + + #navButton { + -moz-backface-visibility: hidden; + -webkit-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + -moz-transition: -moz-transform 0.5s ease; + -webkit-transition: -webkit-transform 0.5s ease; + -ms-transition: -ms-transform 0.5s ease; + transition: transform 0.5s ease; + display: block; + height: 3.25em; + right: 0; + position: fixed; + top: 0; + width: 4em; + z-index: 10001; + } + + #navButton .toggle { + text-decoration: none; + height: 100%; + left: 0; + position: absolute; + top: 0; + width: 100%; + border: 0; + outline: 0; + } + + #navButton .toggle:before { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + font-family: FontAwesome; + font-style: normal; + font-weight: normal; + text-transform: none !important; + } + + #navButton .toggle:before { + border-radius: 6px; + color: #333; + content: '\f0c9'; + display: block; + font-size: 1.5em; + height: 1.5em; + right: 0.5em; + line-height: 1.5em; + position: absolute; + text-align: center; + top: 0.35em; + width: 2em; + } + + #navPanel { + -moz-backface-visibility: hidden; + -webkit-backface-visibility: hidden; + -ms-backface-visibility: hidden; + backface-visibility: hidden; + -moz-transform: translateX(-275px); + -webkit-transform: translateX(-275px); + -ms-transform: translateX(-275px); + transform: translateX(-275px); + -moz-transition: -moz-transform 0.5s ease; + -webkit-transition: -webkit-transform 0.5s ease; + -ms-transition: -ms-transform 0.5s ease; + transition: transform 0.5s ease; + display: block; + height: 100%; + left: 0; + overflow-y: auto; + position: fixed; + top: 0; + width: 275px; + z-index: 10002; + background: #2b2b2b; + color: #bbb; + } + + #navPanel .link { + border-bottom: 0; + border-top: solid 1px rgba(255, 255, 255, 0.05); + color: #bbb; + display: block; + height: 44px; + line-height: 44px; + padding: 0 1em 0 1em; + text-decoration: none; + } + + #navPanel .link:first-child { + border-top: 0; + } + + #navPanel .link.depth-0 { + color: #fff; + } + + #navPanel .link .indent-1 { + display: inline-block; + width: 1em; + } + + #navPanel .link .indent-2 { + display: inline-block; + width: 2em; + } + + #navPanel .link .indent-3 { + display: inline-block; + width: 3em; + } + + #navPanel .link .indent-4 { + display: inline-block; + width: 4em; + } + + #navPanel .link .indent-5 { + display: inline-block; + width: 5em; + } + + body.navPanel-visible #page-wrapper { + -moz-transform: translateX(275px); + -webkit-transform: translateX(275px); + -ms-transform: translateX(275px); + transform: translateX(275px); + } + + body.navPanel-visible #navButton { + -moz-transform: translateX(275px); + -webkit-transform: translateX(275px); + -ms-transform: translateX(275px); + transform: translateX(275px); + } + + body.navPanel-visible #navPanel { + -moz-transform: translateX(0); + -webkit-transform: translateX(0); + -ms-transform: translateX(0); + transform: translateX(0); + } + + } + +/* Small */ + + @media screen and (max-width: 736px) { + + /* Basic */ + body, input, select, textarea { + font-size: 12pt; + } + + h1 { + font-size: 1.8em; + } + + h2 { + font-size: 1.4em; + } + + h3 { + font-size: 1.15em; + } + + h4 { + font-size: 1em; + } + + h5 { + font-size: 0.8em; + } + + h6 { + font-size: 0.7em; + } + + /* Section/Article */ + + section, article { + margin: 0 0 1.5em 0 !important; + } + + /* Box */ + .box_item .button{ + width: 100%; + height: 3.5em; + line-height: 3.5em; + } + + + /* List */ + + ul.labeled-icons li { + padding-left: 2em; + } + + ul.labeled-icons li h3 { + line-height: 1.75em; + } + + /* Poptrox */ + + .poptrox-popup { + border-radius: 0; + } + + .poptrox-popup .nav-next:before, + .poptrox-popup .nav-previous:before { + margin-top: -1em; + } + /* banner */ + .banner .banner_text h2{ + font-size: 1.5em; + } + .banner .banner_text h2 img{ + height: 40px; + } + .banner .banner_text p{ + font-size: 1em; + } + } + +/* XSmall */ + + @media screen and (max-width: 480px) { + /* Basic */ + + html, body { + min-width: 320px; + } + + body, input, select, textarea { + font-size: 11pt; + } + + /* List */ + + ul.actions { + margin: 0 0 2em 0; + } + + ul.actions li { + display: block; + padding: 1em 0 0 0; + text-align: center; + width: 100%; + } + + ul.actions li:first-child { + padding-top: 0; + } + + ul.actions li > * { + margin: 0 !important; + width: 100%; + } + + ul.actions li > *.icon:before { + margin-left: -2em; + } + + ul.actions.small li { + padding: 0.5em 0 0 0; + } + + ul.actions.small li:first-child { + padding-top: 0; + } + + /* Header */ + #header h1{ + left: 0.6em; + } + #header h1 img{ + height: 47px; + } + /* banner */ + .banner .banner_text p{ + margin-bottom: 0; + } + } \ No newline at end of file diff --git a/template/index1/assets/images/circle.png b/template/index1/assets/images/circle.png new file mode 100644 index 0000000..2af3d71 Binary files /dev/null and b/template/index1/assets/images/circle.png differ diff --git a/template/index1/assets/images/line_bg.png b/template/index1/assets/images/line_bg.png new file mode 100644 index 0000000..7a20494 Binary files /dev/null and b/template/index1/assets/images/line_bg.png differ diff --git a/template/index1/assets/images/list_style.png b/template/index1/assets/images/list_style.png new file mode 100644 index 0000000..45ffe5c Binary files /dev/null and b/template/index1/assets/images/list_style.png differ diff --git a/template/index1/assets/images/pic01.jpg b/template/index1/assets/images/pic01.jpg new file mode 100644 index 0000000..c43cb53 Binary files /dev/null and b/template/index1/assets/images/pic01.jpg differ diff --git a/template/index1/assets/images/pic03.jpg b/template/index1/assets/images/pic03.jpg new file mode 100644 index 0000000..851d826 Binary files /dev/null and b/template/index1/assets/images/pic03.jpg differ diff --git a/template/index1/assets/images/screen.jpg b/template/index1/assets/images/screen.jpg new file mode 100644 index 0000000..45f10eb Binary files /dev/null and b/template/index1/assets/images/screen.jpg differ diff --git a/template/index1/assets/images/tag.png b/template/index1/assets/images/tag.png new file mode 100644 index 0000000..df43ba2 Binary files /dev/null and b/template/index1/assets/images/tag.png differ diff --git a/template/index1/assets/images/tag02.png b/template/index1/assets/images/tag02.png new file mode 100644 index 0000000..a5d5ea0 Binary files /dev/null and b/template/index1/assets/images/tag02.png differ diff --git a/template/index1/assets/picture/about_us.jpg b/template/index1/assets/picture/about_us.jpg new file mode 100644 index 0000000..0b06401 Binary files /dev/null and b/template/index1/assets/picture/about_us.jpg differ diff --git a/template/index1/assets/picture/adv01.png b/template/index1/assets/picture/adv01.png new file mode 100644 index 0000000..414faa6 Binary files /dev/null and b/template/index1/assets/picture/adv01.png differ diff --git a/template/index1/assets/picture/adv02.png b/template/index1/assets/picture/adv02.png new file mode 100644 index 0000000..3e96255 Binary files /dev/null and b/template/index1/assets/picture/adv02.png differ diff --git a/template/index1/assets/picture/adv03.png b/template/index1/assets/picture/adv03.png new file mode 100644 index 0000000..f6f0e91 Binary files /dev/null and b/template/index1/assets/picture/adv03.png differ diff --git a/template/index1/assets/picture/adv04.png b/template/index1/assets/picture/adv04.png new file mode 100644 index 0000000..dadea15 Binary files /dev/null and b/template/index1/assets/picture/adv04.png differ diff --git a/template/index1/assets/picture/icon_adress.png b/template/index1/assets/picture/icon_adress.png new file mode 100644 index 0000000..505c86f Binary files /dev/null and b/template/index1/assets/picture/icon_adress.png differ diff --git a/template/index1/assets/picture/icon_qq.png b/template/index1/assets/picture/icon_qq.png new file mode 100644 index 0000000..2bd9240 Binary files /dev/null and b/template/index1/assets/picture/icon_qq.png differ diff --git a/template/index1/assets/picture/icon_weixin.png b/template/index1/assets/picture/icon_weixin.png new file mode 100644 index 0000000..7997e01 Binary files /dev/null and b/template/index1/assets/picture/icon_weixin.png differ diff --git a/template/index1/assets/picture/ispay_1.png b/template/index1/assets/picture/ispay_1.png new file mode 100644 index 0000000..56fbda7 Binary files /dev/null and b/template/index1/assets/picture/ispay_1.png differ diff --git a/template/index1/assets/picture/kf01.png b/template/index1/assets/picture/kf01.png new file mode 100644 index 0000000..f6f237c Binary files /dev/null and b/template/index1/assets/picture/kf01.png differ diff --git a/template/index1/assets/picture/kf02.png b/template/index1/assets/picture/kf02.png new file mode 100644 index 0000000..dc54429 Binary files /dev/null and b/template/index1/assets/picture/kf02.png differ diff --git a/template/index1/assets/picture/kf03.png b/template/index1/assets/picture/kf03.png new file mode 100644 index 0000000..14fd9dc Binary files /dev/null and b/template/index1/assets/picture/kf03.png differ diff --git a/template/index1/assets/picture/phone.png b/template/index1/assets/picture/phone.png new file mode 100644 index 0000000..bf8bee9 Binary files /dev/null and b/template/index1/assets/picture/phone.png differ diff --git a/template/index1/assets/picture/use01.png b/template/index1/assets/picture/use01.png new file mode 100644 index 0000000..823be18 Binary files /dev/null and b/template/index1/assets/picture/use01.png differ diff --git a/template/index1/assets/picture/use02.png b/template/index1/assets/picture/use02.png new file mode 100644 index 0000000..cf0a60c Binary files /dev/null and b/template/index1/assets/picture/use02.png differ diff --git a/template/index1/assets/picture/use03.png b/template/index1/assets/picture/use03.png new file mode 100644 index 0000000..0784942 Binary files /dev/null and b/template/index1/assets/picture/use03.png differ diff --git a/template/index1/assets/picture/weixin.jpg b/template/index1/assets/picture/weixin.jpg new file mode 100644 index 0000000..9ba6453 Binary files /dev/null and b/template/index1/assets/picture/weixin.jpg differ diff --git a/template/index1/assets/picture/yuke01.png b/template/index1/assets/picture/yuke01.png new file mode 100644 index 0000000..6a41e0d Binary files /dev/null and b/template/index1/assets/picture/yuke01.png differ diff --git a/template/index1/assets/picture/yuke02.png b/template/index1/assets/picture/yuke02.png new file mode 100644 index 0000000..b0a3891 Binary files /dev/null and b/template/index1/assets/picture/yuke02.png differ diff --git a/template/index1/assets/picture/yuke03.png b/template/index1/assets/picture/yuke03.png new file mode 100644 index 0000000..3a3227a Binary files /dev/null and b/template/index1/assets/picture/yuke03.png differ diff --git a/template/index1/assets/picture/yuke04.png b/template/index1/assets/picture/yuke04.png new file mode 100644 index 0000000..83231ef Binary files /dev/null and b/template/index1/assets/picture/yuke04.png differ diff --git a/template/index1/doc.php b/template/index1/doc.php new file mode 100644 index 0000000..7a169dd --- /dev/null +++ b/template/index1/doc.php @@ -0,0 +1,327 @@ + +
    + +
    +
    +

    + 协议规则 +

    +

    传输方式:HTTP

    +

    数据格式:JSON

    +

    签名算法:MD5

    +

    字符编码:UTF-8

    +
    +
    +

    + [API]创建商户 +

    +

    API权限:该API只能合作支付商户调用

    +

    URL地址:api.php?act=apply&token={合作者身份TOKEN}&url={商户域名}

    +

    请求参数说明:

    + + + + + + + +
    字段名变量名必填类型示例值描述
    操作类型actStringapply此API固定值
    合作者TOKENtokenString9ddab6c4f2c87ce442de371b04f36d68需要事先申请
    商户域名urlStringpay.v8jisu.cn
    +

    返回结果:

    + + + + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    返回信息msgString添加支付商户成功!
    商户IDpidInt1001所创建的商户ID
    商户密钥keyString(32)89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i所创建的商户密钥
    商户类型typeInt1此值暂无用
    +
    +
    +

    + [API]查询商户信息与结算规则 +

    +

    URL地址:api.php?act=query&pid={商户ID}&key={商户密钥}

    +

    请求参数说明:

    + + + + + + + +
    字段名变量名必填类型示例值描述
    操作类型actStringquery此API固定值
    商户IDpidInt1001
    商户密钥keyString89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i
    +

    返回结果:

    + + + + + + + + + + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    商户IDpidInt1001所创建的商户ID
    商户密钥keyString(32)89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i所创建的商户密钥
    商户类型typeInt1此值暂无用
    商户状态activeInt11为正常,0为封禁
    商户余额moneyString0.00商户所拥有的余额
    结算账号accountStringpay@cccyun.cn结算的支付宝账号
    结算姓名usernameString张三结算的支付宝姓名
    满多少自动结算settle_moneyString30此值为系统预定义
    手动结算手续费settle_feeString1此值为系统预定义
    每笔订单分成比例money_rateString98此值为系统预定义
    +
    +
    +

    + [API]修改结算账号 +

    +

    URL地址:api.php?act=change&pid={商户ID}&key={商户密钥}&account={结算账号}&username={结算姓名}

    +

    注:为了保障资金安全,已经设置结算账号的无法再进行修改,如需修改请联系客服

    +

    请求参数说明:

    + + + + + + + + + +
    字段名变量名必填类型示例值描述
    操作类型actStringchange此API固定值
    商户IDpidInt1001
    商户密钥keyString89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i
    结算账号accountStringpay@cccyun.cn结算的支付宝账号
    结算姓名usernameString张三结算的支付宝姓名
    +

    返回结果:

    + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    返回信息msgString修改收款账号成功!
    +
    +
    +

    + [API]查询结算记录 +

    +

    URL地址:api.php?act=settle&pid={商户ID}&key={商户密钥}

    +

    请求参数说明:

    + + + + + + + +
    字段名变量名必填类型示例值描述
    操作类型actStringsettle此API固定值
    商户IDpidInt1001
    商户密钥keyString89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i
    +

    返回结果:

    + + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    返回信息msgString查询结算记录成功!
    结算记录dataArray结算记录列表
    +
    +
    +

    + [API]查询单个订单 +

    +

    URL地址:api.php?act=order&pid={商户ID}&key={商户密钥}&out_trade_no={商户订单号}

    +

    请求参数说明:

    + + + + + + + + +
    字段名变量名必填类型示例值描述
    操作类型actStringorder此API固定值
    商户IDpidInt1001
    商户密钥keyString89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i
    商户订单号out_trade_noString20160806151343349
    +

    返回结果:

    + + + + + + + + + + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    返回信息msgString查询订单号成功!
    易支付订单号trade_noString2016080622555342651订单号
    商户订单号out_trade_noString20160806151343349商户系统内部的订单号
    支付方式typeStringalipayalipay:支付宝,tenpay:财付通,
    qqpay:QQ钱包,wxpay:微信支付
    商户IDpidInt1001发起支付的商户ID
    创建订单时间addtimeString2016-08-06 22:55:52
    完成交易时间endtimeString2016-08-06 22:55:52
    商品名称nameStringVIP会员
    商品金额moneyString1.00
    支付状态statusInt01为支付成功,0为未支付
    +
    +
    +

    + [API]批量查询订单 +

    +

    URL地址:api.php?act=orders&pid={商户ID}&key={商户密钥}

    +

    请求参数说明:

    + + + + + + + + + +
    字段名变量名必填类型示例值描述
    操作类型actStringorders此API固定值
    商户IDpidInt1001
    商户密钥keyString89unJUB8HZ54Hj7x4nUj56HN4nUzUJ8i
    查询订单数量limitInt20返回的订单数量,最大50
    页码pageInt1当前查询的页码
    +

    返回结果:

    + + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    返回信息msgString查询结算记录成功!
    订单列表dataArray订单列表
    +
    +
    +

    + [API]二维码下单接口 +

    +

    此接口可用于服务器后端发起支付请求,会返回支付二维码链接

    +

    URL地址:qrcode.php?pid={商户ID}&type={支付方式}&out_trade_no={商户订单号}&notify_url={服务器异步通知地址}&name={商品名称}&money={金额}&sign={签名字符串}&sign_type=MD5

    +

    请求参数说明:

    + + + + + + + + + + + + +
    字段名变量名必填类型示例值描述
    商户IDpidInt1001
    支付方式typeStringalipayqqpay:QQ钱包,wxpay:微信支付
    商户订单号out_trade_noString20160806151343349
    异步通知地址notify_urlStringhttp://www.cccyun.cc/notify_url.php服务器异步通知地址
    商品名称nameStringVIP会员
    商品金额moneyString1.00
    签名字符串signString202cb962ac59075b964b07152d234b70签名算法与支付宝签名算法相同
    签名类型sign_typeStringMD5默认为MD5
    +

    返回结果:

    + + + + + + + + + +
    字段名变量名类型示例值描述
    返回状态码codeInt11为成功,其它值为失败
    返回信息msgString下单成功!
    订单号trade_noString20160806151343349
    商户订单号out_trade_noString20160806151343349
    二维码链接code_urlStringweixin://wxpay/bizpayurl?pr=04IPMKM
    +
    +
    +
    +

    + 发起支付请求 +

    +

    URL地址:submit.php

    +

    POST数据:pid={商户ID}&type={支付方式}&out_trade_no={商户订单号}&notify_url={服务器异步通知地址}&return_url={页面跳转通知地址}&name={商品名称}&money={金额}&sitename={网站名称}&sign={签名字符串}&sign_type=MD5

    +

    请求参数说明:

    + + + + + + + + + + + + + + +
    字段名变量名必填类型示例值描述
    商户IDpidInt1001
    支付方式typeStringalipayalipay:支付宝,tenpay:财付通,
    qqpay:QQ钱包,wxpay:微信支付
    商户订单号out_trade_noString20160806151343349
    异步通知地址notify_urlStringhttp://www.cccyun.cc/notify_url.php服务器异步通知地址
    跳转通知地址return_urlStringhttp://www.cccyun.cc/return_url.php页面跳转通知地址
    商品名称nameStringVIP会员
    商品金额moneyString1.00
    网站名称sitenameString彩虹云任务
    签名字符串signString202cb962ac59075b964b07152d234b70签名算法与支付宝签名算法相同
    签名类型sign_typeStringMD5默认为MD5
    +
    +
    +

    + 支付结果通知 +

    +

    通知类型:服务器异步通知(notify_url)、页面跳转通知(return_url)

    +

    请求方式:GET

    +

    请求参数说明:

    + + + + + + + + + + + + + +
    字段名变量名必填类型示例值描述
    商户IDpidInt1001
    易支付订单号trade_noString20160806151343349021订单号
    商户订单号out_trade_noString20160806151343349商户系统内部的订单号
    支付方式typeStringalipayalipay:支付宝,tenpay:财付通,
    qqpay:QQ钱包,wxpay:微信支付,
    alipaycode:支付宝扫码,jdpay:京东支付
    商品名称nameStringVIP会员
    商品金额moneyString1.00
    支付状态trade_statusStringTRADE_SUCCESS
    签名字符串signString202cb962ac59075b964b07152d234b70签名算法与支付宝签名算法相同
    签名类型sign_typeStringMD5默认为MD5
    +
    +
    +
    +

    + SDK下载 +

    +
    +SDK.zip
    +SDK版本:V1.1 +
    +
    +
    +
    + \ No newline at end of file diff --git a/template/index1/foot.php b/template/index1/foot.php new file mode 100644 index 0000000..7d7ada3 --- /dev/null +++ b/template/index1/foot.php @@ -0,0 +1,68 @@ + + + +
    + + \ No newline at end of file diff --git a/template/index1/head.php b/template/index1/head.php new file mode 100644 index 0000000..e13784e --- /dev/null +++ b/template/index1/head.php @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + <?php echo $conf['title']?> + + + +
    + + \ No newline at end of file diff --git a/template/index1/index.php b/template/index1/index.php new file mode 100644 index 0000000..6b4b873 --- /dev/null +++ b/template/index1/index.php @@ -0,0 +1,206 @@ + + +
    +
    +

    + 云支付(全支付场景及渠道覆盖) +

    +

    + 支持支付宝、微信、银联、QQ钱包、快钱等主流支付渠道,让您拥有PC网页支付、扫码支付、手机APP支付、移动HTML5支付、微信公众号支付。 +

    +
    + +
    +
    +
    +
    +
    +

    + 云钱包 +

    +

    + 企业通过为用户提供统一虚拟账户,提升用户支付体验,为拓展增值服务提供基础 +

    +
    + +
    +
    +
    +
    +
    +

    + 云结算 +

    +

    + 通过简单的页面配置,可以替代复杂繁琐的人工资金结算业务,提高业务实时性,降低错误 +

    +
    + +
    +
    +
    +
    +
    +

    + 我们的优势 +

    +
    +
    +
    + +
    +
    +

    + 降低研发成本 +

    +
    +

    + 简单快速的接入方式,缩短开发周期,实现快速上线。 +

    +
    +
    +
    +
    +
    + +
    +
    +

    + 轻松结算对账 +

    +
    +

    + 降低财务人员在结算方面投入的时间和精力,客服人员也可以轻松查看账户明细 +

    +
    +
    +
    +
    +
    + +
    +
    +

    + 全面开放API +

    +
    +

    + 让企业更加自主的使用相关服务 +

    +
    +
    +
    +
    +
    + +
    +
    +

    + 安全稳定高效 +

    +
    +

    + HTTPS传输加密,REST API调用数字签名验证,ACL权限控制,严格保护客户数据的安全和隐私 +

    +
    +
    +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/template/index1/preview.png b/template/index1/preview.png new file mode 100644 index 0000000..c13f7a9 Binary files /dev/null and b/template/index1/preview.png differ diff --git a/template/index1/produceIntroduce.php b/template/index1/produceIntroduce.php new file mode 100644 index 0000000..84ae2f4 --- /dev/null +++ b/template/index1/produceIntroduce.php @@ -0,0 +1,271 @@ + +
    +
    +
    +
    + 支付渠道 +
    +
    +
    +
    + 开发中心 +
    +
    +
    +
    + 管理中心 +
    +
    +
    +
    + 运营中心 +
    +
    +
    +
    + 财务中心 +
    +
    +
    +
    + 开通说明 +
    +
    + +
    +
    +
    +

    + 支付渠道 +

    + +

    + PC网页支付 +

    +

    + ,PC网页支付支持支付宝网页支付、支付宝扫码支付、 微信扫码支付、银联网页支付、百度钱包等。 +

    + +

    + 扫码支付 +

    +

    + ,支持统一扫码支付,渠道扫码支付,包括支付宝扫码支付、 微信扫码支付等。 +

    + +

    + 微信公众号支付 +

    +

    + ,为微信公众号提供全套支付解决方案: 用户可在你的微信服务号内进行微信 支付,简单便捷! +

    + +

    + 手机APP支付 +

    +

    + ,为iOS/Android原生/H5 App提供支付解决方案:支持微信支付、支付宝支付、银联手机支付、百度钱包等。 +

    +
    +
    +

    + 开发中心 +

    +
    +
    +
    + +
    +

    + 集成开发 +

    +
    +
    +
    +
    +
    + +
    +

    + 安全设置 +

    +
    +
    +
    +
    +
    + +
    +

    + 渠道配置 +

    +
    +
    +
    +
    +
    +
    +

    + 管理中心 +

    +
    +
    +
    + +
    +

    + 开发人员 +

    +
    +
    +
    +
    +
    + +
    +

    + 运营人员 +

    +
    +
    +
    +
    +
    + +
    +

    + 财务人员 +

    +
    +
    +
    +
    +
    +
    +

    + 运营中心 +

    +
    +
    +
    + +
    +

    + 配置 +

    +

    + 风控、分账、费用、营销、结算 +

    +
    +
    +
    +
    +
    + +
    +

    + 报表 +

    +

    + 资金流水报表、日报表、汇总报表 +

    +
    +
    +
    +
    +
    +
    +

    + 财务中心 +

    +
    +
    +
    + +
    +

    + 对账 +

    +

    + 系统自动对账、对账结果查询、对账处理 +

    +
    +
    +
    +
    +
    + +
    +

    + 财务 +

    +

    + 余额调整、相关审核、批量出款、T+n自动结算 +

    +
    +
    +
    +
    +
    +
    +

    + 开通说明 +

    +
    +
    +
    + +
    +

    + 注册 +

    +

    + 您可以免费申请账号,使用开发的相关功能。 +

    +

    + 去注册 +

    +
    +
    +
    +
    +
    + +
    +

    + 集成 +

    +

    + 开发人员根据文档说明配置相关的信息.下载SDK与DEMO进行集成. +

    +

    + 查看文档    + 下载SDK +

    +
    +
    +
    +
    +
    + +
    +

    + 开通 +

    +

    + 正式开通如果有个性化定制需求,请线下联系我们 +

    +

    + 联系我们 +

    +
    +
    +
    +
    +
    +
    +
    + \ No newline at end of file diff --git a/template/index10/assets/css/animate.css b/template/index10/assets/css/animate.css new file mode 100644 index 0000000..6510d9e --- /dev/null +++ b/template/index10/assets/css/animate.css @@ -0,0 +1,3514 @@ +@charset "UTF-8"; + +/*! + * animate.css -http://daneden.me/animate + * Version - 3.6.0 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2018 Daniel Eden + */ + +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} + +@-webkit-keyframes bounce { + from, + 20%, + 53%, + 80%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 40%, + 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0); + } +} + +@keyframes bounce { + from, + 20%, + 53%, + 80%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 40%, + 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0); + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} + +@-webkit-keyframes flash { + from, + 50%, + to { + opacity: 1; + } + + 25%, + 75% { + opacity: 0; + } +} + +@keyframes flash { + from, + 50%, + to { + opacity: 1; + } + + 25%, + 75% { + opacity: 0; + } +} + +.flash { + -webkit-animation-name: flash; + animation-name: flash; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse; +} + +@keyframes yaobai { + 0% { + -webkit-transform: rotate(10deg); + -webkit-transform-origin: top center; + -moz-transform: rotate(10deg); + -moz-transform-origin: top center; + transform: rotate(10deg); + transform-origin: top center; + } + 100% { + -webkit-transform: rotate(-10deg); + -webkit-transform-origin: top center; + -moz-transform: rotate(-10deg); + -moz-transform-origin: top center; + transform: rotate(-10deg); + transform-origin: top center; + } +} + +@-webkit-keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.15, 1.15, 1); + transform: scale3d(1.15, 1.15, 1); + } + + 40% { + -webkit-transform: scale3d(1.35, 1.35, 1); + transform: scale3d(1.45, 1.35, 1); + } + + 50% { + -webkit-transform: scale3d(1, 1 , 1); + transform: scale3d(0.75, 1 , 1); + } + + 65% { + -webkit-transform: scale3d(1.35, 1.35, 1); + transform: scale3d(1.45, 1.35, 1); + } + + 75% { + -webkit-transform: scale3d(1.15, 1.15, 1); + transform: scale3d(1.15, 1.15, 1); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + + +@keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.15, 1.15, 1); + transform: scale3d(1.1, 1.1, 1); + } + + 40% { + -webkit-transform: scale3d(1.35, 1.35, 1); + transform: scale3d(1.3, 1.3, 1); + } + + 50% { + -webkit-transform: scale3d(1, 1 , 1); + transform: scale3d(1, 1 , 1); + } + + 65% { + -webkit-transform: scale3d(1.35, 1.35, 1); + transform: scale3d(1.3, 1.3, 1); + } + + 75% { + -webkit-transform: scale3d(1.15, 1.15, 1); + transform: scale3d(1.1, 1.1, 1); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand; +} + +@-webkit-keyframes shake { + from, + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +@keyframes shake { + from, + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +.shake { + -webkit-animation-name: shake; + animation-name: shake; +} + +@-webkit-keyframes headShake { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 6.5% { + -webkit-transform: translateX(-6px) rotateY(-9deg); + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + -webkit-transform: translateX(5px) rotateY(7deg); + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + -webkit-transform: translateX(-3px) rotateY(-5deg); + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + -webkit-transform: translateX(2px) rotateY(3deg); + transform: translateX(2px) rotateY(3deg); + } + + 50% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes headShake { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 6.5% { + -webkit-transform: translateX(-6px) rotateY(-9deg); + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + -webkit-transform: translateX(5px) rotateY(7deg); + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + -webkit-transform: translateX(-3px) rotateY(-5deg); + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + -webkit-transform: translateX(2px) rotateY(3deg); + transform: translateX(2px) rotateY(3deg); + } + + 50% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +.headShake { + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + -webkit-animation-name: headShake; + animation-name: headShake; +} + +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +@keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + -webkit-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; +} + +@-webkit-keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.tada { + -webkit-animation-name: tada; + animation-name: tada; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes wobble { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes wobble { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} + +@-webkit-keyframes jello { + from, + 11.1%, + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +@keyframes jello { + from, + 11.1%, + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +.jello { + -webkit-animation-name: jello; + animation-name: jello; + -webkit-transform-origin: center; + transform-origin: center; +} + +@-webkit-keyframes bounceIn { + from, + 20%, + 40%, + 60%, + 80%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(0.97, 0.97, 0.97); + transform: scale3d(0.97, 0.97, 0.97); + } + + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes bounceIn { + from, + 20%, + 40%, + 60%, + 80%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(0.97, 0.97, 0.97); + transform: scale3d(0.97, 0.97, 0.97); + } + + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.bounceIn { + -webkit-animation-duration: 0.75s; + animation-duration: 0.75s; + -webkit-animation-name: bounceIn; + animation-name: bounceIn; +} + +@-webkit-keyframes bounceInDown { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInDown { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} + +@-webkit-keyframes bounceInLeft { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInLeft { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; +} + +@-webkit-keyframes bounceInRight { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInRight { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; +} + +@-webkit-keyframes bounceInUp { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInUp { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp; +} + +@-webkit-keyframes bounceOut { + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + + 50%, + 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } +} + +@keyframes bounceOut { + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + + 50%, + 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } +} + +.bounceOut { + -webkit-animation-duration: 0.75s; + animation-duration: 0.75s; + -webkit-animation-name: bounceOut; + animation-name: bounceOut; +} + +@-webkit-keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown; +} + +@-webkit-keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft; +} + +@-webkit-keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight; +} + +@-webkit-keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp; +} + +@-webkit-keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; +} + +@-webkit-keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown; +} + +@-webkit-keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig; +} + +@-webkit-keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft; +} + +@-webkit-keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig; +} + +@-webkit-keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight; +} + +@-webkit-keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig; +} + +@-webkit-keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp; +} + +@-webkit-keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig; +} + +@-webkit-keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} + +@-webkit-keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown; +} + +@-webkit-keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig; +} + +@-webkit-keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft; +} + +@-webkit-keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig; +} + +@-webkit-keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight; +} + +@-webkit-keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig; +} + +@-webkit-keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp; +} + +@-webkit-keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig; +} + +@-webkit-keyframes flip { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +@keyframes flip { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + transform: perspective(400px) scale3d(0.95, 0.95, 0.95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip; +} + +@-webkit-keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInX; + animation-name: flipInX; +} + +@-webkit-keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; +} + +@-webkit-keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +.flipOutX { + -webkit-animation-duration: 0.75s; + animation-duration: 0.75s; + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +@-webkit-keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-animation-duration: 0.75s; + animation-duration: 0.75s; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; +} + +@-webkit-keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; +} + +@-webkit-keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +@keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; +} + +@-webkit-keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn; +} + +@-webkit-keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft; +} + +@-webkit-keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight; +} + +@-webkit-keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft; +} + +@-webkit-keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight; +} + +@-webkit-keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +@keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut; +} + +@-webkit-keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft; +} + +@-webkit-keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight; +} + +@-webkit-keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft; +} + +@-webkit-keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +@keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight; +} + +@-webkit-keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, + 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +@keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, + 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; + -webkit-animation-name: hinge; + animation-name: hinge; +} + +@-webkit-keyframes jackInTheBox { + from { + opacity: 0; + -webkit-transform: scale(0.1) rotate(30deg); + transform: scale(0.1) rotate(30deg); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + } + + 50% { + -webkit-transform: rotate(-10deg); + transform: rotate(-10deg); + } + + 70% { + -webkit-transform: rotate(3deg); + transform: rotate(3deg); + } + + to { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes jackInTheBox { + from { + opacity: 0; + -webkit-transform: scale(0.1) rotate(30deg); + transform: scale(0.1) rotate(30deg); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + } + + 50% { + -webkit-transform: rotate(-10deg); + transform: rotate(-10deg); + } + + 70% { + -webkit-transform: rotate(3deg); + transform: rotate(3deg); + } + + to { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} + +.jackInTheBox { + -webkit-animation-name: jackInTheBox; + animation-name: jackInTheBox; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +@keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut; +} + +@-webkit-keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 50% { + opacity: 1; + } +} + +@keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 50% { + opacity: 1; + } +} + +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn; +} + +@-webkit-keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInDown { + -webkit-animation-name: zoomInDown; + animation-name: zoomInDown; +} + +@-webkit-keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInLeft { + -webkit-animation-name: zoomInLeft; + animation-name: zoomInLeft; +} + +@-webkit-keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInRight { + -webkit-animation-name: zoomInRight; + animation-name: zoomInRight; +} + +@-webkit-keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInUp { + -webkit-animation-name: zoomInUp; + animation-name: zoomInUp; +} + +@-webkit-keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + to { + opacity: 0; + } +} + +@keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + to { + opacity: 0; + } +} + +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut; +} + +@-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomOutDown { + -webkit-animation-name: zoomOutDown; + animation-name: zoomOutDown; +} + +@-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); + transform: scale(0.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); + transform: scale(0.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +.zoomOutLeft { + -webkit-animation-name: zoomOutLeft; + animation-name: zoomOutLeft; +} + +@-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); + transform: scale(0.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); + transform: scale(0.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +.zoomOutRight { + -webkit-animation-name: zoomOutRight; + animation-name: zoomOutRight; +} + +@-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomOutUp { + -webkit-animation-name: zoomOutUp; + animation-name: zoomOutUp; +} + +@-webkit-keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown; +} + +@-webkit-keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft; +} + +@-webkit-keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight; +} + +@-webkit-keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInUp { + -webkit-animation-name: slideInUp; + animation-name: slideInUp; +} + +@-webkit-keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown; +} + +@-webkit-keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft; +} + +@-webkit-keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight; +} + +@-webkit-keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp; +} diff --git a/template/index10/assets/css/aos.css b/template/index10/assets/css/aos.css new file mode 100644 index 0000000..a317ce7 --- /dev/null +++ b/template/index10/assets/css/aos.css @@ -0,0 +1 @@ +[aos][aos][aos-easing=linear],body[aos-easing=linear] [aos]{-webkit-transition-timing-function:cubic-bezier(.25,.25,.75,.75);transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[aos][aos][aos-easing=ease],body[aos-easing=ease] [aos]{-webkit-transition-timing-function:cubic-bezier(.25,.1,.25,1);transition-timing-function:cubic-bezier(.25,.1,.25,1)}[aos][aos][aos-easing=ease-in],body[aos-easing=ease-in] [aos]{-webkit-transition-timing-function:cubic-bezier(.42,0,1,1);transition-timing-function:cubic-bezier(.42,0,1,1)}[aos][aos][aos-easing=ease-out],body[aos-easing=ease-out] [aos]{-webkit-transition-timing-function:cubic-bezier(0,0,.58,1);transition-timing-function:cubic-bezier(0,0,.58,1)}[aos][aos][aos-easing=ease-in-out],body[aos-easing=ease-in-out] [aos]{-webkit-transition-timing-function:cubic-bezier(.42,0,.58,1);transition-timing-function:cubic-bezier(.42,0,.58,1)}[aos][aos][aos-easing=ease-in-back],body[aos-easing=ease-in-back] [aos]{-webkit-transition-timing-function:cubic-bezier(.6,-.28,.735,.045);transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[aos][aos][aos-easing=ease-out-back],body[aos-easing=ease-out-back] [aos]{-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.275);transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[aos][aos][aos-easing=ease-in-out-back],body[aos-easing=ease-in-out-back] [aos]{-webkit-transition-timing-function:cubic-bezier(.68,-.55,.265,1.55);transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[aos][aos][aos-easing=ease-in-sine],body[aos-easing=ease-in-sine] [aos]{-webkit-transition-timing-function:cubic-bezier(.47,0,.745,.715);transition-timing-function:cubic-bezier(.47,0,.745,.715)}[aos][aos][aos-easing=ease-out-sine],body[aos-easing=ease-out-sine] [aos]{-webkit-transition-timing-function:cubic-bezier(.39,.575,.565,1);transition-timing-function:cubic-bezier(.39,.575,.565,1)}[aos][aos][aos-easing=ease-in-out-sine],body[aos-easing=ease-in-out-sine] [aos]{-webkit-transition-timing-function:cubic-bezier(.445,.05,.55,.95);transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[aos][aos][aos-easing=ease-in-quad],[aos][aos][aos-easing=ease-in-cubic],[aos][aos][aos-easing=ease-in-quart],body[aos-easing=ease-in-quad] [aos],body[aos-easing=ease-in-cubic] [aos],body[aos-easing=ease-in-quart] [aos]{-webkit-transition-timing-function:cubic-bezier(.55,.085,.68,.53);transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[aos][aos][aos-easing=ease-out-quad],[aos][aos][aos-easing=ease-out-cubic],[aos][aos][aos-easing=ease-out-quart],body[aos-easing=ease-out-quad] [aos],body[aos-easing=ease-out-cubic] [aos],body[aos-easing=ease-out-quart] [aos]{-webkit-transition-timing-function:cubic-bezier(.25,.46,.45,.94);transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[aos][aos][aos-easing=ease-in-out-quad],[aos][aos][aos-easing=ease-in-out-cubic],[aos][aos][aos-easing=ease-in-out-quart],body[aos-easing=ease-in-out-quad] [aos],body[aos-easing=ease-in-out-cubic] [aos],body[aos-easing=ease-in-out-quart] [aos]{-webkit-transition-timing-function:cubic-bezier(.455,.03,.515,.955);transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[aos][aos][aos-duration='50'],body[aos-duration='50'] [aos]{-webkit-transition-duration:50ms;transition-duration:50ms}[aos][aos][aos-duration='100'],body[aos-duration='100'] [aos]{-webkit-transition-duration:.1s;transition-duration:.1s}[aos][aos][aos-duration='150'],body[aos-duration='150'] [aos]{-webkit-transition-duration:150ms;transition-duration:150ms}[aos][aos][aos-duration='200'],body[aos-duration='200'] [aos]{-webkit-transition-duration:.2s;transition-duration:.2s}[aos][aos][aos-duration='250'],body[aos-duration='250'] [aos]{-webkit-transition-duration:250ms;transition-duration:250ms}[aos][aos][aos-duration='300'],body[aos-duration='300'] [aos]{-webkit-transition-duration:.3s;transition-duration:.3s}[aos][aos][aos-duration='350'],body[aos-duration='350'] [aos]{-webkit-transition-duration:350ms;transition-duration:350ms}[aos][aos][aos-duration='400'],body[aos-duration='400'] [aos]{-webkit-transition-duration:.4s;transition-duration:.4s}[aos][aos][aos-duration='450'],body[aos-duration='450'] [aos]{-webkit-transition-duration:450ms;transition-duration:450ms}[aos][aos][aos-duration='500'],body[aos-duration='500'] [aos]{-webkit-transition-duration:.5s;transition-duration:.5s}[aos][aos][aos-duration='550'],body[aos-duration='550'] [aos]{-webkit-transition-duration:550ms;transition-duration:550ms}[aos][aos][aos-duration='600'],body[aos-duration='600'] [aos]{-webkit-transition-duration:.6s;transition-duration:.6s}[aos][aos][aos-duration='650'],body[aos-duration='650'] [aos]{-webkit-transition-duration:650ms;transition-duration:650ms}[aos][aos][aos-duration='700'],body[aos-duration='700'] [aos]{-webkit-transition-duration:.7s;transition-duration:.7s}[aos][aos][aos-duration='750'],body[aos-duration='750'] [aos]{-webkit-transition-duration:750ms;transition-duration:750ms}[aos][aos][aos-duration='800'],body[aos-duration='800'] [aos]{-webkit-transition-duration:.8s;transition-duration:.8s}[aos][aos][aos-duration='850'],body[aos-duration='850'] [aos]{-webkit-transition-duration:850ms;transition-duration:850ms}[aos][aos][aos-duration='900'],body[aos-duration='900'] [aos]{-webkit-transition-duration:.9s;transition-duration:.9s}[aos][aos][aos-duration='950'],body[aos-duration='950'] [aos]{-webkit-transition-duration:950ms;transition-duration:950ms}[aos][aos][aos-duration='1000'],body[aos-duration='1000'] [aos]{-webkit-transition-duration:1s;transition-duration:1s}[aos][aos][aos-duration='1050'],body[aos-duration='1050'] [aos]{-webkit-transition-duration:1.05s;transition-duration:1.05s}[aos][aos][aos-duration='1100'],body[aos-duration='1100'] [aos]{-webkit-transition-duration:1.1s;transition-duration:1.1s}[aos][aos][aos-duration='1150'],body[aos-duration='1150'] [aos]{-webkit-transition-duration:1.15s;transition-duration:1.15s}[aos][aos][aos-duration='1200'],body[aos-duration='1200'] [aos]{-webkit-transition-duration:1.2s;transition-duration:1.2s}[aos][aos][aos-duration='1250'],body[aos-duration='1250'] [aos]{-webkit-transition-duration:1.25s;transition-duration:1.25s}[aos][aos][aos-duration='1300'],body[aos-duration='1300'] [aos]{-webkit-transition-duration:1.3s;transition-duration:1.3s}[aos][aos][aos-duration='1350'],body[aos-duration='1350'] [aos]{-webkit-transition-duration:1.35s;transition-duration:1.35s}[aos][aos][aos-duration='1400'],body[aos-duration='1400'] [aos]{-webkit-transition-duration:1.4s;transition-duration:1.4s}[aos][aos][aos-duration='1450'],body[aos-duration='1450'] [aos]{-webkit-transition-duration:1.45s;transition-duration:1.45s}[aos][aos][aos-duration='1500'],body[aos-duration='1500'] [aos]{-webkit-transition-duration:1.5s;transition-duration:1.5s}[aos][aos][aos-duration='1550'],body[aos-duration='1550'] [aos]{-webkit-transition-duration:1.55s;transition-duration:1.55s}[aos][aos][aos-duration='1600'],body[aos-duration='1600'] [aos]{-webkit-transition-duration:1.6s;transition-duration:1.6s}[aos][aos][aos-duration='1650'],body[aos-duration='1650'] [aos]{-webkit-transition-duration:1.65s;transition-duration:1.65s}[aos][aos][aos-duration='1700'],body[aos-duration='1700'] [aos]{-webkit-transition-duration:1.7s;transition-duration:1.7s}[aos][aos][aos-duration='1750'],body[aos-duration='1750'] [aos]{-webkit-transition-duration:1.75s;transition-duration:1.75s}[aos][aos][aos-duration='1800'],body[aos-duration='1800'] [aos]{-webkit-transition-duration:1.8s;transition-duration:1.8s}[aos][aos][aos-duration='1850'],body[aos-duration='1850'] [aos]{-webkit-transition-duration:1.85s;transition-duration:1.85s}[aos][aos][aos-duration='1900'],body[aos-duration='1900'] [aos]{-webkit-transition-duration:1.9s;transition-duration:1.9s}[aos][aos][aos-duration='1950'],body[aos-duration='1950'] [aos]{-webkit-transition-duration:1.95s;transition-duration:1.95s}[aos][aos][aos-duration='2000'],body[aos-duration='2000'] [aos]{-webkit-transition-duration:2s;transition-duration:2s}[aos][aos][aos-duration='2050'],body[aos-duration='2050'] [aos]{-webkit-transition-duration:2.05s;transition-duration:2.05s}[aos][aos][aos-duration='2100'],body[aos-duration='2100'] [aos]{-webkit-transition-duration:2.1s;transition-duration:2.1s}[aos][aos][aos-duration='2150'],body[aos-duration='2150'] [aos]{-webkit-transition-duration:2.15s;transition-duration:2.15s}[aos][aos][aos-duration='2200'],body[aos-duration='2200'] [aos]{-webkit-transition-duration:2.2s;transition-duration:2.2s}[aos][aos][aos-duration='2250'],body[aos-duration='2250'] [aos]{-webkit-transition-duration:2.25s;transition-duration:2.25s}[aos][aos][aos-duration='2300'],body[aos-duration='2300'] [aos]{-webkit-transition-duration:2.3s;transition-duration:2.3s}[aos][aos][aos-duration='2350'],body[aos-duration='2350'] [aos]{-webkit-transition-duration:2.35s;transition-duration:2.35s}[aos][aos][aos-duration='2400'],body[aos-duration='2400'] [aos]{-webkit-transition-duration:2.4s;transition-duration:2.4s}[aos][aos][aos-duration='2450'],body[aos-duration='2450'] [aos]{-webkit-transition-duration:2.45s;transition-duration:2.45s}[aos][aos][aos-duration='2500'],body[aos-duration='2500'] [aos]{-webkit-transition-duration:2.5s;transition-duration:2.5s}[aos][aos][aos-duration='2550'],body[aos-duration='2550'] [aos]{-webkit-transition-duration:2.55s;transition-duration:2.55s}[aos][aos][aos-duration='2600'],body[aos-duration='2600'] [aos]{-webkit-transition-duration:2.6s;transition-duration:2.6s}[aos][aos][aos-duration='2650'],body[aos-duration='2650'] [aos]{-webkit-transition-duration:2.65s;transition-duration:2.65s}[aos][aos][aos-duration='2700'],body[aos-duration='2700'] [aos]{-webkit-transition-duration:2.7s;transition-duration:2.7s}[aos][aos][aos-duration='2750'],body[aos-duration='2750'] [aos]{-webkit-transition-duration:2.75s;transition-duration:2.75s}[aos][aos][aos-duration='2800'],body[aos-duration='2800'] [aos]{-webkit-transition-duration:2.8s;transition-duration:2.8s}[aos][aos][aos-duration='2850'],body[aos-duration='2850'] [aos]{-webkit-transition-duration:2.85s;transition-duration:2.85s}[aos][aos][aos-duration='2900'],body[aos-duration='2900'] [aos]{-webkit-transition-duration:2.9s;transition-duration:2.9s}[aos][aos][aos-duration='2950'],body[aos-duration='2950'] [aos]{-webkit-transition-duration:2.95s;transition-duration:2.95s}[aos][aos][aos-duration='3000'],body[aos-duration='3000'] [aos]{-webkit-transition-duration:3s;transition-duration:3s}[aos][aos][aos-delay='50'],body[aos-delay='50'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='50'].aos-animate,body[aos-delay='50'] [aos].aos-animate{-webkit-transition-delay:50ms;transition-delay:50ms}[aos][aos][aos-delay='100'],body[aos-delay='100'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='100'].aos-animate,body[aos-delay='100'] [aos].aos-animate{-webkit-transition-delay:.1s;transition-delay:.1s}[aos][aos][aos-delay='150'],body[aos-delay='150'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='150'].aos-animate,body[aos-delay='150'] [aos].aos-animate{-webkit-transition-delay:150ms;transition-delay:150ms}[aos][aos][aos-delay='200'],body[aos-delay='200'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='200'].aos-animate,body[aos-delay='200'] [aos].aos-animate{-webkit-transition-delay:.2s;transition-delay:.2s}[aos][aos][aos-delay='250'],body[aos-delay='250'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='250'].aos-animate,body[aos-delay='250'] [aos].aos-animate{-webkit-transition-delay:250ms;transition-delay:250ms}[aos][aos][aos-delay='300'],body[aos-delay='300'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='300'].aos-animate,body[aos-delay='300'] [aos].aos-animate{-webkit-transition-delay:.3s;transition-delay:.3s}[aos][aos][aos-delay='350'],body[aos-delay='350'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='350'].aos-animate,body[aos-delay='350'] [aos].aos-animate{-webkit-transition-delay:350ms;transition-delay:350ms}[aos][aos][aos-delay='400'],body[aos-delay='400'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='400'].aos-animate,body[aos-delay='400'] [aos].aos-animate{-webkit-transition-delay:.4s;transition-delay:.4s}[aos][aos][aos-delay='450'],body[aos-delay='450'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='450'].aos-animate,body[aos-delay='450'] [aos].aos-animate{-webkit-transition-delay:450ms;transition-delay:450ms}[aos][aos][aos-delay='500'],body[aos-delay='500'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='500'].aos-animate,body[aos-delay='500'] [aos].aos-animate{-webkit-transition-delay:.5s;transition-delay:.5s}[aos][aos][aos-delay='550'],body[aos-delay='550'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='550'].aos-animate,body[aos-delay='550'] [aos].aos-animate{-webkit-transition-delay:550ms;transition-delay:550ms}[aos][aos][aos-delay='600'],body[aos-delay='600'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='600'].aos-animate,body[aos-delay='600'] [aos].aos-animate{-webkit-transition-delay:.6s;transition-delay:.6s}[aos][aos][aos-delay='650'],body[aos-delay='650'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='650'].aos-animate,body[aos-delay='650'] [aos].aos-animate{-webkit-transition-delay:650ms;transition-delay:650ms}[aos][aos][aos-delay='700'],body[aos-delay='700'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='700'].aos-animate,body[aos-delay='700'] [aos].aos-animate{-webkit-transition-delay:.7s;transition-delay:.7s}[aos][aos][aos-delay='750'],body[aos-delay='750'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='750'].aos-animate,body[aos-delay='750'] [aos].aos-animate{-webkit-transition-delay:750ms;transition-delay:750ms}[aos][aos][aos-delay='800'],body[aos-delay='800'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='800'].aos-animate,body[aos-delay='800'] [aos].aos-animate{-webkit-transition-delay:.8s;transition-delay:.8s}[aos][aos][aos-delay='850'],body[aos-delay='850'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='850'].aos-animate,body[aos-delay='850'] [aos].aos-animate{-webkit-transition-delay:850ms;transition-delay:850ms}[aos][aos][aos-delay='900'],body[aos-delay='900'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='900'].aos-animate,body[aos-delay='900'] [aos].aos-animate{-webkit-transition-delay:.9s;transition-delay:.9s}[aos][aos][aos-delay='950'],body[aos-delay='950'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='950'].aos-animate,body[aos-delay='950'] [aos].aos-animate{-webkit-transition-delay:950ms;transition-delay:950ms}[aos][aos][aos-delay='1000'],body[aos-delay='1000'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1000'].aos-animate,body[aos-delay='1000'] [aos].aos-animate{-webkit-transition-delay:1s;transition-delay:1s}[aos][aos][aos-delay='1050'],body[aos-delay='1050'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1050'].aos-animate,body[aos-delay='1050'] [aos].aos-animate{-webkit-transition-delay:1.05s;transition-delay:1.05s}[aos][aos][aos-delay='1100'],body[aos-delay='1100'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1100'].aos-animate,body[aos-delay='1100'] [aos].aos-animate{-webkit-transition-delay:1.1s;transition-delay:1.1s}[aos][aos][aos-delay='1150'],body[aos-delay='1150'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1150'].aos-animate,body[aos-delay='1150'] [aos].aos-animate{-webkit-transition-delay:1.15s;transition-delay:1.15s}[aos][aos][aos-delay='1200'],body[aos-delay='1200'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1200'].aos-animate,body[aos-delay='1200'] [aos].aos-animate{-webkit-transition-delay:1.2s;transition-delay:1.2s}[aos][aos][aos-delay='1250'],body[aos-delay='1250'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1250'].aos-animate,body[aos-delay='1250'] [aos].aos-animate{-webkit-transition-delay:1.25s;transition-delay:1.25s}[aos][aos][aos-delay='1300'],body[aos-delay='1300'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1300'].aos-animate,body[aos-delay='1300'] [aos].aos-animate{-webkit-transition-delay:1.3s;transition-delay:1.3s}[aos][aos][aos-delay='1350'],body[aos-delay='1350'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1350'].aos-animate,body[aos-delay='1350'] [aos].aos-animate{-webkit-transition-delay:1.35s;transition-delay:1.35s}[aos][aos][aos-delay='1400'],body[aos-delay='1400'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1400'].aos-animate,body[aos-delay='1400'] [aos].aos-animate{-webkit-transition-delay:1.4s;transition-delay:1.4s}[aos][aos][aos-delay='1450'],body[aos-delay='1450'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1450'].aos-animate,body[aos-delay='1450'] [aos].aos-animate{-webkit-transition-delay:1.45s;transition-delay:1.45s}[aos][aos][aos-delay='1500'],body[aos-delay='1500'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1500'].aos-animate,body[aos-delay='1500'] [aos].aos-animate{-webkit-transition-delay:1.5s;transition-delay:1.5s}[aos][aos][aos-delay='1550'],body[aos-delay='1550'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1550'].aos-animate,body[aos-delay='1550'] [aos].aos-animate{-webkit-transition-delay:1.55s;transition-delay:1.55s}[aos][aos][aos-delay='1600'],body[aos-delay='1600'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1600'].aos-animate,body[aos-delay='1600'] [aos].aos-animate{-webkit-transition-delay:1.6s;transition-delay:1.6s}[aos][aos][aos-delay='1650'],body[aos-delay='1650'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1650'].aos-animate,body[aos-delay='1650'] [aos].aos-animate{-webkit-transition-delay:1.65s;transition-delay:1.65s}[aos][aos][aos-delay='1700'],body[aos-delay='1700'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1700'].aos-animate,body[aos-delay='1700'] [aos].aos-animate{-webkit-transition-delay:1.7s;transition-delay:1.7s}[aos][aos][aos-delay='1750'],body[aos-delay='1750'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1750'].aos-animate,body[aos-delay='1750'] [aos].aos-animate{-webkit-transition-delay:1.75s;transition-delay:1.75s}[aos][aos][aos-delay='1800'],body[aos-delay='1800'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1800'].aos-animate,body[aos-delay='1800'] [aos].aos-animate{-webkit-transition-delay:1.8s;transition-delay:1.8s}[aos][aos][aos-delay='1850'],body[aos-delay='1850'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1850'].aos-animate,body[aos-delay='1850'] [aos].aos-animate{-webkit-transition-delay:1.85s;transition-delay:1.85s}[aos][aos][aos-delay='1900'],body[aos-delay='1900'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1900'].aos-animate,body[aos-delay='1900'] [aos].aos-animate{-webkit-transition-delay:1.9s;transition-delay:1.9s}[aos][aos][aos-delay='1950'],body[aos-delay='1950'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1950'].aos-animate,body[aos-delay='1950'] [aos].aos-animate{-webkit-transition-delay:1.95s;transition-delay:1.95s}[aos][aos][aos-delay='2000'],body[aos-delay='2000'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2000'].aos-animate,body[aos-delay='2000'] [aos].aos-animate{-webkit-transition-delay:2s;transition-delay:2s}[aos][aos][aos-delay='2050'],body[aos-delay='2050'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2050'].aos-animate,body[aos-delay='2050'] [aos].aos-animate{-webkit-transition-delay:2.05s;transition-delay:2.05s}[aos][aos][aos-delay='2100'],body[aos-delay='2100'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2100'].aos-animate,body[aos-delay='2100'] [aos].aos-animate{-webkit-transition-delay:2.1s;transition-delay:2.1s}[aos][aos][aos-delay='2150'],body[aos-delay='2150'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2150'].aos-animate,body[aos-delay='2150'] [aos].aos-animate{-webkit-transition-delay:2.15s;transition-delay:2.15s}[aos][aos][aos-delay='2200'],body[aos-delay='2200'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2200'].aos-animate,body[aos-delay='2200'] [aos].aos-animate{-webkit-transition-delay:2.2s;transition-delay:2.2s}[aos][aos][aos-delay='2250'],body[aos-delay='2250'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2250'].aos-animate,body[aos-delay='2250'] [aos].aos-animate{-webkit-transition-delay:2.25s;transition-delay:2.25s}[aos][aos][aos-delay='2300'],body[aos-delay='2300'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2300'].aos-animate,body[aos-delay='2300'] [aos].aos-animate{-webkit-transition-delay:2.3s;transition-delay:2.3s}[aos][aos][aos-delay='2350'],body[aos-delay='2350'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2350'].aos-animate,body[aos-delay='2350'] [aos].aos-animate{-webkit-transition-delay:2.35s;transition-delay:2.35s}[aos][aos][aos-delay='2400'],body[aos-delay='2400'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2400'].aos-animate,body[aos-delay='2400'] [aos].aos-animate{-webkit-transition-delay:2.4s;transition-delay:2.4s}[aos][aos][aos-delay='2450'],body[aos-delay='2450'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2450'].aos-animate,body[aos-delay='2450'] [aos].aos-animate{-webkit-transition-delay:2.45s;transition-delay:2.45s}[aos][aos][aos-delay='2500'],body[aos-delay='2500'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2500'].aos-animate,body[aos-delay='2500'] [aos].aos-animate{-webkit-transition-delay:2.5s;transition-delay:2.5s}[aos][aos][aos-delay='2550'],body[aos-delay='2550'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2550'].aos-animate,body[aos-delay='2550'] [aos].aos-animate{-webkit-transition-delay:2.55s;transition-delay:2.55s}[aos][aos][aos-delay='2600'],body[aos-delay='2600'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2600'].aos-animate,body[aos-delay='2600'] [aos].aos-animate{-webkit-transition-delay:2.6s;transition-delay:2.6s}[aos][aos][aos-delay='2650'],body[aos-delay='2650'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2650'].aos-animate,body[aos-delay='2650'] [aos].aos-animate{-webkit-transition-delay:2.65s;transition-delay:2.65s}[aos][aos][aos-delay='2700'],body[aos-delay='2700'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2700'].aos-animate,body[aos-delay='2700'] [aos].aos-animate{-webkit-transition-delay:2.7s;transition-delay:2.7s}[aos][aos][aos-delay='2750'],body[aos-delay='2750'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2750'].aos-animate,body[aos-delay='2750'] [aos].aos-animate{-webkit-transition-delay:2.75s;transition-delay:2.75s}[aos][aos][aos-delay='2800'],body[aos-delay='2800'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2800'].aos-animate,body[aos-delay='2800'] [aos].aos-animate{-webkit-transition-delay:2.8s;transition-delay:2.8s}[aos][aos][aos-delay='2850'],body[aos-delay='2850'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2850'].aos-animate,body[aos-delay='2850'] [aos].aos-animate{-webkit-transition-delay:2.85s;transition-delay:2.85s}[aos][aos][aos-delay='2900'],body[aos-delay='2900'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2900'].aos-animate,body[aos-delay='2900'] [aos].aos-animate{-webkit-transition-delay:2.9s;transition-delay:2.9s}[aos][aos][aos-delay='2950'],body[aos-delay='2950'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2950'].aos-animate,body[aos-delay='2950'] [aos].aos-animate{-webkit-transition-delay:2.95s;transition-delay:2.95s}[aos][aos][aos-delay='3000'],body[aos-delay='3000'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='3000'].aos-animate,body[aos-delay='3000'] [aos].aos-animate{-webkit-transition-delay:3s;transition-delay:3s}[aos^=fade][aos^=fade]{opacity:0;-webkit-transition-property:all;transition-property:all}[aos^=fade][aos^=fade].aos-animate{opacity:1}[aos=fade-up]{-webkit-transform:translate(0,100px);-ms-transform:translate(0,100px);transform:translate(0,100px)}[aos=fade-up].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-down]{-webkit-transform:translate(0,-100px);-ms-transform:translate(0,-100px);transform:translate(0,-100px)}[aos=fade-down].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-right]{-webkit-transform:translate(-100px,0);-ms-transform:translate(-100px,0);transform:translate(-100px,0)}[aos=fade-right].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-left]{-webkit-transform:translate(100px,0);-ms-transform:translate(100px,0);transform:translate(100px,0)}[aos=fade-left].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-up-right]{-webkit-transform:translate(-100px,100px);-ms-transform:translate(-100px,100px);transform:translate(-100px,100px)}[aos=fade-up-right].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-up-left]{-webkit-transform:translate(100px,100px);-ms-transform:translate(100px,100px);transform:translate(100px,100px)}[aos=fade-up-left].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-down-right]{-webkit-transform:translate(-100px,-100px);-ms-transform:translate(-100px,-100px);transform:translate(-100px,-100px)}[aos=fade-down-right].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-down-left]{-webkit-transform:translate(100px,-100px);-ms-transform:translate(100px,-100px);transform:translate(100px,-100px)}[aos=fade-down-left].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos^=zoom][aos^=zoom]{opacity:0;-webkit-transition-property:all;transition-property:all}[aos^=zoom][aos^=zoom].aos-animate{opacity:1}[aos=zoom-in]{-webkit-transform:scale(.6);-ms-transform:scale(.6);transform:scale(.6)}[aos=zoom-in].aos-animate{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}[aos=zoom-in-up]{-webkit-transform:translate(0,100px) scale(.6);-ms-transform:translate(0,100px) scale(.6);transform:translate(0,100px) scale(.6)}[aos=zoom-in-up].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-in-down]{-webkit-transform:translate(0,-100px) scale(.6);-ms-transform:translate(0,-100px) scale(.6);transform:translate(0,-100px) scale(.6)}[aos=zoom-in-down].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-in-right]{-webkit-transform:translate(-100px,0) scale(.6);-ms-transform:translate(-100px,0) scale(.6);transform:translate(-100px,0) scale(.6)}[aos=zoom-in-right].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-in-left]{-webkit-transform:translate(100px,0) scale(.6);-ms-transform:translate(100px,0) scale(.6);transform:translate(100px,0) scale(.6)}[aos=zoom-in-left].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-out]{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}[aos=zoom-out].aos-animate{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}[aos=zoom-out-up]{-webkit-transform:translate(0,100px) scale(1.2);-ms-transform:translate(0,100px) scale(1.2);transform:translate(0,100px) scale(1.2)}[aos=zoom-out-up].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-out-down]{-webkit-transform:translate(0,-100px) scale(1.2);-ms-transform:translate(0,-100px) scale(1.2);transform:translate(0,-100px) scale(1.2)}[aos=zoom-out-down].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-out-right]{-webkit-transform:translate(-100px,0) scale(1.2);-ms-transform:translate(-100px,0) scale(1.2);transform:translate(-100px,0) scale(1.2)}[aos=zoom-out-right].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-out-left]{-webkit-transform:translate(100px,0) scale(1.2);-ms-transform:translate(100px,0) scale(1.2);transform:translate(100px,0) scale(1.2)}[aos=zoom-out-left].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=slide-up]{-webkit-transform:translate(0,100%);-ms-transform:translate(0,100%);transform:translate(0,100%)}[aos=slide-up].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=slide-down]{-webkit-transform:translate(0,-100%);-ms-transform:translate(0,-100%);transform:translate(0,-100%)}[aos=slide-down].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=slide-right]{-webkit-transform:translate(-100%,0);-ms-transform:translate(-100%,0);transform:translate(-100%,0)}[aos=slide-right].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=slide-left]{-webkit-transform:translate(100%,0);-ms-transform:translate(100%,0);transform:translate(100%,0)}[aos=slide-left].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos^=flip]{-webkit-backface-visibility:hidden;backface-visibility:hidden}[aos=flip-left]{-webkit-transform:perspective(2500px) rotateY(-100deg);transform:perspective(2500px) rotateY(-100deg)}[aos=flip-left].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}[aos=flip-right]{-webkit-transform:perspective(2500px) rotateY(100deg);transform:perspective(2500px) rotateY(100deg)}[aos=flip-right].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}[aos=flip-up]{-webkit-transform:perspective(2500px) rotateX(-100deg);transform:perspective(2500px) rotateX(-100deg)}[aos=flip-up].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}[aos=flip-down]{-webkit-transform:perspective(2500px) rotateX(100deg);transform:perspective(2500px) rotateX(100deg)}[aos=flip-down].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)} \ No newline at end of file diff --git a/template/index10/assets/css/common_contact.css b/template/index10/assets/css/common_contact.css new file mode 100644 index 0000000..63ebb93 --- /dev/null +++ b/template/index10/assets/css/common_contact.css @@ -0,0 +1,155 @@ +@charset "utf-8"; +/*联系我们-样式*/ +.contact_comBox{ + width: 100%; +} +.contact_comBox .contactUs{ + width: 100%; +} +/*列表页-联系我们-开始*/ +.contact_listBox{ + background: url(../images/map_bg.png) no-repeat left 450px/424px 450px; + padding-bottom: 150px; +} +.contact_comBox .contactUs_content{ + margin-top: -300px; +} +.contact_comBox .contactUs .contactUs_listMap{ + width: 1200px; + height: 600px; + margin-top: 40px; +} +.iw_poi_title {color:#CC5522;font-size:14px;font-weight:bold;overflow:hidden;padding-right:13px;white-space:nowrap} +.iw_poi_content {font:12px arial,sans-serif;overflow:visible;padding-top:4px;white-space:-moz-pre-wrap;word-wrap:break-word} +.contact_comBox .contactUs .contactUs_listMap .listMap_mapBox{ + width: 1200px; + height: 600px; + border: 1px solid #CCCCCC; +} +/*列表页-联系我们-结束*/ +.contact_comBox .contactUs_index{ + height: 572px; + background: url(../images/contactus_bg.png) no-repeat left center/766px 572px; + margin-top: 130px; +} +.contact_comBox .contactUs .contactUs_title{ + width: 100%; + text-align: center; + font-size: 30px; +} +.contact_comBox .contactUs .contactUs_indexTitle{ + color: #000000; +} +.contact_comBox .contactUs .contactUs_listTitle{ + color: #FFFFFF; +} +.contact_comBox .contactUs .contactUs_line{ + width: 60px; + height: 3px; + background: #d2d2d2; + margin: 10px auto; +} +.contact_comBox .contactUs .contactUs_listTxt{ + width: 100%; + text-align: center; + font-size: 18px; + color: #FFFFFF; + padding: 10px 0; +} +.contact_comBox .contactUs .contactUs_main{ + width: 100%; + overflow: hidden; +} +.contact_comBox .contactUs .contactUs_main li{ + width: 360px; + height: 240px; + background: #FFFFFF; + border-radius: 7px; + position: relative; + -webkit-box-shadow: 0 3px 8px rgba(0,0,0,.1), 3px 0 8px rgba(0,0,0,.1), 0 4px 24px rgba(0,0,0,.05); + box-shadow: 0 3px 8px rgba(0,0,0,.1), 3px 0 8px rgba(0,0,0,.1), 0 4px 24px rgba(0,0,0,.05); + transition: all 0.3s; +} +.contact_comBox .contactUs .contactUs_main .contactUs_liMargin1{ + margin-left: 15px; + margin-right: 15px; + margin-top: 50px; + margin-bottom: 20px; +} +.contact_comBox .contactUs .contactUs_main .contactUs_liMargin2{ + margin-left: 30px; + margin-right: 30px; + margin-top: 50px; + margin-bottom: 20px; +} +.contact_comBox .contactUs .contactUs_main li .contactUs_icon{ + display: block; + margin: 40px auto 20px auto; +} +.contact_comBox .contactUs .contactUs_main li .contactUs_icon1{ + width: 23px; + height: 29px; + background: url(../images/address1.png) no-repeat; + background-size: 100%; +} +.contact_comBox .contactUs .contactUs_main li .contactUs_icon2{ + width: 31px; + height: 26px; + background: url(../images/tell.png) no-repeat; + background-size: 100%; +} +.contact_comBox .contactUs .contactUs_main li .contactUs_icon3{ + width: 28px; + height: 20px; + background: url(../images/email.png) no-repeat; + background-size: 100%; +} +.contact_comBox .contactUs .contactUs_main li:hover{ + margin-top: 28px; +} +.contact_comBox .contactUs .contactUs_main li:hover .contactUs_mainLine{ + background: #4e7dff; +} +.contact_comBox .contactUs .contactUs_main li:hover .contactUs_mainBot{ + display: block; +} +.contact_comBox .contactUs .contactUs_main li:hover .contactUs_icon1{ + background: url(../images/address.png) no-repeat; +} +.contact_comBox .contactUs .contactUs_main li:hover .contactUs_icon2{ + background: url(../images/tell1.png) no-repeat; +} +.contact_comBox .contactUs .contactUs_main li:hover .contactUs_icon3{ + background: url(../images/email1.png) no-repeat; +} +.contact_comBox .contactUs .contactUs_main li .contactUs_mainTit{ + display: block; + width: 100%; + text-align: center; + font-size: 20px; + color: #BBBBBB; +} +.contact_comBox .contactUs .contactUs_main li .contactUs_mainLine{ + display: block; + width: 60px; + margin: 15px auto 30px auto; + height: 4px; + background: #707070; +} +.contact_comBox .contactUs .contactUs_main li .contactUs_mainTxt{ + display: block; + width: 100%; + text-align: center; + font-size: 18px; + color: #909090; +} +.contact_comBox .contactUs .contactUs_main li .contactUs_mainBot{ + display: block; + width: 100%; + height: 8px; + background: #4e7dff; + position: absolute; + bottom: 0; + left: 0; + display: none; +} \ No newline at end of file diff --git a/template/index10/assets/css/default.css b/template/index10/assets/css/default.css new file mode 100644 index 0000000..863b382 --- /dev/null +++ b/template/index10/assets/css/default.css @@ -0,0 +1,57 @@ +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dd, dl, dt, li, ol, ul, fieldset, form, label, legend{ + +margin: 0; padding: 0; border: 0; outline: 0; font-weight: inherit; font-style: inherit; font-family: inherit; font-size:100%; text-align: left; + +vertical-align: baseline; + +} +*{ + margin: 0; + padding: 0; + box-sizing: border-box; + font-family: Arial, '微软雅黑'; +} +img { +border:none; + -webkit-user-select: none; +-moz-user-select: none; +-ms-user-select: none; +user-select: none; +} +q:before, q:after, blockquote:before, blockquote:after { +content: ""; +} +/* 基础样式----------------------------------------*/ +body{ +text-align:center; width:100%; position: relative; overflow-x: hidden; +} +/*--- 链接样式 ---*/ +a{ +text-decoration:none; +} +a:hover, a:active{ +text-decoration: none; +} +ul{ list-style-type:none;} +ul, li { + list-style: none; +} +blockquote { +margin: 0 0 18px 18px; font-style: italic; +} +strong {font-weight:bold;} +em {font-style:italic;} +/* 常用样式----------------------------------------*/ +.left {float:left;} +.right {float:right;} +.clear {clear:both;} +.center{ + width: 1200px; + margin: 0 auto; +} +.payment_item8,.about,.process,.advantage,.contact_box,footer,a,p,span,div{ + font-family: Arial, '微软雅黑'; +} +.cursor{ + cursor: pointer; +} diff --git a/template/index10/assets/css/header_common.css b/template/index10/assets/css/header_common.css new file mode 100644 index 0000000..e6ccc80 --- /dev/null +++ b/template/index10/assets/css/header_common.css @@ -0,0 +1,179 @@ +@charset "utf-8"; +/*头部样式*/ +.header_common{ + width: 100%; + min-width: 1200px; + height: 500px; + background: url(../images/header_combg.png) no-repeat left top; +} +/*顶部样式*/ +.navBox{ + width: 100%; + padding: 18px 45px 15px 100px; + overflow: hidden; + height: 100px; +} +.navBox .logo{ + width: 177px; + height: 51px; +} +.navBox .logo img{ + width: 100%; + height: 100%; +} +.navBox .navBox_right .nav li{ + padding: 6px 25px; + line-height: 42px; + font-family: simhei; +} +.navBox .navBox_right .nav li a{ + display: block; + //font-family:simhei; + color: #aabdf1; + font-size: 15px; + padding: 0 4px; + border-bottom: 2px solid rgba(255,255,255,0); + -webkit-transition:all 0.1s; + -moz-transition:all 0.1s; + -o-transition:all 0.1s; + transition:all 0.1s; +} +.navBox .navBox_right .nav li a:hover{ + border-bottom: 2px solid #fff; + font-weight: bold; + color: #fff; + -webkit-transform: scale(1.1); + -moz-transform:scale(1.1); + -o-transform:scale(1.1); + transform:scale(1.1); +} +.navBox .navBox_right .nav li a.active{ + color: #fff; + font-weight: bold; + border-bottom: 2px solid rgba(255,255,255,1.0); + -webkit-transform: scale(1.1); + -moz-transform:scale(1.1); + -o-transform:scale(1.1); + transform:scale(1.1); +} +.navBox .navBox_right .btn_common{ + display: block; + //font-family:simhei; + width: 100px; + height: 40px; + border: 1px solid #fff; + border-radius: 20px; + line-height: 38px; + text-align: center; + font-size: 16px; + color: #fff; + margin-left: 27px; + margin-top: 6px; +} +.navBox .navBox_right .btn_common:hover{ + background: #fff; + color: #4964de; +} +.navBox .navBox_right .btn_common.active{ + background: #fff; + color: #4964de; +} +/*右侧社交固定*/ +.right_fixed{ + position: fixed; + bottom: 60px; + right: 0; + width: 160px; + height: 240px; + z-index: 100; +} +.right_fixed .right_conBox{ + cursor: pointer; + transition: all 0.8s; + width: 160px; + height: 60px; +} +.right_fixed .right_conBox .rightPhoto_common{ + width: 60px; + height: 60px; + border: 1px solid #dddddd; + border-bottom: none; +} +.right_fixed .right_conBox .right_tellPhoto{ + border-top-left-radius: 5px; + border-top-right-radius: 5px; + background: #FFFFFF url(../images/right_tell1.png) no-repeat center/23px 31px; +} +.right_fixed .right_conBox .right_qqPhoto{ + border-bottom: 1px solid #dddddd; + background: #FFFFFF url(../images/qq.png) no-repeat center/26px 28px; +} +.rightShow_common{ + width: 160px; + height: 60px; + overflow: hidden; + border: 1px solid #4E7DFF; + display: none; +} +.right_tellShow{ + border: 1px solid #4E7DFF; + border-bottom: none; +} +.right_qqShow{ + border: 1px solid #4E7DFF; +} +.rightImg_comm{ + width: 60px; + height: 58px; +} +.right_tellShow .right_tellImg{ + background: #4E7DFF url(../images/right_tell2.png) no-repeat 19px center/23px 31px; +} +.rightShow_common .right_qqImg{ + background: #4E7DFF url(../images/qq2.png) no-repeat center/26px 28px; +} +.rightNum_comm{ + width: 98px; + height: 58px; + background: #4e7dff; + font-size: 14px; + color: #FFFFFF; + line-height: 58px; +} + +.right_fixed .right_qq{ + width: 160px; + height: 60px; + border-left: 1px solid #dddddd; + border-right: 1px solid #dddddd; +} +.right_fixed .right_qq .right_qqPhoto{ + width: 60px; + height: 58px; + border-left: 1px solid #dddddd; + border-right: 1px solid #dddddd; + background: #FFFFFF url(../images/qq.png) no-repeat center/26px 28px; +} +.right_fixed .right_scrollTop{ + width: 160px; + height: 60px; +} +.right_fixed .right_scrollTop .right_scrollTopPhoto{ + width: 60px; + height: 60px; + background: #FFFFFF url(../images/scrolltop.png) no-repeat 21px 12px/17px 19px; + border: 1px solid #dddddd; + border-top: none; + border-bottom-left-radius: 5px; + border-bottom-right-radius: 5px; + font-size: 12px; + color: #666666; + line-height: 82px; + text-align: center; + cursor: pointer; +} +.right_fixed .right_scrollTop .right_scrollTopPhoto:hover{ + background: #4E7DFF url(../images/scrolltop2.png) no-repeat 21px 12px/17px 19px; + color: #FFFFFF; + border: 1px solid #4E7DFF; +} \ No newline at end of file diff --git a/template/index10/assets/css/index_main.css b/template/index10/assets/css/index_main.css new file mode 100644 index 0000000..aa075a1 --- /dev/null +++ b/template/index10/assets/css/index_main.css @@ -0,0 +1,596 @@ +@charset "utf-8"; +/*头部样式*/ +.index_header{ + height: 830px; + max-height: 830px; + background: url(../images/banner.png) no-repeat left top; + background-size: 100%; +} +/*头部banner样式*/ +.index_header .banner{ + margin-top: 100px; + //font-family: simhei; + position: relative; + width: 100%; + height: 426px; +} +.index_header .banner .banner_left{ + width: 600px; +} +.index_header .banner .banner_right{ + width: 600px; + height: 426px; + -webkit-animation: myfirst 1.8s linear 0s infinite alternate; + animation: myfirst 1.8s linear 0s infinite alternate; + position: absolute; + right: 0; + bottom: 0; +} +@keyframes myfirst { + from { + bottom: 20px + } + to { + bottom: 10px + } +} + +@-webkit-keyframes myfirst { + from { + bottom: 20px + } + to { + bottom: 40px + } +} +.index_header .banner .banner_right img{ + width: 100%; + height: 100%; +} +.index_header .banner .text1 { + font-size: 56px; + color: #fff; + font-weight: 400; + letter-spacing: 3px; + height: 80px; + width: 400px; + margin-bottom: 20px; +} +.index_header .banner .text1_line{ + width: 120px; + height: 3px; + background: #fff; + margin-bottom: 20px; +} +.index_header .banner .banner_p{ + font-size: 22px; + color: #fff; + line-height: 44px; +} +.index_header .banner .banner_btnContact{ + display: block; + width: 210px; + height: 56px; + border: 1px solid #fff; + border-radius: 40px; + text-align: center; + line-height: 54px; + font-size: 18px; + color: #fff; + font-weight: bold; + margin-top: 80px; + background: #3c7cdf; + overflow: hidden; + z-index: 100; +} +.index_header .banner .banner_btnContact{ + position: relative; + z-index: 100; +} +/*支付方式-样式*/ +.payment_box{ + width: 866px; + height: 416px; + background: url(../images/payment_bg.png) no-repeat; + background-size: 100% 100%; + margin-top: -210px; + margin-left: -44px; + padding: 46px; + position: relative; +} +.payment_box .payment_ul{ + overflow: hidden; + width: 100%; + height: 100%; + position: absolute; + top: 94px; + left: 104px; +} +.payment_box .payment_ul li{ + width: 24%; + height: 74px; + margin-left: 1%; + margin-right: 2%; + position: relative; +} +.payment_box .payment_ul li a{ + display: block; + width: 100%; + height: 74px; +} +.payment_box .payment_ul li a .img1{ + position: absolute; + top: 0; + left: 0; +} +.payment_box .payment_ul li a .img2{ + position: absolute; + bottom: 0; + left: 0; +} +.payment_box .payment_ul li a .img3{ + position: absolute; + top: 50%; + transform: translateY(-50%); + left: 0; +} +.payment_box .payment_ul .payment_item1 a img{ + width: 137px; + height: 49px; +} +.payment_box .payment_ul .payment_item2 a img{ + width: 168px; + height: 51px; +} +.payment_box .payment_ul .payment_item3 a img{ + width: 168px; + height: 49px; +} +.payment_box .payment_ul .payment_item4 a img{ + width: 168px; + height: 59px; + margin-left: -9px; +} +.payment_box .payment_ul .payment_item5 a img{ + width: 125px; + height: 38px; + margin-left: 24px; +} +.payment_box .payment_ul .payment_item6 a img{ + width: 135px; + height: 38px; + margin-left: 22px; +} +.payment_box .payment_ul .payment_item7 a img{ + width: 136px; + height: 54px; +} +.payment_box .payment_ul .payment_item8 a{ + width: 100%; + font-size: 16px; + color: #A0A0A0; + font-family: "苹方黑体-准-简"; + line-height: 74px; + text-align: center; + padding-top: 14px; +} +/*共同样式*/ +.title_common{ + font-size: 30px; + color: #444444; +} +.centerRe{ + position: relative; + width: 1200px; + height: 464px; +} +.leftImg_common1{ + position: absolute; + left: 0; + width: 100%; + height: 360px; +} +.leftImg_common2{ + width: 64%; + height: 360px; +} +.rightImg_common1{ + position: absolute; + right: 0; +} +.rightImg_common2{ + width: 72%; + height: 360px; +} +/*丫发卡简介-样式*/ +.about{ + width: 100%; + position: relative; +} +.about .about_main{ + width: 655px; + padding: 0 30px; +} +.about .about_main .about_title{ + display: block; + width: 100%; + text-align: right; + line-height: 78px; + padding-top: 40px; +} +.about .about_main .about_line{ + display: block; + width: 62px; + height: 4px; + background: #4e7dff; +} +.about .about_main .about_txt{ + width: 100%; + padding-top: 30px; +} +.about .about_main .about_txt p{ + font-size: 16px; + color: #666666; + line-height: 30px; +} +.about .about_main .about_more{ + display: block; + width: 57px; + font-size: 14px; + color: #444444; + background: url(../images/more_arrow.png) no-repeat right center/21px 15px; + margin-top: 24px; + cursor: pointer; +} +.about .about_right{ + position: absolute; + right: 0; + top: 0; + width: 790px; + height: 510px; +} +.about .about_right .about_rightMain{ + width: 790px; + height: 510px; + position: relative; +} +.about .about_right .about_rightMain .about_rightImg1{ + position: absolute; + top: 0; + left: 0; + width: 348px; + height: 504px; + z-index: 2; +} +.about .about_right .about_rightMain .about_rightCenter{ + width: 370px; +} +.about .about_right .about_rightMain .about_rightCenter .rightCenter_com{ + position: absolute; + z-index: 9; + height: 70px; +} +.about .about_right .about_rightMain .about_rightCenter .rightCenter_1{ + top: 116px; + left: 240px; + width: 259px; +} +.about .about_right .about_rightMain .about_rightCenter .rightCenter_2{ + top: 192px; + left: 240px; + width: 247px; +} +.about .about_right .about_rightMain .about_rightCenter .rightCenter_3{ + top: 275px; + left: 203px; + width: 370px; +} +.about .about_right .about_rightMain .about_rightCenter .rightCenter_4{ + top: 356px; + left: 203px; + width: 317px; +} +.about .about_right .about_rightMain .about_rightImg2{ + position: absolute; + right: 0; + bottom: 0; + width: 632px; + height: 394px; + z-index: 1; +} +/*自动发卡-流程-样式*/ +.process{ + width: 100%; + width: 1296px; + height: 576px; + margin: 0 auto; + position: relative; + background: url(../images/process_bg.png); + margin-top: 100px; +} +.process .process_main{ + position: absolute; + top: 48px; + left: 48px; + width: 1200px; + height: 480px; +} +.process .process_main .process_title{ + display: block; + width: 100%; + text-align: center; + padding-top: 70px; +} +.process .process_main .process_line{ + display: block; + width: 60px; + height: 3px; + margin: 16px auto; + background: #4e7dff; +} +.process .process_main .process_h4{ + display: block; + font-size: 14px; + color: #999999; + text-align: center; +} +.process .process_main .process_ul{ + width: 100%; + padding: 0 30px; + overflow: hidden; + padding-top: 52px; +} +.process .process_main .process_ul li{ + width: 190px; + text-align: center; +} +.process .process_main .process_ul li img{ + transition: all 1s; +} +.process .process_main .process_ul li:hover img{ + transform: rotateY(180deg); +} +.process .process_main .process_ul li .process_txt1{ + display: block; + width: 100%; + text-align: center; + font-size: 16px; + color: #4E7DFF; + padding-top: 30px; + padding-bottom: 16px; +} +.process .process_main .process_ul li .process_txt2{ + display: block; + width: 100%; + text-align: center; + font-size: 14px; + color: #666666; +} +/*品牌优势-样式*/ +.advantage{ + width: 100%; + margin-top: 60px; +} +.advantage .advantage_topBox{ + width: 100%; + height: 464px; + margin-top: 60px; + position: relative; +} +.advantage .advantage_topBox .advantage_topL{ + top: 0; + background: url(../images/advantage_topl.png) no-repeat; + background-size: 100%; + z-index: 9; +} +.advantage .advantage_topBox .advantage_topR{ + bottom: 0; + background: url(../images/advantage_topr.png) no-repeat; + background-size: 100%; + z-index: 20; +} +.advantage .advantage_topMain{ + width: 250px; + height: 100px; + position: absolute; + bottom: 32%; + right: 0; + z-index: 30; +} +.advantage .advantage_topMain .advantage_common{ + display: block; + width: 100%; + color: #FFFFFF; + text-align: right; +} +.advantage .advantage_topMain .advantage_title{ + font-size: 30px; +} +.advantage .advantage_topMain .advantage_line{ + display: block; + width: 50px; + height: 3px; + background: #dcdcdc; + margin-left: 200px; + margin-top: 16px; + margin-bottom: 16px; +} +.advantage .advantage_topMain .advantage_txt{ + font-size: 14px; +} +.advantage .advantage_botMain{ + width: 100%; + overflow: hidden; +} +.advantage .advantage_botMain li{ + width: 240px; +} +.advantage .advantage_botMain .li_margin{ + margin-left: 40px; + margin-right: 40px; +} +.advantage .advantage_botMain li img{ + width: 240px; + height: 240px; + text-align: center; +} +.advantage .advantage_botMain li:hover img{ + transition: all 1s; + /*transform: translateX(180deg);*/ + transform: rotateY(180deg); +} +.advantage .advantage_botMain li .advantage_botTxt{ + display: block; + width: 100%; + text-align: center; + font-size: 20px; + color: #444444; + padding-top: 20px; + padding-bottom: 16px; +} +.advantage .advantage_botMain li .advantage_botP{ + width: 100%; + text-align: center; + font-size: 14px; + color: #909090; + line-height: 24px; +} +/*联系我们-样式*/ +.contact_box .contact_bot{ + width: 100%; + height: 464px; + margin-bottom: 80px; + position: relative; +} +.contact_box .contact_bot .contact_botL{ + bottom: 0; + background: url(../images/contact_botl.png) no-repeat; + background-size: 100%; + z-index: 30; +} +.contact_box .contact_bot .contact_botR{ + top: 0; + background: url(../images/contact_botr.png) no-repeat; + background-size: 100%; + z-index: 20; +} +.contact_box .contact_bot .contact_botMain{ + width: 440px; + height: 170px; + position: absolute; + left: 0; + bottom: 20%; + z-index: 50; +} +.contact_box .contact_bot .contact_botMain .contact_botMainTxt{ + width: 100%; + font-size: 40px; + color: #FFFFFF; +} +.contact_box .contact_bot .contact_botMain .contact_botMainBtn{ + width: 238px; + height: 68px; + background: #32ef6f; + border-radius: 8px; + font-size: 24px; + color: #FFFFFF; + line-height: 68px; + text-align: center; + cursor: pointer; + margin-top: 50px; +} +/*底部样式*/ +footer{ + width: 1200px; + margin: 0 auto; +} +footer .footer_top{ + width: 1200px; + overflow: hidden; +} +footer .footer_top .footer_topLeft li{ + width: 116px; + margin-right: 60px; +} +footer .footer_top .footer_topLeft li .footer_topLeftTit{ + font-size: 18px; + color: #666666; + line-height: 50px; + padding-left: 38px; +} +footer .footer_top .footer_topLeft li .footer_icon1{ + background: url(../images/footer_icon1.png) no-repeat left center/26px 26px; +} +footer .footer_top .footer_topLeft li .footer_icon2{ + background: url(../images/footer_icon2.png) no-repeat left center/26px 26px; +} +footer .footer_top .footer_topLeft li .footer_icon3{ + background: url(../images/footer_icon3.png) no-repeat left center/26px 26px; +} +footer .footer_top .footer_topLeft li .footer_icon4{ + background: url(../images/footer_icon4.png) no-repeat left center/26px 26px; +} +footer .footer_top .footer_topLeft li .footer_topLeftCon{ + width: 100%; +} +footer .footer_top .footer_topLeft li .footer_topLeftCon a{ + display: block; + width: 100%; + font-size: 12px; + color: #666666; + line-height: 30px; + padding-left: 40px; +} +footer .footer_top .footer_topRight{ + overflow: hidden; +} +footer .footer_top .footer_topRight .footer_qrCode{ + margin-top: 10px; + margin-right: 50px; +} +footer .footer_top .footer_topRight .footer_qrCode img{ + display: block; + width: 98px; + height: 98px; +} +footer .footer_top .footer_topRight .footer_qrCode .rqCode_botTxt{ + display: block; + font-size: 12px; + color: #666666; + line-height: 26px; +} +footer .footer_top .footer_topRight .footer_detail{ + width: 218px; +} +footer .footer_top .footer_topRight .footer_detail .footer_pCom{ + font-size: 12px; + color: #666666; + padding-left: 30px; + line-height: 36px; +} +footer .footer_top .footer_topRight .footer_detail .footer_tell{ + width: 100%; + font-size: 30px; + color: #666666; +} +footer .footer_top .footer_topRight .footer_detail .footer_tellTime{ + line-height: 28px; + padding-left: 0; + padding-bottom: 5px; +} +footer .footer_top .footer_topRight .footer_detail .footer_email{ + background: url(../images/footer_email.png) no-repeat left center/22px 22px; +} +footer .footer_top .footer_topRight .footer_detail .footer_qq{ + background: url(../images/footer_qq.png) no-repeat left center/22px 22px; +} +footer .footer_bottom{ + width: 1200px; + margin: 0 auto; + padding: 56px 0 40px 0; + font-size: 12px; + color: #666666; + text-align: center; +} + + diff --git a/template/index10/assets/css/media.css b/template/index10/assets/css/media.css new file mode 100644 index 0000000..c7aa152 --- /dev/null +++ b/template/index10/assets/css/media.css @@ -0,0 +1,381 @@ +@charset "utf-8"; +@media only screen and (max-width: 1920px){ + .index_header .banner{ + margin-top: 100px; + } + .index_header .banner .banner_btnContact{ + margin-top: 80px; + } + .payment_box{ + margin-top: -210px; + } + .advantage .advantage_topMain { + bottom: 32%; + right: 2%; + } + .contact_box .contact_bot .contact_botMain { + left: 0; + bottom: 20%; + } +} +@media only screen and (max-width: 1860px){ + .payment_box{ + margin-top: -226px; + } +} +@media only screen and (max-width: 1800px){ + .index_header .banner{ + margin-top: 71px; + } + .payment_box{ + margin-top: -246px; + } + .advantage .advantage_topMain { + bottom: 34%; + right: 4%; + } + .contact_box .contact_bot .contact_botMain { + left: 5%; + bottom: 24%; + } +} +@media only screen and (max-width: 1750px){ + .payment_box{ + margin-top: -288px; + } +} +@media only screen and (max-width: 1700px){ + .index_header .banner{ + margin-top: 75px; + } + .index_header .banner .banner_btnContact{ + margin-top: 64px; + } + .payment_box{ + margin-top: -310px; + } + .advantage .advantage_topMain { + bottom: 36%; + right: 7%; + } + .contact_box .contact_bot .contact_botMain { + left: 7%; + bottom: 23%; + } + .about .about_right { + width: 711px; + height: 459px; + } + .about .about_right .about_rightMain { + width: 711px; + height: 459px; + } + .about .about_right .about_rightMain .about_rightImg1 { + width: 313px; + height: 453px; + } + .about .about_right .about_rightMain .about_rightImg2 { + width: 569px; + height: 355px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_1 { + top: 104px; + left: 220px; + width: 233px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_2 { + top: 175px; + left: 220px; + width: 222px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_3 { + top: 247px; + left: 181px; + width: 333px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_4 { + top: 322px; + left: 181px; + width: 285px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_com { + height: 63px; + } +} +@media only screen and (max-width: 1650px){ + .payment_box{ + margin-top: -315px; + } +} +@media only screen and (max-width: 1600px){ + .index_header .banner{ + margin-top: 57px; + } + .index_header .banner .banner_btnContact{ + margin-top: 25px; + } + .payment_box{ + margin-top: -350px; + } + .advantage .advantage_topMain { + bottom: 38%; + right: 9%; + } + .contact_box .contact_bot .contact_botMain { + left: 9%; + bottom: 22%; + } + .contact_box .contact_bot .contact_botMain .contact_botMainBtn{ + margin-top: 35px; + } +} +@media only screen and (max-width: 1500px){ + .index_header .banner{ + margin-top: 47px; + } + .index_header .banner .banner_btnContact{ + margin-top: 15px; + } + .payment_box{ + margin-top: -370px; + } + .advantage .advantage_topMain { + bottom: 38%; + right: 12%; + } + .contact_box .contact_bot .contact_botMain { + left: 10%; + bottom: 22%; + } + .contact_box .contact_bot .contact_botMain .contact_botMainBtn{ + margin-top: 25px; + } + .about .about_right { + width: 632px; + height: 408px; + } + .about .about_right .about_rightMain { + width: 632px; + height: 408px; + } + .about .about_right .about_rightMain .about_rightImg1 { + width: 278px; + height: 403px; + } + .about .about_right .about_rightMain .about_rightImg2 { + width: 506px; + height: 315px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_1 { + top: 93px; + left: 194px; + width: 207px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_2 { + top: 154px; + left: 194px; + width: 198px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_3 { + top: 219px; + left: 155px; + width: 296px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_4 { + top: 283px; + left: 155px; + width: 254px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_com { + height: 56px; + } + .about .about_right { + top: 43px; + } +} +@media only screen and (max-width: 1400px){ + .index_header .banner{ + margin-top: 20px; + } + .payment_box{ + margin-top: -410px; + } + .index_header .banner .banner_btnContact{ + margin-top: 13px; + } + .advantage .advantage_topMain { + bottom: 40%; + right: 14%; + } + .contact_box .contact_bot .contact_botMain { + left: 14%; + bottom: 26%; + } + .contact_box .contact_bot .contact_botMain .contact_botMainBtn{ + margin-top: 20px; + } + .about .about_right { + width: 553px; + height: 357px; + } + .about .about_right .about_rightMain { + width: 553px; + height: 357px; + } + .about .about_right .about_rightMain .about_rightImg1 { + width: 244px; + height: 353px; + } + .about .about_right .about_rightMain .about_rightImg2 { + width: 442px; + height: 276px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_1 { + top: 82px; + left: 172px; + width: 181px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_2 { + top: 135px; + left: 172px; + width: 173px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_3 { + top: 192px; + left: 141px; + width: 259px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_4 { + top: 250px; + left: 141px; + width: 222px; + } + .about .about_right .about_rightMain .about_rightCenter .rightCenter_com { + height: 49px; + } + .about .about_right { + top: 43px; + } + .navBox{ padding: 18px 25px 15px 25px;} + .index_header .banner .text1{font-size: 45px; height: 54px;} + .index_header .banner .banner_p{font-size: 19px;} + .index_header .banner .banner_btnContact{font-size: 17px;line-height: 46px; height: 46px; width: 189px;} + .index_header .banner .banner_left{padding-left: 20px; box-sizing: border-box;} +} +@media only screen and (max-width: 1300px){ + .index_header .banner{ + margin-top: 15px; + } + .index_header .banner .banner_btnContact{ + margin-top: 28px; + } + .payment_box{ + margin-top: -430px; + } + .advantage .advantage_topMain { + bottom: 41%; + right: 16%; + } + .contact_box .contact_bot .contact_botMain { + left: 17%; + bottom: 28%; + } + .contact_box .contact_bot .contact_botMain .contact_botMainBtn{ + margin-top: 15px; + } + .contact_comBox .contactUs_index{height: 466px;} + .navBox{ padding: 18px 25px 15px 25px;} + .index_header .banner .banner_left{margin: 30px 0;} + .process{width: 96%; overflow: hidden; background-image: none; background: #fff; box-shadow: 0px 0px 29px rgba(0,0,0,0.1); margin: 30px auto; border-radius: 20px; height: 470px;}tMainTxt{font-size: 25px;} + .process .process_main .process_ul li{width: 16%; } + .process .process_main{width: 100%; left: 0; } +} +@media only screen and (max-width: 1200px){ + + .navBox{ padding: 18px 25px 15px 25px;width: 1200px;} + .index_header .banner .text1{font-size: 45px; height: 54px;} + .index_header .banner .banner_p{font-size: 19px;} + .index_header .banner .banner_btnContact{font-size: 17px;line-height: 46px; height: 46px; width: 189px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;} + .index_header .banner .banner_left{padding-left: 20px; box-sizing: border-box;} + .about{width: 1200px;} + + .contact_box .contact_bot .contact_botMain .contact_botMainBtn{ width: 208px; height: 53px; line-height: 53px;} + .contact_box .contact_bot{ margin-bottom: 0;} + + .index_header .banner .banner_right{width: 420px; height: 330px; bottom: 104px;} + + + .center{width: 96%; margin: 0 auto;} + .protocol_content{position: inherit; margin-top: 20px;} + + .downLoad_con .center .downLoad_main{width: 100%; display: flex;} + .downLoad_con .center .downLoad_main .downLoad_mainLeft{width: 522px;} + .downLoad_con .center .downLoad_main .downLoad_mainRight{margin-right: 24px; margin-top: 10px;} + + .header_common{width: 100%; min-width: 100%;} + .box_common{width: 100%; box-sizing: border-box;} + .contact_comBox .contactUs .contactUs_main{display: flex;} + .helpCon_content .helpCon_conMain .helpCon_right{ float: left; width:100%;} + .advantage_conBox{box-sizing: border-box; display: flex; padding: 70px 40px;} + .advantage .advantage_botMain{display: flex;} + + @keyframes myfirst { + from { + bottom: 90px + } + to { + bottom: 70px + } +} + +@-webkit-keyframes myfirst { + from { + bottom: 90px + } + to { + bottom: 70px + } +} + + +} + +@media only screen and (max-width: 1100px){ + .process{width: 96%; overflow: hidden; background-image: none; background: #fff; box-shadow: 0px 0px 29px rgba(0,0,0,0.1); margin: 30px auto; border-radius: 20px; height: 470px;} + .center{width: 96%;} + .process .process_main{width: 100%; left: 0; height: 380px;} + .process .process_main .process_title{padding-top: 30px;} + .process .process_main .process_ul li{width: 16%; } + .index_header .banner .banner_right{width: 400px; height: 300px; bottom: 104px;} + .contact_comBox .contactUs .contactUs_main li{width: 28%;} + .advantage .advantage_botMain li{width: 20%;} + .advantage .advantage_topMain{ bottom: 52%;} + .advantage .advantage_botMain{width: 990px;} + footer .footer_top .footer_topLeft li{margin-right:28px} + footer{width: 960px;} + footer .footer_top{width: 100%;} + footer .footer_bottom{width: 100%;} + @keyframes myfirst { + from { + bottom: 120px + } + to { + bottom: 100px + } +} + +@-webkit-keyframes myfirst { + from { + bottom: 120px + } + to { + bottom: 100px + } +} + .advantage_conBox{box-sizing: border-box; display: flex; padding: 70px 40px;} + .advantage_conBox .conBox_txtConR{ padding-right: 0px;} + .advantage_conBox .conBox_photo .conBox_photoMargin{ margin-left: 86px;} + .banner{min-width: 1000px;} + .contact_box .contact_bot .contact_botMain .contact_botMainTxt{font-size: 25px;} +} + diff --git a/template/index10/assets/images/address.png b/template/index10/assets/images/address.png new file mode 100644 index 0000000..414cfbe Binary files /dev/null and b/template/index10/assets/images/address.png differ diff --git a/template/index10/assets/images/address1.png b/template/index10/assets/images/address1.png new file mode 100644 index 0000000..b04a4a3 Binary files /dev/null and b/template/index10/assets/images/address1.png differ diff --git a/template/index10/assets/images/advantage_topl.png b/template/index10/assets/images/advantage_topl.png new file mode 100644 index 0000000..08bb2e9 Binary files /dev/null and b/template/index10/assets/images/advantage_topl.png differ diff --git a/template/index10/assets/images/advantage_topr.png b/template/index10/assets/images/advantage_topr.png new file mode 100644 index 0000000..0308d68 Binary files /dev/null and b/template/index10/assets/images/advantage_topr.png differ diff --git a/template/index10/assets/images/banner.png b/template/index10/assets/images/banner.png new file mode 100644 index 0000000..fa7e0aa Binary files /dev/null and b/template/index10/assets/images/banner.png differ diff --git a/template/index10/assets/images/contact_botl.png b/template/index10/assets/images/contact_botl.png new file mode 100644 index 0000000..16a6065 Binary files /dev/null and b/template/index10/assets/images/contact_botl.png differ diff --git a/template/index10/assets/images/contact_botr.png b/template/index10/assets/images/contact_botr.png new file mode 100644 index 0000000..7774dc3 Binary files /dev/null and b/template/index10/assets/images/contact_botr.png differ diff --git a/template/index10/assets/images/contactus_bg.png b/template/index10/assets/images/contactus_bg.png new file mode 100644 index 0000000..da4770a Binary files /dev/null and b/template/index10/assets/images/contactus_bg.png differ diff --git a/template/index10/assets/images/email.png b/template/index10/assets/images/email.png new file mode 100644 index 0000000..0f32271 Binary files /dev/null and b/template/index10/assets/images/email.png differ diff --git a/template/index10/assets/images/email1.png b/template/index10/assets/images/email1.png new file mode 100644 index 0000000..79f8547 Binary files /dev/null and b/template/index10/assets/images/email1.png differ diff --git a/template/index10/assets/images/footer_email.png b/template/index10/assets/images/footer_email.png new file mode 100644 index 0000000..8a679c2 Binary files /dev/null and b/template/index10/assets/images/footer_email.png differ diff --git a/template/index10/assets/images/footer_icon1.png b/template/index10/assets/images/footer_icon1.png new file mode 100644 index 0000000..e0c0ea3 Binary files /dev/null and b/template/index10/assets/images/footer_icon1.png differ diff --git a/template/index10/assets/images/footer_icon2.png b/template/index10/assets/images/footer_icon2.png new file mode 100644 index 0000000..6d6a646 Binary files /dev/null and b/template/index10/assets/images/footer_icon2.png differ diff --git a/template/index10/assets/images/footer_icon3.png b/template/index10/assets/images/footer_icon3.png new file mode 100644 index 0000000..d5d3db5 Binary files /dev/null and b/template/index10/assets/images/footer_icon3.png differ diff --git a/template/index10/assets/images/footer_icon4.png b/template/index10/assets/images/footer_icon4.png new file mode 100644 index 0000000..519c1d0 Binary files /dev/null and b/template/index10/assets/images/footer_icon4.png differ diff --git a/template/index10/assets/images/footer_qq.png b/template/index10/assets/images/footer_qq.png new file mode 100644 index 0000000..ed36501 Binary files /dev/null and b/template/index10/assets/images/footer_qq.png differ diff --git a/template/index10/assets/images/header_combg.png b/template/index10/assets/images/header_combg.png new file mode 100644 index 0000000..e17793f Binary files /dev/null and b/template/index10/assets/images/header_combg.png differ diff --git a/template/index10/assets/images/map_bg.png b/template/index10/assets/images/map_bg.png new file mode 100644 index 0000000..d086e34 Binary files /dev/null and b/template/index10/assets/images/map_bg.png differ diff --git a/template/index10/assets/images/more_arrow.png b/template/index10/assets/images/more_arrow.png new file mode 100644 index 0000000..73f2596 Binary files /dev/null and b/template/index10/assets/images/more_arrow.png differ diff --git a/template/index10/assets/images/payment_bg.png b/template/index10/assets/images/payment_bg.png new file mode 100644 index 0000000..b88c376 Binary files /dev/null and b/template/index10/assets/images/payment_bg.png differ diff --git a/template/index10/assets/images/process_bg.png b/template/index10/assets/images/process_bg.png new file mode 100644 index 0000000..c62e3ec Binary files /dev/null and b/template/index10/assets/images/process_bg.png differ diff --git a/template/index10/assets/images/qq.png b/template/index10/assets/images/qq.png new file mode 100644 index 0000000..69a1a63 Binary files /dev/null and b/template/index10/assets/images/qq.png differ diff --git a/template/index10/assets/images/qq2.png b/template/index10/assets/images/qq2.png new file mode 100644 index 0000000..fb0ea3f Binary files /dev/null and b/template/index10/assets/images/qq2.png differ diff --git a/template/index10/assets/images/right_tell1.png b/template/index10/assets/images/right_tell1.png new file mode 100644 index 0000000..6218553 Binary files /dev/null and b/template/index10/assets/images/right_tell1.png differ diff --git a/template/index10/assets/images/right_tell2.png b/template/index10/assets/images/right_tell2.png new file mode 100644 index 0000000..e975edc Binary files /dev/null and b/template/index10/assets/images/right_tell2.png differ diff --git a/template/index10/assets/images/scrolltop.png b/template/index10/assets/images/scrolltop.png new file mode 100644 index 0000000..f87f19f Binary files /dev/null and b/template/index10/assets/images/scrolltop.png differ diff --git a/template/index10/assets/images/scrolltop2.png b/template/index10/assets/images/scrolltop2.png new file mode 100644 index 0000000..0740a56 Binary files /dev/null and b/template/index10/assets/images/scrolltop2.png differ diff --git a/template/index10/assets/images/tell.png b/template/index10/assets/images/tell.png new file mode 100644 index 0000000..f414109 Binary files /dev/null and b/template/index10/assets/images/tell.png differ diff --git a/template/index10/assets/images/tell1.png b/template/index10/assets/images/tell1.png new file mode 100644 index 0000000..1c9ec04 Binary files /dev/null and b/template/index10/assets/images/tell1.png differ diff --git a/template/index10/assets/js/aos.js b/template/index10/assets/js/aos.js new file mode 100644 index 0000000..abb0e99 --- /dev/null +++ b/template/index10/assets/js/aos.js @@ -0,0 +1,2 @@ +!function t(e,n,o){function r(i,c){if(!n[i]){if(!e[i]){var s="function"==typeof require&&require;if(!c&&s)return s(i,!0);if(a)return a(i,!0);var u=new Error("Cannot find module '"+i+"'");throw u.code="MODULE_NOT_FOUND",u}var l=n[i]={exports:{}};e[i][0].call(l.exports,function(t){var n=e[i][1][t];return r(n?n:t)},l,l.exports,t,e,n,o)}return n[i].exports}for(var a="function"==typeof require&&require,i=0;i2?n[i-2]:void 0,s=i>2?n[2]:void 0,u=i>1?n[i-1]:void 0;for("function"==typeof c?(c=o(c,u,5),i-=2):(c="function"==typeof u?u:void 0,i-=c?1:0),s&&r(n[0],n[1],s)&&(c=3>i?void 0:c,i=1);++a-1&&t%1==0&&e>t}function a(t,e,n){if(!c(n))return!1;var a=typeof e;if("number"==a?o(n)&&r(e,n.length):"string"==a&&e in n){var i=n[e];return t===t?t===i:i!==i}return!1}function i(t){return"number"==typeof t&&t>-1&&t%1==0&&u>=t}function c(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var s=/^\d+$/,u=9007199254740991,l=n("length");e.exports=a},{}],7:[function(t,e){function n(t,e,n){for(var o=-1,r=a(e),i=r.length;++o=t||t>e?c(g,d):v=setTimeout(u,t)}function l(){c(k,v)}function f(){if(p=arguments,b=s(),h=this,g=k&&(v||!x),w===!1)var n=x&&!v;else{d||x||(y=b);var o=w-(b-y),r=0>=o||o>w;r?(d&&(d=clearTimeout(d)),y=b,m=t.apply(h,p)):d||(d=setTimeout(l,o))}return r&&v?v=clearTimeout(v):v||e===w||(v=setTimeout(u,e)),n&&(r=!0,m=t.apply(h,p)),!r||v||d||(p=h=void 0),m}var p,d,m,b,h,v,g,y=0,w=!1,k=!0;if("function"!=typeof t)throw new TypeError(a);if(e=0>e?0:+e||0,n===!0){var x=!0;k=!1}else o(n)&&(x=!!n.leading,w="maxWait"in n&&i(+n.maxWait||0,e),k="trailing"in n?!!n.trailing:k);return f.cancel=r,f}function o(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var r=t("lodash._getnative"),a="Expected a function",i=Math.max,c=r(Date,"now"),s=c||function(){return(new Date).getTime()};e.exports=n},{"lodash._getnative":5}],9:[function(t,e){(function(t){function n(t){return function(e){return null==e?void 0:e[t]}}function o(t){return a(t)&&b.call(t,"callee")&&(!v.call(t,"callee")||h.call(t)==f)}function r(t){return null!=t&&!("function"==typeof t&&i(t))&&c(g(t))}function a(t){return u(t)&&r(t)}function i(t){var e=s(t)?h.call(t):"";return e==p||e==d}function c(t){return"number"==typeof t&&t>-1&&t%1==0&&l>=t}function s(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function u(t){return!!t&&"object"==typeof t}var l=9007199254740991,f="[object Arguments]",p="[object Function]",d="[object GeneratorFunction]",m=t.Object.prototype,b=m.hasOwnProperty,h=m.toString,v=m.propertyIsEnumerable,g=n("length");e.exports=o}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],10:[function(t,e){function n(t){return!!t&&"object"==typeof t}function o(t,e){var n=null==t?void 0:t[e];return c(n)?n:void 0}function r(t){return"number"==typeof t&&t>-1&&t%1==0&&v>=t}function a(t){return i(t)&&m.call(t)==u}function i(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function c(t){return null==t?!1:a(t)?b.test(p.call(t)):n(t)&&l.test(t)}var s="[object Array]",u="[object Function]",l=/^\[object .+?Constructor\]$/,f=Object.prototype,p=Function.prototype.toString,d=f.hasOwnProperty,m=f.toString,b=RegExp("^"+p.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),h=o(Array,"isArray"),v=9007199254740991,g=h||function(t){return n(t)&&r(t.length)&&m.call(t)==s};e.exports=g},{}],11:[function(t,e){function n(t){return function(e){return null==e?void 0:e[t]}}function o(t){return null!=t&&a(v(t))}function r(t,e){return t="number"==typeof t||p.test(t)?+t:-1,e=null==e?h:e,t>-1&&t%1==0&&e>t}function a(t){return"number"==typeof t&&t>-1&&t%1==0&&h>=t}function i(t){for(var e=s(t),n=e.length,o=n&&t.length,i=!!o&&a(o)&&(f(t)||l(t)),c=-1,u=[];++c0;++ot.position?t.node.classList.add("aos-animate"):"undefined"!=typeof o&&("false"===o||!n&&"true"!==o)&&t.node.classList.remove("aos-animate")},o=function(t,e){var o=window.pageYOffset,r=window.innerHeight;[].forEach.call(t,function(t){n(t,r+o,e)})};e.exports=o},{}],19:[function(t,e){var n=t("./calculateOffset"),o=function(t,e){return[].forEach.call(t,function(t){t.node.classList.add("aos-init"),t.position=n(t.node,e.offset)}),t};e.exports=o},{"./calculateOffset":15}],20:[function(t,e){var n=function(){var t=["[data-aos]","[data-aos-offset]","[data-aos-easing]","[data-aos-delay]","[data-aos-anchor]","[data-aos-anchor-placement]","[data-aos-once]"],e=t.join(", "),n=document.querySelectorAll(e);[].forEach.call(n,function(e){var n=/^data\-(.+)$/,o=[];[].forEach.call(e.attributes,function(r){if(n.test(r.nodeName)){var a=r.nodeName.match(n)[0],i="["+a+"]",c=r.nodeName.match(n)[1];e.getAttribute(a).length&&-1!==t.indexOf(i)&&(e.setAttribute(c,r.nodeValue),o.push(a))}});for(var r=0;rn;n++){t=a[n],e=i.querySelectorAll(t.selector);for(var r,c=0,s=e.length;s>c;c++)r=e[c],r.ready||(r.ready=!0,t.fn.call(r,r))}}var r,a=[],i=window.document,c=window.MutationObserver||window.WebKitMutationObserver;e.exports=n},{}],23:[function(t,e){var n=function(t){for(var e=0,n=0;t&&!isNaN(t.offsetLeft)&&!isNaN(t.offsetTop);)e+=t.offsetLeft-("BODY"!=t.tagName?t.scrollLeft:0),n+=t.offsetTop-("BODY"!=t.tagName?t.scrollTop:0),t=t.offsetParent;return{top:n,left:e}};e.exports=n},{}]},{},[14]); +//# sourceMappingURL=aos.js.map diff --git a/template/index10/assets/js/common_js.js b/template/index10/assets/js/common_js.js new file mode 100644 index 0000000..63581c6 --- /dev/null +++ b/template/index10/assets/js/common_js.js @@ -0,0 +1,23 @@ +$(function(){ +// 点击头部导航事件 + $(".navBox .navBox_right .nav li a").on('click',function(){ + $(this).addClass("active").parent("li").siblings().find("a").removeClass("active"); + }); + $(".navBox .navBox_right .btn_common").on('click',function(){ + $(this).addClass("active").siblings(".btn_common").removeClass("active"); + }); +// 点击右侧返回事件 + $(".right_scrollTop").click(function() { + $("html,body").animate({scrollTop: 0}, 600); + }); +// 点击右侧事件 + $(".right_fixed .right_common").hover(function(){ + $(this).find(".rightShow_common").show().animate({marginRight: '0px'}, '1s');; + $(this).find(".rightPhoto_common").hide(); + },function(){ + $(this).find(".rightShow_common").hide(); + $(this).find(".rightPhoto_common").show(); + }); + + +}) diff --git a/template/index10/assets/js/index_main.js b/template/index10/assets/js/index_main.js new file mode 100644 index 0000000..eca14fa --- /dev/null +++ b/template/index10/assets/js/index_main.js @@ -0,0 +1,15 @@ +$(function(){ +// 锚点 +/* $(".navBox_right .nav #advantageBox").click(function() { + $("html, body").animate({ + scrollTop: $("#advantage").offset().top }, {duration: 500,easing: "swing"}); + return false; + }); + $(".navBox_right .nav #contact_usBox").click(function() { + $("html, body").animate({ + scrollTop: $("#contact_box").offset().top }, {duration: 500,easing: "swing"}); + return false; + });*/ + + +}) diff --git a/template/index10/assets/js/xs.js b/template/index10/assets/js/xs.js new file mode 100644 index 0000000..555bacb --- /dev/null +++ b/template/index10/assets/js/xs.js @@ -0,0 +1,1555 @@ +(function(){ + function b(t,u,s){ + this.t = t; + this.u = u; + this.c = s.color; + this.m1(); + }; + b.prototype = { + m1:function(){ + var t = this; + t.d = false; + if(t.t.css('position') != 'fixed' && t.t.css('position') != 'absolute'){ + t.t.css('position','relative'); + } + t.w = t.t.width(); + t.h = t.t.height(); + t.t.children().each(function(){ + if($(this).css('position') != 'fixed' && $(this).css('position') != 'absolute'){ + $(this).css({'position':'relative','z-index':'2'}); + }else if(parseInt($(this).css('z-index'))<2){ + $(this).css({'z-index':'2'}); + } + }); + if(t.t.css('background-color') != "rgba(0, 0, 0, 0)"){ + t.bc = t.t.css('background-color'); + }else{ + t.bc = '#ffffff'; + } + t.t.append(''); + t.ctx = t.t.children('canvas')[0].getContext('2d'); + if(t.c === false){ + t.t.mouseenter(function(){ + t.c = 'hsl('+(Math.random()*360)+',60%,80%)'; + t.ctx.fillStyle = t.c; + }); + }else{ + t.ctx.fillStyle = t.c; + }; + t.t.mousemove(function(e){ + t.x = e.pageX - t.t.offset().left-parseInt(t.t.css('border-left-width')); + t.y = e.pageY - t.t.offset().top-parseInt(t.t.css('border-top-width')); + }); + t.a = []; + t.t.mouseenter(function(e){ + t.f = true; + t.x = e.pageX - t.t.offset().left-parseInt(t.t.css('border-left-width')); + t.y = e.pageY - t.t.offset().top-parseInt(t.t.css('border-top-width')); + t.n1(); + }); + t.t.mouseleave(function(){ + t.f = false; + }); + t.ctx.clearRect(0,0,t.w,t.h); + }, + n1:function(){ + var t=this; + if(t.u<=0){ + console.warn('请注意,没有第'+t.u+'个效果!!'); + return false; + } + if(t.u<=10){ + if(t.u == 1){ + if(t.a.length == 0){ + t.x1(t); + } + }else if(t.u == 2){ + if(t.a.length == 0){ + for(var i = 0;i0){ + requestAnimationFrame(function(){ + t.x1(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + } + }, + x2:function(t){ + t.ctx.clearRect(0,0,t.w,t.h); + t.q = false; + t.ctx.fillStyle = t.c; + for(var i = 0;i0){ + requestAnimationFrame(function(){ + t.x3(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + } + }, + x4:function(t){ + t.ctx.clearRect(0,0,t.w,t.h); + t.ctx.fillStyle = t.c; + for(var i = 0;i0){ + t.a[i].x -= Math.ceil(t.a[i].x/14); + }else if(t.a[i].x<0){ + t.a[i].x -= Math.floor(t.a[i].x/14); + } + }else{ + if(i%2){ + t.a[i].x -= Math.floor((t.a[i].x-t.w)/14); + }else{ + t.a[i].x -= Math.ceil((t.a[i].x+t.w)/14); + } + }; + t.ctx.fillRect(t.a[i].x,t.a[i].y,t.a[i].w,t.a[i].h); + } + t.ctx.globalAlpha = 1; + if(t.f || t.a[0].x>-t.w){ + requestAnimationFrame(function(){ + t.x4(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x5:function(t){ + if(t.f){ + t.a.push({x:t.x,y:t.y,r:10,o:1,c:t.c,xv:(Math.random()-0.5)*5,yv:Math.random()*3+3}); + } + t.ctx.clearRect(0,0,t.w,t.h); + for(var i = 0;i=t.h){ + t.a.splice(i,1); + i--; + } + } + t.ctx.globalAlpha = 1; + if(t.f || t.a.length>0){ + requestAnimationFrame(function(){ + t.x5(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + } + }, + x6:function(t){ + if(t.f && Math.random()<.5){ + t.a.push({x:t.w*Math.random(),y:t.h*Math.random(),r:1,o:1,c:t.c}); + } + t.ctx.clearRect(0,0,t.w,t.h); + for(var i = 0;i0){ + requestAnimationFrame(function(){ + t.x6(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + } + }, + x7:function(t){ + if(t.f){ + t.tan = Math.random()*2+1; + t.a.push({x:t.w*Math.random(),y:-t.tan,r:t.tan,c:t.c}); + } + t.ctx.globalAlpha = 0.3; + t.ctx.fillStyle = t.bc; + t.ctx.fillRect(0,0,t.w,t.h); + for(var i = 0;it.w+t.a[i].r){ + t.a[i].x=-t.a[i].r; + } + t.a[i].y+=t.a[i].r-0.7; + if(t.a[i].y>=t.h+t.a[i].r){ + t.a.splice(i,1); + i--; + } + } + t.ctx.globalAlpha = 1; + if(t.f || t.a.length>0){ + requestAnimationFrame(function(){ + t.x7(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + } + }, + x8:function(t){ + if(t.f){ + t.tan = Math.random()*2+1; + t.a.push({x:t.w*Math.random(),y:t.tan+t.h,r:t.tan,c:t.c}); + } + t.ctx.globalAlpha = 0.3; + t.ctx.fillStyle = t.bc; + t.ctx.fillRect(0,0,t.w,t.h); + for(var i = 0;i0){ + requestAnimationFrame(function(){ + t.x8(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + } + }, + x9:function(t){ + if(t.f){ + t.tan = Math.random()*3+1; + t.a.push({x:Math.random()*t.w,y:Math.random()*t.h,r:t.tan,c:t.c,o:1}); + } + t.ctx.globalAlpha = 0.3; + t.ctx.fillStyle = t.bc; + t.ctx.fillRect(0,0,t.w,t.h); + for(var i = 0;it.a[i].r+t.h || t.a[i].y<-t.a[i].r || t.a[i].x<-t.a[i].r || t.a[i].x > t.a[i].r+t.w){ + t.a.splice(i,1); + i--; + }*/ + if(t.a[i].o<=0){ + t.a.splice(i,1); + i--; + } + } + t.ctx.globalAlpha = 1; + if(t.f || t.a.length>0){ + requestAnimationFrame(function(){ + t.x9(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + } + }, + x10:function(t){ + if(t.f){ + t.tan = Math.random()*3+1; + t.tan2 = Math.random()*Math.PI*2; + t.a.push({x:Math.random()*t.w,y:Math.random()*t.h,r:t.tan,c:t.c,t:t.tan2}); + } + t.ctx.globalAlpha = 0.3; + t.ctx.fillStyle = t.bc; + t.ctx.fillRect(0,0,t.w,t.h); + for(var i = 0;it.a[i].r+t.h || t.a[i].y<-t.a[i].r || t.a[i].x<-t.a[i].r || t.a[i].x > t.a[i].r+t.w){ + t.a.splice(i,1); + i--; + } + } + t.ctx.globalAlpha = 1; + if(t.f || t.a.length>0){ + requestAnimationFrame(function(){ + t.x10(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + } + }, + x11:function(t){ + if(t.f){ + t.tan = Math.random()*3+1; + t.tan2 = Math.random()*Math.PI*2; + t.a.push({x:t.x,y:t.y,r:t.tan,c:t.c,t:t.tan2}); + } + t.ctx.globalAlpha = 0.3; + t.ctx.fillStyle = t.bc; + t.ctx.fillRect(0,0,t.w,t.h); + for(var i = 0;it.a[i].r+t.h || t.a[i].y<-t.a[i].r || t.a[i].x<-t.a[i].r || t.a[i].x > t.a[i].r+t.w){ + t.a.splice(i,1); + i--; + } + } + t.ctx.globalAlpha = 1; + if(t.f || t.a.length>0){ + requestAnimationFrame(function(){ + t.x11(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + } + }, + x12:function(t){ + if(t.f){ + t.tan = Math.random()*3+4; + t.a.push({x:Math.random()*t.w,y:Math.random()*t.h,r:t.tan,c:t.c,v:0}); + } + t.ctx.globalAlpha = 0.3; + t.ctx.fillStyle = t.bc; + t.ctx.fillRect(0,0,t.w,t.h); + for(var i = 0;it.a[i].r+t.h){ + t.a.splice(i,1); + i--; + } + } + t.ctx.globalAlpha = 1; + if(t.f || t.a.length>0){ + requestAnimationFrame(function(){ + t.x12(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + } + }, + x13:function(t){ + t.ctx.globalAlpha = 0.3; + t.ctx.fillStyle = t.bc; + t.ctx.fillRect(0,0,t.w,t.h); + t.ctx.lineWidth = 5; + if(t.f){ + t.o = 1; + }else{ + t.o-=0.02; + } + t.ctx.globalAlpha = t.o; + t.ctx.save(); + t.ctx.translate(t.w/2,t.h/2); + t.ctx.rotate(t.m*Math.PI/180); + t.ctx.translate(-t.w/2,-t.h/2); + for(var i = 0;i0){ + requestAnimationFrame(function(){ + t.x13(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x14:function(t){ + t.ctx.globalAlpha = 1; + t.ctx.fillStyle = t.bc; + t.ctx.clearRect(0,0,t.w,t.h); + if(t.f){ + t.a[0].y += t.zy; + t.a[1].y -= t.zy; + if(t.a[0].y >= 0){ + t.a[0].y = 0; + } + if(t.a[1].y <= t.h-t.z){ + t.a[1].y = t.h-t.z; + } + if(t.a[0].y == 0){ + t.a[2].x+=t.zx; + t.a[3].x-=t.zx; + if(t.a[2].x >= -t.w/2){ + t.a[2].x = -t.w/2; + } + if(t.a[3].x <= t.w/2){ + t.a[3].x = t.w/2; + } + } + }else{ + t.a[2].x-=t.zx; + t.a[3].x+=t.zx; + if(t.a[2].x <= -t.w){ + t.a[2].x = -t.w; + } + if(t.a[3].x >= t.w){ + t.a[3].x = t.w; + } + if(t.a[2].x == -t.w){ + t.a[0].y -= t.zy; + t.a[1].y += t.zy; + if(t.a[0].y <= -t.z){ + t.a[0].y = -t.z; + } + if(t.a[1].y >= t.h){ + t.a[1].y = t.h; + } + } + } + t.ctx.fillStyle = t.c; + for(var i = 0;i0;i--){ + t.a[i].y = t.a[i-1].y; + t.ctx.fillRect(t.a[i].x,t.a[i].y,t.a[i].w,t.a[i].h); + if(t.a[i].y < t.h){ + t.q = true; + } + } + if(t.f || t.q){ + requestAnimationFrame(function(){ + t.x15(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x16:function(t){ + t.ctx.globalAlpha = 1; + t.ctx.fillStyle = t.c; + t.ctx.clearRect(0,0,t.w,t.h); + if(t.f){ + t.a[0].x-=t.zx; + t.a[0].y-=t.zy; + t.a[0].w+=t.zx; + t.a[0].h+=t.zy; + if(t.a[0].x<=0){ + t.a[0].x=0; + } + if(t.a[0].y<=0){ + t.a[0].y=0; + } + if(t.a[0].w>=t.w){ + t.a[0].w=t.w; + } + if(t.a[0].h>t.h){ + t.a[0].h=t.h; + } + }else{ + if(t.a[0].x == 0 && t.a[0].y == 0){ + if(t.a[0].w == t.w){ + if(Math.random()<.5){ + if(Math.random()<.5){ + t.a[0].xj = 0; + t.a[0].yj = 0; + }else{ + t.a[0].xj = t.zx; + t.a[0].yj = 0; + } + }else{ + if(Math.random()<.5){ + t.a[0].xj = 0; + t.a[0].yj = t.zy; + }else{ + t.a[0].xj = t.zx; + t.a[0].yj = t.zy; + } + } + }else{ + t.a[0].xj = 0; + t.a[0].yj = 0; + } + }else if(t.a[0].x == 0){ + t.a[0].xj = 0; + t.a[0].yj = t.zy; + }else if(t.a[0].y == 0){ + t.a[0].xj = t.zx; + t.a[0].yj = 0; + }else{ + t.a[0].xj = t.zx; + t.a[0].yj = t.zy; + } + t.a[0].x+=t.a[0].xj; + t.a[0].y+=t.a[0].yj; + t.a[0].w-=t.zx; + t.a[0].h-=t.zy; + if(t.a[0].w <= 0){ + t.a[0].w = 0; + } + if(t.a[0].h <= 0){ + t.a[0].h = 0; + } + if(t.a[0].x >= t.w){ + t.a[0].x = t.w; + } + if(t.a[0].y >= t.h){ + t.a[0].y = t.h; + } + } + t.ctx.fillRect(t.a[0].x,t.a[0].y,t.a[0].w,t.a[0].h); + if(t.a[0].w == 0 && t.a[0].h == 0){ + t.a=[]; + } + if(t.f || t.a.length > 0){ + requestAnimationFrame(function(){ + t.x16(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x17:function(t){ + t.ctx.globalAlpha = 1; + t.ctx.fillStyle = t.c; + t.ctx.clearRect(0,0,t.w,t.h); + if(t.f){ + t.a1+=t.h/20; + t.a2-=t.h/20; + if(t.a1 >= 0){ + t.a1 = 0; + } + if(t.a2 <=0 ){ + t.a2 = 0; + } + }else{ + t.a1-=t.h/20; + t.a2+=t.h/20; + if(t.a1 <= -t.h){ + t.a1 = -t.h; + } + if(t.a2 >= t.h){ + t.a2 = t.h; + } + } + t.ctx.beginPath(); + t.ctx.moveTo(0,-t.h); + for(var i=0;i -t.h){ + requestAnimationFrame(function(){ + t.x17(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x18:function(t){ + t.q = true; + t.ctx.globalAlpha = 0.3; + t.ctx.fillStyle = t.bc; + t.ctx.fillRect(0,0,t.w,t.h); + t.a[0]+=t.a[2]; + t.a[1]+=t.a[3]; + if(t.f){ + if(t.a[0] <= t.a[4]){ + t.a[0] = 2*t.a[4]-t.a[0]; + t.a[2]*=-1; + }else if(t.a[0] >= t.w-t.a[4]){ + t.a[0] = 2*(t.w-t.a[4])-t.a[0]; + t.a[2]*=-1; + } + if(t.a[1] <= t.a[4]){ + t.a[1] = 2*t.a[4]-t.a[1]; + t.a[3]*=-1; + }else if(t.a[1] >= t.h-t.a[4]){ + t.a[1] = 2*(t.h-t.a[4])-t.a[1]; + t.a[3]*=-1; + } + }else{ + if(t.a[0]<=-t.a[4] || t.a[0]>=t.a[4]+t.w || t.a[1]<=-t.a[4] || t.a[1]>=t.a[4]+t.h){ + t.q = false; + t.a = []; + } + } + t.ctx.fillStyle = t.c; + t.ctx.globalAlpha = 1; + t.ctx.beginPath(); + t.ctx.arc(t.a[0],t.a[1],t.a[4],0,Math.PI*2); + t.ctx.closePath(); + t.ctx.fill(); + if(t.f || t.q){ + requestAnimationFrame(function(){ + t.x18(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x19:function(t){ + t.ctx.globalAlpha = 1; + t.ctx.clearRect(0,0,t.w,t.h); + t.ctx.fillStyle = t.c; + if(t.f){ + t.a[0]+=t.zx; + if(t.a[0] >= 0){ + t.a[0] = 0; + t.a[1]-=t.zy; + t.a[3]+=2*t.zy; + } + if(t.a[1] <= 0){ + t.a[1] = 0; + } + if(t.a[3] >= t.h){ + t.a[3] = t.h; + } + }else{ + t.a[1]+=t.zy; + t.a[3]-=2*t.zy; + if(t.a[1] >= (t.h/2)-1){ + t.a[1] = (t.h/2)-1; + } + if(t.a[3] <= 2){ + t.a[3] = 2; + } + if(t.a[1] == (t.h/2)-1 && t.a[3] == 2){ + t.a[0]-=t.zx; + } + if(t.a[0] <= -t.w){ + t.a[0] = -t.w; + } + } + t.ctx.fillRect(t.a[0],t.a[1],t.a[2],t.a[3]); + if(t.f || t.a[0] > -t.w){ + requestAnimationFrame(function(){ + t.x19(t); + }); + }else{ + t.a = []; + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x20:function(t){ + t.ctx.globalAlpha = 1; + t.ctx.clearRect(0,0,t.w,t.h); + t.ctx.fillStyle = t.c; + if(t.f){ + t.a[2]+=t.z/20; + if(t.a[2] >= t.z){ + t.a[2] = t.z; + } + }else{ + t.a[2]-=t.z/20; + if(t.a[2] <= 1){ + t.a[2] = 1; + } + } + t.ctx.beginPath(); + t.ctx.arc(t.a[0],t.a[1],t.a[2],0,Math.PI*2); + t.ctx.fill(); + if(t.f || t.a[2] > 1){ + requestAnimationFrame(function(){ + t.x20(t); + }); + }else{ + t.a = []; + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x21:function(t){ + if(t.f && t.a.length < 50){ + t.z = Math.ceil(Math.random()*4); + if(t.z == 1){ + t.a.push({x:t.w/2,y:t.h/2,r:2,zx:2,zy:0}); + }else if(t.z == 2){ + t.a.push({x:t.w/2,y:t.h/2,r:2,zx:-2,zy:0}); + }else if(t.z == 3){ + t.a.push({x:t.w/2,y:t.h/2,r:2,zx:0,zy:2}); + }else{ + t.a.push({x:t.w/2,y:t.h/2,r:2,zx:0,zy:-2}); + } + } + t.ctx.globalAlpha = 0.3; + t.ctx.fillStyle = t.bc; + t.ctx.fillRect(0,0,t.w,t.h); + t.ctx.fillStyle = t.c; + if(t.f){ + t.o = 1; + }else{ + t.o-=0.05; + if(t.o <= 0){ + t.o = 0; + } + } + t.ctx.globalAlpha = t.o; + for(var i = 0;i= t.w || t.a[i].y <= -t.a[i].r || t.a[i].y >= t.h ){ + t.a.splice(i,1); + i--; + } + } + if(t.f || t.o >0){ + requestAnimationFrame(function(){ + t.x21(t); + }); + }else{ + t.a = []; + t.ctx.clearRect(0,0,t.w,t.h); + } + }, + x22:function(t){ + t.ctx.globalAlpha = 1; + t.ctx.clearRect(0,0,t.w,t.h); + t.ctx.fillStyle = t.c; + if(t.f){ + t.a[4]+=t.z; + t.a[0]-=t.zx/2; + t.a[1]-=t.zy/2; + t.a[2]+=t.zx; + t.a[3]+=t.zy; + if(t.a[4] >= 4*Math.PI){ + t.a[4] = 4*Math.PI; + } + if(t.a[0] <=0 ){ + t.a[0] = 0; + } + if(t.a[1] <= 0 ){ + t.a[1] = 0; + } + if(t.a[2] >= t.w ){ + t.a[2] = t.w; + } + if(t.a[3] >= t.h ){ + t.a[3] = t.h; + } + }else{ + t.a[4]-=t.z; + t.a[0]+=t.zx/2; + t.a[1]+=t.zy/2; + t.a[2]-=t.zx; + t.a[3]-=t.zy; + if(t.a[4] <= 0){ + t.a[4] = 0 + } + } + t.ctx.save(); + t.ctx.translate(t.w/2,t.h/2); + t.ctx.rotate(t.a[4]); + t.ctx.translate(-t.w/2,-t.h/2); + t.ctx.fillRect(t.a[0],t.a[1],t.a[2],t.a[3]); + t.ctx.restore(); + if(t.f || t.a[4] > 0){ + requestAnimationFrame(function(){ + t.x22(t); + }); + }else{ + t.a = []; + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x23:function(t){ + t.ctx.clearRect(0,0,t.w,t.h); + t.q = false; + t.ctx.fillStyle = t.c; + for(var i = 0;i= -t.h/1.3 && t.a[i-1].y >= t.a[i].y + (t.h-t.h/1.3)) || t.a[i-1].y == 0){ + t.a[i].y+=t.h/20; + } + if(t.a[i].y >= 0){ + t.a[i].y = 0; + } + }else{ + if(i == 0){ + t.a[i].y-=t.h/20; + }else if(t.a[i-1].y <= t.a[i].y-(t.h-t.h/1.3) || t.a[i-1].y == -t.h){ + t.a[i].y-=t.h/20; + } + if(t.a[i].y <= -t.h){ + t.a[i].y = -t.h; + } + }; + t.ctx.fillRect(t.a[i].x,t.a[i].y,t.a[i].w,t.a[i].h); + if(t.a[i].y > -t.h){ + t.q = true; + } + } + t.ctx.globalAlpha = 1; + if(t.f || t.q){ + requestAnimationFrame(function(){ + t.x23(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x24:function(t){ + t.ctx.globalAlpha = 0.3; + t.ctx.fillStyle = t.bc; + t.ctx.fillRect(0,0,t.w,t.h); + t.ctx.fillStyle = t.c; + for(var i = 0;i= 0){ + t.z0 = 0; + } + if(t.z1 <= 0){ + t.z1 = 0; + } + }else{ + t.z0-=3; + t.z1+=3; + if(t.z0 <= -90){ + t.z0 = -90; + } + if(t.z1 >= 90){ + t.z1 = 90; + } + } + t.ctx.save(); + t.ctx.translate(0,t.h/2); + t.ctx.rotate(t.z0 * Math.PI/180); + t.ctx.translate(0,-t.h/2); + t.ctx.fillRect(t.a[0].x,t.a[0].y,t.a[0].w,t.a[0].h); + t.ctx.restore(); + t.ctx.save(); + t.ctx.translate(0,t.h/2); + t.ctx.rotate(t.z1 * Math.PI/180); + t.ctx.translate(0,-t.h/2); + t.ctx.fillRect(t.a[1].x,t.a[1].y,t.a[1].w,t.a[1].h); + t.ctx.restore(); + if(t.f || t.z1 < 90){ + requestAnimationFrame(function(){ + t.x25(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x26:function(t){ + t.q = false; + t.ctx.globalAlpha = 1; + t.ctx.fillStyle = t.c; + t.ctx.clearRect(0,0,t.w,t.h); + if(t.f){ + t.a[0].y-=t.z; + t.a[0].h+=2*t.z; + if(t.a[0].y <= 0){ + t.a[0].y = 0; + } + if(t.a[0].h >= t.h){ + t.a[0].h = t.h; + } + }else{ + t.a[0].y+=t.z; + t.a[0].h-=2*t.z; + if(t.a[0].y >= t.h/2){ + t.a[0].y = t.h/2; + } + if(t.a[0].h <= 0){ + t.a[0].h = 0; + } + } + t.ctx.fillRect(t.a[0].x,t.a[0].y,t.a[0].w,t.a[0].h); + if(t.a[0].h > 0){ + t.q = true; + } + for(var i = t.a.length-1;i>0;i--){ + t.a[i].y = t.a[i-1].y; + t.a[i].h = t.a[i-1].h; + t.ctx.fillRect(t.a[i].x,t.a[i].y,t.a[i].w,t.a[i].h); + if(t.a[i].h > 0){ + t.q = true; + } + } + if(t.f || t.q){ + requestAnimationFrame(function(){ + t.x26(t); + }); + }else{ + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x27:function(t){ + t.ctx.globalAlpha = 0.3; + t.ctx.fillStyle = t.bc; + t.ctx.fillRect(0,0,t.w,t.h); + t.ctx.fillStyle = t.c; + t.a[0]-=t.zx*t.z; + t.a[1]-=t.zy*t.z; + t.a[2]+=2*t.zx*t.z; + t.a[3]+=2*t.zy*t.z; + if(t.a[2] <= 0 || t.a[2] >= t.w){ + t.z*=-1; + } + if(t.f){ + t.o = 1; + }else{ + t.o-=0.02; + } + t.ctx.globalAlpha = t.o; + t.ctx.fillRect(t.a[0],t.a[1],t.a[2],t.a[3]); + if(t.f || t.o>0){ + requestAnimationFrame(function(){ + t.x27(t); + }); + }else{ + t.a = []; + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x28:function(t){ + t.ctx.globalAlpha = 1; + t.ctx.fillStyle = t.c; + t.ctx.clearRect(0,0,t.w,t.h); + if(t.a1.length>0){ + t.z = Math.floor(Math.random()*t.a1.length); + t.a[t.a1[t.z]].t = true; + t.a1.splice(t.z,1); + } + if(t.f){ + t.o = 1; + }else{ + t.o-=0.02; + } + t.ctx.globalAlpha = t.o; + for(var i=0;i= 0){ + t.a[i].y = 0; + } + } + t.ctx.fillRect(t.a[i].x,t.a[i].y,t.a[i].w,t.a[i].h); + } + if(t.f || t.o>0){ + requestAnimationFrame(function(){ + t.x28(t); + }); + }else{ + t.a = []; + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x29:function(t){ + t.ctx.globalAlpha = 1; + t.ctx.fillStyle = t.c; + t.ctx.clearRect(0,0,t.w,t.h); + if(t.f){ + t.z = 1; + }else{ + t.z = -1; + } + for(var i=0;i= 0){ + t.a[i].y = 0; + }else if(t.a[i].y <= -t.h){ + t.a[i].y = -t.h; + } + t.ctx.fillRect(t.a[i].x,t.a[i].y,t.a[i].w,t.a[i].h); + } + for(var j=0;j= 0){ + t.a1[j].x = 0; + }else if(t.a1[j].x <= -t.w){ + t.a1[j].x = -t.w; + } + t.ctx.fillRect(t.a1[j].x,t.a1[j].y,t.a1[j].w,t.a1[j].h); + } + if(t.f || (t.a[0].y > -t.h && t.a1[0].x > -t.w)){ + requestAnimationFrame(function(){ + t.x29(t); + }); + }else{ + t.a = []; + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + }, + x30:function(t){ + t.ctx.globalAlpha = 1; + t.ctx.fillStyle = t.c; + t.ctx.clearRect(0,0,t.w,t.h); + if(t.f){ + t.a[3]+=10; + }else{ + t.a[3]-=10; + }; + if(t.a[3] >= 270){ + t.a[3] = 270; + }else if(t.a[3] <= -90){ + t.a[3] = -90; + } + t.ctx.beginPath(); + t.ctx.moveTo(t.a[0],t.a[1]); + t.ctx.arc(t.a[0],t.a[1],t.a[2],-90*Math.PI/180,t.a[3]*Math.PI/180); + t.ctx.closePath(); + t.ctx.fill(); + if(t.f || t.a[3] > -90){ + requestAnimationFrame(function(){ + t.x30(t); + }); + }else{ + t.a = []; + t.ctx.clearRect(0,0,t.w,t.h); + t.d = false; + } + } + }; + var y = { + color:false, + }; + $.fn.xs999 = function(u,g){ + y = { + color:false, + } + $.extend(y,g); + $(this).each(function() { + new b($(this),u,y); + }); + } +})(jQuery); +(function() { + var lastTime = 0; + var vendors = ['webkit', 'moz']; + for(var xx = 0; xx < vendors.length && !window.requestAnimationFrame; ++xx) { + window.requestAnimationFrame = window[vendors[xx] + 'RequestAnimationFrame']; + window.cancelAnimationFrame = window[vendors[xx] + 'CancelAnimationFrame'] || + window[vendors[xx] + 'CancelRequestAnimationFrame']; + } + + if (!window.requestAnimationFrame) { + window.requestAnimationFrame = function(callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16.7 - (currTime - lastTime)); + var id = window.setTimeout(function() { + callback(currTime + timeToCall); + }, timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + } + if (!window.cancelAnimationFrame) { + window.cancelAnimationFrame = function(id) { + clearTimeout(id); + }; + } +}()); \ No newline at end of file diff --git a/template/index10/assets/picture/57ede64c39bb4880.png b/template/index10/assets/picture/57ede64c39bb4880.png new file mode 100644 index 0000000..20f7a52 Binary files /dev/null and b/template/index10/assets/picture/57ede64c39bb4880.png differ diff --git a/template/index10/assets/picture/about_rightimg1.png b/template/index10/assets/picture/about_rightimg1.png new file mode 100644 index 0000000..0825f73 Binary files /dev/null and b/template/index10/assets/picture/about_rightimg1.png differ diff --git a/template/index10/assets/picture/about_rightimg2.png b/template/index10/assets/picture/about_rightimg2.png new file mode 100644 index 0000000..3a92cf9 Binary files /dev/null and b/template/index10/assets/picture/about_rightimg2.png differ diff --git a/template/index10/assets/picture/advantage_1.png b/template/index10/assets/picture/advantage_1.png new file mode 100644 index 0000000..2c769cf Binary files /dev/null and b/template/index10/assets/picture/advantage_1.png differ diff --git a/template/index10/assets/picture/advantage_2.png b/template/index10/assets/picture/advantage_2.png new file mode 100644 index 0000000..3cec273 Binary files /dev/null and b/template/index10/assets/picture/advantage_2.png differ diff --git a/template/index10/assets/picture/advantage_3.png b/template/index10/assets/picture/advantage_3.png new file mode 100644 index 0000000..19c3279 Binary files /dev/null and b/template/index10/assets/picture/advantage_3.png differ diff --git a/template/index10/assets/picture/advantage_4.png b/template/index10/assets/picture/advantage_4.png new file mode 100644 index 0000000..a864de6 Binary files /dev/null and b/template/index10/assets/picture/advantage_4.png differ diff --git a/template/index10/assets/picture/banner_right.png b/template/index10/assets/picture/banner_right.png new file mode 100644 index 0000000..c83fa78 Binary files /dev/null and b/template/index10/assets/picture/banner_right.png differ diff --git a/template/index10/assets/picture/payment_1.png b/template/index10/assets/picture/payment_1.png new file mode 100644 index 0000000..2db5c1c Binary files /dev/null and b/template/index10/assets/picture/payment_1.png differ diff --git a/template/index10/assets/picture/payment_2.png b/template/index10/assets/picture/payment_2.png new file mode 100644 index 0000000..5067faf Binary files /dev/null and b/template/index10/assets/picture/payment_2.png differ diff --git a/template/index10/assets/picture/payment_3.png b/template/index10/assets/picture/payment_3.png new file mode 100644 index 0000000..e33733b Binary files /dev/null and b/template/index10/assets/picture/payment_3.png differ diff --git a/template/index10/assets/picture/payment_4.png b/template/index10/assets/picture/payment_4.png new file mode 100644 index 0000000..a52a7a2 Binary files /dev/null and b/template/index10/assets/picture/payment_4.png differ diff --git a/template/index10/assets/picture/payment_5.png b/template/index10/assets/picture/payment_5.png new file mode 100644 index 0000000..dd0e21f Binary files /dev/null and b/template/index10/assets/picture/payment_5.png differ diff --git a/template/index10/assets/picture/payment_6.png b/template/index10/assets/picture/payment_6.png new file mode 100644 index 0000000..3392e38 Binary files /dev/null and b/template/index10/assets/picture/payment_6.png differ diff --git a/template/index10/assets/picture/payment_7.png b/template/index10/assets/picture/payment_7.png new file mode 100644 index 0000000..a0365b9 Binary files /dev/null and b/template/index10/assets/picture/payment_7.png differ diff --git a/template/index10/assets/picture/process_1.png b/template/index10/assets/picture/process_1.png new file mode 100644 index 0000000..3210686 Binary files /dev/null and b/template/index10/assets/picture/process_1.png differ diff --git a/template/index10/assets/picture/process_2.png b/template/index10/assets/picture/process_2.png new file mode 100644 index 0000000..8028e8b Binary files /dev/null and b/template/index10/assets/picture/process_2.png differ diff --git a/template/index10/assets/picture/process_3.png b/template/index10/assets/picture/process_3.png new file mode 100644 index 0000000..74ec356 Binary files /dev/null and b/template/index10/assets/picture/process_3.png differ diff --git a/template/index10/assets/picture/process_4.png b/template/index10/assets/picture/process_4.png new file mode 100644 index 0000000..99c45a6 Binary files /dev/null and b/template/index10/assets/picture/process_4.png differ diff --git a/template/index10/assets/picture/process_5.png b/template/index10/assets/picture/process_5.png new file mode 100644 index 0000000..2bb9fbf Binary files /dev/null and b/template/index10/assets/picture/process_5.png differ diff --git a/template/index10/assets/picture/process_6.png b/template/index10/assets/picture/process_6.png new file mode 100644 index 0000000..16860b0 Binary files /dev/null and b/template/index10/assets/picture/process_6.png differ diff --git a/template/index10/index.php b/template/index10/index.php new file mode 100644 index 0000000..e51e34f --- /dev/null +++ b/template/index10/index.php @@ -0,0 +1,338 @@ + + + + + + + <?php echo $conf['title']?> + + + + + + + + + + + + + + + + + +
    + + +
    + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    + 简介 + +
    +

    成立于2018年,)。

    +

    平台主要服务于互联网和移动互联网领域,为网页游戏、手机游戏、阅读、音乐、交友、教育等移动应用提供综合计费营销服务,创新、诚信、灵和活多元,创新是企业发展的灵魂。

    +

    我们打破了传统聚合支付网站几年来一成不变的局面,建立了新一代聚合支付的行业方向,我们将引领聚合支付交易过程的个性化、自动化、工具化等。作为业内最善于创新的网站,力争成为行业的佼佼者。

    +
    + + +
    +
    +
    +
    + +
    +
    + +
    +
    +
    + +
    +
    +
    + 成为商户仅需六步 + + 让你轻松做生意 +
      +
    • + <?php echo $conf['sitename']?>-注册商户-在线自助注册 + 注册商户 + 在线自助注册 +
    • +
    • + <?php echo $conf['sitename']?>-绑定银行-轻松设置商户信息 + 绑定银行 + 轻松设置商户信息 +
    • +
    • + <?php echo $conf['sitename']?>-接口对接-全平台SDK支持 + 接口对接 + 全平台SDK支持 +
    • +
    • + <?php echo $conf['sitename']?>-自助下单-会员支付一键直达 + 自助下单 + 会员支付一键直达 +
    • +
    • + <?php echo $conf['sitename']?>-全天客服-7*24小时专业服务 + 全天客服 + 7*24小时专业服务 +
    • +
    • + <?php echo $conf['sitename']?>-自动结算-信誉无忧充分保障 + 自动结算 + 信誉无忧充分保障 +
    • +
    +
    +
    +
    + +
    +
    +
    +
    +
    + 品牌优势 + + 全年365天持续运行,每天正常下款
    根据行业的不同和交易量
    实行T0/T1,D0/D1结算,请联系客服
    +
    +
    +
    +
    +
    +
      +
    • + <?php echo $conf['sitename']?>-服务器安全、速度、稳定 + 服务器安全 +

      采用群集服务器,防御高,

      +

      故障率低,无论用户身在何方,

      +

      均能获得流畅安全可靠的体验

      +
    • +
    • + <?php echo $conf['sitename']?>-资金安全有保障 + 资金保障 +

      结算及时,资金秒到

      +

      资金平均停留的时间不超过12小时,

      +

      您的资金安全将得到充分的保障.

      +
    • +
    • + <?php echo $conf['sitename']?>-持续更新用的安心 + 持续更新 +

      系统持续更新,功能持续完善,

      +

      让商户以及客户的体验不断接近

      +

      完美是我们一直不变的追求.

      +
    • +
    • + <?php echo $conf['sitename']?>-界面简约,操作简单 + 界面简约 +

      简约的UI交互体验可以

      +

      给您一个体验度极高的商户后台,

      +

      更好的使用体验.

      +
    • +
    +
    +
    + +
    +
    +
    +

    联系我们

    +

    +
      +
    • + + 公司地址 + + xxxxxx + +
    • +
    • + + 联系方式 + + + 商务QQ: + +
    • +
    • + + 电子邮箱 + + + +
    • +
    +
    +
    +
    +
    +
    +
    +
    马上开启全新商户体验
    + 商户登录 +
    +
    +
    +
    +
    + + + + +
    +
    +
    +
    +
    - + +
    +
    +
    +
    +
    顶部
    +
    +
    + + + + diff --git a/template/index10/preview.png b/template/index10/preview.png new file mode 100644 index 0000000..af6faec Binary files /dev/null and b/template/index10/preview.png differ diff --git a/template/index2/assets/css/aos.css b/template/index2/assets/css/aos.css new file mode 100644 index 0000000..f48e9ab --- /dev/null +++ b/template/index2/assets/css/aos.css @@ -0,0 +1 @@ +[aos][aos][aos-easing=linear],body[aos-easing=linear] [aos]{-webkit-transition-timing-function:cubic-bezier(.25,.25,.75,.75);transition-timing-function:cubic-bezier(.25,.25,.75,.75)}[aos][aos][aos-easing=ease],body[aos-easing=ease] [aos]{-webkit-transition-timing-function:cubic-bezier(.25,.1,.25,1);transition-timing-function:cubic-bezier(.25,.1,.25,1)}[aos][aos][aos-easing=ease-in],body[aos-easing=ease-in] [aos]{-webkit-transition-timing-function:cubic-bezier(.42,0,1,1);transition-timing-function:cubic-bezier(.42,0,1,1)}[aos][aos][aos-easing=ease-out],body[aos-easing=ease-out] [aos]{-webkit-transition-timing-function:cubic-bezier(0,0,.58,1);transition-timing-function:cubic-bezier(0,0,.58,1)}[aos][aos][aos-easing=ease-in-out],body[aos-easing=ease-in-out] [aos]{-webkit-transition-timing-function:cubic-bezier(.42,0,.58,1);transition-timing-function:cubic-bezier(.42,0,.58,1)}[aos][aos][aos-easing=ease-in-back],body[aos-easing=ease-in-back] [aos]{-webkit-transition-timing-function:cubic-bezier(.6,-.28,.735,.045);transition-timing-function:cubic-bezier(.6,-.28,.735,.045)}[aos][aos][aos-easing=ease-out-back],body[aos-easing=ease-out-back] [aos]{-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.275);transition-timing-function:cubic-bezier(.175,.885,.32,1.275)}[aos][aos][aos-easing=ease-in-out-back],body[aos-easing=ease-in-out-back] [aos]{-webkit-transition-timing-function:cubic-bezier(.68,-.55,.265,1.55);transition-timing-function:cubic-bezier(.68,-.55,.265,1.55)}[aos][aos][aos-easing=ease-in-sine],body[aos-easing=ease-in-sine] [aos]{-webkit-transition-timing-function:cubic-bezier(.47,0,.745,.715);transition-timing-function:cubic-bezier(.47,0,.745,.715)}[aos][aos][aos-easing=ease-out-sine],body[aos-easing=ease-out-sine] [aos]{-webkit-transition-timing-function:cubic-bezier(.39,.575,.565,1);transition-timing-function:cubic-bezier(.39,.575,.565,1)}[aos][aos][aos-easing=ease-in-out-sine],body[aos-easing=ease-in-out-sine] [aos]{-webkit-transition-timing-function:cubic-bezier(.445,.05,.55,.95);transition-timing-function:cubic-bezier(.445,.05,.55,.95)}[aos][aos][aos-easing=ease-in-quad],[aos][aos][aos-easing=ease-in-cubic],[aos][aos][aos-easing=ease-in-quart],body[aos-easing=ease-in-quad] [aos],body[aos-easing=ease-in-cubic] [aos],body[aos-easing=ease-in-quart] [aos]{-webkit-transition-timing-function:cubic-bezier(.55,.085,.68,.53);transition-timing-function:cubic-bezier(.55,.085,.68,.53)}[aos][aos][aos-easing=ease-out-quad],[aos][aos][aos-easing=ease-out-cubic],[aos][aos][aos-easing=ease-out-quart],body[aos-easing=ease-out-quad] [aos],body[aos-easing=ease-out-cubic] [aos],body[aos-easing=ease-out-quart] [aos]{-webkit-transition-timing-function:cubic-bezier(.25,.46,.45,.94);transition-timing-function:cubic-bezier(.25,.46,.45,.94)}[aos][aos][aos-easing=ease-in-out-quad],[aos][aos][aos-easing=ease-in-out-cubic],[aos][aos][aos-easing=ease-in-out-quart],body[aos-easing=ease-in-out-quad] [aos],body[aos-easing=ease-in-out-cubic] [aos],body[aos-easing=ease-in-out-quart] [aos]{-webkit-transition-timing-function:cubic-bezier(.455,.03,.515,.955);transition-timing-function:cubic-bezier(.455,.03,.515,.955)}[aos][aos][aos-duration='50'],body[aos-duration='50'] [aos]{-webkit-transition-duration:50ms;transition-duration:50ms}[aos][aos][aos-duration='100'],body[aos-duration='100'] [aos]{-webkit-transition-duration:.1s;transition-duration:.1s}[aos][aos][aos-duration='150'],body[aos-duration='150'] [aos]{-webkit-transition-duration:150ms;transition-duration:150ms}[aos][aos][aos-duration='200'],body[aos-duration='200'] [aos]{-webkit-transition-duration:.2s;transition-duration:.2s}[aos][aos][aos-duration='250'],body[aos-duration='250'] [aos]{-webkit-transition-duration:250ms;transition-duration:250ms}[aos][aos][aos-duration='300'],body[aos-duration='300'] [aos]{-webkit-transition-duration:.3s;transition-duration:.3s}[aos][aos][aos-duration='350'],body[aos-duration='350'] [aos]{-webkit-transition-duration:350ms;transition-duration:350ms}[aos][aos][aos-duration='400'],body[aos-duration='400'] [aos]{-webkit-transition-duration:.4s;transition-duration:.4s}[aos][aos][aos-duration='450'],body[aos-duration='450'] [aos]{-webkit-transition-duration:450ms;transition-duration:450ms}[aos][aos][aos-duration='500'],body[aos-duration='500'] [aos]{-webkit-transition-duration:.5s;transition-duration:.5s}[aos][aos][aos-duration='550'],body[aos-duration='550'] [aos]{-webkit-transition-duration:550ms;transition-duration:550ms}[aos][aos][aos-duration='600'],body[aos-duration='600'] [aos]{-webkit-transition-duration:.6s;transition-duration:.6s}[aos][aos][aos-duration='650'],body[aos-duration='650'] [aos]{-webkit-transition-duration:650ms;transition-duration:650ms}[aos][aos][aos-duration='700'],body[aos-duration='700'] [aos]{-webkit-transition-duration:.7s;transition-duration:.7s}[aos][aos][aos-duration='750'],body[aos-duration='750'] [aos]{-webkit-transition-duration:750ms;transition-duration:750ms}[aos][aos][aos-duration='800'],body[aos-duration='800'] [aos]{-webkit-transition-duration:.8s;transition-duration:.8s}[aos][aos][aos-duration='850'],body[aos-duration='850'] [aos]{-webkit-transition-duration:850ms;transition-duration:850ms}[aos][aos][aos-duration='900'],body[aos-duration='900'] [aos]{-webkit-transition-duration:.9s;transition-duration:.9s}[aos][aos][aos-duration='950'],body[aos-duration='950'] [aos]{-webkit-transition-duration:950ms;transition-duration:950ms}[aos][aos][aos-duration='1000'],body[aos-duration='1000'] [aos]{-webkit-transition-duration:1s;transition-duration:1s}[aos][aos][aos-duration='1050'],body[aos-duration='1050'] [aos]{-webkit-transition-duration:1.05s;transition-duration:1.05s}[aos][aos][aos-duration='1100'],body[aos-duration='1100'] [aos]{-webkit-transition-duration:1.1s;transition-duration:1.1s}[aos][aos][aos-duration='1150'],body[aos-duration='1150'] [aos]{-webkit-transition-duration:1.15s;transition-duration:1.15s}[aos][aos][aos-duration='1200'],body[aos-duration='1200'] [aos]{-webkit-transition-duration:1.2s;transition-duration:1.2s}[aos][aos][aos-duration='1250'],body[aos-duration='1250'] [aos]{-webkit-transition-duration:1.25s;transition-duration:1.25s}[aos][aos][aos-duration='1300'],body[aos-duration='1300'] [aos]{-webkit-transition-duration:1.3s;transition-duration:1.3s}[aos][aos][aos-duration='1350'],body[aos-duration='1350'] [aos]{-webkit-transition-duration:1.35s;transition-duration:1.35s}[aos][aos][aos-duration='1400'],body[aos-duration='1400'] [aos]{-webkit-transition-duration:1.4s;transition-duration:1.4s}[aos][aos][aos-duration='1450'],body[aos-duration='1450'] [aos]{-webkit-transition-duration:1.45s;transition-duration:1.45s}[aos][aos][aos-duration='1500'],body[aos-duration='1500'] [aos]{-webkit-transition-duration:1.5s;transition-duration:1.5s}[aos][aos][aos-duration='1550'],body[aos-duration='1550'] [aos]{-webkit-transition-duration:1.55s;transition-duration:1.55s}[aos][aos][aos-duration='1600'],body[aos-duration='1600'] [aos]{-webkit-transition-duration:1.6s;transition-duration:1.6s}[aos][aos][aos-duration='1650'],body[aos-duration='1650'] [aos]{-webkit-transition-duration:1.65s;transition-duration:1.65s}[aos][aos][aos-duration='1700'],body[aos-duration='1700'] [aos]{-webkit-transition-duration:1.7s;transition-duration:1.7s}[aos][aos][aos-duration='1750'],body[aos-duration='1750'] [aos]{-webkit-transition-duration:1.75s;transition-duration:1.75s}[aos][aos][aos-duration='1800'],body[aos-duration='1800'] [aos]{-webkit-transition-duration:1.8s;transition-duration:1.8s}[aos][aos][aos-duration='1850'],body[aos-duration='1850'] [aos]{-webkit-transition-duration:1.85s;transition-duration:1.85s}[aos][aos][aos-duration='1900'],body[aos-duration='1900'] [aos]{-webkit-transition-duration:1.9s;transition-duration:1.9s}[aos][aos][aos-duration='1950'],body[aos-duration='1950'] [aos]{-webkit-transition-duration:1.95s;transition-duration:1.95s}[aos][aos][aos-duration='2000'],body[aos-duration='2000'] [aos]{-webkit-transition-duration:2s;transition-duration:2s}[aos][aos][aos-duration='2050'],body[aos-duration='2050'] [aos]{-webkit-transition-duration:2.05s;transition-duration:2.05s}[aos][aos][aos-duration='2100'],body[aos-duration='2100'] [aos]{-webkit-transition-duration:2.1s;transition-duration:2.1s}[aos][aos][aos-duration='2150'],body[aos-duration='2150'] [aos]{-webkit-transition-duration:2.15s;transition-duration:2.15s}[aos][aos][aos-duration='2200'],body[aos-duration='2200'] [aos]{-webkit-transition-duration:2.2s;transition-duration:2.2s}[aos][aos][aos-duration='2250'],body[aos-duration='2250'] [aos]{-webkit-transition-duration:2.25s;transition-duration:2.25s}[aos][aos][aos-duration='2300'],body[aos-duration='2300'] [aos]{-webkit-transition-duration:2.3s;transition-duration:2.3s}[aos][aos][aos-duration='2350'],body[aos-duration='2350'] [aos]{-webkit-transition-duration:2.35s;transition-duration:2.35s}[aos][aos][aos-duration='2400'],body[aos-duration='2400'] [aos]{-webkit-transition-duration:2.4s;transition-duration:2.4s}[aos][aos][aos-duration='2450'],body[aos-duration='2450'] [aos]{-webkit-transition-duration:2.45s;transition-duration:2.45s}[aos][aos][aos-duration='2500'],body[aos-duration='2500'] [aos]{-webkit-transition-duration:2.5s;transition-duration:2.5s}[aos][aos][aos-duration='2550'],body[aos-duration='2550'] [aos]{-webkit-transition-duration:2.55s;transition-duration:2.55s}[aos][aos][aos-duration='2600'],body[aos-duration='2600'] [aos]{-webkit-transition-duration:2.6s;transition-duration:2.6s}[aos][aos][aos-duration='2650'],body[aos-duration='2650'] [aos]{-webkit-transition-duration:2.65s;transition-duration:2.65s}[aos][aos][aos-duration='2700'],body[aos-duration='2700'] [aos]{-webkit-transition-duration:2.7s;transition-duration:2.7s}[aos][aos][aos-duration='2750'],body[aos-duration='2750'] [aos]{-webkit-transition-duration:2.75s;transition-duration:2.75s}[aos][aos][aos-duration='2800'],body[aos-duration='2800'] [aos]{-webkit-transition-duration:2.8s;transition-duration:2.8s}[aos][aos][aos-duration='2850'],body[aos-duration='2850'] [aos]{-webkit-transition-duration:2.85s;transition-duration:2.85s}[aos][aos][aos-duration='2900'],body[aos-duration='2900'] [aos]{-webkit-transition-duration:2.9s;transition-duration:2.9s}[aos][aos][aos-duration='2950'],body[aos-duration='2950'] [aos]{-webkit-transition-duration:2.95s;transition-duration:2.95s}[aos][aos][aos-duration='3000'],body[aos-duration='3000'] [aos]{-webkit-transition-duration:3s;transition-duration:3s}[aos][aos][aos-delay='50'],body[aos-delay='50'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='50'].aos-animate,body[aos-delay='50'] [aos].aos-animate{-webkit-transition-delay:50ms;transition-delay:50ms}[aos][aos][aos-delay='100'],body[aos-delay='100'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='100'].aos-animate,body[aos-delay='100'] [aos].aos-animate{-webkit-transition-delay:.1s;transition-delay:.1s}[aos][aos][aos-delay='150'],body[aos-delay='150'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='150'].aos-animate,body[aos-delay='150'] [aos].aos-animate{-webkit-transition-delay:150ms;transition-delay:150ms}[aos][aos][aos-delay='200'],body[aos-delay='200'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='200'].aos-animate,body[aos-delay='200'] [aos].aos-animate{-webkit-transition-delay:.2s;transition-delay:.2s}[aos][aos][aos-delay='250'],body[aos-delay='250'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='250'].aos-animate,body[aos-delay='250'] [aos].aos-animate{-webkit-transition-delay:250ms;transition-delay:250ms}[aos][aos][aos-delay='300'],body[aos-delay='300'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='300'].aos-animate,body[aos-delay='300'] [aos].aos-animate{-webkit-transition-delay:.3s;transition-delay:.3s}[aos][aos][aos-delay='350'],body[aos-delay='350'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='350'].aos-animate,body[aos-delay='350'] [aos].aos-animate{-webkit-transition-delay:350ms;transition-delay:350ms}[aos][aos][aos-delay='400'],body[aos-delay='400'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='400'].aos-animate,body[aos-delay='400'] [aos].aos-animate{-webkit-transition-delay:.4s;transition-delay:.4s}[aos][aos][aos-delay='450'],body[aos-delay='450'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='450'].aos-animate,body[aos-delay='450'] [aos].aos-animate{-webkit-transition-delay:450ms;transition-delay:450ms}[aos][aos][aos-delay='500'],body[aos-delay='500'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='500'].aos-animate,body[aos-delay='500'] [aos].aos-animate{-webkit-transition-delay:.5s;transition-delay:.5s}[aos][aos][aos-delay='550'],body[aos-delay='550'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='550'].aos-animate,body[aos-delay='550'] [aos].aos-animate{-webkit-transition-delay:550ms;transition-delay:550ms}[aos][aos][aos-delay='600'],body[aos-delay='600'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='600'].aos-animate,body[aos-delay='600'] [aos].aos-animate{-webkit-transition-delay:.6s;transition-delay:.6s}[aos][aos][aos-delay='650'],body[aos-delay='650'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='650'].aos-animate,body[aos-delay='650'] [aos].aos-animate{-webkit-transition-delay:650ms;transition-delay:650ms}[aos][aos][aos-delay='700'],body[aos-delay='700'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='700'].aos-animate,body[aos-delay='700'] [aos].aos-animate{-webkit-transition-delay:.7s;transition-delay:.7s}[aos][aos][aos-delay='750'],body[aos-delay='750'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='750'].aos-animate,body[aos-delay='750'] [aos].aos-animate{-webkit-transition-delay:750ms;transition-delay:750ms}[aos][aos][aos-delay='800'],body[aos-delay='800'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='800'].aos-animate,body[aos-delay='800'] [aos].aos-animate{-webkit-transition-delay:.8s;transition-delay:.8s}[aos][aos][aos-delay='850'],body[aos-delay='850'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='850'].aos-animate,body[aos-delay='850'] [aos].aos-animate{-webkit-transition-delay:850ms;transition-delay:850ms}[aos][aos][aos-delay='900'],body[aos-delay='900'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='900'].aos-animate,body[aos-delay='900'] [aos].aos-animate{-webkit-transition-delay:.9s;transition-delay:.9s}[aos][aos][aos-delay='950'],body[aos-delay='950'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='950'].aos-animate,body[aos-delay='950'] [aos].aos-animate{-webkit-transition-delay:950ms;transition-delay:950ms}[aos][aos][aos-delay='1000'],body[aos-delay='1000'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1000'].aos-animate,body[aos-delay='1000'] [aos].aos-animate{-webkit-transition-delay:1s;transition-delay:1s}[aos][aos][aos-delay='1050'],body[aos-delay='1050'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1050'].aos-animate,body[aos-delay='1050'] [aos].aos-animate{-webkit-transition-delay:1.05s;transition-delay:1.05s}[aos][aos][aos-delay='1100'],body[aos-delay='1100'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1100'].aos-animate,body[aos-delay='1100'] [aos].aos-animate{-webkit-transition-delay:1.1s;transition-delay:1.1s}[aos][aos][aos-delay='1150'],body[aos-delay='1150'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1150'].aos-animate,body[aos-delay='1150'] [aos].aos-animate{-webkit-transition-delay:1.15s;transition-delay:1.15s}[aos][aos][aos-delay='1200'],body[aos-delay='1200'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1200'].aos-animate,body[aos-delay='1200'] [aos].aos-animate{-webkit-transition-delay:1.2s;transition-delay:1.2s}[aos][aos][aos-delay='1250'],body[aos-delay='1250'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1250'].aos-animate,body[aos-delay='1250'] [aos].aos-animate{-webkit-transition-delay:1.25s;transition-delay:1.25s}[aos][aos][aos-delay='1300'],body[aos-delay='1300'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1300'].aos-animate,body[aos-delay='1300'] [aos].aos-animate{-webkit-transition-delay:1.3s;transition-delay:1.3s}[aos][aos][aos-delay='1350'],body[aos-delay='1350'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1350'].aos-animate,body[aos-delay='1350'] [aos].aos-animate{-webkit-transition-delay:1.35s;transition-delay:1.35s}[aos][aos][aos-delay='1400'],body[aos-delay='1400'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1400'].aos-animate,body[aos-delay='1400'] [aos].aos-animate{-webkit-transition-delay:1.4s;transition-delay:1.4s}[aos][aos][aos-delay='1450'],body[aos-delay='1450'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1450'].aos-animate,body[aos-delay='1450'] [aos].aos-animate{-webkit-transition-delay:1.45s;transition-delay:1.45s}[aos][aos][aos-delay='1500'],body[aos-delay='1500'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1500'].aos-animate,body[aos-delay='1500'] [aos].aos-animate{-webkit-transition-delay:1.5s;transition-delay:1.5s}[aos][aos][aos-delay='1550'],body[aos-delay='1550'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1550'].aos-animate,body[aos-delay='1550'] [aos].aos-animate{-webkit-transition-delay:1.55s;transition-delay:1.55s}[aos][aos][aos-delay='1600'],body[aos-delay='1600'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1600'].aos-animate,body[aos-delay='1600'] [aos].aos-animate{-webkit-transition-delay:1.6s;transition-delay:1.6s}[aos][aos][aos-delay='1650'],body[aos-delay='1650'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1650'].aos-animate,body[aos-delay='1650'] [aos].aos-animate{-webkit-transition-delay:1.65s;transition-delay:1.65s}[aos][aos][aos-delay='1700'],body[aos-delay='1700'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1700'].aos-animate,body[aos-delay='1700'] [aos].aos-animate{-webkit-transition-delay:1.7s;transition-delay:1.7s}[aos][aos][aos-delay='1750'],body[aos-delay='1750'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1750'].aos-animate,body[aos-delay='1750'] [aos].aos-animate{-webkit-transition-delay:1.75s;transition-delay:1.75s}[aos][aos][aos-delay='1800'],body[aos-delay='1800'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1800'].aos-animate,body[aos-delay='1800'] [aos].aos-animate{-webkit-transition-delay:1.8s;transition-delay:1.8s}[aos][aos][aos-delay='1850'],body[aos-delay='1850'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1850'].aos-animate,body[aos-delay='1850'] [aos].aos-animate{-webkit-transition-delay:1.85s;transition-delay:1.85s}[aos][aos][aos-delay='1900'],body[aos-delay='1900'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1900'].aos-animate,body[aos-delay='1900'] [aos].aos-animate{-webkit-transition-delay:1.9s;transition-delay:1.9s}[aos][aos][aos-delay='1950'],body[aos-delay='1950'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='1950'].aos-animate,body[aos-delay='1950'] [aos].aos-animate{-webkit-transition-delay:1.95s;transition-delay:1.95s}[aos][aos][aos-delay='2000'],body[aos-delay='2000'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2000'].aos-animate,body[aos-delay='2000'] [aos].aos-animate{-webkit-transition-delay:2s;transition-delay:2s}[aos][aos][aos-delay='2050'],body[aos-delay='2050'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2050'].aos-animate,body[aos-delay='2050'] [aos].aos-animate{-webkit-transition-delay:2.05s;transition-delay:2.05s}[aos][aos][aos-delay='2100'],body[aos-delay='2100'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2100'].aos-animate,body[aos-delay='2100'] [aos].aos-animate{-webkit-transition-delay:2.1s;transition-delay:2.1s}[aos][aos][aos-delay='2150'],body[aos-delay='2150'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2150'].aos-animate,body[aos-delay='2150'] [aos].aos-animate{-webkit-transition-delay:2.15s;transition-delay:2.15s}[aos][aos][aos-delay='2200'],body[aos-delay='2200'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2200'].aos-animate,body[aos-delay='2200'] [aos].aos-animate{-webkit-transition-delay:2.2s;transition-delay:2.2s}[aos][aos][aos-delay='2250'],body[aos-delay='2250'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2250'].aos-animate,body[aos-delay='2250'] [aos].aos-animate{-webkit-transition-delay:2.25s;transition-delay:2.25s}[aos][aos][aos-delay='2300'],body[aos-delay='2300'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2300'].aos-animate,body[aos-delay='2300'] [aos].aos-animate{-webkit-transition-delay:2.3s;transition-delay:2.3s}[aos][aos][aos-delay='2350'],body[aos-delay='2350'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2350'].aos-animate,body[aos-delay='2350'] [aos].aos-animate{-webkit-transition-delay:2.35s;transition-delay:2.35s}[aos][aos][aos-delay='2400'],body[aos-delay='2400'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2400'].aos-animate,body[aos-delay='2400'] [aos].aos-animate{-webkit-transition-delay:2.4s;transition-delay:2.4s}[aos][aos][aos-delay='2450'],body[aos-delay='2450'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2450'].aos-animate,body[aos-delay='2450'] [aos].aos-animate{-webkit-transition-delay:2.45s;transition-delay:2.45s}[aos][aos][aos-delay='2500'],body[aos-delay='2500'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2500'].aos-animate,body[aos-delay='2500'] [aos].aos-animate{-webkit-transition-delay:2.5s;transition-delay:2.5s}[aos][aos][aos-delay='2550'],body[aos-delay='2550'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2550'].aos-animate,body[aos-delay='2550'] [aos].aos-animate{-webkit-transition-delay:2.55s;transition-delay:2.55s}[aos][aos][aos-delay='2600'],body[aos-delay='2600'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2600'].aos-animate,body[aos-delay='2600'] [aos].aos-animate{-webkit-transition-delay:2.6s;transition-delay:2.6s}[aos][aos][aos-delay='2650'],body[aos-delay='2650'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2650'].aos-animate,body[aos-delay='2650'] [aos].aos-animate{-webkit-transition-delay:2.65s;transition-delay:2.65s}[aos][aos][aos-delay='2700'],body[aos-delay='2700'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2700'].aos-animate,body[aos-delay='2700'] [aos].aos-animate{-webkit-transition-delay:2.7s;transition-delay:2.7s}[aos][aos][aos-delay='2750'],body[aos-delay='2750'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2750'].aos-animate,body[aos-delay='2750'] [aos].aos-animate{-webkit-transition-delay:2.75s;transition-delay:2.75s}[aos][aos][aos-delay='2800'],body[aos-delay='2800'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2800'].aos-animate,body[aos-delay='2800'] [aos].aos-animate{-webkit-transition-delay:2.8s;transition-delay:2.8s}[aos][aos][aos-delay='2850'],body[aos-delay='2850'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2850'].aos-animate,body[aos-delay='2850'] [aos].aos-animate{-webkit-transition-delay:2.85s;transition-delay:2.85s}[aos][aos][aos-delay='2900'],body[aos-delay='2900'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2900'].aos-animate,body[aos-delay='2900'] [aos].aos-animate{-webkit-transition-delay:2.9s;transition-delay:2.9s}[aos][aos][aos-delay='2950'],body[aos-delay='2950'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='2950'].aos-animate,body[aos-delay='2950'] [aos].aos-animate{-webkit-transition-delay:2.95s;transition-delay:2.95s}[aos][aos][aos-delay='3000'],body[aos-delay='3000'] [aos]{-webkit-transition-delay:0;transition-delay:0}[aos][aos][aos-delay='3000'].aos-animate,body[aos-delay='3000'] [aos].aos-animate{-webkit-transition-delay:3s;transition-delay:3s}[aos^=fade][aos^=fade]{opacity:0;-webkit-transition-property:all;transition-property:all}[aos^=fade][aos^=fade].aos-animate{opacity:1}[aos=fade-up]{-webkit-transform:translate(0,100px);-ms-transform:translate(0,100px);transform:translate(0,100px)}[aos=fade-up].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-down]{-webkit-transform:translate(0,-100px);-ms-transform:translate(0,-100px);transform:translate(0,-100px)}[aos=fade-down].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-right]{-webkit-transform:translate(-100px,0);-ms-transform:translate(-100px,0);transform:translate(-100px,0)}[aos=fade-right].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-left]{-webkit-transform:translate(100px,0);-ms-transform:translate(100px,0);transform:translate(100px,0)}[aos=fade-left].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-up-right]{-webkit-transform:translate(-100px,100px);-ms-transform:translate(-100px,100px);transform:translate(-100px,100px)}[aos=fade-up-right].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-up-left]{-webkit-transform:translate(100px,100px);-ms-transform:translate(100px,100px);transform:translate(100px,100px)}[aos=fade-up-left].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-down-right]{-webkit-transform:translate(-100px,-100px);-ms-transform:translate(-100px,-100px);transform:translate(-100px,-100px)}[aos=fade-down-right].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=fade-down-left]{-webkit-transform:translate(100px,-100px);-ms-transform:translate(100px,-100px);transform:translate(100px,-100px)}[aos=fade-down-left].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos^=zoom][aos^=zoom]{opacity:0;-webkit-transition-property:all;transition-property:all}[aos^=zoom][aos^=zoom].aos-animate{opacity:1}[aos=zoom-in]{-webkit-transform:scale(.6);-ms-transform:scale(.6);transform:scale(.6)}[aos=zoom-in].aos-animate{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}[aos=zoom-in-up]{-webkit-transform:translate(0,100px) scale(.6);-ms-transform:translate(0,100px) scale(.6);transform:translate(0,100px) scale(.6)}[aos=zoom-in-up].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-in-down]{-webkit-transform:translate(0,-100px) scale(.6);-ms-transform:translate(0,-100px) scale(.6);transform:translate(0,-100px) scale(.6)}[aos=zoom-in-down].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-in-right]{-webkit-transform:translate(-100px,0) scale(.6);-ms-transform:translate(-100px,0) scale(.6);transform:translate(-100px,0) scale(.6)}[aos=zoom-in-right].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-in-left]{-webkit-transform:translate(100px,0) scale(.6);-ms-transform:translate(100px,0) scale(.6);transform:translate(100px,0) scale(.6)}[aos=zoom-in-left].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-out]{-webkit-transform:scale(1.2);-ms-transform:scale(1.2);transform:scale(1.2)}[aos=zoom-out].aos-animate{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}[aos=zoom-out-up]{-webkit-transform:translate(0,100px) scale(1.2);-ms-transform:translate(0,100px) scale(1.2);transform:translate(0,100px) scale(1.2)}[aos=zoom-out-up].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-out-down]{-webkit-transform:translate(0,-100px) scale(1.2);-ms-transform:translate(0,-100px) scale(1.2);transform:translate(0,-100px) scale(1.2)}[aos=zoom-out-down].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-out-right]{-webkit-transform:translate(-100px,0) scale(1.2);-ms-transform:translate(-100px,0) scale(1.2);transform:translate(-100px,0) scale(1.2)}[aos=zoom-out-right].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=zoom-out-left]{-webkit-transform:translate(100px,0) scale(1.2);-ms-transform:translate(100px,0) scale(1.2);transform:translate(100px,0) scale(1.2)}[aos=zoom-out-left].aos-animate{-webkit-transform:translate(0,0) scale(1);-ms-transform:translate(0,0) scale(1);transform:translate(0,0) scale(1)}[aos=slide-up]{-webkit-transform:translate(0,100%);-ms-transform:translate(0,100%);transform:translate(0,100%)}[aos=slide-up].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=slide-down]{-webkit-transform:translate(0,-100%);-ms-transform:translate(0,-100%);transform:translate(0,-100%)}[aos=slide-down].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=slide-right]{-webkit-transform:translate(-100%,0);-ms-transform:translate(-100%,0);transform:translate(-100%,0)}[aos=slide-right].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos=slide-left]{-webkit-transform:translate(100%,0);-ms-transform:translate(100%,0);transform:translate(100%,0)}[aos=slide-left].aos-animate{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);transform:translate(0,0)}[aos^=flip]{-webkit-backface-visibility:hidden;backface-visibility:hidden}[aos=flip-left]{-webkit-transform:perspective(2500px) rotateY(-100deg);transform:perspective(2500px) rotateY(-100deg)}[aos=flip-left].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}[aos=flip-right]{-webkit-transform:perspective(2500px) rotateY(100deg);transform:perspective(2500px) rotateY(100deg)}[aos=flip-right].aos-animate{-webkit-transform:perspective(2500px) rotateY(0);transform:perspective(2500px) rotateY(0)}[aos=flip-up]{-webkit-transform:perspective(2500px) rotateX(-100deg);transform:perspective(2500px) rotateX(-100deg)}[aos=flip-up].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)}[aos=flip-down]{-webkit-transform:perspective(2500px) rotateX(100deg);transform:perspective(2500px) rotateX(100deg)}[aos=flip-down].aos-animate{-webkit-transform:perspective(2500px) rotateX(0);transform:perspective(2500px) rotateX(0)} \ No newline at end of file diff --git a/template/index2/assets/css/index1200.css b/template/index2/assets/css/index1200.css new file mode 100644 index 0000000..71f6114 --- /dev/null +++ b/template/index2/assets/css/index1200.css @@ -0,0 +1,185 @@ +@media (min-width:1001px){ +/*banner*/ +.banner{ width:1200px; margin:0 auto; height:490px} +.banNr{ padding-top:156px; padding-left:15px;} +.banNrT{ font-size:38px; line-height:50px;margin-bottom:10px;} +.banNr p{ font-size:18px; line-height:33px;} +.ButAN{font-size:16px; width:196px; line-height:44px; height:44px;border-radius:22px; margin-top:40px;} +/*寄售服务项目*/ +.Title P{ font-size:28px; margin-top:120px; margin-bottom:5px;} +.Title span{ font-size:12px; margin-bottom:15px;line-height:20px} +.Title i{ width:48px; height:4px; border-radius:2px;} +.IndIte{ width:1200px; margin:65px auto 30px;} +.IndIteK{ height:158px; width:299px;border-left:1px solid #dedee0;} +.IndIteK:nth-child(1){ border-left:none;} +.IndIteI{ padding-top:34px; height:52px;} +.IndIteI img{ height:52px;} +.IndIteK p{ font-size:16px; margin-top:20px;} +/*支付渠道*/ +.IndPay{ width:976px; margin:66px auto 0} +.IndPayK{ width:272px; height:40px; padding:21px 0; border-radius:8px;margin-left:40px; margin-bottom:35px; box-shadow:0 5px 10px rgba(150,192,252,0.4);} +.IndPayK img{ height:40px;} +/*平台功能*/ +.IndPlaK{ width:960px; margin:45px auto 0;} +.IndPlaL{ width:495px; padding-top:45px;} +.IndPlaLT{ font-size:20px;} +.IndPlaLn{ margin-top:40px;} +.IndPlaLz{ width:58px; height:58px; line-height:58px;font-size:30px;} +.IndPlaLr{ width:400px; line-height:25px; margin-top:5px;} +.IndPlaLr p{ font-size:18px;} +.IndPlaLr span{ font-size:14px;} +.IndPlar{ width:463px;} +.IndPlar img{ width:463px;} +.IndPlaS{ width:1200px;top:-60px;padding-bottom:30px;} +.IndPlaC{ width:226px; margin:0 12px 24px; padding:50px 25px 0; height:200px; border-radius:9px;} +.IndPlaI{ height:30px;} +.IndPlaKt{ font-size:20px;line-height:30px; padding:20px 0 15px;} +.IndPlaC p{font-size:16px; line-height:26px;} +a.ButPla{font-size:18px;width:260px; height:54px; line-height:54px; border-radius:33px; border:6px solid #afd3fc; margin:30px auto;} +a.ButPla:hover{ border:6px solid #fbccb7} +/*核心优势*/ +.IndCha{ width:1000px; margin:80px auto 0;} +.IndChaZ{ width:380px; padding-left:80px; padding-top:50px} +.IndChaZt{ font-size:20px; margin-bottom:15px;} +.IndChaZ p{ font-size:18px;line-height:34px;} +.IndChaP{ width:432px;} +/**************登录***************/ +.LoginK{ background-image:url(../images/loginb.jpg); background-attachment:fixed; background-repeat:no-repeat; background-position: bottom center; color:#333; min-height:100%;} +.Login{ width:466px; padding-bottom:35px; background:#FFF; margin:15% auto 0; border-radius:6px;} +.register{ width:466px; padding-bottom:35px; background:#FFF; margin:7% auto 0; border-radius:6px;} +.register .Logreg{ margin:0 auto;} + +.LogTit{ text-align:center; font-size:22px; line-height:35px; padding-top:30px; font-weight:600;} +.logK{ width:332px; margin:0 auto;height:65px;} +.logIc{ width:43px; height:43px; display:block; background-repeat:no-repeat; background-position:center; background-color:#2f80f0;} +.logIn{height:43px; line-height:43px; background:none; border:none; width:259px; padding:0 15px; font-size:14px;background:#eff2f5;} +.logNr{ line-height:23px; height:23px; font-size:14px; width:332px;margin:0 auto 15px;} +.logNr a{ color:#999;} +.logNr a:hover{ color:#2f80f0;} +.Login .Logreg{ margin:0 auto;} +.logK span{ line-height:22px; color:#e60012; font-size:14px; display:block; padding-left:43px;} +/***************注册***************/ +.Regtit{ font-size:14px; text-align:center; margin-bottom:16px;} +.logInw{ width:148px;} +.yzm{ display:block; width:100px;} +.Set_but{ border:none; display:block; width:100px; line-height:43px; height:43px; text-align: center; color:#FFF; display:block;} +.Regf{ text-align:center; font-size:14px; color:#999; padding-top:10px;} +.Regf a{ color:#3087f2;} +/*弹出*/ +.TcK{top:10%;left:50%; margin-left:-400px;width:700px;border-radius:8px; padding:0 50px 30px; max-height:700px; overflow:auto;} +.TcRegT{ font-size:24px; color:#333; text-align:center; font-weight:600; border-bottom:1px solid #ccc; line-height:80px; height:80px;} +.TcRegN{ font-size:16px; color:#333; line-height:28px; margin-top:15px;} +.TcRegP{ margin-bottom:10px;} +.TcRegN a{ color:#0e6bf9; display:block;} +A.TcRegA{ width:200px; height:42px; line-height:42px; text-align:center; border-radius:21px; font-size:18px; display:block; margin:20px auto 0;} + +/**************登录错误****************/ +.Erro{ height:559px; background:url(../images/erro.jpg) no-repeat center top; margin-top:82px;} +.ErroK{ width:600px; padding-left:600px; padding-top:210px; color:#FFF; text-align:center; margin:0 auto;} +.ErroT{font-size:40px; font-weight:600; line-height:50px;} +a.Errlink{ font-size:18px; line-height:20px; margin-top:15px; color:#FFF; display:block;} +a.Errlink span{ color:#febc67;} +/**************联系我们****************/ +.ContK{ background:url(../images/contb.jpg) no-repeat center 82px; padding-top:82px;} +.ContTit{ width:1150px; margin:0 auto; padding-top:100px; height:200px; color:#FFF;} +.ContTid{ font-size:40px; font-weight:600; line-height:50px;} +.ContTid span{ font-size:30px; padding-left:15px; margin-bottom:10px; display:inline-block;} +.ContTit p{ font-size:18px; line-height:20px;} +.ContD{ width:1090px; background:#FFF; margin:0 auto; padding:0 30px 50px; border-radius:10px; position:relative;} +.ContDK{ padding-left:40px; padding-top:100px; width:320px; height:170px;font-size:18px; float:left;} +.ContDp{ padding-left:55px; background-repeat:no-repeat; background-position:left center; line-height:28px; margin-bottom:10px;} +.ContDp1{ background-image:url(../images/fticon01.png)} +.ContDp2{ background-image:url(../images/fticon02.png)} +.ContDp span{display:block;} +.ContDp p{color:#3e86ee; font-size:24px; font-weight:600;} +.aboutDp p{color:#000000; font-size:18px; } +.ContM{ width:205px; height:315px;text-align:center; background:url(../images/cont01.png) no-repeat top center; position:absolute; right:144px; top:-45px;} +.ContM img{ padding-top:63px; width:166px;} +.ContM p{ font-size:14px; line-height:30px;} +.ContMat{ width:1054px; padding:8px; box-shadow:0 0 15px rgba(197,215,255,0.55); margin:0 auto;} +/***************帮助中心**************/ +.HelpK{background-image:url(../images/helpb.png); background-repeat:no-repeat; background-position:right bottom; color:#333; min-height:100%;} +.Help{ width:1200px; margin:40px auto; padding-top:82px;} +.HelpT{ font-weight:600; text-align:center; font-size:34px; line-height:50px; color:#333;} +.HelpD{display:flex;flex-wrap: wrap; margin-top:15px;} +.HelpN{ width:600px;} +.HelpNs{background:#FFF; margin:26px 25px 0; width:500px; padding:13px 25px; border-radius:8px; box-shadow:0 0 10px rgba(197,215,255,0.55);cursor: pointer;} +.HelpQ{ padding-left:50px; position:relative;line-height:32px; font-size:18px; font-weight:600;} +.HelpQ i,.HelpA i{ width:32px; height:32px; line-height:32px; font-style:normal; font-size:20px; text-align:center; font-weight:bold; position:absolute; top:0; left:0; border-radius:50%; display:block;} +.HelpA i{FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ff7539,endColorStr=#ff2156);background: -ms-linear-gradient(left, #ff7539, #ff2156);background:-moz-linear-gradient(left,#ff7539,#ff2156);background:-webkit-gradient(linear, 0% 100%, 0% 0%,from(#ff7539), to(#ff2156));background:-webkit-gradient(linear, 0% 100%, 0% 0%, from(#ff7539), to(#ff2156));background: -webkit-linear-gradient(left, #ff7539, #ff2156);background:-o-linear-gradient(left, #ff7539, #ff2156);box-shadow:0 5px 10px rgba(255,45,82,0.45);color:#FFF;} +.HelpA{padding-left:50px; position:relative;font-size:14px; line-height:23px; min-height:32px; margin-top:15px; display:none;} +.FHelp{ font-size:16px; text-align:center; color:#666; line-height:30px; padding:15px 0;} +/******************查询订单****************/ +.QuerB{background-image:url(../images/querb.png);background-repeat:no-repeat;background-position:center bottom;color:#333;min-height:100%;} +.QueT{ text-align:center; padding-top:117px;} +.QueT a{ color:#333; font-size:24px; display:inline-block; margin:0 35px; line-height:60px;} +.QueT a i{ display:block; width:36px; height:6px; border-radius:3px; margin:0 auto;} +.QueTao{ font-weight:600;} +.QueTao i{ background:#333;} +.QueD{ display:none;} + +.QueT1{ width:1026px; margin:35px auto;} +.QueT4{ width:1026px; margin:35px auto;} +/**/ +.search{ background:#FFF; border:2px solid #9ec2f6; border-radius:8px; height:63px; overflow:hidden;} +.searI{ line-height:63px; height:63px; padding-left:40px; width:770px; background:none; border:none; font-size:18px; color:#666} +a.searA{ color:#FFF; font-size:18px; display:block; text-align:center; width:160px;line-height:63px; height:63px; padding-right:20px;} +a.searA span{background:url(../images/search.png) no-repeat left center; padding-left:55px; display:inline-block;} +.QueKO{ background:#fff; overflow:hidden; margin-top:35px; padding-bottom:35px; border-radius:8px;} +.QueKOt{ margin-bottom:23px; line-height:61px; height:61px; padding:0 35px; color:#FFF;} +.QueKOt p{ font-size:20px; width:80%; float:left;} +.QueKOt a{background:url(../images/qued.png) no-repeat left center;font-size:16px;padding-left:24px;color:#FFF;line-height:31px;height:31px;width:140px;margin-top:15px;display:block;} +.QueTabk{ display:none;} +.QueTab{ width:956px; margin:0 auto 15px; border:1px solid #ccc; border-bottom:none;} +.QueTab tr td{ text-align:center; padding:13px 10px; color:#333; font-size:14px;border-bottom:1px solid #ccc; line-height:25px;} +.QueTab tr.QueTr td{ font-size:10px; font-weight:600; background:#ededed;} +.QueZF{ padding-left:28px; display:inline-block; background:url(../images/ques.png) no-repeat center left;} +.QueZFsb{ padding-left:28px; display:inline-block; background:url(../images/zfsb.png) no-repeat center left;} +.QueTrC tr td{text-align:justify; padding:13px 25px;border-right:1px solid #ccc;} +.QueKOtx{ height:53px; line-height:53px; background:#ededed; border:1px solid #ccc;width:956px; margin:0 auto 15px; font-size:14px; color:#333;} +.QueKOtx span{ font-weight:600; text-align:center; color:#FFF; float:left; display:block; width:57px; line-height:26px; height:26px; background:#4089ef; border-radius:8px; margin-top:15px; margin-left:12px; margin-right:20px;} +.QueKOts{ width:940px; margin:12px auto;} +.QueKOtit{ font-size:16px; font-weight:600; line-height:30px;} +.QueKOts p{ font-size:14px; line-height:20px;} +.QueT2{background:#FFF; border-radius:8px; width:680px; padding:20px 30px 30px; margin:35px auto} +.QueST{ text-align:left; line-height:20px; font-size:10px; font-weight:600;} +.QueI{ width:638px; line-height:44px; height:44px; border:1px solid #ccc; font-size:14px; padding:0 20px; margin-bottom:14px;} +.QueText{ width:638px; line-height:24px; height:72px; border:1px solid #ccc; font-size:14px; padding:10px 20px; margin-bottom:14px;} +.Queyzt{ display:block; width:110px;height:46px; overflow:hidden; margin-right:14px;} +.Que_but{ width:120px;height:44px; border-radius:22px; margin-right:9px;} +.QueIw1{ width:288px} +.QueIw2{ width:480px;} +a.QueAN{ width:180px; line-height:42px; height:42px; display:block; margin:15px auto; text-align:center; border-radius:21px; font-size:18px;} + +.TcQue{width:30%; height:60%;margin-left:-270px;} +.TcQueN{ font-size:16px; margin-bottom:10px; line-height:26px; text-align:justify;} +.TcQueN span{ color:#5b9ef8; font-weight:600;} +.TcQueT{ text-align:center; padding-top:45px; padding-bottom:10px;} +.TcQueT img{ width:123px;} +.TcQueT p{ font-size:24px; font-weight:600; line-height:40px;} +} + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/template/index2/assets/css/index720.css b/template/index2/assets/css/index720.css new file mode 100644 index 0000000..b4cfeff --- /dev/null +++ b/template/index2/assets/css/index720.css @@ -0,0 +1,184 @@ +@media (max-width:800px){ +/*banner*/ +.banner{ width:100%;height:1.5rem} +.banNr{ padding-top:0.2rem; padding-left:4%} +.banNrT{ font-size:0.15rem; line-height:0.3rem;} +.banNr p{ font-size:0.11rem; line-height:0.18rem;} +.ButAN{font-size:0.12rem; width:0.8rem; line-height:0.26rem; height:0.26rem;border-radius:0.13rem;margin-top:0.1rem;} +/*寄售服务项目*/ +.Title P{ font-size:0.14rem; margin-top:0.3rem; margin-bottom:0.03rem;} +.Title span{ font-size:0.1rem; margin-bottom:0.08rem;line-height:0.16rem} +.Title i{ width:0.4rem; height:0.02rem; border-radius:0.01rem;} +.IndIte{margin:0.25rem auto 0;} +.IndIteK{ height:1rem; width:49.5%;border-left:0.01rem solid #dedee0; margin-bottom:0.2rem;} +.IndIteK:nth-child(1),.IndIteK:nth-child(3){ border-left:none;} +.IndIteI{ padding-top:0.15rem; height:0.25rem;} +.IndIteI img{ height:0.25rem;} +.IndIteK p{ font-size:0.12rem; padding:0.1rem;} +/*支付渠道*/ +.IndPay{ margin:0.2rem auto 0} +.IndPayK{width:44%;height:0.26rem;verflow:hidden;padding:0.08rem 0;border-radius:0.04rem;margin-left:4%; margin-bottom:0.1rem; box-shadow:0 3px 8px rgba(150,192,252,0.4);} +.IndPayK img{ height:0.26rem;} +/*平台功能*/ +.IndPlaK{ width:92%; padding:0.15rem 4% 0;} +.IndPlaL{ width:50%;} +.IndPlaLT{ font-size:0.13rem;} +.IndPlaLn{ margin-top:0.15rem;} +.IndPlaLz{ width:0.3rem; height:0.3rem; line-height:0.3rem; font-size:0.15rem;} +.IndPlaLr{ width:75%; line-height:0.18rem;} +.IndPlaLr p{ font-size:0.13rem; color:#2786f9;} +.IndPlaLr span{ font-size:0.1rem; color:#333;line-height:0.16rem;} +.IndPlar{ width:46%; margin-top:0.15rem;} +.IndPlar img{ width:100%;} +.IndPlaS{ margin-top:0.15rem;} +.IndPlaC{ width:38%; margin-left:4%; margin-bottom:0.1rem; padding:0.16rem 3% 0; height:1.1rem; border-radius:0.05rem;} +.IndPlaI{ height:0.21rem;} +.IndPlaKt{ font-size:0.13rem;line-height:0.2rem; padding:0.08rem 0 0.03rem;} +.IndPlaC p{font-size:0.1rem; line-height:0.16rem;} +a.ButPla{font-size:0.13rem;width:1.6rem; height:0.26rem; line-height:0.26rem; border-radius:0.17rem; border:0.04rem solid #afd3fc; margin:0.1rem auto;} +/*核心优势*/ +.IndCha{margin:0.25rem auto 0; width:92%} +.IndChaZ{ width:48%; padding-left:2%;} +.IndChaZt{ font-size:0.13rem;margin-bottom:0.08rem;} +.IndChaZ p{ font-size:0.1rem;line-height:0.16rem;} +.IndChaP{ width:46%;} + +/**************登录**************/ +.LoginK{background-image:url(../images/loginb.jpg); background-attachment:fixed;background-repeat:no-repeat;background-position:bottom center;background-size:auto 100%;color:#333; height:100%;} +.Login{ width:86%; padding-bottom:0.15rem; background:#FFF; margin:0.8rem auto 0; border-radius:6px;} +.register{ width:86%; padding-bottom:0.15rem; background:#FFF; margin:0.8rem auto 0; border-radius:6px;} +.LogTit{ text-align:center; font-size:0.14rem; line-height:0.2rem; padding-top:0.18rem; font-weight:600;} +.logK{ width:2.2rem; margin:0 auto; height:0.4rem} +.logIc{ width:0.3rem; height:0.3rem; display:block; background-repeat:no-repeat; background-position:center; background-color:#2f80f0; background-size:0.16rem} +.logIn{height:0.3rem; line-height:0.3rem; background:none; border:none; width:1.7rem; padding:0 0.1rem; font-size:0.132rem;background:#eff2f5;} +.logNr{ line-height:0.3rem; height:0.3rem; font-size:0.12rem; width:2.2rem; height:0.3rem; margin:0.05rem auto;} +.logNr a{ color:#999;} +.logNr a:hover{ color:#2f80f0;} +.Login .Logreg{ margin:0 auto;} +.register .Logreg{ margin:0 auto;} +.logK span{ line-height:0.1rem; color:#e60012; font-size:0.1rem; display:block; padding-left:0.3rem;} +/***************注册***************/ +.Regtit{ font-size:0.1rem; text-align:center; margin-bottom:0.1rem;} +.logInw{ width:1rem;} +.yzm{ display:block; width:0.65rem;} +.Set_but{ border:none; display:block; width:0.65rem; font-size:0.1rem; line-height:0.3rem; height:0.3rem; text-align: center; color:#FFF; display:block;} +.Regf{ text-align:center; font-size:0.1rem; color:#999; padding-top:0.1rem;} +.Regf a{ color:#3087f2;} +/*弹出*/ +.TcK{top:0%;left:6%;width:80%;border-radius:8px; padding:0 0.15rem 20%; max-height:100%; overflow:auto;} +.TcRegT{ font-size:0.14rem; color:#333; text-align:center; font-weight:600; border-bottom:0.01rem solid #ccc; line-height:0.4rem; height:0.4rem;} +.TcRegN{ font-size:0.11rem; color:#333; line-height:0.19rem; margin-top:0.1rem;} +.TcRegP{ margin-bottom:0.04rem;} +.TcRegN a{ color:#0e6bf9; display:block;} +A.TcRegA{ width:1.3rem; height:0.3rem; line-height:0.3rem; text-align:center; border-radius:0.15rem; font-size:0.12rem; display:block; margin:0.1rem auto 0;} +/**************登录错误****************/ +.Erro{ height:1.7rem; background:url(../images/erro.jpg) no-repeat center top; background-size: auto 100%; margin-top:0.4rem;} +.ErroK{ width:65%; padding-left:35%; padding-top:0.6rem; color:#FFF; text-align:center;} +.ErroT{font-size:0.15rem; font-weight:600; line-height:0.25rem;} +a.Errlink{ font-size:0.11rem; line-height:0.18rem;color:#FFF; display:block;} +a.Errlink span{ color:#febc67;} +/**************联系我们****************/ +.ContK{ background:url(../images/contb.jpg) no-repeat center 0.4rem; background-size:auto 1.2rem; padding-top:0.4rem;} +.ContTit{ width:92%; padding:0.2rem 4% 0; height:0.8rem; color:#FFF;} +.ContTid{ font-size:0.16rem; font-weight:600; line-height:0.26rem;} +.ContTid span{ font-size:0.14rem; padding-left:0.1rem; margin-bottom:0.05rem; display:inline-block;} +.ContTit p{ font-size:0.12rem; line-height:0.16rem;} +.ContD{ width:84%; background:#FFF;padding:0.25rem 4% 0.2rem; margin:0 auto; border-radius:0.06rem; position:relative;} +.ContDK{height:0.8rem;font-size:0.13rem; width:90%; margin:0 auto;} +.ContDp1{ background-image:url(../images/fticon01.png)} +.ContDp2{ background-image:url(../images/fticon02.png)} +.ContDp{ padding-left:0.3rem; background-repeat:no-repeat; background-position:left center; line-height:0.18rem; background-size:0.25rem; margin-bottom:0.05rem;} +.ContDp span{display:block;} +.ContDp p{color:#3e86ee; font-size:0.15rem; font-weight:600;} +.ContM{ text-align:center; margin-bottom:0.12rem;} +.ContM img{width:1rem;} +.ContM p{ font-size:0.12rem; line-height:0.2rem;} +.ContMat{ width:92%; padding:0.05rem; box-shadow:0 0 15px rgba(197,215,255,0.55); margin:0 auto;} + +/***************帮助中心**************/ +.HelpK{background-image:url(../images/helpb.png); background-size:70%; background-repeat:no-repeat; background-position:right bottom; color:#333; min-height:100%;} +.Help{ width:90%; margin:0.2rem auto; padding-top:0.4rem;} +.HelpT{ font-weight:600; text-align:center; font-size:0.15rem; line-height:0.3rem; color:#333;} +.HelpD{display:flex;flex-wrap: wrap;} +.HelpN{ width:100%;} +.HelpNs{background:#FFF; margin-top:0.1rem;width:92%;padding:0.1rem 4%; border-radius:0.05rem; box-shadow:0 0 5px rgba(197,215,255,0.55);cursor: pointer;} +.HelpQ{ padding-left:0.3rem; position:relative;line-height:0.22rem; font-size:0.13rem;} +.HelpQ i,.HelpA i{ width:0.22rem; height:0.22rem; line-height:0.22rem; font-style:normal; font-size:0.14rem;text-align:center;font-weight:bold;position:absolute;top:0; left:0; border-radius:50%; display:block;} +.HelpA i{FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ff7539,endColorStr=#ff2156);background: -ms-linear-gradient(left, #ff7539, #ff2156);background:-moz-linear-gradient(left,#ff7539,#ff2156);background:-webkit-gradient(linear, 0% 100%, 0% 0%,from(#ff7539), to(#ff2156));background:-webkit-gradient(linear, 0% 100%, 0% 0%, from(#ff7539), to(#ff2156));background: -webkit-linear-gradient(left, #ff7539, #ff2156);background:-o-linear-gradient(left, #ff7539, #ff2156);box-shadow:0 5px 10px rgba(255,45,82,0.45);color:#FFF;} +.HelpA{padding-left:0.3rem; position:relative;font-size:0.12rem; line-height:0.19rem; min-height:0.17rem; margin-top:0.1rem; display:none;} +.FHelp{ font-size:0.11rem; width:92%;text-align:center; color:#666; line-height:0.18rem; padding:0.1rem 4%;} + +/******************查询订单****************/ +.QuerB{background-image:url(../images/querb.png);background-size: auto 1.2rem;background-repeat:no-repeat;background-position:right bottom;color:#333;min-height:100%;} +.QueT{ text-align:center; padding-top:0.55rem;} +.QueT a{ color:#333; font-size:0.13rem; display:inline-block; margin:0 0.1rem; line-height:0.3rem;} +.QueT a i{ display:block; width:0.25rem; height:0.02rem; border-radius:0.02rem; margin:0 auto;} +.QueTao{ font-weight:600;} +.QueTao i{ background:#333;} +.QueD{ display:none;} +.QueT1{ width:90%; padding:0.15rem 5%} +/**/ +.search{ background:#FFF; border:0.01rem solid #9ec2f6; border-radius:0.04rem; height:0.34rem; overflow:hidden;} +.searI{ line-height:0.34rem; height:0.34rem; padding-left:4%; width:70%; background:none; border:none; font-size:0.12rem; color:#666} +a.searA{ color:#FFF; font-size:0.13rem; display:block; text-align:center; width:22%;line-height:0.34rem; height:0.34rem;} +a.searA span{background:url(../images/search.png) no-repeat left center; background-size:0.16rem; padding-left:0.2rem; display:inline-block;} +.QueKO{ background:#fff; overflow:hidden; margin-top:0.15rem; padding-bottom:0.15rem; border-radius:0.04rem;} +.QueKOt{ margin-bottom:0.12rem; line-height:0.34rem; height:0.34rem; padding:0 5%; color:#FFF;} +.QueKOt p{ font-size:0.12rem; width:75%; float:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} +.QueKOt a{background:url(../images/qued.png) no-repeat left center;background-size:0.1rem;font-size:0.1rem;padding-left:0.1rem;color:#FFF;line-height:0.34rem;height:0.34rem;display:block;} +.QueTab{ display:none;} +.QueTabk{ width:92%; margin:0 auto 0.1rem; border-top:0.01rem solid #ccc; border-left:0.01rem solid #ccc;} +.QueTabk tr td{ padding:0.08rem 0.1rem; color:#333; font-size:0.1rem;border-bottom:0.01rem solid #ccc;border-right:0.01rem solid #ccc; line-height:0.18rem;} +.QueTabk tr td.QueTr{ font-size:0.1rem; font-weight:600; background:#ededed; width:30%;} + +.QueZF{ padding-left:0.15rem; display:inline-block; background:url(../images/ques.png) no-repeat center left;background-size:0.12rem;} +.QueZFsb{ padding-left:0.15rem; display:inline-block; background:url(../images/zfsb.png) no-repeat center left;background-size:0.12rem;} +.QueTrC tr td{text-align:justify; padding:0.08rem 0.12rem;border-right:0.01rem solid #ccc;} +.QueKOtx{ height:0.34rem; line-height:0.34rem; background:#ededed; border:0.01rem solid #ccc;width:92%; margin:0 auto 0.1rem; font-size:0.1rem; color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;} +.QueKOtx span{ font-weight:600; text-align:center; color:#FFF; float:left; display:block; width:0.4rem; line-height:0.2rem; height:0.2rem; background:#4089ef; border-radius:0.05rem; margin-top:0.07rem; margin-left:0.05rem; margin-right:0.06rem;} +.QueKOts{ width:90%; margin:0.1rem auto;} +.QueKOtit{ font-size:0.13rem; font-weight:600; line-height:0.22rem;} +.QueKOts p{ font-size:0.1rem; line-height:0.17rem;} + +.QueT2{background:#FFF; border-radius:8px; width:84%; padding:0.1rem 4%; margin:0.15rem auto} +.QueST{ text-align:left; line-height:0.3rem; font-size:0.13rem; font-weight:600;} +.QueI{ width:90%; line-height:0.3rem; height:0.3rem; border:0.01rem solid #ccc; font-size:0.12rem; padding:0 4.5%; margin-bottom:0.08rem;} +.QueText{width:90%;line-height:0.18rem;height:0.6rem; border:0.01rem solid #ccc; font-size:0.12rem; padding:0.1rem 4.5%; margin-bottom:0.08rem;} +.Queyzt{ display:block; width:30%;height:0.3rem; overflow:hidden; margin-right:0.01rem;} +.Que_but{ width:31%;height:0.3rem; border-radius:0.15rem;} +.QueIw2{ width:56%;} +a.QueAN{ width:1rem; line-height:0.3rem; height:0.3rem; display:block; margin:0.1rem auto; text-align:center; border-radius:0.15rem; font-size:0.13rem;} + +.TcQue{ width:70%; height:3rem; left:11%; top:17%;} +.TcQueN{ font-size:0.12rem; margin-bottom:0.08rem; line-height:0.18rem; text-align:justify;} +.TcQueN span{ color:#5b9ef8; font-weight:600;} +.TcQueT{ text-align:center; padding-top:0.15rem; padding-bottom:0.1rem;} +.TcQueT img{ width:0.8rem;} +.TcQueT p{ font-size:0.15rem; font-weight:600; line-height:0.25rem;} +} + +.QueTrC{ border-right:none;} + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/template/index2/assets/css/index960.css b/template/index2/assets/css/index960.css new file mode 100644 index 0000000..75dcb30 --- /dev/null +++ b/template/index2/assets/css/index960.css @@ -0,0 +1,164 @@ +@media (max-width: 1000px ) and ( min-width: 801px){ + +/*banner*/ +.banner{ width:800px; margin:0 auto; height:440px} +.banNr{ padding-top:136px; padding-left:15px} +.banNrT{ font-size:32px; line-height:45px; margin-bottom:10px;} +.banNr p{ font-size:16px; line-height:30px;} +.ButAN{font-size:14px; width:170px; line-height:40px; height:40px;border-radius:20px;margin-top:35px;} +/*寄售服务项目*/ +.Title P{ font-size:24px; margin-top:100px; margin-bottom:3px;} +.Title span{ font-size:12px; margin-bottom:12px;line-height:20px} +.Title i{ width:40px; height:3px; border-radius:2px;} +.IndIte{ width:800px; margin:55px auto 20px;} +.IndIteK{ height:138px; width:199px;border-left:1px solid #dedee0;} +.IndIteK:nth-child(1){ border-left:none;} +.IndIteI{ padding-top:25px; height:45px;} +.IndIteI img{ height:45px;} +.IndIteK p{ font-size:14px; padding:15px;} + +/*支付渠道*/ +.IndPay{ width:800px; margin:46px auto 0} +.IndPayK{ width:236px; height:40px; overflow:hidden; padding:10px 0; border-radius:8px;margin:0 15px 25px; box-shadow:0 5px 10px rgba(150,192,252,0.4);} +.IndPayK img{ height:40px;} +/*平台功能*/ +.IndPlaK{ width:800px; margin:20px auto 0;} +.IndPlaL{ width:350px; padding-top:35px;} +.IndPlaLT{ font-size:18px;} +.IndPlaLn{ margin-top:30px;} +.IndPlaLz{ width:50px; height:50px; line-height:50px; font-size:26px;} +.IndPlaLr{ width:280px; line-height:25px; margin-top:5px;} +.IndPlaLr p{ font-size:18px; color:#2786f9;} +.IndPlaLr span{ font-size:14px; color:#333;} +.IndPlar{ width:383px;} +.IndPlar img{ width:383px;} +.IndPlaS{ width:800px;top:-40px;padding-bottom:10px;} +.IndPlaC{ width:208px; margin:0 9px 18px; padding:35px 20px 0; height:150px; border-radius:9px;} +.IndPlaI{ height:25px;} +.IndPlaKt{ font-size:15px;line-height:25px; padding:13px 0 8px;} +.IndPlaC p{font-size:14px; line-height:23px;} +a.ButPla{font-size:16px;width:200px; height:44px; line-height:44px; border-radius:27px; border:5px solid #afd3fc; margin:20px auto;} +a.ButPla:hover{ border:5px solid #fbccb7} +/*核心优势*/ +.IndCha{ width:800px; margin:60px auto 0;} +.IndChaZ{ width:320px; padding-left:40px; padding-top:40px} +.IndChaZt{ font-size:18px;margin-bottom:15px;} +.IndChaZ p{ font-size:16px;line-height:30px;} +.IndChaP{ width:400px; padding:0 15px;} +/**************登录**************/ +.LoginK{ background-image:url(../images/loginb.jpg); background-attachment:fixed; background-repeat:no-repeat; background-position: bottom center; color:#333; height:100%;} +.Login{ width:430px;padding-bottom:25px; background:#FFF; margin:15% auto 0; border-radius:6px;} +.register{ width:430px;padding-bottom:25px; background:#FFF; margin:15% auto 0; border-radius:6px;} +.LogTit{ text-align:center; font-size:20px; line-height:30px; padding-top:25px; font-weight:600;} +.logK{ width:332px; margin:0 auto; height:58px;} +.logIc{ width:40px; height:40px; display:block; background-repeat:no-repeat; background-position:center; background-color:#2f80f0;} +.logIn{height:40px; line-height:40px; background:none; border:none; width:262px; padding:0 15px; font-size:14px;background:#eff2f5;} +.logNr{ line-height:40px; height:40px; font-size:14px; width:332px; height:43px; margin:10px auto;} +.logNr a{ color:#999;} +.logNr a:hover{ color:#2f80f0;} +.Login .Logreg{ margin:0 auto;} +.register .Logreg{ margin:0 auto;} +.logK span{ line-height:18px; color:#e60012; font-size:12px;display:block; padding-left:43px;} +/***************注册***************/ +.Regtit{ font-size:14px; text-align:center; margin-bottom:12px;} +.logInw{ width:148px;} +.yzm{ display:block; width:100px;} +.Set_but{ border:none; display:block; width:100px; line-height:40px; height:40px; text-align: center; color:#FFF; display:block;} +.Regf{ text-align:center; font-size:14px; color:#999; padding-top:10px;} +.Regf a{ color:#3087f2;} +/*弹出*/ +.TcK{top:0%;left:50%; margin-left:-290px;width:500px;border-radius:8px; padding:0 40px 30px; max-height:600px; overflow:auto;} +.TcRegT{ font-size:18px; color:#333; text-align:center; font-weight:600; border-bottom:1px solid #ccc; line-height:60px; height:60px;} +.TcRegN{ font-size:14px; color:#333; line-height:24px; margin-top:12px;} +.TcRegP{ margin-bottom:10px;} +.TcRegN a{ color:#0e6bf9; display:block;} +A.TcRegA{ width:160px; height:36px; line-height:36px; text-align:center; border-radius:18px; font-size:16px; display:block; margin:16px auto 0;} +/**************登录错误****************/ +.Erro{ height:460px; background:url(../images/erro.jpg) no-repeat center top; background-size: auto 100%; margin-top:75px;} +.ErroK{ width:400px; padding-left:400px; padding-top:180px; color:#FFF; text-align:center; margin:0 auto;} +.ErroT{font-size:34px; font-weight:600; line-height:40px;} +a.Errlink{ font-size:16px; line-height:20px; margin-top:15px; color:#FFF; display:block;} +a.Errlink span{ color:#febc67;} + +/**************联系我们****************/ +.ContK{ background:url(../images/contb.jpg) no-repeat center 75px; background-size:auto 250px; padding-top:75px;} +.ContTit{ width:800px; margin:0 auto; padding-top:60px; height:140px; color:#FFF;} +.ContTid{ font-size:34px; font-weight:600; line-height:40px;} +.ContTid span{ font-size:26px; padding-left:10px; margin-bottom:7px; display:inline-block;} +.ContTit p{ font-size:16px; line-height:20px;} +.ContD{ width:760px; background:#FFF; margin:0 auto; padding:0 20px 30px; border-radius:7px; position:relative;} +.ContDK{ padding-left:20px; padding-top:80px; width:280px; height:120px;font-size:16px; float:left;} +.ContDp1{ background-image:url(../images/fticon01.png)} +.ContDp2{ background-image:url(../images/fticon02.png)} +.ContDp{ padding-left:45px; background-repeat:no-repeat; background-position:left center; line-height:24px; background-size:32px; margin-bottom:7px;} +.ContDp span{display:block;} +.ContDp p{color:#3e86ee; font-size:20px; font-weight:600;} +.ContDx{ font-size:14px;} +.ContM{ width:160px; height:250px;text-align:center; background:url(../images/cont01.png) no-repeat top center; background-size:100%; position:absolute; right:34px; top:-45px;} +.ContM img{ padding-top:50px; width:100px;} +.ContM p{ font-size:12px; line-height:30px;} +.ContMat{ width:740px; padding:6px; box-shadow:0 0 15px rgba(197,215,255,0.55); margin:0 auto;} + +/***************帮助中心**************/ +.HelpK{background-image:url(../images/helpb.png); background-size:500px; background-repeat:no-repeat; background-position:right bottom; color:#333; min-height:100%;} +.Help{ width:800px; margin:30px auto; padding-top:75px;} +.HelpT{ font-weight:600; text-align:center; font-size:28px; line-height:40px; color:#333;} +.HelpD{display:flex;flex-wrap: wrap; margin-top:10px;} +.HelpN{ width:50%;} +.HelpNs{background:#FFF;margin:16px 3% 0;width:86%;padding:10px 4%; border-radius:5px; box-shadow:0 0 8px rgba(197,215,255,0.55);cursor: pointer;} +.HelpQ{ padding-left:40px; position:relative;line-height:28px; font-size:16px;} +.HelpQ i,.HelpA i{ width:28px; height:28px; line-height:28px; font-style:normal; font-size:16px;text-align:center;font-weight:bold;position:absolute;top:0; left:0; border-radius:50%; display:block;} +.HelpA i{FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ff7539,endColorStr=#ff2156);background: -ms-linear-gradient(left, #ff7539, #ff2156);background:-moz-linear-gradient(left,#ff7539,#ff2156);background:-webkit-gradient(linear, 0% 100%, 0% 0%,from(#ff7539), to(#ff2156));background:-webkit-gradient(linear, 0% 100%, 0% 0%, from(#ff7539), to(#ff2156));background: -webkit-linear-gradient(left, #ff7539, #ff2156);background:-o-linear-gradient(left, #ff7539, #ff2156);box-shadow:0 5px 10px rgba(255,45,82,0.45);color:#FFF;} +.HelpA{padding-left:40px; position:relative;font-size:14px; line-height:22px; min-height:28px; margin-top:10px; display:none;} +.FHelp{ font-size:14px; text-align:center; color:#666; line-height:25px; padding:10px 0;} + +/******************查询订单****************/ +.QuerB{background-image:url(../images/querb.png);background-size:1000px;background-repeat:no-repeat;background-position:right bottom;color:#333;min-height:100%;} +.QueT{ text-align:center; padding-top:100px;} +.QueT a{ color:#333; font-size:20px; display:inline-block; margin:0 25px; line-height:50px;} +.QueT a i{ display:block; width:30px; height:4px; border-radius:2px; margin:0 auto;} +.QueTao{ font-weight:600;} +.QueTao i{ background:#333;} +.QueD{ display:none;} +.QueT1{ width:800px; margin:25px auto;} +/**/ +.search{ background:#FFF; border:1px solid #9ec2f6; border-radius:5px; height:53px; overflow:hidden;} +.searI{ line-height:53px; height:53px; padding-left:25px; width:590px; background:none; border:none; font-size:16px; color:#666} +a.searA{ color:#FFF; font-size:16px; display:block; text-align:center; width:140px;line-height:53px; height:53px; padding-right:20px;} +a.searA span{background:url(../images/search.png) no-repeat left center; background-size:26px; padding-left:50px; display:inline-block;} +.QueKO{ background:#fff; overflow:hidden; margin-top:25px; padding-bottom:25px; border-radius:5px;} +.QueKOt{ margin-bottom:20px; line-height:53px; height:53px; padding:0 25px; color:#FFF;} +.QueKOt p{ font-size:18px; width:75%; float:left;} +.QueKOt a{background:url(../images/qued.png) no-repeat left center;background-size:13px;font-size:14px;padding-left:20px;color:#FFF;line-height:23px;height:23px;width:110px;margin-top:15px;display:block;} +.QueTabk{ display:none;} +.QueTab{ width:760px; margin:0 auto 12px; border:1px solid #ccc; border-bottom:none;} +.QueTab tr td{ text-align:center; padding:10px 7px; color:#333; font-size:12px;border-bottom:1px solid #ccc; line-height:20px;} +.QueTab tr.QueTr td{ font-size:10px; font-weight:600; background:#ededed;} +.QueZF{ padding-left:20px; display:inline-block; background:url(../images/ques.png) no-repeat center left;background-size:18px;} +.QueZFsb{ padding-left:20px; display:inline-block; background:url(../images/zfsb.png) no-repeat center left;background-size:18px;} +.QueTrC tr td{text-align:justify; padding:10px 17px;border-right:1px solid #ccc;} +.QueKOtx{ height:45px; line-height:45px; background:#ededed; border:1px solid #ccc;width:760px; margin:0 auto 10px; font-size:12px; color:#333;} +.QueKOtx span{ font-weight:600; text-align:center; color:#FFF; float:left; display:block; width:50px; line-height:22px; height:22px; background:#4089ef; border-radius:6px; margin-top:13px; margin-left:10px; margin-right:15px;} +.QueKOts{ width:740px; margin:12px auto;} +.QueKOtit{ font-size:14px; font-weight:600; line-height:28px;} +.QueKOts p{ font-size:12px; line-height:18px;} +.QueT2{background:#FFF; border-radius:8px; width:680px; padding:15px 25px; margin:25px auto} +.QueST{ text-align:left; line-height:20px; font-size:10px; font-weight:600;} +.QueI{ width:638px; line-height:44px; height:44px; border:1px solid #ccc; font-size:14px; padding:0 20px; margin-bottom:14px;} +.QueText{ width:638px; line-height:24px; height:72px; border:1px solid #ccc; font-size:14px; padding:10px 20px; margin-bottom:14px;} +.Queyzt{ display:block; width:110px;height:46px; overflow:hidden; margin-right:14px;} +.Que_but{ width:120px;height:44px; border-radius:22px; margin-right:9px;} +.QueIw1{ width:288px} +.QueIw2{ width:480px;} +a.QueAN{ width:170px; line-height:42px; height:42px; display:block; margin:15px auto; text-align:center; border-radius:21px; font-size:16px;} + +.TcQue{width:30%; height:60%;margin-left:-240px;} +.TcQueN{ font-size:14px; margin-bottom:10px; line-height:24px; text-align:justify;} +.TcQueN span{ color:#5b9ef8; font-weight:600;} +.TcQueT{ text-align:center; padding-top:35px; padding-bottom:10px;} +.TcQueT img{ width:113px;} +.TcQueT p{ font-size:20px; font-weight:600; line-height:32px;} +} + + + diff --git a/template/index2/assets/css/style.css b/template/index2/assets/css/style.css new file mode 100644 index 0000000..e3ef75b --- /dev/null +++ b/template/index2/assets/css/style.css @@ -0,0 +1,286 @@ +/*通用*/ +*{ margin:0; padding:0;} +html{min-height:100%;} +body{color:#333; background-color:#f9faff; background-repeat:no-repeat; min-height:100%;} +ul,li,p,h1,h2,h3,h4,h5,h6,dl,dt,dd {margin:0px;padding:0px;border:none;list-style:none;} +a{text-decoration:none; text-shadow:none;font-weight:normal;} +ul{list-style:none;} +textarea,input,button{outline:none;-webkit-appearance:none; font-family:"微软雅黑";} +.fl{ float:left;} +.fr{ float:right} +a{color:#6c6c6c;text-decoration:none;} +img{border:none;} +.clear{ clear:both; height:0; overflow:hidden;} +.dk{ width:100%; max-width:1200px; min-width:320px; margin:0 auto;} + +.backFFF{ background:#FFF;} +.backB1{FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#5baffd,endColorStr=#3a81ec);background: -ms-linear-gradient(left, #5baffd, #3a81ec);background:-moz-linear-gradient(left,#5baffd,#3a81ec);background:-webkit-gradient(linear, 0% 100%, 0% 0%,from(#5baffd), to(#3a81ec));background:-webkit-gradient(linear, 0% 100%, 0% 0%, from(#5baffd), to(#3a81ec));background: -webkit-linear-gradient(left, #5baffd, #3a81ec);background:-o-linear-gradient(left, #5baffd, #3a81ec);color:#FFF;box-shadow:0 7px 10px rgba(75,152,244,0.45);} + +.backB2{FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#5baffd,endColorStr=#3a81ec);background: -ms-linear-gradient(top, #5baffd, #3a81ec);background:-moz-linear-gradient(left,#5baffd,#3a81ec);background:-webkit-gradient(linear, 0% 0%, 100% 0%,from(#5baffd), to(#3a81ec));background:-webkit-gradient(linear, 0% 0%, 100% 0%, from(#5baffd), to(#3a81ec));background: -webkit-linear-gradient(top, #5baffd, #3a81ec);background:-o-linear-gradient(top, #5baffd, #3a81ec);color:#FFF;} + + + + + +.Color1{background: -webkit-gradient(linear, 0 0, right 0, from(rgba(59, 175, 52, 1)), to(rgba(255, 245, 0, 1)));-webkit-background-clip:text;-webkit-text-fill-color:transparent; } + +/*弹出*/ +.TcBJ{z-index:9998;position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.4); display:none;} +.TcK{z-index:9999;position:fixed; background:#FFF; overflow:hidden; display:none;} + +.Set_but{FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ff7539,endColorStr=#ff2156);background: -ms-linear-gradient(left, #ff7539, #ff2156);background:-moz-linear-gradient(left,#ff7539,#ff2156);background:-webkit-gradient(linear, 0% 100%, 0% 0%,from(#ff7539), to(#ff2156));background:-webkit-gradient(linear, 0% 100%, 0% 0%, from(#ff7539), to(#ff2156));background: -webkit-linear-gradient(left, #ff7539, #ff2156);background:-o-linear-gradient(left, #ff7539, #ff2156);} +.logP1{ background-image:url(../images/logi01.png)} +.logP11{ background-image:url(../images/logi011.png)} +.logP2{ background-image:url(../images/logi02.png)} +.logP3{ background-image:url(../images/logi03.png)} +.logP4{ background-image:url(../images/logi04.png)} +.logP5{ background-image:url(../images/logi05.png)} +.logP6{ background-image:url(../images/logi06.png)} +.logP7{ background-image:url(../images/logi07.png)} +/*置顶*/ +.cd-top {display:inline-block;border-radius:50%;position:fixed;overflow:hidden;text-indent:100%;white-space:nowrap;background:url(../images/top.png) no-repeat center; background-size:100%;visibility:hidden;opacity:0;-webkit-transition:all 0.3s;-moz-transition:all 0.3s;transition:all 0.3s;} +.cd-top.cd-is-visible {visibility: visible;opacity:1;} +.cd-top.cd-fade-out {opacity:0.9;} +.no-touch .cd-top:hover {background-color:#e86256;opacity:1;} +/*banner*/ +.banNr{color:#333;} +.banNrT{font-weight:600;} +.ButAN{transition:0.5s; display:block; text-align:center; } +.ButAN:hover{transition:0.5s;FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ff7539,endColorStr=#ff2156);background: -ms-linear-gradient(left, #ff7539, #ff2156);background:-moz-linear-gradient(left,#ff7539,#ff2156);background:-webkit-gradient(linear, 0% 100%, 0% 0%,from(#ff7539), to(#ff2156));background:-webkit-gradient(linear, 0% 100%, 0% 0%, from(#ff7539), to(#ff2156));background: -webkit-linear-gradient(left, #ff7539, #ff2156);background:-o-linear-gradient(left, #ff7539, #ff2156);box-shadow:0 5px 10px rgba(255,45,82,0.45);} +/*寄售服务项目*/ +.Title{ text-align:center; color:#333;} +.Title span{display:block;} +.Title i{background:#333; display:block; margin:0 auto;} +.IndIteK,.IndIteI{text-align:center;} +.IndIteK p{color:#333;} +/*支付渠道*/ +.IndPayK{text-align:center; background:#FFF;} +/*平台功能*/ +.IndPlaL{color:#333;} +.IndPlaLT{font-weight:600;} +.IndPlaLz{font-weight:600;border-radius:50%;color:#FFF; text-align:center;} +.IndPlaLr p{ color:#2786f9;} +.IndPlaS{position:relative;margin:0 auto} +.IndPlaC{background:#FFF; text-align:center;} +.IndPlaKt{font-weight:600;} +.IndPlaC p{ color:#999;} +a.ButPla{ color:#FFF;text-align:center; display:block;} +/*核心优势*/ +.IndChaZt{font-weight:600;} +.IndChaZ p{color:#666;} +/*尾*/ +.footer{margin:0 auto;} +.footN{ color:#333;} +.footFk{color:#3e86ee; font-weight:600;} +.footFk a{color:#3e86ee;font-weight:600;} +.footFk i{display:block;background-repeat:no-repeat; background-position:center;} +.footF1{ background-image:url(../images/fticon01.png)} +.footF2{background-image:url(../images/fticon02.png)} +.footFm i{display:block;background-repeat:no-repeat; background-position:center;} +.footF3{background-image:url(../images/fticon03.png)} +.footF4{background-image:url(../images/fticon04.png)} +.footRT{font-weight:600;} +.footR a{color:#666;display:block;} +.footR a:hover{color:#3e86ee;} +.footC{color:#666; text-align:center;} +.footI{ text-align:center;} +.footI a{ display:inline-block;} +/*.QueTab,.QueTabk{table-layout:fixed;} +.QueTab tr td{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}*/ +.head{ position:fixed; top:0; left:0; width:100%;z-index: 998; background:#f9faff;} +@media (min-width:1001px){ +body{font:14px "microsoft yahei", Arial, Helvetica, sans-serif; background-image:url(../images/backg1.png); background-position:center 780px;} +.bannerK{ background:url(../images/banner.png) no-repeat top right; margin-bottom:120px; padding-top:82px;} +.head{ height:82px;} +.headK{ width:1200px; margin:0 auto;} +.Logo{ width:140px; height:55px; margin-top:14px;} +/*导航*/ +.wap_nav,.hd_nav{ display:none;} +.MenuPC{ width:820px; margin-top:18px;} +.MenuPC a{ line-height:44px; height:44px; text-align:center; display:block; font-size:16px; border-radius:22px; color:#2d3f7a;} +a.MenuA{ width:110px; margin-left:10px;} +a.MenuA:hover{transition:0.5s; color:#1b67da; text-shadow:0 0 10px rgba(75,152,244,0.45);} +a.MenuAo:hover,a.MenuAo{color:#FFF;} +a.hdReg{ width:80px; color:#FFF;FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ff9e14,endColorStr=#ffc90a);background: -ms-linear-gradient(left, #ff9e14, #3a81ec);background:-moz-linear-gradient(left,#ff9e14,#ffc90a);background:-webkit-gradient(linear, 0% 100%, 0% 0%,from(#ff9e14), to(#ffc90a));background:-webkit-gradient(linear, 0% 100%, 0% 0%, from(#ff9e14), to(#ffc90a));background: -webkit-linear-gradient(left, #ff9e14, #ffc90a);background:-o-linear-gradient(left, #ff9e14, #ffc90a);transition:0.5s;} +a.hdReg:hover{box-shadow:0 5px 10px rgba(255,165,18,0.45);transition:0.5s;} +a.hdLog{ width:80px; color:#FFF; margin-right:14px;transition:0.5s;FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ff7539,endColorStr=#ff2156);background: -ms-linear-gradient(left, #ff7539, #ff2156);background:-moz-linear-gradient(left,#ff7539,#ff2156);background:-webkit-gradient(linear, 0% 100%, 0% 0%,from(#ff7539), to(#ff2156));background:-webkit-gradient(linear, 0% 100%, 0% 0%, from(#ff7539), to(#ff2156));background: -webkit-linear-gradient(left, #ff7539, #ff2156);background:-o-linear-gradient(left, #ff7539, #ff2156);} +a.hdLog:hover{box-shadow:0 5px 10px rgba(255,45,82,0.45);transition:0.5s;} +/*尾*/ +.footer{ width:920px;padding-top:60px;} +.footN{margin-bottom:60px;} +.footF{ width:315px;} +.footFk{ line-height:38px; height:38px; font-size:24px; margin-bottom:10px;} +.footFk i{ width:38px; height:38px;margin-right:14px;} +.footFm{ font-size:14px; line-height:22px; margin-left:6px; margin-bottom:10px;} +.footFm i{width:22px; height:22px;margin-right:8px;} +.footR{ width:180px; padding-left:20px} +.footRT{ line-height:38px; font-size:20px; margin-bottom:5px;} +.footR a{ font-size:16px;line-height:28px;} +.footC{ font-size:16px;line-height:25px;} +.footI{margin:30px auto 40px;} +.footI a{padding:0 20px; height:47px;} +/*置顶*/ +.cd-top {height:59px;width:59px;bottom:70px;right:10px;box-shadow:0 0 10px rgba(75,152,244, 0.35);} +} +@media (max-width: 1000px ) and ( min-width: 801px){ +body{font:14px "microsoft yahei", Arial, Helvetica, sans-serif;background-image:url(../images/backg1.png);overflow-x:hidden} +.bannerK{ background:url(../images/banner.png) no-repeat top right; background-size:700px; margin-bottom:100px; padding-top:75px;} +.head{ height:75px;} +.headK{ width:800px; margin:0 auto;} +.Logo{ width:130px; margin-top:12px;} +.Logo img{ width:100%;} +/*导航*/ +.wap_nav,.hd_nav{ display:none;} +.MenuPC{ width:600px; margin-top:13px;} +.MenuPC a{ line-height:36px; height:36px; text-align:center; display:block; font-size:14px; border-radius:18px; color:#2d3f7a;} +a.MenuA{ width:80px; margin-left:6px;} +a.MenuA:hover{transition:0.5s; color:#1b67da; text-shadow:0 0 10px rgba(75,152,244,0.45);} +a.MenuAo:hover,a.MenuAo{color:#FFF;} +a.hdReg{ width:70px; color:#FFF;FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ff9e14,endColorStr=#ffc90a);background: -ms-linear-gradient(left, #ff9e14, #3a81ec);background:-moz-linear-gradient(left,#ff9e14,#ffc90a);background:-webkit-gradient(linear, 0% 100%, 0% 0%,from(#ff9e14), to(#ffc90a));background:-webkit-gradient(linear, 0% 100%, 0% 0%, from(#ff9e14), to(#ffc90a));background: -webkit-linear-gradient(left, #ff9e14, #ffc90a);background:-o-linear-gradient(left, #ff9e14, #ffc90a);transition:0.5s;} +a.hdReg:hover{box-shadow:0 5px 10px rgba(255,165,18,0.45);transition:0.5s;} +a.hdLog{ width:70px; color:#FFF; margin-right:14px;transition:0.5s;FILTER: progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#ff7539,endColorStr=#ff2156);background: -ms-linear-gradient(left, #ff7539, #ff2156);background:-moz-linear-gradient(left,#ff7539,#ff2156);background:-webkit-gradient(linear, 0% 100%, 0% 0%,from(#ff7539), to(#ff2156));background:-webkit-gradient(linear, 0% 100%, 0% 0%, from(#ff7539), to(#ff2156));background: -webkit-linear-gradient(left, #ff7539, #ff2156);background:-o-linear-gradient(left, #ff7539, #ff2156);} +a.hdLog:hover{box-shadow:0 5px 10px rgba(255,45,82,0.45);transition:0.5s;} +/*尾*/ +.footer{ width:800px;padding-top:40px;} +.footN{margin-bottom:40px;} +.footF{ width:260px; padding-left:30px;} +.footFk{ line-height:32px; height:32px; font-size:20px;margin-bottom:8px;} +.footFk i{ width:32px; height:32px;margin-right:11px; background-size:100%;} +.footFm{ font-size:14px; line-height:22px; margin-left:6px; margin-bottom:8px;} +.footFm i{width:20px; height:20px;margin-right:6px;background-size:100%;} +.footR{ width:150px; padding-left:20px} +.footRT{ line-height:32px; font-size:18px; margin-bottom:5px;} +.footR a{ font-size:14px;line-height:26px; } +.footC{ font-size:14px;line-height:22px;} +.footI{ text-align:center; margin:20px auto 30px;} +.footI a{ display:inline-block; padding:0 15px; height:45px;} +/*置顶*/ +.cd-top {height:50px;width:50px;bottom:70px;right:10px;box-shadow:0 0 10px rgba(75,152,244, 0.35);} +} + +@media (max-width:800px){ +html {font-size: 625%; /*100 ÷ 16 × 100% = 625%*/} +body{font:0.11rem "microsoft yahei", Arial, Helvetica, sans-serif;min-width:320px; background-image:url(../images/backg1.png); background-size:100%;} +/**/ +.bannerK{ background:url(../images/banner.png) no-repeat top right; background-size:100%; margin-bottom:0.4rem; padding-top:0.4rem;} +.head{ height:0.4rem;} +.Logo{ padding-left:4%; width:45%; margin-top:0.04rem;} +.Logo img{ height:0.32rem;} +.head .hd_nav{position:relative;width:0.18rem; padding-right:4%;height:0.26rem; margin-top:0.07rem;z-index:999;} +.head .hd_nav i{top:50%;margin-top:-0.01rem;position:absolute;display:inline-block;height:0.02rem;width:0.18rem;border-radius:0.01rem;background:#3a81ec;} +.head .hd_nav:before{margin-top: -0.07rem;} +.head .hd_nav:after{margin-top:0.06rem;} +.head .hd_nav:before,.head .hd_nav:after{content: '';position:absolute;top:50%;display:inline-block;height:0.02rem;width:0.18rem;border-radius:0.01rem;background:#3a81ec;transition:0.2s;} +.head .hd_nav.active i{display:none;} +.head .hd_nav.active:before{transform: rotate(45deg);} +.head .hd_nav.active:after{transform: rotate(-45deg);} +.head .hd_nav.active:before,.head .hd_nav.active:after{margin-top:0;background:#ffffff;} +.MenuPC{ display:none;} +.wap_nav{position:fixed;width:100%;height:100%;top:0;left:0;background:rgba(0, 0, 0, 0.6);z-index:997; display:none;} +.wap_navK{width:80%;margin:0.6rem auto;text-align:center;} +.wap_navK a{height:0.4rem; line-height:0.4rem;display:block;color:#fff; font-size:0.13rem;} +/*尾*/ +.footer{ width:92%;padding-top:0.2rem;} +.footN{margin-bottom:0.2rem;} +.footF{ width:90%; padding-left:5%; margin-bottom:0.15rem;} +.footFk{ line-height:0.25rem; height:0.25rem; font-size:0.15rem;margin-bottom:0.1rem;} +.footFk i{ width:0.25rem; height:0.25rem;margin-right:0.06rem; background-size:100%;} +.footFm{ font-size:0.11rem; line-height:0.16rem;height:0.16rem; margin-left:0.05rem; margin-bottom:0.07rem;} +.footFm i{width:0.16rem; height:0.16rem;margin-right:0.05rem;background-size:100%;} +.footR{ width:33.33%; text-align:center;} +.footRT{ line-height:0.2rem; font-size:0.13rem; margin-bottom:0.03rem;} +.footR a{ font-size:0.11rem;line-height:0.18rem; } +.footC{ font-size:0.11rem;line-height:0.16rem;} +.footI{ text-align:center;} +.footI a{ display:inline-block; padding:0.1rem 0.04rem 0.15rem; height:0.3rem;} +/*置顶*/ +.cd-top {height:0.35rem;width:0.35rem;bottom:0.4rem;right:4%;box-shadow:0 0 10px rgba(75,152,244, 0.35);} +} + +/*出的各分辨率媒体查询换算:*/ +@media screen and (min-width:360px) and (max-width:374px) and (orientation:portrait){html{font-size:703%;}} +@media screen and (min-width:375px) and (max-width:383px) and (orientation:portrait){html{font-size:732.4%;}} +@media screen and (min-width:384px) and (max-width:399px) and (orientation:portrait){html{font-size:750%; }} +@media screen and (min-width:400px) and (max-width:413px) and (orientation:portrait){html{font-size:781.25%;}} +@media screen and (min-width:414px) and (max-width:431px) and (orientation:portrait){html{font-size:808.6%;}} +@media screen and (min-width:432px) and (max-width:479px) and (orientation:portrait){html {font-size:843.75%;}} +@media screen and (min-width:479px) and (max-width:960px) and (orientation:portrait){html {font-size:843.75%;}} + + + +/*查询验证码*/ + +.checkcode { + display: none; + font-size: 20px; + z-index: 20; + text-align: center; + background: #fff; +} + +.layui-layer { + border-radius: 5px !important; +} + +.layui-layer .layui-layer-title { + padding: 0; + border: 0; + height: 50px; + line-height: 50px; + font-size: 20px; + text-align: center; + color: #fff; + background: #5baffd; + -webkit-border-top-right-radius: 5px; + -webkit-border-top-left-radius: 5px; + -moz-border-radius-topleft: 5px; + border-top-right-radius: 5px; + border-top-left-radius: 5px; +} + +.layui-layer-page .layui-layer-content { + height: auto !important; +} + +.layui-layer .layui-layer-btn { + margin-top: 5px; + text-align: center; +} + +.layui-layer .layui-layer-btn a { + width: 80px; + height: 40px; + line-height: 40px; + font-size: 20px; + text-align: center; + color: #898989; + background: none; + border: solid 1px #e5e5e5; + cursor: pointer; +} + +.layui-layer .layui-layer-btn .layui-layer-btn0 { + background: #5baffd; + color: #fff; + border: solid 1px #5baffd; +} + +.checkcode .img { + margin-top: 29px; + cursor: pointer; +} + +.checkcode .txt { + margin-top: 10px; +} + +.checkcode .txt input { + padding: 0 10px; + width: 216px; + height: 49px; + color: #435880; + border-radius: 5px; + border: solid 1px #e5e5e5; +} + + diff --git a/template/index2/assets/images/32px.png b/template/index2/assets/images/32px.png new file mode 100644 index 0000000..ac74418 Binary files /dev/null and b/template/index2/assets/images/32px.png differ diff --git a/template/index2/assets/images/backg1.png b/template/index2/assets/images/backg1.png new file mode 100644 index 0000000..379e068 Binary files /dev/null and b/template/index2/assets/images/backg1.png differ diff --git a/template/index2/assets/images/banner.png b/template/index2/assets/images/banner.png new file mode 100644 index 0000000..613c6ca Binary files /dev/null and b/template/index2/assets/images/banner.png differ diff --git a/template/index2/assets/images/fticon01.png b/template/index2/assets/images/fticon01.png new file mode 100644 index 0000000..f5adfb8 Binary files /dev/null and b/template/index2/assets/images/fticon01.png differ diff --git a/template/index2/assets/images/fticon02.png b/template/index2/assets/images/fticon02.png new file mode 100644 index 0000000..89e9975 Binary files /dev/null and b/template/index2/assets/images/fticon02.png differ diff --git a/template/index2/assets/images/fticon03.png b/template/index2/assets/images/fticon03.png new file mode 100644 index 0000000..82b8f81 Binary files /dev/null and b/template/index2/assets/images/fticon03.png differ diff --git a/template/index2/assets/images/fticon04.png b/template/index2/assets/images/fticon04.png new file mode 100644 index 0000000..7cdaac2 Binary files /dev/null and b/template/index2/assets/images/fticon04.png differ diff --git a/template/index2/assets/images/icon-ext.png b/template/index2/assets/images/icon-ext.png new file mode 100644 index 0000000..bbbb669 Binary files /dev/null and b/template/index2/assets/images/icon-ext.png differ diff --git a/template/index2/assets/images/icon.png b/template/index2/assets/images/icon.png new file mode 100644 index 0000000..e35d76e --- /dev/null +++ b/template/index2/assets/images/icon.png @@ -0,0 +1,13 @@ + +404 Not Found + +

    404 Not Found

    +
    nginx
    + + + + + + + + diff --git a/template/index2/assets/images/loading-0.gif b/template/index2/assets/images/loading-0.gif new file mode 100644 index 0000000..6f3c953 Binary files /dev/null and b/template/index2/assets/images/loading-0.gif differ diff --git a/template/index2/assets/images/loading-1.gif b/template/index2/assets/images/loading-1.gif new file mode 100644 index 0000000..db3a483 Binary files /dev/null and b/template/index2/assets/images/loading-1.gif differ diff --git a/template/index2/assets/images/loading-2.gif b/template/index2/assets/images/loading-2.gif new file mode 100644 index 0000000..5bb90fd Binary files /dev/null and b/template/index2/assets/images/loading-2.gif differ diff --git a/template/index2/assets/images/loading.gif b/template/index2/assets/images/loading.gif new file mode 100644 index 0000000..6e5bace Binary files /dev/null and b/template/index2/assets/images/loading.gif differ diff --git a/template/index2/assets/images/logi01.png b/template/index2/assets/images/logi01.png new file mode 100644 index 0000000..01b025f Binary files /dev/null and b/template/index2/assets/images/logi01.png differ diff --git a/template/index2/assets/images/logi011.png b/template/index2/assets/images/logi011.png new file mode 100644 index 0000000..ae9dca1 Binary files /dev/null and b/template/index2/assets/images/logi011.png differ diff --git a/template/index2/assets/images/logi02.png b/template/index2/assets/images/logi02.png new file mode 100644 index 0000000..c2c21f7 Binary files /dev/null and b/template/index2/assets/images/logi02.png differ diff --git a/template/index2/assets/images/logi03.png b/template/index2/assets/images/logi03.png new file mode 100644 index 0000000..a2d7c96 Binary files /dev/null and b/template/index2/assets/images/logi03.png differ diff --git a/template/index2/assets/images/logi04.png b/template/index2/assets/images/logi04.png new file mode 100644 index 0000000..34c88f4 Binary files /dev/null and b/template/index2/assets/images/logi04.png differ diff --git a/template/index2/assets/images/logi05.png b/template/index2/assets/images/logi05.png new file mode 100644 index 0000000..37a99d5 Binary files /dev/null and b/template/index2/assets/images/logi05.png differ diff --git a/template/index2/assets/images/logi06.png b/template/index2/assets/images/logi06.png new file mode 100644 index 0000000..0e06743 Binary files /dev/null and b/template/index2/assets/images/logi06.png differ diff --git a/template/index2/assets/images/logi07.png b/template/index2/assets/images/logi07.png new file mode 100644 index 0000000..e755c6d Binary files /dev/null and b/template/index2/assets/images/logi07.png differ diff --git a/template/index2/assets/images/top.png b/template/index2/assets/images/top.png new file mode 100644 index 0000000..90b61a2 Binary files /dev/null and b/template/index2/assets/images/top.png differ diff --git a/template/index2/assets/images/validator_default.png b/template/index2/assets/images/validator_default.png new file mode 100644 index 0000000..7bf05e7 Binary files /dev/null and b/template/index2/assets/images/validator_default.png differ diff --git a/template/index2/assets/images/validator_simple.png b/template/index2/assets/images/validator_simple.png new file mode 100644 index 0000000..9db57bb Binary files /dev/null and b/template/index2/assets/images/validator_simple.png differ diff --git a/template/index2/assets/js/aos.js b/template/index2/assets/js/aos.js new file mode 100644 index 0000000..24820df --- /dev/null +++ b/template/index2/assets/js/aos.js @@ -0,0 +1,2 @@ +!function t(e,n,o){function r(i,c){if(!n[i]){if(!e[i]){var s="function"==typeof require&&require;if(!c&&s)return s(i,!0);if(a)return a(i,!0);var u=new Error("Cannot find module '"+i+"'");throw u.code="MODULE_NOT_FOUND",u}var l=n[i]={exports:{}};e[i][0].call(l.exports,function(t){var n=e[i][1][t];return r(n?n:t)},l,l.exports,t,e,n,o)}return n[i].exports}for(var a="function"==typeof require&&require,i=0;i2?n[i-2]:void 0,s=i>2?n[2]:void 0,u=i>1?n[i-1]:void 0;for("function"==typeof c?(c=o(c,u,5),i-=2):(c="function"==typeof u?u:void 0,i-=c?1:0),s&&r(n[0],n[1],s)&&(c=3>i?void 0:c,i=1);++a-1&&t%1==0&&e>t}function a(t,e,n){if(!c(n))return!1;var a=typeof e;if("number"==a?o(n)&&r(e,n.length):"string"==a&&e in n){var i=n[e];return t===t?t===i:i!==i}return!1}function i(t){return"number"==typeof t&&t>-1&&t%1==0&&u>=t}function c(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var s=/^\d+$/,u=9007199254740991,l=n("length");e.exports=a},{}],7:[function(t,e){function n(t,e,n){for(var o=-1,r=a(e),i=r.length;++o=t||t>e?c(g,d):v=setTimeout(u,t)}function l(){c(k,v)}function f(){if(p=arguments,b=s(),h=this,g=k&&(v||!x),w===!1)var n=x&&!v;else{d||x||(y=b);var o=w-(b-y),r=0>=o||o>w;r?(d&&(d=clearTimeout(d)),y=b,m=t.apply(h,p)):d||(d=setTimeout(l,o))}return r&&v?v=clearTimeout(v):v||e===w||(v=setTimeout(u,e)),n&&(r=!0,m=t.apply(h,p)),!r||v||d||(p=h=void 0),m}var p,d,m,b,h,v,g,y=0,w=!1,k=!0;if("function"!=typeof t)throw new TypeError(a);if(e=0>e?0:+e||0,n===!0){var x=!0;k=!1}else o(n)&&(x=!!n.leading,w="maxWait"in n&&i(+n.maxWait||0,e),k="trailing"in n?!!n.trailing:k);return f.cancel=r,f}function o(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}var r=t("lodash._getnative"),a="Expected a function",i=Math.max,c=r(Date,"now"),s=c||function(){return(new Date).getTime()};e.exports=n},{"lodash._getnative":5}],9:[function(t,e){(function(t){function n(t){return function(e){return null==e?void 0:e[t]}}function o(t){return a(t)&&b.call(t,"callee")&&(!v.call(t,"callee")||h.call(t)==f)}function r(t){return null!=t&&!("function"==typeof t&&i(t))&&c(g(t))}function a(t){return u(t)&&r(t)}function i(t){var e=s(t)?h.call(t):"";return e==p||e==d}function c(t){return"number"==typeof t&&t>-1&&t%1==0&&l>=t}function s(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function u(t){return!!t&&"object"==typeof t}var l=9007199254740991,f="[object Arguments]",p="[object Function]",d="[object GeneratorFunction]",m=t.Object.prototype,b=m.hasOwnProperty,h=m.toString,v=m.propertyIsEnumerable,g=n("length");e.exports=o}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],10:[function(t,e){function n(t){return!!t&&"object"==typeof t}function o(t,e){var n=null==t?void 0:t[e];return c(n)?n:void 0}function r(t){return"number"==typeof t&&t>-1&&t%1==0&&v>=t}function a(t){return i(t)&&m.call(t)==u}function i(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function c(t){return null==t?!1:a(t)?b.test(p.call(t)):n(t)&&l.test(t)}var s="[object Array]",u="[object Function]",l=/^\[object .+?Constructor\]$/,f=Object.prototype,p=Function.prototype.toString,d=f.hasOwnProperty,m=f.toString,b=RegExp("^"+p.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),h=o(Array,"isArray"),v=9007199254740991,g=h||function(t){return n(t)&&r(t.length)&&m.call(t)==s};e.exports=g},{}],11:[function(t,e){function n(t){return function(e){return null==e?void 0:e[t]}}function o(t){return null!=t&&a(v(t))}function r(t,e){return t="number"==typeof t||p.test(t)?+t:-1,e=null==e?h:e,t>-1&&t%1==0&&e>t}function a(t){return"number"==typeof t&&t>-1&&t%1==0&&h>=t}function i(t){for(var e=s(t),n=e.length,o=n&&t.length,i=!!o&&a(o)&&(f(t)||l(t)),c=-1,u=[];++c0;++ot.position?t.node.classList.add("aos-animate"):"undefined"!=typeof o&&("false"===o||!n&&"true"!==o)&&t.node.classList.remove("aos-animate")},o=function(t,e){var o=window.pageYOffset,r=window.innerHeight;[].forEach.call(t,function(t){n(t,r+o,e)})};e.exports=o},{}],19:[function(t,e){var n=t("./calculateOffset"),o=function(t,e){return[].forEach.call(t,function(t){t.node.classList.add("aos-init"),t.position=n(t.node,e.offset)}),t};e.exports=o},{"./calculateOffset":15}],20:[function(t,e){var n=function(){var t=["[data-aos]","[data-aos-offset]","[data-aos-easing]","[data-aos-delay]","[data-aos-anchor]","[data-aos-anchor-placement]","[data-aos-once]"],e=t.join(", "),n=document.querySelectorAll(e);[].forEach.call(n,function(e){var n=/^data\-(.+)$/,o=[];[].forEach.call(e.attributes,function(r){if(n.test(r.nodeName)){var a=r.nodeName.match(n)[0],i="["+a+"]",c=r.nodeName.match(n)[1];e.getAttribute(a).length&&-1!==t.indexOf(i)&&(e.setAttribute(c,r.nodeValue),o.push(a))}});for(var r=0;rn;n++){t=a[n],e=i.querySelectorAll(t.selector);for(var r,c=0,s=e.length;s>c;c++)r=e[c],r.ready||(r.ready=!0,t.fn.call(r,r))}}var r,a=[],i=window.document,c=window.MutationObserver||window.WebKitMutationObserver;e.exports=n},{}],23:[function(t,e){var n=function(t){for(var e=0,n=0;t&&!isNaN(t.offsetLeft)&&!isNaN(t.offsetTop);)e+=t.offsetLeft-("BODY"!=t.tagName?t.scrollLeft:0),n+=t.offsetTop-("BODY"!=t.tagName?t.scrollTop:0),t=t.offsetParent;return{top:n,left:e}};e.exports=n},{}]},{},[14]); +//# sourceMappingURL=aos.js.map diff --git a/template/index2/assets/js/main.js b/template/index2/assets/js/main.js new file mode 100644 index 0000000..521cc82 --- /dev/null +++ b/template/index2/assets/js/main.js @@ -0,0 +1,47 @@ +$(function(){ + //wap下拉菜单 + $('.hd_nav').click(function(){ + if(!$(this).hasClass('active')){ + $(this).addClass('active'); + $('.wap_nav').fadeIn(200); + }else{ + $(this).removeClass('active'); + $('.wap_nav').fadeOut(100); + } + }); + + //置顶 + var offset = 300,offset_opacity = 1200,scroll_top_duration = 700,$back_to_top = $('.cd-top'); + $(window).scroll(function(){ + ( $(this).scrollTop() > offset ) ? $back_to_top.addClass('cd-is-visible') : $back_to_top.removeClass('cd-is-visible cd-fade-out'); + if( $(this).scrollTop() > offset_opacity ) {$back_to_top.addClass('cd-fade-out');} + }); + $back_to_top.on('click', function(event){event.preventDefault();$('body,html').animate({scrollTop: 0 ,}, scroll_top_duration);}); + + +}); + +//按钮倒计时 +function clickButton(t){ + var obj = $("input[name='zymF']"); + obj.attr("disabled","disabled");/*按钮倒计时*/ + var time = t; + var set=setInterval(function(){ + obj.val(--time+"(s)"); + }, 1000);/*等待时间*/ + setTimeout(function(){ + obj.attr("disabled",false).val("重新获取");/*倒计时*/ + clearInterval(set); + }, 1000*t); +} + + + + + + + + + + + diff --git a/template/index2/assets/picture/indi01.png b/template/index2/assets/picture/indi01.png new file mode 100644 index 0000000..343a924 Binary files /dev/null and b/template/index2/assets/picture/indi01.png differ diff --git a/template/index2/assets/picture/indi02.png b/template/index2/assets/picture/indi02.png new file mode 100644 index 0000000..e728384 Binary files /dev/null and b/template/index2/assets/picture/indi02.png differ diff --git a/template/index2/assets/picture/indi03.png b/template/index2/assets/picture/indi03.png new file mode 100644 index 0000000..de5bb26 Binary files /dev/null and b/template/index2/assets/picture/indi03.png differ diff --git a/template/index2/assets/picture/indi04.png b/template/index2/assets/picture/indi04.png new file mode 100644 index 0000000..38d8754 Binary files /dev/null and b/template/index2/assets/picture/indi04.png differ diff --git a/template/index2/assets/picture/indpay1.jpg b/template/index2/assets/picture/indpay1.jpg new file mode 100644 index 0000000..02119e4 Binary files /dev/null and b/template/index2/assets/picture/indpay1.jpg differ diff --git a/template/index2/assets/picture/indpay2.jpg b/template/index2/assets/picture/indpay2.jpg new file mode 100644 index 0000000..15ddae6 Binary files /dev/null and b/template/index2/assets/picture/indpay2.jpg differ diff --git a/template/index2/assets/picture/indpay3.jpg b/template/index2/assets/picture/indpay3.jpg new file mode 100644 index 0000000..dd5b78f Binary files /dev/null and b/template/index2/assets/picture/indpay3.jpg differ diff --git a/template/index2/assets/picture/indpay4.jpg b/template/index2/assets/picture/indpay4.jpg new file mode 100644 index 0000000..cd35e1a Binary files /dev/null and b/template/index2/assets/picture/indpay4.jpg differ diff --git a/template/index2/assets/picture/indpay5.jpg b/template/index2/assets/picture/indpay5.jpg new file mode 100644 index 0000000..6e2987a Binary files /dev/null and b/template/index2/assets/picture/indpay5.jpg differ diff --git a/template/index2/assets/picture/indpay6.jpg b/template/index2/assets/picture/indpay6.jpg new file mode 100644 index 0000000..ffb855c Binary files /dev/null and b/template/index2/assets/picture/indpay6.jpg differ diff --git a/template/index2/assets/picture/indpic01.png b/template/index2/assets/picture/indpic01.png new file mode 100644 index 0000000..fb7c63e Binary files /dev/null and b/template/index2/assets/picture/indpic01.png differ diff --git a/template/index2/assets/picture/indpic02.png b/template/index2/assets/picture/indpic02.png new file mode 100644 index 0000000..a87594e Binary files /dev/null and b/template/index2/assets/picture/indpic02.png differ diff --git a/template/index2/assets/picture/indpic03.png b/template/index2/assets/picture/indpic03.png new file mode 100644 index 0000000..9743a20 Binary files /dev/null and b/template/index2/assets/picture/indpic03.png differ diff --git a/template/index2/assets/picture/indpic04.png b/template/index2/assets/picture/indpic04.png new file mode 100644 index 0000000..50c4ee5 Binary files /dev/null and b/template/index2/assets/picture/indpic04.png differ diff --git a/template/index2/assets/picture/indpic05.png b/template/index2/assets/picture/indpic05.png new file mode 100644 index 0000000..d183498 Binary files /dev/null and b/template/index2/assets/picture/indpic05.png differ diff --git a/template/index2/assets/picture/indpl01.png b/template/index2/assets/picture/indpl01.png new file mode 100644 index 0000000..14587fb Binary files /dev/null and b/template/index2/assets/picture/indpl01.png differ diff --git a/template/index2/assets/picture/indpl02.png b/template/index2/assets/picture/indpl02.png new file mode 100644 index 0000000..b41bbc9 Binary files /dev/null and b/template/index2/assets/picture/indpl02.png differ diff --git a/template/index2/assets/picture/indpl03.png b/template/index2/assets/picture/indpl03.png new file mode 100644 index 0000000..2e1db0b Binary files /dev/null and b/template/index2/assets/picture/indpl03.png differ diff --git a/template/index2/assets/picture/indpl04.png b/template/index2/assets/picture/indpl04.png new file mode 100644 index 0000000..f476b9c Binary files /dev/null and b/template/index2/assets/picture/indpl04.png differ diff --git a/template/index2/assets/picture/indpl05.png b/template/index2/assets/picture/indpl05.png new file mode 100644 index 0000000..e843b5f Binary files /dev/null and b/template/index2/assets/picture/indpl05.png differ diff --git a/template/index2/assets/picture/indpl06.png b/template/index2/assets/picture/indpl06.png new file mode 100644 index 0000000..39111fb Binary files /dev/null and b/template/index2/assets/picture/indpl06.png differ diff --git a/template/index2/assets/picture/indpl07.png b/template/index2/assets/picture/indpl07.png new file mode 100644 index 0000000..dcc4abc Binary files /dev/null and b/template/index2/assets/picture/indpl07.png differ diff --git a/template/index2/assets/picture/indpl08.png b/template/index2/assets/picture/indpl08.png new file mode 100644 index 0000000..ff0d86f Binary files /dev/null and b/template/index2/assets/picture/indpl08.png differ diff --git a/template/index2/index.php b/template/index2/index.php new file mode 100644 index 0000000..f0ab735 --- /dev/null +++ b/template/index2/index.php @@ -0,0 +1,318 @@ + + + + + + + +<?php echo $conf['title']?> + + + + + + + + + + + + + + +
    +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +

    寄售服务项目

    + CONSIGNMENT SERVICE ITEMS + +
    +
    +

    电商/优惠卷/折扣卷

    +

    论坛/邀请码/注册码/积分充值卡

    +

    企业个人软件/充值码/注册码

    +

    腾讯/爱奇艺/优酷/视频CDK/游戏CDK

    +
    +
    +
    +

    渠道

    + CHANNEL OF PAYMENT + +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    平台功能

    + PLATFORM FUNCTION + +
    +
    +
    +
    01.手续费扣除模式
    +
    +
    A
    +
    +

    模式1.买家承担

    买家付款时会连同手续费一并支付 +
    +
    +
    +
    B
    +
    +

    模式2.商家承担

    手续费在成功付款的订单内扣除 +
    +
    +
    +
    + +
    +
    +
    +
    +
    +
    极简使用

    七行代码,极速完成,支付接入 简洁的操作界面易于使用

    +
    +
    +
    +
    灵活便利

    产品服务灵活组合 满足企业多元化业务需求

    +
    +
    +
    +
    大数据

    运用交易数据分析功能 了解公司运营状况

    +
    +
    +
    +
    安全稳定

    平台运行于阿里云计算中心 多备份容灾保障

    +
    +
    +
    +
    不介入资金流

    只负责交易处理不参与资金清算 保障您的资金安全

    +
    +
    +
    +
    安全密码

    可自行开关 为你的账户安全保驾护航

    +
    +
    +
    +
    增值服务

    提供金融产品及技术服务 帮助企业整合互联网金融

    +
    +
    +
    +
    自助服务

    同时平台全面提供7*24小时客户服务,保障客户问题随时得到处理解决

    +
    +
    + 更多功能等你来发掘 +
    + +
    +

    核心优势

    + CHANNEL OF PAYMENT + +
    +
    +
    +
    服务器安全
    +

    采用群集服务器,防御高,故障率低,无论用户身在何处,均能获得流畅安全可靠的体验

    + 立即体验 +
    +
    +
    +
    +
    +
    +
    +
    资金保障
    +

    商户的商品,全部加密处理,专业运维24小时处理,您的帐户安全将得到充分的保障。

    + 立即体验 +
    +
    +
    +
    +
    +
    专属客服
    +

    专业客服团队,专属客服一对一贴心服务,7*24小时全天候在线为你解答。

    + 立即体验 +
    +
    +
    +
    +
    +
    +
    +
    费率超低
    +

    支付渠道直接对接官方,直接去掉中间商的差价,因此我们可以给商户提供更低廉的费率

    + 立即体验 +
    +
    +
    +
    +
    + + +Top + + + + + diff --git a/template/index2/preview.png b/template/index2/preview.png new file mode 100644 index 0000000..76196b3 Binary files /dev/null and b/template/index2/preview.png differ diff --git a/template/index3/assets/css/animate.min.css b/template/index3/assets/css/animate.min.css new file mode 100644 index 0000000..af7689d --- /dev/null +++ b/template/index3/assets/css/animate.min.css @@ -0,0 +1,2668 @@ +/* 织梦无忧网 做最好的织梦整站模板下载网站 */ +/* 网址:Www.dedecms51.com */ +/* 图标大全:www.dedecms51.com 专业建站素材网站 */ +/* QQ:379144319 */ +@charset "UTF-8"; +/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license - http://opensource.org/licenses/MIT + +Copyright (c) 2013 Daniel Eden +*/ + +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both +} +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite +} +.animated.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s +} + @-webkit-keyframes bounce { + 0%, 100%, 20%, 53%, 80% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) +} + 40%, 43% { + -webkit-transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0) +} + 70% { + -webkit-transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0) +} + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0) +} +} + @keyframes bounce { + 0%, 100%, 20%, 53%, 80% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) +} + 40%, 43% { + -webkit-transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + -webkit-transform: translate3d(0, -30px, 0); + -ms-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0) +} + 70% { + -webkit-transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + transition-timing-function: cubic-bezier(0.755, .050, .855, .060); + -webkit-transform: translate3d(0, -15px, 0); + -ms-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0) +} + 90% { + -webkit-transform: translate3d(0, -4px, 0); + -ms-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0) +} +} +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + -ms-transform-origin: center bottom; + transform-origin: center bottom +} + @-webkit-keyframes flash { + 0%, 100%, 50% { + opacity: 1 +} + 25%, 75% { + opacity: 0 +} +} + @keyframes flash { + 0%, 100%, 50% { + opacity: 1 +} + 25%, 75% { + opacity: 0 +} +} +.flash { + -webkit-animation-name: flash; + animation-name: flash +} + @-webkit-keyframes pulse { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05) +} + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} +} + @keyframes pulse { + 0% { + -webkit-transform: scale3d(1, 1, 1); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + -ms-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05) +} + 100% { + -webkit-transform: scale3d(1, 1, 1); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} +} +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse +} + @-webkit-keyframes rubberBand { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} + 30% { + -webkit-transform: scale3d(1.25, .75, 1); + transform: scale3d(1.25, .75, 1) +} + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1) +} + 50% { + -webkit-transform: scale3d(1.15, .85, 1); + transform: scale3d(1.15, .85, 1) +} + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1) +} + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1) +} + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} +} + @keyframes rubberBand { + 0% { + -webkit-transform: scale3d(1, 1, 1); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} + 30% { + -webkit-transform: scale3d(1.25, .75, 1); + -ms-transform: scale3d(1.25, .75, 1); + transform: scale3d(1.25, .75, 1) +} + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + -ms-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1) +} + 50% { + -webkit-transform: scale3d(1.15, .85, 1); + -ms-transform: scale3d(1.15, .85, 1); + transform: scale3d(1.15, .85, 1) +} + 65% { + -webkit-transform: scale3d(.95, 1.05, 1); + -ms-transform: scale3d(.95, 1.05, 1); + transform: scale3d(.95, 1.05, 1) +} + 75% { + -webkit-transform: scale3d(1.05, .95, 1); + -ms-transform: scale3d(1.05, .95, 1); + transform: scale3d(1.05, .95, 1) +} + 100% { + -webkit-transform: scale3d(1, 1, 1); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} +} +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand +} + @-webkit-keyframes shake { + 0%, 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) +} + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0) +} + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0) +} +} + @keyframes shake { + 0%, 100% { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) +} + 10%, 30%, 50%, 70%, 90% { + -webkit-transform: translate3d(-10px, 0, 0); + -ms-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0) +} + 20%, 40%, 60%, 80% { + -webkit-transform: translate3d(10px, 0, 0); + -ms-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0) +} +} +.shake { + -webkit-animation-name: shake; + animation-name: shake +} + @-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg) +} + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg) +} + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg) +} + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg) +} + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg) +} +} + @keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + -ms-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg) +} + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + -ms-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg) +} + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + -ms-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg) +} + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + -ms-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg) +} + 100% { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + -ms-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg) +} +} +.swing { + -webkit-transform-origin: top center; + -ms-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing +} + @-webkit-keyframes tada { + 0% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg) +} + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg) +} + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg) +} + 100% { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} +} + @keyframes tada { + 0% { + -webkit-transform: scale3d(1, 1, 1); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} + 10%, 20% { + -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + -ms-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg) +} + 30%, 50%, 70%, 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + -ms-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg) +} + 40%, 60%, 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + -ms-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg) +} + 100% { + -webkit-transform: scale3d(1, 1, 1); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} +} +.tada { + -webkit-animation-name: tada; + animation-name: tada +} + @-webkit-keyframes wobble { + 0% { + -webkit-transform: none; + transform: none +} + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg) +} + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg) +} + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg) +} + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg) +} + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg) +} + 100% { + -webkit-transform: none; + transform: none +} +} + @keyframes wobble { + 0% { + -webkit-transform: none; + -ms-transform: none; + transform: none +} + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + -ms-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg) +} + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + -ms-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg) +} + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + -ms-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg) +} + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + -ms-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg) +} + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + -ms-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg) +} + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble +} + @-webkit-keyframes bounceIn { + 0%, 100%, 20%, 40%, 60%, 80% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) +} + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) +} + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1) +} + 40% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9) +} + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03) +} + 80% { + -webkit-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97) +} + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} +} + @keyframes bounceIn { + 0%, 100%, 20%, 40%, 60%, 80% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) +} + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + -ms-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) +} + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + -ms-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1) +} + 40% { + -webkit-transform: scale3d(.9, .9, .9); + -ms-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9) +} + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + -ms-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03) +} + 80% { + -webkit-transform: scale3d(.97, .97, .97); + -ms-transform: scale3d(.97, .97, .97); + transform: scale3d(.97, .97, .97) +} + 100% { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + -ms-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1) +} +} +.bounceIn { + -webkit-animation-name: bounceIn; + animation-name: bounceIn; + -webkit-animation-duration: .75s; + animation-duration: .75s +} + @-webkit-keyframes bounceInDown { + 0%, 100%, 60%, 75%, 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) +} + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0) +} + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0) +} + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0) +} + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0) +} + 100% { + -webkit-transform: none; + transform: none +} +} + @keyframes bounceInDown { + 0%, 100%, 60%, 75%, 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) +} + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + -ms-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0) +} + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + -ms-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0) +} + 75% { + -webkit-transform: translate3d(0, -10px, 0); + -ms-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0) +} + 90% { + -webkit-transform: translate3d(0, 5px, 0); + -ms-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0) +} + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown +} + @-webkit-keyframes bounceInLeft { + 0%, 100%, 60%, 75%, 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) +} + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0) +} + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0) +} + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0) +} + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0) +} + 100% { + -webkit-transform: none; + transform: none +} +} + @keyframes bounceInLeft { + 0%, 100%, 60%, 75%, 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) +} + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + -ms-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0) +} + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + -ms-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0) +} + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + -ms-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0) +} + 90% { + -webkit-transform: translate3d(5px, 0, 0); + -ms-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0) +} + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft +} + @-webkit-keyframes bounceInRight { + 0%, 100%, 60%, 75%, 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) +} + 0% { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0) +} + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0) +} + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0) +} + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0) +} + 100% { + -webkit-transform: none; + transform: none +} +} + @keyframes bounceInRight { + 0%, 100%, 60%, 75%, 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) +} + 0% { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + -ms-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0) +} + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + -ms-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0) +} + 75% { + -webkit-transform: translate3d(10px, 0, 0); + -ms-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0) +} + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + -ms-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0) +} + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight +} + @-webkit-keyframes bounceInUp { + 0%, 100%, 60%, 75%, 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) +} + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0) +} + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0) +} + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0) +} + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0) +} + 100% { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) +} +} + @keyframes bounceInUp { + 0%, 100%, 60%, 75%, 90% { + -webkit-transition-timing-function: cubic-bezier(0.215, .61, .355, 1); + transition-timing-function: cubic-bezier(0.215, .61, .355, 1) +} + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + -ms-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0) +} + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + -ms-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0) +} + 75% { + -webkit-transform: translate3d(0, 10px, 0); + -ms-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0) +} + 90% { + -webkit-transform: translate3d(0, -5px, 0); + -ms-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0) +} + 100% { + -webkit-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0) +} +} +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp +} + @-webkit-keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9) +} + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1) +} + 100% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) +} +} + @keyframes bounceOut { + 20% { + -webkit-transform: scale3d(.9, .9, .9); + -ms-transform: scale3d(.9, .9, .9); + transform: scale3d(.9, .9, .9) +} + 50%, 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + -ms-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1) +} + 100% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + -ms-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) +} +} +.bounceOut { + -webkit-animation-name: bounceOut; + animation-name: bounceOut; + -webkit-animation-duration: .75s; + animation-duration: .75s +} + @-webkit-keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0) +} + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0) +} + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0) +} +} + @keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + -ms-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0) +} + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + -ms-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0) +} + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + -ms-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0) +} +} +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown +} + @-webkit-keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0) +} + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0) +} +} + @keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + -ms-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0) +} + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + -ms-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0) +} +} +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft +} + @-webkit-keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0) +} + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0) +} +} + @keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + -ms-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0) +} + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + -ms-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0) +} +} +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight +} + @-webkit-keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0) +} + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0) +} + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0) +} +} + @keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + -ms-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0) +} + 40%, 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + -ms-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0) +} + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + -ms-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0) +} +} +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp +} + @-webkit-keyframes fadeIn { + 0% { + opacity: 0 +} + 100% { + opacity: 1 +} +} + @keyframes fadeIn { + 0% { + opacity: 0 +} + 100% { + opacity: 1 +} +} +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn +} + @-webkit-keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + transform: none +} +} + @keyframes fadeInDown { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + -ms-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown +} + @-webkit-keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + transform: none +} +} + @keyframes fadeInDownBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + -ms-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig +} + @-webkit-keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + transform: none +} +} + @keyframes fadeInLeft { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft +} + @-webkit-keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + transform: none +} +} + @keyframes fadeInLeftBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + -ms-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig +} + @-webkit-keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + transform: none +} +} + @keyframes fadeInRight { + 0% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + -ms-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight +} + @-webkit-keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + transform: none +} +} + @keyframes fadeInRightBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + -ms-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig +} + @-webkit-keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + transform: none +} +} + @keyframes fadeInUp { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + -ms-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp +} + @-webkit-keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + transform: none +} +} + @keyframes fadeInUpBig { + 0% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + -ms-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0) +} + 100% { + opacity: 1; + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig +} + @-webkit-keyframes fadeOut { + 0% { + opacity: 1 +} + 100% { + opacity: 0 +} +} + @keyframes fadeOut { + 0% { + opacity: 1 +} + 100% { + opacity: 0 +} +} +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut +} + @-webkit-keyframes fadeOutDown { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0) +} +} + @keyframes fadeOutDown { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + -ms-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0) +} +} +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown +} + @-webkit-keyframes fadeOutDownBig { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0) +} +} + @keyframes fadeOutDownBig { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + -ms-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0) +} +} +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig +} + @-webkit-keyframes fadeOutLeft { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) +} +} + @keyframes fadeOutLeft { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + -ms-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0) +} +} +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft +} + @-webkit-keyframes fadeOutLeftBig { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0) +} +} + @keyframes fadeOutLeftBig { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + -ms-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0) +} +} +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig +} + @-webkit-keyframes fadeOutRight { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) +} +} + @keyframes fadeOutRight { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + -ms-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0) +} +} +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight +} + @-webkit-keyframes fadeOutRightBig { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0) +} +} + @keyframes fadeOutRightBig { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + -ms-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0) +} +} +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig +} + @-webkit-keyframes fadeOutUp { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0) +} +} + @keyframes fadeOutUp { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + -ms-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0) +} +} +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp +} + @-webkit-keyframes fadeOutUpBig { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0) +} +} + @keyframes fadeOutUpBig { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + -ms-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0) +} +} +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig +} + @-webkit-keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out +} + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out +} + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in +} + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in +} + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in +} +} + @keyframes flip { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out +} + 40% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -ms-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out +} + 50% { + -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -ms-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in +} + 80% { + -webkit-transform: perspective(400px) scale3d(.95, .95, .95); + -ms-transform: perspective(400px) scale3d(.95, .95, .95); + transform: perspective(400px) scale3d(.95, .95, .95); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in +} + 100% { + -webkit-transform: perspective(400px); + -ms-transform: perspective(400px); + transform: perspective(400px); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in +} +} +.animated.flip { + -webkit-backface-visibility: visible; + -ms-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip +} + @-webkit-keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0 +} + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in +} + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1 +} + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg) +} + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px) +} +} + @keyframes flipInX { + 0% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -ms-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0 +} + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -ms-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in +} + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + -ms-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1 +} + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + -ms-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg) +} + 100% { + -webkit-transform: perspective(400px); + -ms-transform: perspective(400px); + transform: perspective(400px) +} +} +.flipInX { + -webkit-backface-visibility: visible!important; + -ms-backface-visibility: visible!important; + backface-visibility: visible!important; + -webkit-animation-name: flipInX; + animation-name: flipInX +} + @-webkit-keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0 +} + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in +} + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1 +} + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg) +} + 100% { + -webkit-transform: perspective(400px); + transform: perspective(400px) +} +} + @keyframes flipInY { + 0% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in; + opacity: 0 +} + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-transition-timing-function: ease-in; + transition-timing-function: ease-in +} + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1 +} + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg) +} + 100% { + -webkit-transform: perspective(400px); + -ms-transform: perspective(400px); + transform: perspective(400px) +} +} +.flipInY { + -webkit-backface-visibility: visible!important; + -ms-backface-visibility: visible!important; + backface-visibility: visible!important; + -webkit-animation-name: flipInY; + animation-name: flipInY +} + @-webkit-keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px) +} + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1 +} + 100% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0 +} +} + @keyframes flipOutX { + 0% { + -webkit-transform: perspective(400px); + -ms-transform: perspective(400px); + transform: perspective(400px) +} + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -ms-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1 +} + 100% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -ms-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0 +} +} +.flipOutX { + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-animation-duration: .75s; + animation-duration: .75s; + -webkit-backface-visibility: visible!important; + -ms-backface-visibility: visible!important; + backface-visibility: visible!important +} + @-webkit-keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px); + transform: perspective(400px) +} + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1 +} + 100% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0 +} +} + @keyframes flipOutY { + 0% { + -webkit-transform: perspective(400px); + -ms-transform: perspective(400px); + transform: perspective(400px) +} + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1 +} + 100% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -ms-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0 +} +} +.flipOutY { + -webkit-backface-visibility: visible!important; + -ms-backface-visibility: visible!important; + backface-visibility: visible!important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; + -webkit-animation-duration: .75s; + animation-duration: .75s +} + @-webkit-keyframes lightSpeedIn { + 0% { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0 +} + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1 +} + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1 +} + 100% { + -webkit-transform: none; + transform: none; + opacity: 1 +} +} + @keyframes lightSpeedIn { + 0% { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + -ms-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0 +} + 60% { + -webkit-transform: skewX(20deg); + -ms-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1 +} + 80% { + -webkit-transform: skewX(-5deg); + -ms-transform: skewX(-5deg); + transform: skewX(-5deg); + opacity: 1 +} + 100% { + -webkit-transform: none; + -ms-transform: none; + transform: none; + opacity: 1 +} +} +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out +} + @-webkit-keyframes lightSpeedOut { + 0% { + opacity: 1 +} + 100% { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0 +} +} + @keyframes lightSpeedOut { + 0% { + opacity: 1 +} + 100% { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + -ms-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0 +} +} +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in +} + @-webkit-keyframes rotateIn { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0 +} + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + transform: none; + opacity: 1 +} +} + @keyframes rotateIn { + 0% { + -webkit-transform-origin: center; + -ms-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + -ms-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0 +} + 100% { + -webkit-transform-origin: center; + -ms-transform-origin: center; + transform-origin: center; + -webkit-transform: none; + -ms-transform: none; + transform: none; + opacity: 1 +} +} +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn +} + @-webkit-keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0 +} + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1 +} +} + @keyframes rotateInDownLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + -ms-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0 +} + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + -ms-transform: none; + transform: none; + opacity: 1 +} +} +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft +} + @-webkit-keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0 +} + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1 +} +} + @keyframes rotateInDownRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + -ms-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0 +} + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + -ms-transform: none; + transform: none; + opacity: 1 +} +} +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight +} + @-webkit-keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0 +} + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + transform: none; + opacity: 1 +} +} + @keyframes rotateInUpLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + -ms-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0 +} + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: none; + -ms-transform: none; + transform: none; + opacity: 1 +} +} +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft +} + @-webkit-keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0 +} + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + transform: none; + opacity: 1 +} +} + @keyframes rotateInUpRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + -ms-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0 +} + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: none; + -ms-transform: none; + transform: none; + opacity: 1 +} +} +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight +} + @-webkit-keyframes rotateOut { + 0% { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1 +} + 100% { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0 +} +} + @keyframes rotateOut { + 0% { + -webkit-transform-origin: center; + -ms-transform-origin: center; + transform-origin: center; + opacity: 1 +} + 100% { + -webkit-transform-origin: center; + -ms-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + -ms-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0 +} +} +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut +} + @-webkit-keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1 +} + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0, 0, 1, 45deg); + transform: rotate(0, 0, 1, 45deg); + opacity: 0 +} +} + @keyframes rotateOutDownLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1 +} + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate(0, 0, 1, 45deg); + -ms-transform: rotate(0, 0, 1, 45deg); + transform: rotate(0, 0, 1, 45deg); + opacity: 0 +} +} +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft +} + @-webkit-keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1 +} + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0 +} +} + @keyframes rotateOutDownRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1 +} + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + -ms-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0 +} +} +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight +} + @-webkit-keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1 +} + 100% { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0 +} +} + @keyframes rotateOutUpLeft { + 0% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1 +} + 100% { + -webkit-transform-origin: left bottom; + -ms-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + -ms-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0 +} +} +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft +} + @-webkit-keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1 +} + 100% { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0 +} +} + @keyframes rotateOutUpRight { + 0% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1 +} + 100% { + -webkit-transform-origin: right bottom; + -ms-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + -ms-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0 +} +} +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight +} + @-webkit-keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out +} + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out +} + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1 +} + 100% { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0 +} +} + @keyframes hinge { + 0% { + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out +} + 20%, 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + -ms-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out +} + 40%, 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + -ms-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + -ms-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1 +} + 100% { + -webkit-transform: translate3d(0, 700px, 0); + -ms-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0 +} +} +.hinge { + -webkit-animation-name: hinge; + animation-name: hinge +} + @-webkit-keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg) +} + 100% { + opacity: 1; + -webkit-transform: none; + transform: none +} +} + @keyframes rollIn { + 0% { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + -ms-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg) +} + 100% { + opacity: 1; + -webkit-transform: none; + -ms-transform: none; + transform: none +} +} +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn +} + @-webkit-keyframes rollOut { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg) +} +} + @keyframes rollOut { + 0% { + opacity: 1 +} + 100% { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + -ms-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg) +} +} +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut +} + @-webkit-keyframes zoomIn { + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) +} + 50% { + opacity: 1 +} +} + @keyframes zoomIn { + 0% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + -ms-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) +} + 50% { + opacity: 1 +} +} +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn +} + @-webkit-keyframes zoomInDown { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) +} + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) +} +} + @keyframes zoomInDown { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -ms-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) +} + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -ms-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) +} +} +.zoomInDown { + -webkit-animation-name: zoomInDown; + animation-name: zoomInDown +} + @-webkit-keyframes zoomInLeft { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) +} + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) +} +} + @keyframes zoomInLeft { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -ms-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) +} + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -ms-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) +} +} +.zoomInLeft { + -webkit-animation-name: zoomInLeft; + animation-name: zoomInLeft +} + @-webkit-keyframes zoomInRight { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) +} + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) +} +} + @keyframes zoomInRight { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -ms-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) +} + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -ms-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) +} +} +.zoomInRight { + -webkit-animation-name: zoomInRight; + animation-name: zoomInRight +} + @-webkit-keyframes zoomInUp { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) +} + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) +} +} + @keyframes zoomInUp { + 0% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -ms-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) +} + 60% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -ms-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) +} +} +.zoomInUp { + -webkit-animation-name: zoomInUp; + animation-name: zoomInUp +} + @-webkit-keyframes zoomOut { + 0% { + opacity: 1 +} + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) +} + 100% { + opacity: 0 +} +} + @keyframes zoomOut { + 0% { + opacity: 1 +} + 50% { + opacity: 0; + -webkit-transform: scale3d(.3, .3, .3); + -ms-transform: scale3d(.3, .3, .3); + transform: scale3d(.3, .3, .3) +} + 100% { + opacity: 0 +} +} +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut +} + @-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) +} + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) +} +} + @keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -ms-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) +} + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -ms-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + -ms-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) +} +} +.zoomOutDown { + -webkit-animation-name: zoomOutDown; + animation-name: zoomOutDown +} + @-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0) +} + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center +} +} + @keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + -ms-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0) +} + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(-2000px, 0, 0); + -ms-transform: scale(.1) translate3d(-2000px, 0, 0); + transform: scale(.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + -ms-transform-origin: left center; + transform-origin: left center +} +} +.zoomOutLeft { + -webkit-animation-name: zoomOutLeft; + animation-name: zoomOutLeft +} + @-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0) +} + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center +} +} + @keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + -ms-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0); + transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0) +} + 100% { + opacity: 0; + -webkit-transform: scale(.1) translate3d(2000px, 0, 0); + -ms-transform: scale(.1) translate3d(2000px, 0, 0); + transform: scale(.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + -ms-transform-origin: right center; + transform-origin: right center +} +} +.zoomOutRight { + -webkit-animation-name: zoomOutRight; + animation-name: zoomOutRight +} + @-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) +} + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) +} +} + @keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -ms-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, .055, .675, .19); + animation-timing-function: cubic-bezier(0.55, .055, .675, .19) +} + 100% { + opacity: 0; + -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -ms-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + -ms-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, .885, .32, 1); + animation-timing-function: cubic-bezier(0.175, .885, .32, 1) +} +} +.zoomOutUp { + -webkit-animation-name: zoomOutUp; + animation-name: zoomOutUp +} diff --git a/template/index3/assets/css/bootstrap_1107.css b/template/index3/assets/css/bootstrap_1107.css new file mode 100644 index 0000000..7fe5890 --- /dev/null +++ b/template/index3/assets/css/bootstrap_1107.css @@ -0,0 +1 @@ +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1200px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.row{margin-left:-15px;margin-right:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after{content:" ";display:table}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}} \ No newline at end of file diff --git a/template/index3/assets/css/common_1107.css b/template/index3/assets/css/common_1107.css new file mode 100644 index 0000000..62914f4 --- /dev/null +++ b/template/index3/assets/css/common_1107.css @@ -0,0 +1,2442 @@ + +body,div,main,section,article,header,footer,nav,h1,h2,h3,h4,h5,h6,hr,p,blockquote,dl,dt,dd,ul,ol,li,pre,fieldset,button,input,textarea,th,td { + margin: 0; + padding: 0 +} + +html,body { + overflow-x: hidden; + width: 100% +} + +body { + font-family: "\5FAE\8F6F\96C5\9ED1","Microsoft Yahei","Hiragino Sans GB",tahoma,arial,"\5B8B\4F53"; + line-height: 1; + color: #85888e +} + +ul,li { + list-style: none +} + +input,textarea { + outline: 0 +} + +img { + max-width: 100% +} + +img,input { + border: 0; + vertical-align: top +} + +a { + color: #85888e; + text-decoration: none; + outline: 0; + transition: all .2s cubic-bezier(0.215,.61,.355,1); + -moz-transition: all .2s cubic-bezier(0.215,.61,.355,1); + -webkit-transition: all .2s cubic-bezier(0.215,.61,.355,1) +} + +.flap { + visibility: hidden; + animation-duration: 1s; + -moz-animation-duration: 1s; + -webkit-animation-duration: 1s; + animation-fill-mode: backwards; + -moz-animation-fill-mode: backwards; + -webkit-animation-fill-mode: backwards +} + +.flaped { + visibility: visible +} + +.text-shadow { + text-shadow: 0 2px 4px rgba(0,0,0,.16) +} + +.bg-grey { + background-color: #fafbfc; +} + +.box.bg-grey{border-top:5px solid #f5f5f5;} + +.box { + overflow: hidden; + padding-top: 100px; + padding-bottom: 100px +} + +.els { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis +} + +.bold { + font-weight: 700 +} + +.wrap { + word-wrap: break-word; + word-break: break-all +} + +.ystit{ + height: 500px; + width: 500px; + border-radius: 500px; + border: 2px solid #108bed; + margin: 0 auto; +} +.ystit p{ + margin:210px 0 0 0; +} + +.tit { + margin-bottom: 60px; + text-align: center +} + +.tit p{ + font-size: 30px; + line-height: 50px; + color:#0f1830; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.tit p em{ + font-size: 16px; + line-height: 50px; + color:#108bed; + font-style: normal; +} +.tit span{ + font-size: 16px; + color:#555; + line-height: 20px; +} + +.tit-en { + display: block; + font-size: 40px; + font-family: fzxh; + color: #108bed; +} + +.tit-zh { + font-size: 18px; + color: #999; +} + +.tit-span { + display: block; + padding:20px 0 0 0; + font-size: 14px; + line-height: 30px; + color: #777; +} + +.tit-line { + margin: 20px auto; + display: block; + width: 60px; + height: 2px; + font-size: 0; + background-color: #e1e1e1 +} + +.owl-dots { + position: absolute; + left: 0; + bottom: -20px; + width: 100%; + text-align: center +} + +.banner-owl .owl-dots { + bottom: 10px +} + +.owl-dot { + margin: 0 5px; + display: inline-block; + width: 12px; + height: 12px; + border-radius: 12px; + border: 1px solid #79b9e5; + transition: all .2s cubic-bezier(0.215,.61,.355,1); + -moz-transition: all .2s cubic-bezier(0.215,.61,.355,1); + -webkit-transition: all .2s cubic-bezier(0.215,.61,.355,1) +} + +.owl-dot.active { + background-color: #79b9e5 +} + +.more-btn { + position: relative; + display: inline-block; + font-size: 14px; + text-align: center; + line-height: 24px; + width: 65px; + height: 24px; + color: #dbdbdb; + border-radius: 22px; + border: 1px solid #dbdbdb; + transition: all .6s cubic-bezier(0.215,.61,.355,1); + -moz-transition: all .6s cubic-bezier(0.215,.61,.355,1); + -webkit-transition: all .6s cubic-bezier(0.215,.61,.355,1) +} + +.more-btn:after { + content: ''; + position: absolute; + top: 9px; + right: 11px; + display: block; + width: 24px; + height: 7px; + font-size: 0; + background-repeat: no-repeat; +} + +.news-item:hover .more-btn,.news-one:hover .more-btn,.more-btn:hover,.detail-label:hover { + color: #fff; + border-color: #108bed; + background-color: #108bed; +} + +.news-item:hover .more-btn:after,.news-one:hover .more-btn:after,.more-btn:hover:after { + background-repeat: no-repeat; +} + +::-webkit-scrollbar { + height: 8px; + width: 8px; + background: rgba(222,222,222,.5); + -webkit-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; + border-radius: 5px +} + +::-webkit-scrollbar-button { + display: none +} + +::-webkit-scrollbar-track { + background-color: #fff +} + +::-webkit-scrollbar-track-piece { + background: #fff +} + +::-webkit-scrollbar-thumb { + width: 8px; + min-height: 15px; + background: rgba(0,0,0,.3); + -webkit-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; + border-radius: 5px +} + +::-webkit-scrollbar-thumb:hover { + background: rgba(0,0,0,.6) +} + +::-webkit-scrollbar-thumb:active { + background: rgba(0,0,0,.8) +} + +.at { + -webkit-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-backface-visibility: hidden; + backface-visibility: hidden +} + +.hid { + overflow: hidden +} + +.header { + position: relative; + height: 80px; + z-index: 3; + box-shadow: 0 2px 3px 0 rgba(0,0,0,.05) +} + +.header-logo { + overflow: hidden; + display: block; + width: 100%; + height:100%; +} + +.header-logo-img { + margin:20px 0; + height:40px; +} + +.nav-item { + position: relative; + float: left; + height: 80px; +} + + +.nav-item-a { + display: block; + margin-left: 0px; + padding: 22px 0; + width: 100%; + line-height: 37px; + height: 80px; + font-size: 16px; + color: #555; + text-align: center +} + +.nav-item.cur { + border-bottom:5px solid #108bed; +} + +.nav-item.cur:hover { + font-weight: bold; +} + +.nav-item:hover { + border-bottom:5px solid #108bed; +} + +.nav-item-child .nav-item-a:hover,.nav-item-child .nav-item-a.cur { + color: #555; + background-color: #f8fafc +} + +.nav-item-child .nav-item-a:hover>.nav-item-en,.nav-item-child .nav-item-a.cur>.nav-item-en { + color: #b5bfc6 +} + +.nav-item.cur>.nav-item-a,.nav-item:hover>.nav-item-a,.nav-item.cur>.nav-item-a>.nav-item-en,.nav-item:hover>.nav-item-a>.nav-item-en { + +} + +.nav-item-en { + display: block; + padding-top: 6px; + font-size: 12px; + color: #b5bfc6; + transition: all .2s cubic-bezier(0.215,.61,.355,1); + -moz-transition: all .2s cubic-bezier(0.215,.61,.355,1); + -webkit-transition: all .2s cubic-bezier(0.215,.61,.355,1) +} + +.nav-item-child { + position: absolute; + left: 0; + top: 100px; + display: none; + z-index: 2; + background-color: #fff +} + +.nav-item-child .nav-item-a { + margin-left: 0; + border: 1px solid #e7eff4; + border-top: 0 +} + +.nav-item,.nav-item-child { + width:120px; +} + +.header-more { + display: none; + margin-top: 6px; + padding: 16px 10px 0; + width: 44px; + height: 44px; + border-radius: 5px; + background-color: #45A1DE +} + +.header-more i { + display: block; + overflow: hidden; + padding: 3px 0; + width: 24px; + height: 12px; + border-top: 2px #fff solid; + border-bottom: 2px #fff solid +} + +.header-more i:after { + content: ''; + display: block; + height: 2px; + background-color: #fff +} + +.banner-owl { + font-size: 0 +} + +.banner-owl .owl-dot,.honor-owl .owl-dot { + border: 0; + background-color: rgba(0,0,0,.3) +} + +.banner-owl .owl-dot.active,.honor-owl .owl-dot.active { + border: 0; + background-color: #fff +} + +.banner-item { + display: block; + height: 700px; + background-repeat: no-repeat; + background-position: center 0; + background-size: cover +} + +.product-item { + display: block; + padding: 0; + text-align: center; + overflow: hidden; + margin:10px 0; + border-radius: 25px; + border:1px solid #eee; + background:#fff; + transition:All 0.6s ease-in-out; + -webkit-transition:All 0.6s ease-in-out; + -moz-transition:All 0.6s ease-in-out; + -o-transition:All 0.6s ease-in-out; +} +.product-item:hover{ + transform:scale(1.1); + -webkit-transform:scale(1.1); + -moz-transform:scale(1.1); + -o-transform:scale(1.1); + -ms-transform:scale(1.1); +} + +.product-item-img { + display: inline-block; + width:130px; + height:130px; + background-position: 50%; + background-size: 80%; + background-repeat: no-repeat; + transition: all .3s cubic-bezier(0.215,.61,.355,1); + -moz-transition: all .3s cubic-bezier(0.215,.61,.355,1); + -webkit-transition: all .3s cubic-bezier(0.215,.61,.355,1) +} + +.product-item1 .product-item-img {background-image: url(../images/item1.png);transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} +.product-item2 .product-item-img {background-image: url(../images/item2.png);transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} +.product-item3 .product-item-img {background-image: url(../images/item3.png);transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} +.product-item4 .product-item-img {background-image: url(../images/item4.png);transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} +.product-item5 .product-item-img {background-image: url(../images/item5.png);transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} +.product-item6 .product-item-img {background-image: url(../images/item6.png);transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} +.product-item7 .product-item-img {background-image: url(../images/item7.png);transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} +.product-item8 .product-item-img {background-image: url(../images/item8.png);transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} +.product-item9 .product-item-img {background-image: url(../images/item9.png);transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} + +.product-item1:hover{background:#07cf8b;border:1px solid #07cf8b;} +.product-item2:hover{background:#108bed;border:1px solid #108bed;} +.product-item3:hover{background:#89d04f;border:1px solid #89d04f;} +.product-item4:hover{background:#fd6a7f;border:1px solid #fd6a7f;} +.product-item5:hover{background:#13d0d2;border:1px solid #13d0d2;} +.product-item6:hover{background:#70c3ff;border:1px solid #70c3ff;} +.product-item7:hover{background:#13d0d2;border:1px solid #13d0d2;} +.product-item8:hover{background:#70c3ff;border:1px solid #70c3ff;} +.product-item9:hover{background:#89d04f;border:1px solid #89d04f;} + +.product-item1:hover .product-item-img {background-image: url(../images/item1-a-h.png)} +.product-item2:hover .product-item-img {background-image: url(../images/item2-a-h.png)} +.product-item3:hover .product-item-img {background-image: url(../images/item3-a-h.png)} +.product-item4:hover .product-item-img {background-image: url(../images/item4-a-h.png)} +.product-item5:hover .product-item-img {background-image: url(../images/item5-a-h.png)} +.product-item6:hover .product-item-img {background-image: url(../images/item6-a-h.png)} +.product-item7:hover .product-item-img {background-image: url(../images/item7-a-h.png)} +.product-item8:hover .product-item-img {background-image: url(../images/item8-a-h.png)} +.product-item9:hover .product-item-img {background-image: url(../images/item9-a-h.png)} + +.product-item-tit { + font-size: 22px; + font-weight: 400; + color: #0f1830; + margin:-20px 0 35px; + transition:All 0.5s ease-in-out; + -webkit-transition:All 0.5s ease-in-out; + -moz-transition:All 0.5s ease-in-out; + -o-transition:All 0.5s ease-in-out; +} + +.product-item:hover .product-item-tit{ + color:#fff; +} + +.product-item-tit-en { + margin-top: 10px; + margin-bottom: 30px; + font-size: 12px +} + +.product-item-txt { + line-height: 2em +} + +.productmsg-item{display: none;} +.productmsg-item img{display: block;width:50%;margin:0 auto;} +.productmsg-item h6{display: block;font-size: 22px;line-height: 50px;color:#0f1830;text-align: center;} +.productmsg-item span{display: block;text-align: center;font-size: 16px;line-height: 50px;color:#108bed;background:#fafbfc;width:80%;margin:0 auto;} +.productmsg-item p{display: block;width:80%;margin:20px auto;font-size: 16px;line-height: 30px;} +.productmsg-item p:first-letter{margin:0 0 0 3rem;} +.productmsg-sitem h6{font-size: 26px;line-height: 60px;display: block;text-align: center;color:#0f1830;} +.productmsg-sitem span{display: block;width:90%;font-size: 16px;line-height: 50px;background: #fafbfc;color:#108bed;margin:0 auto;text-align: center;} +.productmsg-sitem p{display: block;width:80%;margin:20px auto;font-size: 16px;line-height: 30px;} +.productmsg-sitem p:first-letter{margin:0 0 0 3rem;} + +.solution-item { + padding-top: 100px +} + +.solution-item-tit,.solution-item-txt { + font-family: '黑体'; + font-weight: 400; + color: #464a53 +} + +.solution-item-tit { + font-size: 40px +} + +.solution-item-txt { + margin: 16px 0 20px; + display: block; + font-size: 30px +} + +.solution-item-txt-en { + margin-bottom: 36px; + font-size: 12px; + line-height: 1.425em +} + +.case-box { + padding-bottom: 0 +} +.nop-box{ + padding:0; +} + +.case-item { + position: relative; + overflow: hidden; + display: block; + padding-left: 0; + padding-right: 0 +} + +.case-item-img { + display: block!important; + width: 100% +} + +.case-item-tit { + position: absolute; + left: 0; + bottom: 0; + display: block; + padding: 0 10px; + width: 100%; + height: 50px; + line-height: 50px; + font-size: 14px; + font-weight: 400; + color: #fff; + text-align: center; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + background-color: rgba(0,0,0,.5) +} + +.case-item-tit,.case-item-pop,.case-item-mask { + transition: all .3s cubic-bezier(0.215,.61,.355,1); + -moz-transition: all .3s cubic-bezier(0.215,.61,.355,1); + -webkit-transition: all .3s cubic-bezier(0.215,.61,.355,1) +} + +.case-item:hover .case-item-tit { + bottom: -50px +} + +.case-item:hover .case-item-pop { + top: 50%; + opacity: 1 +} + +.case-item:hover .case-item-mask { + background-color: rgba(0,0,0,.2) +} + +.case-item-mask { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0) +} + +.case-item-pop { + position: absolute; + opacity: 0; + left: 0; + top: 150%; + margin-top: -98px; + padding: 38px 10px 50px; + width: 100%; + height: 196px; + color: #fff; + text-align: center; + background-color: #108bed; +} + +.case-item-pop-tit { + display: block; + font-size: 16px; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis +} + +.case-item-pop-txt { + margin: 15px 0; + height: 40px; + font-size: 12px; + line-height: 20px; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical +} + +.case-item-pop-btn { + border: 1px solid #fff +} + +.case-item-pop-btn:after { + background-repeat: no-repeat; +} + +.news-box-nav { + display: inline-block +} + +.news-box-tit { + float: left; + margin: 0 25px; + padding: 8px 10px; + font-size: 16px; + color: #0f1830; + border-radius: 3px; +} + +.news-box-tit:hover,.news-box-tit.cur { + background: #108bed; + color:#fff; +} + +.news-item { + margin-left: auto; + margin-right: auto; + padding: 28px 20px 34px; + display: block; + max-width: 350px; + border-top: 5px solid transparent; +} +.diynews{ + background: #fff; + margin-bottom: 20px; +} + +.news-item,.news-item:hover .more-btn { + transition: all .6s cubic-bezier(0.215,.61,.355,1); + -moz-transition: all .6s cubic-bezier(0.215,.61,.355,1); + -webkit-transition: all .6s cubic-bezier(0.215,.61,.355,1) +} + +.news-item:hover { + border-top-color: #f5f5f5; +} + +.news-item:hover .news-item-tit{ + color:#108bed; +} + +.news-item-img { + width: 310px; + height: 130px; + border-radius: 3px +} + +.news-item-tit { + margin: 20px 0 16px; + display: block; + line-height: 20px; + font-size: 16px; + font-weight: bold; + color: #0f1830; + display: block; + overflow: hidden; + text-overflow:ellipsis; + white-space: nowrap; +} + +.news-item-txt { + height: 66px; + line-height: 22px; + overflow: hidden; + font-size: 14px; + color:#555; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical +} + +.news-item-info { + margin-top: 26px; + color: #b0b0b0 +} + +.news-item-month { + margin-bottom: 8px; + display: block; + font-size: 24px +} + +.news-item-year { + font-size: 12px +} + +.news-container { + margin-top: 50px +} + +.news-box .owl-carousel .owl-stage-outer { + margin: -10px -10px 0 -10px; + padding: 10px 10px 0 +} + +.news-container .owl-prev,.news-container .owl-next { + position: absolute; + left: -50px; + top: 50%; + margin-top: -20px; + padding: 13px 0 0 16px; + width: 40px; + height: 40px; + border-radius: 40px; + border: 1px solid #d1d1d1; + transition: all .2s cubic-bezier(0.215,.61,.355,1); + -moz-transition: all .2s cubic-bezier(0.215,.61,.355,1); + -webkit-transition: all .2s cubic-bezier(0.215,.61,.355,1) +} + +.news-container .owl-next { + left: auto; + right: -50px; + padding: 13px 0 0 9px +} + +.news-container .owl-prev:hover,.news-container .owl-next:hover { + border-color: #79b9e5; + background-color: #79b9e5 +} + +.news-container .owl-prev:hover:after,.news-container .owl-next:hover:after { + border-color: #fff +} + +.news-container .owl-prev:after,.news-container .owl-next:after { + content: ''; + display: block; + width: 14px; + height: 14px; + border: 1px solid #b6b6b6; + border-right: 0; + border-bottom: 0; + transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -webkit-transform: rotate(-45deg); + transition: all .2s cubic-bezier(0.215,.61,.355,1); + -moz-transition: all .2s cubic-bezier(0.215,.61,.355,1); + -webkit-transition: all .2s cubic-bezier(0.215,.61,.355,1) +} + +.news-container .owl-next:after { + transform: rotate(135deg); + -moz-transform: rotate(135deg); + -ms-transform: rotate(135deg); + -webkit-transform: rotate(135deg) +} + +.leader-item-people { + position: relative +} + +.leader-wraper .item { + padding-top: 36px; + padding-bottom: 36px +} + +.leader-item-line { + position: absolute; + right: 0; + top: 50%; + margin-top: -50px; + width: 1px; + height: 100px; + background-color: #eff3f7 +} + +.leaders-item:hover .leader-item-line { + background-color: #489fda +} + +.leader-item-portrait,.leader-item-infos { + display: inline-block +} + +.leader-item-infos { + margin-top: 45px +} + +.leader-item-portrait { + margin-right: 30px; + padding: 9px; + width: 176px; + height: 176px; + text-align: center; + vertical-align: top; + border-radius: 176px; + background-color: #eeeef2; + transition: all .6s cubic-bezier(0.215,.61,.355,1); + -moz-transition: all .6s cubic-bezier(0.215,.61,.355,1); + -webkit-transition: all .6s cubic-bezier(0.215,.61,.355,1) +} + +.leader-item-bg { + overflow: hidden; + width: 100%; + height: 100%; + border-radius: 158px; +} + +.leader-item-img { + width: 158px; + height: 158px; + border-radius: 158px +} + +.leader-item-name { + display: block; + margin-bottom: 16px; + font-size: 20px; + color: #464a53 +} + +.leader-item-info { + font-size: 12px +} + +.leader-item-introduce { + margin-top: 62px; + line-height: 24px; + font-size: 12px +} + +.leaders-item,.leader-item-name,.leader-item-info,.leader-item-introduce { + transition: all .2s cubic-bezier(0.215,.61,.355,1); + -moz-transition: all .2s cubic-bezier(0.215,.61,.355,1); + -webkit-transition: all .2s cubic-bezier(0.215,.61,.355,1) +} + +.leaders-item { + display: block +} + +.leaders-item:hover { + padding-left: 0; + background-color: #208bd3 +} + +.leaders-item:hover .leader-item-name,.leaders-item:hover .leader-item-info,.leaders-item:hover .leader-item-introduce { + color: #fff +} + +.contactus-item-info { + margin-bottom: 100px +} + +.contactus-icon-address,.contactus-icon-phone,.contactus-icon-email { + display: inline-block; + background-repeat: no-repeat +} + +.contactus-box .popbox-inputbox { + padding-left: 15px; + padding-right: 15px +} + +.contactus-box .input-message-box { + padding: 0 +} + +.contactus-box .popbox-con { + margin: auto; + width: auto +} + +.contactus-box .popbox-input-tip { + color: red +} + +.contactus-box input[type=text],textarea { + color: #444 +} + +.contactus-icon-box { + display: block; + height: 75px +} + +.contactus-icon-address { + width: 49px; + height: 57px; + background-repeat: no-repeat; +} + +.contactus-icon-phone { + margin-top: 4px; + width: 54px; + height: 53px; + background-repeat: no-repeat; +} + +.contactus-icon-email { + margin-top: 10px; + width: 53px; + height: 47px; + background-repeat: no-repeat; +} + +.contactus-item-txt { + font-size: 16px; + line-height: 20px; + color: #464a53 +} + +.input-name,.input-tel,.input-email,.input-message { + padding: 10px; + width: 100%; + height: 43px; + line-height: 22px; + border: 0; + border-bottom: 1px solid #b8b8b8 +} + +.input-message { + margin-top: 76px +} + +.submit-btn { + margin: 40px auto 0; + display: block; + width: 210px; + height: 50px; + line-height: 50px; + font-size: 16px; + color: #464a53; + text-align: center; + border-radius: 50px; + border: 1px solid #666970 +} + +.submit-btn:hover { + color: #fff; + border-color: #208bd3; + background-color: #208bd3 +} + +.map-box { + overflow: hidden; + width: 100%; + height: 380px; + border-style: solid; + border-width: 1px 0; + border-color: #ccc; + background-color: #fafafb +} + +.map-con,#mapContainer { + height: 380px; + width: 100% +} + +.info-title { + color: #fff; + font-size: 14px; + background-color: #427BBB; + line-height: 26px; + padding: 0 0 0 6px; + font-weight: lighter; + letter-spacing: 1px +} + +.info-content { + font: 12px Helvetica,'Hiragino Sans GB','Microsoft Yahei','微软雅黑',Arial; + padding: 4px; + color: #666; + line-height: 23px +} + +.info-content img { + float: left; + margin: 3px +} + +.cooperation-owl { + margin: 60px 0 +} + +.cooperation-owl .owl-stage-outer { + height: 40px +} + +.cooperation-item { + margin: 0 10px; + display: block; + width: 200px; + height: 40px +} + +.cooperation-item-img { + margin: 0 auto; + max-height: 40px +} + +.cooperation-owl .owl-prev,.cooperation-owl .owl-next { + position: absolute; + left: -30px; + top: 8px; + display: block; + width: 24px; + height: 24px; + border: 2px solid #c5c8cb; + border-right: 0; + border-bottom: 0; + transform: rotate(-45deg); + -moz-transform: rotate(-45deg); + -ms-transform: rotate(-45deg); + -webkit-transform: rotate(-45deg) +} + +.cooperation-owl .owl-next { + left: auto; + right: -30px; + transform: rotate(135deg); + -moz-transform: rotate(135deg); + -ms-transform: rotate(135deg); + -webkit-transform: rotate(135deg) +} + +.cooperation-owl .owl-prev:hover,.cooperation-owl .owl-next:hover { + border-color: #208bd3 +} + +.footer { + padding-top: 50px; + font-size: 12px; + background-color: #28292c +} + +.footer,.footer-icp { + color: #5e6164 +} + +.footer-logo { + margin-right: 28px; + width: 167px; + height: 38px +} + +.footer-logo-img { + width: 167px; + height: 38px +} + +.footer-item { + color: #878c91 +} + +.footer a:hover { + color: #ccc +} + +.footer-slogan { + margin-top: 8px +} + +.footer-icon { + float: left; + display: inline-block; + width: 36px; + height: 36px; + background-repeat: no-repeat +} + +.icon-wb,.icon-wx { + margin-left: 15px +} + +.icon-qq { + background-repeat: no-repeat; +} + +.icon-qq:hover { + background-repeat: no-repeat; +} + +.icon-wx { + background-repeat: no-repeat; +} + +.icon-wx:hover { + background-repeat: no-repeat; +} + +.icon-wb { + background-repeat: no-repeat; +} + +.icon-wb:hover { + background-repeat: no-repeat; +} + +.footer-copyright { + overflow: hidden; + padding: 22px 0; + line-height: 21px; + border-top: 1px solid #2e2f32 +} + +.cmmi { + overflow: hidden; + margin: 40px 0 20px +} + +.cmmi img { + height: 38px; + display: inline-block!important +} + +.cmmi img,.cmmi span { + float: left +} + +.cmmi span { + margin-left: 14px; + line-height: 38px +} + +.footer-info { + padding: 10px 0 +} + +.footer-login { + padding: 0 15px; + height: 30px; + line-height: 28px; + border-radius: 3px; + border: 1px solid #5e6164 +} + +.icon-hotline,.icon-user { + display: inline-block; + width: 21px; + height: 21px; + vertical-align: top; + background-repeat: no-repeat; +} + +.icon-user { + margin-right: 10px; + width: 36px; + height: 36px; + background-repeat: no-repeat; +} + +.footer-user { + line-height: 36px +} + +.footer-social-item { + position: relative; + display: inline-block; + font-size: 0; + z-index: 1 +} + +.footer-code { + position: absolute; + display: none; + left: 3px; + top: -150px; + width: 131px; + height: 140px; + z-index: 1 +} + +.back-top { + position: fixed; + display: none; + right: 50px; + bottom: 19px; + padding: 16px 13px 10px; + text-align: center; + border-radius: 5px; + color: #fff; + background: rgba(0,0,0,.4); + z-index: 10000 +} + +.back-top:hover { + background: rgba(0,0,0,.5) +} + +.back-top-icon { + display: block; + width: 12px; + height: 12px; + border: 2px solid #fff; + border-right: 0; + border-bottom: 0; + transform: rotate(45deg); + -moz-transform: rotate(45deg); + -ms-transform: rotate(45deg); + -webkit-transform: rotate(45deg) +} + +.popbox { + position: fixed; + z-index: 999; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,.5) +} + +.popbox-wrap,.agreement-wrap { + position: absolute; + z-index: 1000; + left: 0; + top: 50px; + padding: 70px 0; + width: 100%; + background-color: #3196da +} + +.agreement-wrap { + padding: 30px; + color: #000; + font-size: 14px; + line-height: 1.6; + background-color: #fff +} + +.indent2 { + text-indent: 2em +} + +.agreement-wrap h2 { + padding-bottom: 30px; + font-size: 20px; + text-align: center +} + +.agreement-wrap h3 { + margin-bottom: 12px; + font-size: 14px +} + +.agreement-wrap h2,.agreement-wrap h3,.agreement-wrap b,.agreement-wrap strong { + font-weight: 700 +} + +.agreement-wrap strong { + display: block +} + +.agreement-wrap p,.agreement-wrap strong { + margin-bottom: 8px +} + +.popbox-close,.agreement-close { + position: absolute; + right: 0; + top: 0; + width: 60px; + height: 60px; + color: #ccc; + font-size: 50px; + text-align: center +} + +.agreement-close-btn { + color: #8c8c8c; + font-size: 16px +} + +.agreement-close-btn:hover { + color: #666 +} + +.popbox-close:hover { + color: #fff +} + +.agreement-close:hover { + color: #aaa +} + +.popbox-header { + margin: 0 auto 60px; + display: block; + height: 107px; + max-width: 500px; +} + +.popbox-con { + margin: 0 auto; + width: 430px +} + +.popbox-inputbox { + position: relative; + color: #3e60b8 +} + +.popbox-inputbox,.popbox-forgot { + padding: 0 15px 15px +} + +.popbox-input,.popbox-login-btn,.popbox-getcode { + padding: 0 15px 0 52px; + height: 48px; + width: 100%; + line-height: 48px; + border-radius: 3px; + background-color: #fff +} + +.popbox-input.popbox-input-no,.popbox-getcode { + padding-left: 15px +} + +.popbox-forgot { + padding-top: 15px; + padding-bottom: 10px; + font-size: 12px; + color: #add5f2 +} + +.popbox-forgot-btn,.popbox-login-a { + color: #add5f2; + text-decoration: underline +} + +.popbox-forgot-btn:hover,.popbox-login-a:hover { + color: #fff +} + +.popbox-code { + width: 222px +} + +.popbox-code-img { + width: 144px; + height: 48px; + border-radius: 3px +} + +.popbox-login-btn,.popbox-getcode { + padding-left: 0; + padding-right: 0; + display: block; + font-size: 18px; + line-height: 48px; + color: #fffefe; + text-align: center; + background-color: #00dbaa +} + +.popbox-inputbox-f .popbox-input { + border: 1px solid #1585d4; + box-shadow: inset 0 0 5px 0 rgba(19,141,227,.004) +} + +.popbox-inputbox-f .icon-email { + background-repeat: no-repeat; +} + +.popbox-inputbox-f .icon-password { + background-repeat: no-repeat; +} + +.popbox-login-btn:hover { + color: #fff; + background-color: #00cc9e +} + +.pop-icon { + position: absolute; + left: 30px; + display: block; + width: 23px; + background-repeat: no-repeat; + background-position: 0 0 +} + +.icon-email { + top: 14px; + height: 20px; + background-repeat: no-repeat; +} + +.icon-password { + top: 11px; + height: 26px; + background-repeat: no-repeat; +} + +.popbox-input-tip { + display: none; + clear: both; + padding: 6px 12px 0; + line-height: 16px; + font-size: 12px; + color: #e2f0ff +} + +.popbox-input-tip:before { + content: '!'; + margin-right: 8px; + display: inline-block; + width: 16px; + height: 16px; + color: #3196da; + text-align: center; + border-radius: 16px; + background-color: #e1efff +} + +.popbox-login-href { + padding-top: 20px; + text-align: center +} + +.popbox-login-a { + font-size: 12px +} + +.popbox-getcode-box { + padding-bottom: 40px +} + +.popbox-getcode { + width: 144px; + font-size: 14px; + background-color: #5bb3f3 +} + +.popbox-getcode.cur { + cursor: default; + background-color: #9AACB9 +} + +.popbox-getcode.cur:hover { + color: #fffefe; + background-color: #9AACB9 +} + +.popbox-getcode:hover { + color: #fff; + background-color: #4eabef +} + +.reset-password { + margin: 0 auto 25px; + display: block; + height: 38px; + max-width: 291px +} + +.reset-password-two { + display: none +} + + +.agreement-btn { + color: #add5f2; + text-decoration: underline +} + +.agreement-btn:hover { + color: #fff +} + +.tip-pop { + position: fixed; + top: 50%; + left: 50%; + padding: 10px 30px; + font-size: 16px; + line-height: 1.25; + color: #fff; + opacity: 0; + border-radius: 5px; + background-color: #5cb85c; + z-index: 1001 +} + +.tip-pop.err-pop { + background-color: #ec971f +} + +@-webkit-keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0,100%,0); + transform: translate3d(0,100%,0) + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0,100%,0); + transform: translate3d(0,100%,0) + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@-webkit-keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0,-100%,0); + transform: translate3d(0,-100%,0) + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0,-100%,0); + transform: translate3d(0,-100%,0) + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@-webkit-keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%,0,0); + transform: translate3d(100%,0,0) + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%,0,0); + transform: translate3d(100%,0,0) + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@-webkit-keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%,0,0); + transform: translate3d(-100%,0,0) + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +@keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%,0,0); + transform: translate3d(-100%,0,0) + } + + 100% { + opacity: 1; + -webkit-transform: none; + transform: none + } +} + +.more-btn:after { + background-position: -33px 0px +} + +.news-item:hover .more-btn:after,.news-one:hover .more-btn:after,.more-btn:hover:after { + background-position: -33px -10px +} + +.case-item-pop-btn:after { + background-position: -33px -10px +} + +.contactus-icon-address { + background-position: -5px -20px +} + +.contactus-icon-phone { + background-position: 0px -80px +} + +.contactus-icon-email { + background-position: -1px -136px +} + +.icon-qq { + background-position: -18px -186px +} + +.icon-qq:hover { + background-position: -18px -225px +} + +.icon-wx { + background-position: -18px -264px +} + +.icon-wx:hover { + background-position: -18px -303px +} + +.icon-wb { + background-position: -18px -342px +} + +.icon-wb:hover { + background-position: -18px -381px +} + +.icon-hotline,.icon-user { + background-position: -33px -420px +} + +.icon-user { + background-position: -18px -444px +} + +.popbox-inputbox-f .icon-email { + background-position: -31px -483px +} + +.popbox-inputbox-f .icon-password { + background-position: -31px -506px +} + +.icon-email { + background-position: -31px -535px +} + +.icon-password { + background-position: -31px -558px +} + +.more-btn:after,.news-item:hover .more-btn:after,.news-one:hover .more-btn:after,.more-btn:hover:after,.case-item-pop-btn:after,.contactus-icon-address,.contactus-icon-phone,.contactus-icon-email,.icon-qq,.icon-qq:hover,.icon-wx,.icon-wx:hover,.icon-wb,.icon-wb:hover,.icon-hotline,.icon-user,.popbox-inputbox-f .icon-email,.popbox-inputbox-f .icon-password,.icon-email,.icon-password { + background-image: url(../images/common_z.png) +} + +.log-li{width:140px;} +.log-li:hover{background: none;border:none;} +.log-li a{float:left;margin: 28px 9px;font-size: 16px;padding:0 10px;line-height: 25px;text-align: center;} +.log-a{display: block;color: #555;} +.log-a:hover{color:#f30;} +.log-b{display: block;color: #fff;border-radius: 3px;background: #108bed;} +.log-b:hover{background: #f30;} +.ysright, .ysleft{padding:28px 30px;transition:All 0.4s ease-in-out;-webkit-transition:All 0.4s ease-in-out;-moz-transition:All 0.4s ease-in-out;-o-transition:All 0.4s ease-in-out;} +.ysright dl, .ysleft dl{border: 2px solid #108bed;border-radius: 100px;background: #fafbfc;margin: 0 20px;} +.ysright:hover span, .ysleft:hover span{color:#fd6a7f;} +.ysright:hover p, .ysleft:hover p{color:#555;} +.ysright dl{float:right;} +.ysright dd{float:right;} +.ysright span{text-align: right;} +.ysright p{text-align: right;} +.ysleft dl{float:left;} +.ysleft dd{float:left;} +.ysleft span{text-align: left;} +.ysleft p{text-align: left;} +.ysrdl1{margin-left:100px!important;} +.ysrdl2{margin-left:160px!important;} +.ysldl1{margin-right:100px!important;} +.ysldl2{margin-right:160px!important;} +.solution-box{margin-top:-560px!important;} +.solution-box span{display: block;font-size: 18px;font-weight: bold;color:#0f1830;line-height: 35px;margin-top:15px;} +.solution-box p{display: block;font-size: 14px;line-height: 20px;} +.solution-box img{margin:20px;transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} +.ysright:hover img, .ysleft:hover img{transform:rotateY(360deg);-webkit-transform:rotateY(360deg);-moz-transform:rotateY(360deg);-o-transform:rotateY(360deg);-ms-transform:rotateY(360deg);} +.guangdiv{width:100%;height:400px;background: url(../images/guangbg.jpg) no-repeat;background-position: 50%;overflow: hidden;} +.guangdiv h6{color:#fff;font-size: 30px;display: block;text-align: center;margin:90px 0 0 0;line-height: 80px;} +.guangdiv span{display: block;text-align: center;line-height: 30px;font-size: 18px;color:#fff;} +.guangdiv a{border-radius: 50px;display: block;width:120px;font-size: 18px;line-height: 40px;text-align: center;color:#0c45b6;margin:50px auto;background:rgba(255,255,255,0.8);} +.guangdiv a:hover{background: #fff;} +.guangdiv b{color:#89d04f;} +.hbpic{border-top:1px dashed #eee;border-right:1px dashed #eee;} +.hbpic div{background:#fff;border-bottom: 1px dashed #eee;border-left: 1px dashed #eee;} +.hbpic img{width:80%;margin:10px auto;display:block;transition:All 0.4s ease-in-out;-webkit-transition:All 0.4s ease-in-out;-moz-transition:All 0.4s ease-in-out;-o-transition:All 0.4s ease-in-out;} +.hbpic img:hover{z-index:1;transform:scale(1.1);-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);} +.footxxdiv{margin:0 0 50px;} +.ksdhdd{font-size: 14px;line-height: 30px;} +.ksdhdd a{padding:0 10px;} +.ksdhdd a:hover{background: #555;} +.yqljdd{font-size: 14px;line-height: 30px;} +.yqljdd a{background: #555;padding:0 10px;} +.lxfsdd{font-size: 14px;line-height: 30px;} +.lxfsdd p{color:#85888e;} + + + +.aside { + position: fixed; + top: 0; + right: 0; + width: 0px; + height: 100%; + z-index: 18; + background: url(../images/aside.jpg) center top repeat; + box-shadow: -2px 0 10px rgba(0, 0, 0, 0.1); +} +.aside ul { + margin-top: 100px; +} +.aside ul li a { + display: block; + margin-top: 30px; + text-align: center; + color: #fff; +} +.aside ul li img { + display: block; + text-align: center; + margin: 0 auto; +} +.aside ul li.consulting .img2 { + display: none; +} +.aside ul li.consulting span { + display: inline-block; + margin: 0 2px; + width: 5px; + height: 5px; + border-radius: 100%; + background: #fff; +} +.aside ul li.consulting span:nth-child(1) { + -webkit-animation: consulting 0.6s 0.07s infinite ease-in-out; + animation: consulting 0.6s 0.07s infinite ease-in-out; +} +.aside ul li.consulting span:nth-child(2) { + -webkit-animation: consulting 0.6s 0.14s infinite ease-in-out; + animation: consulting 0.6s 0.14s infinite ease-in-out; +} +.aside ul li.consulting span:nth-child(3) { + -webkit-animation: consulting 0.6s 0.21s infinite ease-in-out; + animation: consulting 0.6s 0.21s infinite ease-in-out; +} + @keyframes consulting { + 33% { + -webkit-transform: translateY(5px); + transform: translateY(5px); +} + 66% { + -webkit-transform: translateY(-5px); + transform: translateY(-5px); +} + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); +} +} + @-webkit-keyframes consulting { + 33% { + -webkit-transform: translateY(5px); + transform: translateY(5px); +} + 66% { + -webkit-transform: translateY(-5px); + transform: translateY(-5px); +} + 100% { + -webkit-transform: translateY(0); + transform: translateY(0); +} +} +.aside ul li.consulting.active { + background: #fff; + transition: 0.5s all; + -webkit-transition: 0.5s all; +} +.aside ul li.consulting.active a { + color: #3F82ED; +} +.aside ul li.consulting.active span { + background: #3F82ED; +} +.aside ul li.consulting.active .img1 { + display: none; +} +.aside ul li.consulting.active .img2 { + display: block; +} +.consulting_box { + width: 250px; + height: 100%; + background: #fff; + overflow: hidden; + z-index: 15; + position: fixed; + top: 0; + right: -250px; + box-shadow: -2px 0 10px rgba(0, 0, 0, .1); + transition: 0.8s all; + -webkit-transition: 0.8s all; +} +.consulting_box .title { + background: url(../images/002.png) center top no-repeat; + text-align: center; + padding: 26px 0 2px 0; + color: #fff; +} +.consulting_box .title_t1 { + font-size: 12px; +} +.consulting_box .title_t2 { + font-size: 16px; + margin: 5px 0; +} +.consulting_type { + padding: 40px 0; + border-bottom: solid 1px #399BEC; +} +.consulting_type_title { + padding-left: 30px; + font-size: 16px; + color: #333; +} +.consulting_type ul { + margin: 30px 0 20px 0; +} +.consulting_type ul li a { + display: block; + height: 40px; + line-height: 40px; + text-indent: 30px; + z-index: 2; + position: relative; + color: #666; + margin: 0; + text-align: left; + transition: 0.3s all; + -webkit-transition: 0.3s all; +} +.consulting_type ul li a img { + margin: 0; + display: inline-block; + padding-right: 30px; +} +.consulting_type ul li a .img2 { + display: none; +} +.consulting_type ul li a:before { + z-index: -1; + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: #3c9af2; + opacity: 0; + -webkit-transform: scale3d(1, 0.1, 1); + transform: scale3d(1, 0.1, 1); + -webkit-transition: -webkit-transform 0.4s, opacity 0.4s; + transition: transform 0.4s, opacity 0.4s; + -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1); + transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1); +} +.consulting_type ul li a, .consulting_type ul li a:before { + -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1); + transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1); +} +.consulting_type ul li a:hover:before { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); +} +.consulting_type ul li a:hover { + color: #fff; +} +.consulting_type ul li a:hover .img2 { + display: inline-block; +} +.consulting_type ul li a:hover .img1 { + display: none; +} +.consulting_box .problem { + padding-top: 40px; +} +.consulting_box .problem_title { + padding-left: 30px; + font-size: 16px; + color: #333; +} +.consulting_box .problem ul { + padding: 20px 0 0 30px; +} +.consulting_box .problem ul li { + margin-bottom: 8px; +} +.consulting_box .problem ul li a { + display: inline-block; +} +.consulting_box .problem ul li span { + display: inline-block; + width: 3px; + height: 3px; + border-radius: 100%; + background: #3c9af2; + margin: 3px 10px 3px 0; + animation: none; +} +.consulting_box .problem ul li a { + font-size: 12px; + color: #818181; +} +.consulting_box .problem ul li a:hover { + color: #3c9af2; +} +.consulting_type .time { + color: #818181; + font-size: 12px; + padding-left: 30px; +} +.consulting_box .close { + position: absolute; + top: 5px; + right: 8px; + cursor: pointer; +} +.consulting_box .close img { + transition: 0.4s all; + -webkit-transition: 0.4s all; +} +.consulting_box .close:hover img { + transform: rotate(180deg); + -webkit-transform: rotate(180deg); +} + +#close { + cursor: pointer; + position: fixed; + bottom: 18px; + right: 0; + width: 0px; + height: 40px; + z-index: 100; + /*background: #fff;*/ + background: url(../images/right-menu-icons.png) no-repeat -776px -15%; + -webkit-transition: all 0.4s; + transition: all 0.4s; +} +#show { + cursor: pointer; + position: fixed; + bottom: 18px; + right: 0; + width: 40px; + height: 40px; + z-index: 100; + /*background: #fff;*/ + background: url(../images/icon-list.jpg) no-repeat 0 -762px; + -webkit-transition: all 0.4s; + transition: all 0.4s; +} +#close:hover { + background: url(../images/right-menu-icons.png) no-repeat -776px -93px; + background-color: #fff; +} + + + + + +.kzf-mod-title p{line-height: 30px;} +.case_show_brief_title{margin-top:20px;font-size:18px;} +.glyphicon-paperclip{background: url(../images/hxz.png) no-repeat;background-position: 50%;display: block;height:100%;} +.introduce_list_title{line-height: 26px;} +.introduce_list_text{line-height: 25px;} +.mapdec{text-align: left;} +.mapdec .text{overflow: hidden;margin-top:35px;} +.mapdec .text h5{font-size: 18px;line-height: 35px;color:#0f1830;margin:0 0 0 40px;} +.mapdec .text span{font-size: 14px;line-height: 30px;display: block;margin-top:10px;overflow: hidden;} +.mapdec i{float:left;margin-right:10px;display:block;width:30px;height:30px;background:url(../images/contimg.png) no-repeat;background-size: 100% auto;} +.mapdec i.lx_dz{background-position: 0 0;} +.mapdec i.lx_dh{background-position: 0 -30px;} +.mapdec i.lx_yx{background-position: 0 -60px;} +.mapdec i.lx_wz{background-position: 0 -90px;} +.mapdec i.lx_gjz{background-position: 0 -120px;} +.mapdec .buslink{overflow: hidden;margin:20px 0 0 0;} +.buslink dd{display: block;overflow: hidden;font-size: 16px;line-height: 30px;color:#0f1830;} +.buslink b{display: block;font-size: 16px;line-height: 30px;margin:10px 0 0 40px;} +.buslink p{display: block;font-size: 16px;line-height: 25px;margin:0 0 0 40px;} +.technical_support_box_z_info{line-height: 22px;} + +.newspagelist{width:100%;overflow: hidden;} +.newspagelist a{display: block;overflow: hidden;padding:15px 0;-webkit-transition: all .5s;-moz-transition: all .5s;-ms-transition: all .5s;transition: all .5s;} +.newspagelist a:hover{background: #108bed;} +.newspagelist .kzf-mod-new-time-box{float:left;width:20%;margin:0 4% 0 0;} +.newspagelist .kzf-mod-new-time-date{font-size: 24px;font-weight: bold;color:#ccc;line-height: 40px;text-align: center;} +.newspagelist .kzf-mod-new-time-year{font-size: 16px;color:#ccc;line-height: 22px;text-align: center;} +.newspagelist .kzf-mod-new-box{float:left;width:70%;padding:0 0 0 4%;border-left:1px solid #eee;} +.newspagelist .kzf-mod-new-title{font-size: 16px;color: #0f1830;line-height: 30px;overflow: hidden;text-overflow:ellipsis;white-space: nowrap;} +.newspagelist .kzf-mod-new-text{font-size: 12px;line-height: 20px;color: #888;height: 40px;overflow: hidden;text-overflow: ellipsis;display: -webkit-box;-webkit-line-clamp: 3;-webkit-box-orient: vertical;} +.newspagelist a:hover .kzf-mod-new-time-date{color:#fff;} +.newspagelist a:hover .kzf-mod-new-time-year{color:#fff;} +.newspagelist a:hover .kzf-mod-new-title{color:#fff;} +.newspagelist a:hover .kzf-mod-new-text{color:#fff;} + +.contactipt{width:100%;margin:50px 0 0 0;overflow: hidden;background: #fafafa;} +.contactipt h6{display: block;font-size:20px;line-height: 50px;background: #108bed;color:#fff;} +.contactipt dl{width:100%;overflow: hidden;margin:20px 0 0 0;} +.contactipt span{display: block;font-size:16px;color:#0f1830;line-height: 30px;text-align: left;width:96%;margin:0 auto;} +.contactipt .contipt{width:96%;border:1px solid #ddd;padding:0 5px;font-size: 14px;color:#0f1830;line-height: 30px;} +.contactipt .conttext{width:96%;border:1px solid #ddd;padding:0 5px;font-size: 14px;color:#0f1830;line-height: 28px;height:114px;} +.contactipt .contbut{display: block;width:200px;font-size: 16px;color:#fff;background: #108bed;border:1px solid #108bed;border-radius: 3px;margin:30px auto;line-height: 35px;} +.contactipt .contbut:hover{background: #fff;background:transparent;color: #108bed;} + +.txfwitem{padding:20px 0;overflow: hidden;} +.txfwitem:nth-child(2n){background:#fafafa;} +.txfwitem img{display: block;width:80%;margin:0 auto;border:1px solid #eee;transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} +.txfwitem img:hover{transform:scale(1.1);-webkit-transform:scale(1.1);-moz-transform:scale(1.1);-o-transform:scale(1.1);-ms-transform:scale(1.1);} +.txfwitem h6{display: block;font-size: 26px;line-height: 50px;color:#108bed;font-weight: bold;margin:50px 0 0 0;text-align: center;} +.txfwitem p{display: block;font-size: 14px;line-height: 25px;color: #818181;margin:15px 0 0 0;} +.txfwitem p:first-letter{margin:0 0 0 2.5rem;} + +.pull-left{width:180px;height:80px;overflow: hidden;} + +.teseul li{overflow: hidden;height:193px;margin-bottom: 30px;} +.teseul img{display: block;margin:0 auto;} +.teseul span{font-size: 16px;color:#0f1830;line-height: 40px;text-align: center;display: block;} +.teseul p{font-size:14px;color:#0f1830;line-height:25px;position: absolute;width: 100%;height:193px;padding: 69px 20px 0;display: block;top:-193px;left: 0;border-top: 5px solid #f5f5f5;background: #fafbfc;text-align: center;-webkit-transition: all .5s;-moz-transition: all .5s;-ms-transition: all .5s;transition: all .5s;} +.teseul li:hover p{top:0;} + +.ggchidiv{width:100%;height:120px;background: url(../images/ggbg.jpg) center center no-repeat;margin:50px 0 0 0;transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} +.ggchidiv:hover{opacity: 0.8;} +.ggchidiv span{font-size:16px;color:#fff;line-height: 30px;display: block;text-align: center;padding:29px 0 0 0;} + +.indexnews .newdivtit{width:100%;border-radius: 15px;overflow: hidden;position: relative;} +.newdivtit img{margin:0 auto;max-height:180px;width:100%;display: block;border-radius: 15px;} +.newdivtit span{position: absolute;top:180px;left:0;width:100%;height:100%;background:rgba(10,70,180,0.7);padding-top:60px;line-height: 40px;font-size: 25px;text-align: center;color:#fff;transition:All 0.6s ease-in-out;-webkit-transition:All 0.6s ease-in-out;-moz-transition:All 0.6s ease-in-out;-o-transition:All 0.6s ease-in-out;} +.newdivtit i{display: block;font-size: 16px;font-style: normal;line-height: 30px;font-weight: normal;} +.newdivtit:hover span{top:0;} +.indexnews ul{width:100%;margin:20px 0 0;max-height:246px;overflow: hidden;} +.indexnews li{width:100%;background: #fff;margin:0 0 1px;padding:0;} +.indexnews li a{padding:0 5%;width:100%;max-width:500px!important;margin:0;font-size: 16px;line-height:40px;color:#0f1830;border:none;display: block;overflow: hidden;text-overflow:ellipsis;white-space: nowrap;} +.indexnews li a:hover{border:none;background: #f5f5f5;color:#108bed;} +.indexnews li a span{color:#888!important;} +.indexnews .newsmore{width:100%;background: #f5f5f5;font-size: 16px;line-height: 40px;text-align: center;color:#0f1830;display: block;} +.indexnews .newsmore:hover{background: #108bed;color:#fff;} + +.coop_show_list{width: 100%;height: 330px;background: #FFFFFF;border:1px solid #fff;box-shadow: 0 2px 15px 0 rgba(151,151,151,0.50);border-radius: 4px;margin: 30px 0 0 0;padding: 0;} +.coop_show_list:hover{box-shadow: 0 2px 15px 0 rgba(151,151,151,0.80);border:1px solid #eee;} +.coop-content-left {display: inline-block;height: 100%;padding: 15px 30px 0 0;} +.coop-content-left>p>span:nth-of-type(1) {display: block;font-size: 30px;color: #23242D;line-height: 42px;margin-bottom: 20px;} +.coop-content-left>p>span:nth-of-type(2) {color: #23242D;line-height: 30px;} +.coop-content-left-aDiv {position: absolute;width: 95%;height: 65px;border-top: 0.5px solid #D3D3D3;bottom: 10px;padding: 0 0 0 3px;font-size: 12px;font-weight: 600;line-height: 50px;} +.coop-content-right {display: inline-block;height: 100%;padding: 0;} +.coop-mch-logo {position: relative;width: 153px;height: 65px;top: 15px;right: -20px;box-shadow: 0 2px 5px 0 rgba(125, 125, 125, 0.53);} +.mch-back1 {background: url(../images/mch-back-1.png);background-size: cover;-webkit-background-size: cover;} +.mch-logo1 {background: url(../images/mch-logo-1.png);background-size: cover;-webkit-background-size: cover;} +.mch-back2 {background: url(../images/mch-back-2.png);background-size: cover;-webkit-background-size: cover;} +.mch-logo2 {background: url(../images/mch-logo-2.png);background-size: cover;-webkit-background-size: cover;} +.mch-back3 {background: url(../images/mch-back-3.png);background-size: cover;-webkit-background-size: cover;} +.mch-logo3 {background: url(../images/mch-logo-3.png);background-size: cover;-webkit-background-size: cover;} +.mch-back4 {background: url(../images/mch-back-4.png);background-size: cover;-webkit-background-size: cover;} +.mch-logo4 {background: url(../images/mch-logo-4.png);background-size: cover;-webkit-background-size: cover;} +.mch-back5 {background: url(../images/mch-back-5.png);background-size: cover;-webkit-background-size: cover;} +.mch-logo5 {background: url(../images/mch-logo-5.png);background-size: cover;-webkit-background-size: cover;} +.mch-back6 {background: url(../images/mch-back-6.png);background-size: cover;-webkit-background-size: cover;} +.mch-logo6 {background: url(../images/mch-logo-6.png);background-size: cover;-webkit-background-size: cover;} +.morecase{margin: 20px auto 0;} +.morecase h6{font-size: 22px;line-height: 70px;color: #0f1830;text-align: center;} +.morecase .row{border-top:1px dashed #eee;border-left: 1px dashed #eee;} +.morecase .row div{border-right:1px dashed #eee;border-bottom:1px dashed #eee;} +.morecase img{display: block;margin:10px auto;max-width: 90%;opacity: 0.7;-webkit-filter: grayscale(100%);-moz-filter: grayscale(100%);-ms-filter: grayscale(100%);-o-filter: grayscale(100%);filter: grayscale(100%);filter: gray;} +.morecase img:hover{opacity: 1;-webkit-filter: grayscale(0%);-moz-filter: grayscale(0%);-ms-filter: grayscale(0%);-o-filter: grayscale(0%);filter: grayscale(0%);} + +.newcpcon{overflow: hidden;} +.newcplist{overflow: hidden;text-align: left;} +.newcplist:nth-child(2n){margin:30px 0;padding:30px 0;border-top: 5px solid #fcfcfc;border-bottom: 5px solid #fcfcfc;} +.newcplist img{display: block;margin:0 auto;} +.newcplist h6{font-size: 18px;font-weight: bold;color:#0f1830;margin:30px 0 0 0;} +.newcplist h6:first-letter, .newcplist p:first-letter{margin:0 0 0 2.5rem;} +.newcplist p{font-size: 14px;line-height: 25px;padding:10px 20px;background: #f9f9f9;color:#888;margin:20px 0;} +.newcplist ul{overflow: hidden;width:95%;padding:0 0 0 5%;} +.newcplist li{float: left;width:50%;font-size: 14px;color: #0f1830;line-height: 25px;} + +.newfwcon{width:100%;overflow: hidden;background: url(../images/ggbg.jpg) top center no-repeat;padding:50px 0;} +.newfwcon .kzf-mod-product-list-title{font-size: 16px;font-weight: bold;color:#fff;text-align: center;} +.newfwcon:hover .kzf-mod-product-list-title{color:#fff;} +.newfwcon p{font-size: 12px;color:#fff;text-align: center;} +.newfwcon img{display: block;margin:0 auto;} + +.zspage{width:100%;overflow: hidden;} +.zsp_g .zsp_g_top.container, .zsp_e .container, .zsp_b .container{padding:0 0;} +.zspage .zsp_a{width:100%;overflow: hidden;background: #ff5b28;padding:30px 0;} +.zsp_a .a1{float: left;width:50%;margin:110px 0 0 0;} +.zsp_a .a2{float: right;width:45%;margin:0 0 0 0;} +.zspage .zsp_b{width:100%;overflow: hidden;background: url(../images/b4.png) no-repeat;background-position: 50%;background-size: 80%;padding:50px 0;} +.zsp_b .zsp_bt{display: block;margin: 0 auto;float: none;} +.zspage .zsp_c{padding:50px 0 0 0;} +.zspage .zsp_d{padding:50px 0;} +.zsp_d .zsp_d_con{margin:15px 0 0 0;} +.zspage .zsp_e{padding:50px 0;width:100%;overflow: hidden;background: #ffa628;} +.zspage .zsp_f{padding:50px 0;} +.zspage .zsp_g{padding:50px 0;background: #f0f1f3;width:100%;overflow: hidden;} +.zsp_g .zsp_g_con{margin:20px 0;} +.zsp_g_con img{margin:15px 0;} +.zsp_g .zsp_wd{display: block;margin: 0 auto;float: none;} +.zsp_g .zsp_wen{background: #ff5b28;border-radius: 10px;padding:20px 0 30px;} +.zsp_g .zsp_da{background: #58c1f0;border-radius: 10px;padding:20px 0 30px;} +.zsp_g span{display: block;font-size: 22px;line-height: 40px;color:#fff;font-weight: bold;} +.zsp_g span em{font-size: 30px;line-height: 40px;font-style: normal;color:#fff;margin:0 10px 0 0;} +.zsp_g i{display: block;font-size: 16px;line-height: 22px;padding:0 0 0 40px;text-align: left;font-style: normal;color:#fff;} +.zspage .zsp_h{padding:30px 0;overflow: hidden;} +.zsp_h .zsp_h_con{overflow: hidden;} +.zsp_h_con h6{display: block;font-size: 35px;line-height: 60px;color: #474747;text-align: center;font-weight: bold;} +.zsp_h_con dl{width:100%;overflow: hidden;margin:15px 0 0;border:2px solid #f0f1f3;} +.zsp_h_con dl span{float: left;width:35%;display: block;background: #f0f1f3;font-size: 16px;line-height: 46px;color: #474747;text-align: center;} +.zsp_h_con dl .contipt, .zsp_h_con dl .conttext{float: left;border:none;width: 65%;line-height: 46px;font-size: 16px;color: #474747;padding:0 5%;} +.zsp_h_con .contbut{width:100%;background: #108bed;font-size: 20px;color: #fff;line-height: 50px;border:none;margin:20px 0 0;} +.zsp_pic{width:100%;overflow: hidden;background: #f0f1f3;padding:30px 0;} +.zsp_pic div{width: 100%;height: 310px;overflow: hidden;position: relative;margin:0 auto;} +.zsp_pic ul{position: absolute;left: 0;top: 0;} +.zsp_pic ul li{float:left;border:5px solid #fff;margin: 0 0 0 20px;} +.zsp_pic ul li img{height: 300px;display: block;} +.zspage h6{display: block;font-size: 35px;line-height: 60px;color: #474747;text-align: center;font-weight: bold;} +.zspage p{display: block;font-size: 22px;line-height: 35px;color: #999;text-align: center;margin:15px 0;} +.zspage p em{color:#ff5b28;font-style: normal;} + +@media (max-width:1199px) { + #close {display: none;} + .box {padding-top: 30px!important;padding-bottom: 30px!important;} + .tit-en {font-size: 30px;} + .owl-nav {display: none!important;} + .footer {padding-top: 30px;} + .footer-copyright {padding: 15px 0;} + .product-item-bda,.product-item-bdm,.tit {margin-top: 40px;} + .tit {padding-left: 15px;padding-right: 15px;} + .solution-box {text-align: center;} + .solution-item .more-btn {float: none!important;} + .news-container {margin-top: 30px;} + .news-box-tit {margin: 0 15px;} + .leader-item-people {text-align: center;} + .input-message {margin-top: 60px;} + .submit-btn {margin-top: 30px;} + .contactus-item {margin-bottom: 30px;} + .contactus-item-info {margin-bottom: 50px;} + .nav-item, .nav-item-child{width:90px;} + .log-li{width:130px;} + .log-li a{margin:28px 6px;} + + .ystit{height:auto;width:auto;border:0;border-radius: 0;margin:auto;} + .solution-box{margin-top:0!important;} + .ystit p{margin:0;} + .productmsg-sitem{margin:35px 0 0 0;} + + .ysleft dl,.ysright dl{margin:0 20px!important;} +} + +@media (max-width:1090px) { + .nav-item.cur,.nav-item:hover,.nav-item-child .nav-item-a:hover,.nav-item-child .nav-item-a.cur {background-color: #fff;} + .nav-item.cur>.nav-item-a,.nav-item:hover>.nav-item-a,.nav-item-child .nav-item-a:hover,.nav-item-child .nav-item-a.cur,.nav-item-child .nav-item-a:hover>.nav-item-en,.nav-item-child .nav-item-a.cur>.nav-item-en,.nav-item.cur>.nav-item-a>.nav-item-en,.nav-item:hover>.nav-item-a>.nav-item-en {color: #075bb9;} + .header,.nav-item,.nav-item-a {height: 80px;} + .nav-item-child {top: 80px;} + .nav-item-child .nav-item-a {border-top: 0;border-bottom: 1px solid #e7eff4;} + .nav-item-zh {white-space: nowrap;} + .pull-left{width:160px;height:80px;} + .header-logo-img{margin:22.5px 0;height:35px;} +} + +@media (max-width:992px) { + .leader-item-line {display: none;} + .banner-item {height: 375px;} + .header {-webkit-box-shadow: 0 2px 10px rgba(0,0,0,.2);-moz-box-shadow: 0 2px 10px rgba(0,0,0,.2);box-shadow: 0 2px 10px rgba(0,0,0,.2);} + .nav-item {float: none;z-index: 2;width: 100%;} + .header {height: 56px;} + .nav-item,.nav-item-a {height: auto;} + .nav-item-a {padding: 0;line-height: 50px;color: #cceaff;} + .nav-item.cur,.nav-item:hover,.nav-item.cur>.nav-item-a,.nav-item:hover>.nav-item-a,.nav-item-child .nav-item-a:hover,.nav-item-child .nav-item-a.cur,.nav-item-child .nav-item-a:hover>.nav-item-en,.nav-item-child .nav-item-a.cur>.nav-item-en,.nav-item.cur>.nav-item-a>.nav-item-en,.nav-item:hover>.nav-item-a>.nav-item-en {font-weight: normal;color: #fff;background: rgba(20,140,240,1);border:none;} + .nav-item-child .nav-item-a {border: 0;background: rgba(20,140,240,1);} + .header-more {display: block!important;} + .nav {position: absolute;display: none;overflow: hidden;height: auto;left: 0;top: 56px;width: 100%;} + .nav-item-a {margin: 0;} + .nav-item {background: rgba(0,0,0,.7);} + .nav-item-child {position: static;width: 100%;background-color: transparent;} + .log-li{overflow: hidden;background: rgba(20,140,240,0.8);} + li.nav-item.log-li a{width:30%;margin:20px 10%;color:#fff;line-height: 30px;} + li.nav-item.log-li a.log-a{border:1px solid #fff;border-radius: 3px;} + li.nav-item.log-li a.log-b{background:rgba(0,0,0,.7);border:1px solid rgba(0,0,0,.7);} + .pull-left{height:56px;} + .header-logo-img{margin:10px 0;} + .nav-item-en{display: none;} +} + +@media (max-width:799px) { + .footer-social,.footer-items,.footer-icon,.footer-copyright .pull-right,.footer-copyright .pull-left {float: none!important;text-align: center;} + .footer-logo {margin-right: 10px;margin-bottom: 10px;vertical-align: top;} + .footer-logo,.footer-nav {float: none!important;display: inline-block;text-align: left;} + .footer-social {margin-bottom: 15px;} + .cmmi {margin: 10px 0;text-align: center;} + .cmmi img {float: none;} + .cmmi span {float: none;} +} + +@media (max-width:768px) { + .agreement-wrap {padding: 30px 15px;} + .aside{display:none;} + .banner-item {height: 275px;} +} + +@media (max-width:499px) { + .footer-slogan {text-align: center;} +} + +@media (max-width:430px) { + #show{display: none;} + .back-top{right:19px;} + + .popbox-close,.agreement-close {width: 40px;height: 40px;font-size: 34px;} + .popbox-con {width: 100%;} + .popbox-code {margin-bottom: 15px;width: 100%;} + + + .swiper-container{height:260px!important;} + .inner{width:100%!important;height:260px!important;} + .slide1 .xt1{width:90%!important;top:100px!important;} + .slide1 .bs2{left: 20%!important; top:40%!important;width:60%!important;} + .slide1 .bs3{left: 20%!important; top:54%!important;width:60%!important;} + .slide1 .y1{right:0%!important;top:40%!important;width:50%!important} + .slide1 .y2{left:0%!important;top:25%!important;width:50%!important;} + .slide1 .y3{top:-10%!important;left:30%!important;width:50%!important} + .slide2 .s0{width:60%!important;top:30%!important;left:20%!important;} + .slide2 .s1{width:60%!important;top:60%!important;left:20%!important;} + .slide2 .s3, .slide2 .s4{width:50%!important;height:auto!important;} + .slide2 .s5{width:20%!important;right:3%!important;} + .slide3 .zh-a-1{top:25%!important;width:60%!important;left:20%!important;} + .slide3 .zh-a-2{left:0!important;height:260px!important;} + .slide3 .zh-a-3{top:60%!important;left:20%!important;width:60%!important;} + .slide4 .b-y-1{top:10%!important;left:15%!important;} + .slide4 .b-y-2{width:40%!important;top:10%!important;left:55%!important;} + .slide4 .b-y-3{width:45%!important;top:10%!important;} + .slide4 .b-1{width:60%!important;top:30%!important;left:20%!important;} + .slide4 .b-3{width:60%!important;top:63%!important;left:20%!important;} + .slide4 .b-s-1{left:0!important;width:20%!important;} + .slide4 .b-s-2{left:15%!important;width:10%!important;} + .slide4 .b-s-3{left:40%!important;width:25%!important;} + .slide4 .b-s-4{left:30%!important;width:15%!important;} + .slide4 .b-s-5{left:70%!important;width:15%!important;} + .slide4 .b-s-6{left:80%!important;width:30%!important;} + .slide6 .ny1{width:50%!important;right:0!important;bottom:0!important;} + .slide6 .ny2{left:5%!important;top:25%!important;width:45%!important;} + .slide6 .ny3{left:10%!important;top:65%!important;width:37%!important;} + .slide7 .yx1{width:80%!important;right:7%!important;} + .slide7 .yx2{left:0!important;width:40%!important;} + .slide7 .yx3{right:0!important;width:40%!important;} + .slide7 .yx4{top:30%!important;left:15%!important;width:75%!important;} + .slide7 .yx5{left:0!important;width:35%!important;} + .slide8 .zs1{left:10%!important;top:26%!important;width:80%!important;} + .slide8 .zs2{display: none;} + + .banwuright{display: none!important;} + .banwuleft{top:15%!important;left:10%!important;} + .banwuleft span{text-align: center!important;} + .banwuleft a{margin:20px auto!important;} + + .product-item-img{width:100%;height:110px;} + .product-item{margin-top:0;} + .product-item-tit{font-size: 18px;} + .productmsg-sitem h6{line-height: 35px;margin:15px auto;} + .productmsg-sitem span{width:100%;} + .productmsg-sitem p{width:100%;} + .productmsg-item span{width:100%;} + .productmsg-item p{width:100%;} + + .ysright, .ysleft{padding:0;overflow: hidden;} + .solution-box img{margin:10px auto;display: block;float:none;} + .solution-box dd{float: none;} + .solution-box span{text-align: center;margin-top:0;} + .solution-box p{text-align: center;} + + .guangdiv h6{font-size: 18px;} + .guangdiv span{font-size: 12px;} + + .kzf-mod-product{padding:20px 0;} + .mapdec .text{margin:0;} + + .footxxdiv{margin:0 0 15px;} + + .page .main{padding:0!important;} + .price-section .section-heading{margin:0;} + .vcenter{margin-top:20px;} + .price-section{z-index: 0;} + .technical_support_box ul li a .text{width:100%;} + + .mapdec .text h5{font-size: 18px;line-height: 35px;color:#0f1830;margin:0 0 0 40px;} + .mapdec .text span{font-size: 15px;line-height: 20px;display: block;margin-top:10px;overflow: hidden;} + .mapdec i{float:left;margin-right:10px;display:block;width:20px;height:20px;background:url(../images/contimg.png) no-repeat;background-size: 100% auto;} + .mapdec i.lx_dz{background-position: 0 0;} + .mapdec i.lx_dh{background-position: 0 -20px;} + .mapdec i.lx_yx{background-position: 0 -40px;} + .mapdec i.lx_wz{background-position: 0 -60px;} + .mapdec i.lx_gjz{background-position: 0 -80px;} + .mapdec .buslink{overflow: hidden;margin:20px 0 0 0;} + .buslink dd{display: block;overflow: hidden;font-size: 16px;line-height: 20px;color:#0f1830;} + .buslink b{display: block;font-size: 16px;line-height: 20px;margin:10px 0 0 40px;} + .buslink p{display: block;font-size: 16px;line-height: 20px;margin:0 0 0 40px;} + + .newspagelist .kzf-mod-new-time-date{font-size: 16px;} + + .txfwitem h6{margin:0;} + .txfwitem img{margin:1rem auto;} + + .ggchidiv{margin:0;height:210px;background: url(../images/ggbg.jpg);} + + .news-container .row{margin:0!important;} + + .product-item-tit{overflow: hidden;text-overflow:ellipsis;white-space: nowrap;} + + .ysright dl,.ysleft dl{float:none;border:none;} + + .news-box-tit{margin:0 12px;} + + .indexnews .newsmore{margin:0 0 20px;} + + .coop-content-left>p>span:nth-of-type(1){margin:0;overflow: hidden;text-overflow:ellipsis;white-space: nowrap;} + .coop-content-left>p>span:nth-of-type(2){line-height: 22px!important;display: -webkit-box;-webkit-box-orient: vertical;-webkit-line-clamp: 8;overflow: hidden;} + .coop-mch-logo{right:30px;} + + .newfwcon{padding:35px 0;} + + .zsp_a .a1{margin:40px 0 0 0;} + .zspage .zsp_b, .zspage .zsp_c{padding:20px 0;} + .zspage h6{display: block;font-size: 25px;line-height: 45px;color: #474747;text-align: center;font-weight: bold;} + .zspage p{display: block;font-size: 14px;line-height: 22px;color: #999;text-align: center;margin:8px 0;} + +} + +@media (max-width:399px) { + .cmmi span {display: block;margin-left: 0;} +} + +@media (min-width:993px) { + .nav {display: block!important;} + .productmsg-sitem{margin:80px 0 0 0;} +} + +@media (min-width:640px) { + .leaders-item {padding-left: 40px;} +} + + + + + + + + + + + + + + + + + + + + + + diff --git a/template/index3/assets/css/idangerous.swiper2.7.6.css b/template/index3/assets/css/idangerous.swiper2.7.6.css new file mode 100644 index 0000000..96f2e86 --- /dev/null +++ b/template/index3/assets/css/idangerous.swiper2.7.6.css @@ -0,0 +1,125 @@ +/* + * Swiper 2.7.6 + * Mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/sliders/swiper/ + * + * Copyright 2010-2015, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under GPL & MIT + * + * Released on: February 11, 2015 +*/ +/* =============================================================== +Basic Swiper Styles +================================================================*/ +.swiper-container { + margin:0 auto; + position:relative; + overflow:hidden; + direction:ltr; + -webkit-backface-visibility:hidden; + -moz-backface-visibility:hidden; + -ms-backface-visibility:hidden; + -o-backface-visibility:hidden; + backface-visibility:hidden; + /* Fix of Webkit flickering */ + z-index:1; +} +.swiper-wrapper { + position:relative; + width:100%; + -webkit-transition-property:-webkit-transform, left, top; + -webkit-transition-duration:0s; + -webkit-transform:translate3d(0px,0,0); + -webkit-transition-timing-function:ease; + + -moz-transition-property:-moz-transform, left, top; + -moz-transition-duration:0s; + -moz-transform:translate3d(0px,0,0); + -moz-transition-timing-function:ease; + + -o-transition-property:-o-transform, left, top; + -o-transition-duration:0s; + -o-transform:translate3d(0px,0,0); + -o-transition-timing-function:ease; + -o-transform:translate(0px,0px); + + -ms-transition-property:-ms-transform, left, top; + -ms-transition-duration:0s; + -ms-transform:translate3d(0px,0,0); + -ms-transition-timing-function:ease; + + transition-property:transform, left, top; + transition-duration:0s; + transform:translate3d(0px,0,0); + transition-timing-function:ease; + + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.swiper-free-mode > .swiper-wrapper { + -webkit-transition-timing-function: ease-out; + -moz-transition-timing-function: ease-out; + -ms-transition-timing-function: ease-out; + -o-transition-timing-function: ease-out; + transition-timing-function: ease-out; + margin: 0 auto; +} +.swiper-slide { + float: left; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +/* IE10 Windows Phone 8 Fixes */ +.swiper-wp8-horizontal { + -ms-touch-action: pan-y; +} +.swiper-wp8-vertical { + -ms-touch-action: pan-x; +} + +/* =============================================================== +Your custom styles, here you need to specify container's and slide's +sizes, pagination, etc. +================================================================*/ +.swiper-container { + /* Specify Swiper's Size: */ + + /*width:200px; + height: 100px;*/ +} +.swiper-slide { + /* Specify Slides's Size: */ + + /*width: 100%; + height: 100%;*/ +} +.swiper-slide-active { + /* Specific active slide styling: */ + +} +.swiper-slide-visible { + /* Specific visible slide styling: */ + +} +/* =============================================================== +Pagination Styles +================================================================*/ +.swiper-pagination-switch { + /* Stylize pagination button: */ + +} +.swiper-active-switch { + /* Specific active button style: */ + +} +.swiper-visible-switch { + /* Specific visible button style: */ + +} diff --git a/template/index3/assets/css/owl.carousel_1107.css b/template/index3/assets/css/owl.carousel_1107.css new file mode 100644 index 0000000..e53501e --- /dev/null +++ b/template/index3/assets/css/owl.carousel_1107.css @@ -0,0 +1 @@ +.owl-carousel .animated{-webkit-animation-duration:1000ms;animation-duration:1000ms;-webkit-animation-fill-mode:both;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{-webkit-transition:height 500ms ease-in-out;-moz-transition:height 500ms ease-in-out;-ms-transition:height 500ms ease-in-out;-o-transition:height 500ms ease-in-out;transition:height 500ms ease-in-out}.owl-carousel{display:none;width:100%;-webkit-tap-highlight-color:transparent;position:relative;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y}.owl-carousel .owl-stage:after{content:".";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0px,0,0)}.owl-carousel .owl-controls .owl-nav .owl-prev,.owl-carousel .owl-controls .owl-nav .owl-next,.owl-carousel .owl-controls .owl-dot{cursor:pointer;cursor:hand;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-loaded{display:block}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel .owl-refresh .owl-item{display:none}.owl-carousel .owl-item{position:relative;min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-tap-highlight-color:transparent;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-item img{display:block;-webkit-transform-style:preserve-3d}.owl-carousel.owl-text-select-on .owl-item{-webkit-user-select:auto;-moz-user-select:auto;-ms-user-select:auto;user-select:auto}.owl-carousel .owl-grab{cursor:move;cursor:-webkit-grab;cursor:-o-grab;cursor:-ms-grab;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.no-js .owl-carousel{display:block}.owl-carousel .owl-item .owl-lazy{opacity:0;-webkit-transition:opacity 400ms ease;-moz-transition:opacity 400ms ease;-ms-transition:opacity 400ms ease;-o-transition:opacity 400ms ease;transition:opacity 400ms ease}.owl-carousel .owl-item img{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(../images/owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;-webkit-transition:scale 100ms ease;-moz-transition:scale 100ms ease;-ms-transition:scale 100ms ease;-o-transition:scale 100ms ease;transition:scale 100ms ease}.owl-carousel .owl-video-play-icon:hover{-webkit-transition:scale(1.3,1.3);-moz-transition:scale(1.3,1.3);-ms-transition:scale(1.3,1.3);-o-transition:scale(1.3,1.3);transition:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-tn,.owl-carousel .owl-video-playing .owl-video-play-icon{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;-webkit-background-size:contain;-moz-background-size:contain;-o-background-size:contain;background-size:contain;-webkit-transition:opacity 400ms ease;-moz-transition:opacity 400ms ease;-ms-transition:opacity 400ms ease;-o-transition:opacity 400ms ease;transition:opacity 400ms ease}.owl-carousel .owl-video-frame{position:relative;z-index:1} \ No newline at end of file diff --git a/template/index3/assets/css/style.css b/template/index3/assets/css/style.css new file mode 100644 index 0000000..4b4f556 --- /dev/null +++ b/template/index3/assets/css/style.css @@ -0,0 +1,258 @@ +@charset "utf-8"; +/* CSS Document */ +*{ + padding:0; + margin:0; +} +.wrap_top { + width: 100%; + overflow: hidden; + border-bottom: 1px solid #e5e5e5; + background: #f7f7f7; +} +.swiper-container{ + height:500px; +} +.arrow-left { + background: url(../images/arrows.png) no-repeat left top; + position: absolute; + left: 10px; + top: 50%; + margin-top: -15px; + width: 17px; + height: 30px; + z-index:10; +} +.arrow-right { + background: url(../images/arrows.png) no-repeat left bottom; + position: absolute; + right: 10px; + top: 50%; + margin-top: -15px; + width: 17px; + height: 30px; + z-index:10; +} +.pagination { + position: absolute; + left: 0; + text-align: center; + bottom:5px; + width: 100%; +} +.swiper-pagination-switch { + display: inline-block; + width: 10px; + height: 10px; + border-radius: 10px; + background: #108bed; + margin: 0 3px; + cursor: pointer; +} +.swiper-active-switch { + background: #fff; +} +.swiper-slide{ + position:relative; + opacity:0; + transition: opacity 0.7s ease-in-out; +} +.swiper-slide-active{ + opacity:1; +} +.swiper-slide .img{ + position:absolute; +} +.inner{ + position:relative; + display:block; + width:1000px; + height:500px; + margin:0 auto; +} +.slide1{ + background:url(../images/bannerbg.jpg) top center no-repeat; +} +.slide2{ + background-color: #07cf8b; +} +.slide3{ + background-color: #108ced; +} +.slide4{ + background-color: #13d0d2; +} +.slide5{ + background:url(../images/banbg2.jpg) top center no-repeat; +} +.slide6{ + background:#e63030 url(../images/ny_bg.png) top center no-repeat; +} +.slide7{ + background:url(../images/yx_0.jpg) top center no-repeat; +} +.slide8{ + background: #ff5b28; +} +.slide1 .xt1{left: 5%; top:150px;width:900px;} +.slide1 .bs2{left: 20%; top:170px;width:600px;} +.slide1 .bs3{left: 20%; top:260px;width:600px;} +.slide2 .s0{left: 25%; top:130px;width:500px;} +.slide2 .s1{left: 25%;top:300px;width:500px;} +.slide2 .s2{left: 50%;margin-left: -435px;top: 280px;} +.slide2 .s3{left: 0;bottom: 0px;z-index: 5;height:190px;} +.slide2 .s4{right: 0;bottom: 0px;z-index: 0;height: 160px;} +.slide2 .s5{right: 0;top: 10px;width:200px;} +.slide3 .zh-a-1{left: 25%;top: 130px;z-index: 9;width:500px;} +.slide3 .zh-a-3{left: 25%;top: 330px;width:500px;} +.slide3 .zh-a-2{left: 15%;top: 0;height:500px;} +.slide4 .b-1{left:25%;top: 130px;width:500px;} +.slide4 .b-2{left: 90px;top: 180px;} +.slide4 .b-3{left: 25%;top: 320px;width:500px;} +.slide4 .b-s-1{width: 100px; left: 50px; bottom:0px;} +.slide4 .b-s-2{left: 160px;width: 160px;bottom:0px;} +.slide4 .b-s-3{left: 390px;width: 58px;bottom:0px;} +.slide4 .b-s-4{right: 359px; width: 103px;bottom:0px;} +.slide4 .b-s-5{right: 250px;width: 150px;bottom:0px;} +.slide4 .b-s-6{right: 0;width: 65px;bottom:0px;} +.slide4 .b-y-1{top:40px;left:50%;} +.slide4 .b-y-2{top:40px;left:60%} +.slide4 .b-y-3{top:40px;left:0%;} +.slide6 .ny1{bottom:0;right:0;} +.slide6 .ny2{top:100px;left:0;} +.slide6 .ny3{top:340px;left:60px;} +.slide7 .yx1{bottom:0;right:80px;} +.slide7 .yx2{top:0;left:-100px;} +.slide7 .yx3{top:0;right:-100px;} +.slide7 .yx4{top:130px;left:180px;} +.slide7 .yx5{bottom:0;left:20px;} +.slide8 .zs1{left:0;top:140px;width:560px;} +.slide8 .zs2{right:0;top:50px;} + +.banwuleft{ + top: 33%; + left: 0; + width: 300px; + position: absolute; +} +.banwuleft span{ + display: block; + font-size: 40px; + line-height: 50px; + color: #fff; +} +.banwuleft a{ + width: 180px; + background: rgba(255,255,255,0.8); + display: block; + text-align: center; + border-radius: 30px; + line-height: 35px; + font-size: 16px; + color: #108bed; + margin-top: 20px; + transition:All 0.6s ease-in-out; + -webkit-transition:All 0.6s ease-in-out; + -moz-transition:All 0.6s ease-in-out; + -o-transition:All 0.6s ease-in-out; +} +.banwuleft a:hover{ + background: #fff; + color:#108bed; +} +.banwuright{ + position: absolute; + top: 23%; + right: 0; + width: 570px; + background:rgba(80,170,240,0.7); + padding: 30px 20px; + border-radius: 10px; + box-shadow:5px 5px 10px rgba(10,110,190,0.2); +} +.banwuright h6{ + font-size: 40px; + color: #fff; + padding-bottom: 20px; + display: block; + border-bottom: 1px solid #73c3ff; + line-height: 50px; +} +.banwuright span{ + font-size: 16px; + color: #fff; + font-weight: 700; + margin-top: 10px; + line-height: 35px; + display: block; +} +.banwuright p{ + font-size: 16px; + color: #fff; + line-height: 20px; + display: block; +} +.banwuright a{ + display: block; + width: 250px; + text-align: center; + background: #f1d025; + border-radius: 20px; + font-size: 16px; + color: #fff; + line-height: 35px; + margin-top: 30px; + transition:All 0.6s ease-in-out; + -webkit-transition:All 0.6s ease-in-out; + -moz-transition:All 0.6s ease-in-out; + -o-transition:All 0.6s ease-in-out; +} +.banwuright a:hover{ + background: #f6a90d; + color:#fff; +} + +.loop{ + animation-iteration-count: infinite;/*无限*/ + animation-timing-function:linear;/*平滑*/ +} +.targetBtn { + margin-top: 20px; + position: absolute; + bottom: 60px; + left: 352px; + z-index: 999; +} +.targetBtn a{ + height:50px; + border-radius:50px; + background:rgba(0,0,0,.5); + float:left; + line-height:50px; + text-align:center; + color:#fff; + text-decoration:none; + } +.targetBtn .a1{ + width:110px; + } +.targetBtn .a2{ + width:170px; + margin-left:15px; + } +/*自定义CSS动画*/ +.moveRight{-webkit-animation-name:moveRight;animation-name:moveRight} +@-webkit-keyframes moveRight{0%{opacity: 0;left:0px;} +10%{opacity: 1;} +100%{opacity: 1;left:550px;}} +@keyframes moveRight{0%{opacity: 0;left:0px;} +10%{opacity: 1;} +100%{opacity: 1;left:550px;}} + +.moveLeft{-webkit-animation-name:moveLeft;animation-name:moveLeft} +@-webkit-keyframes moveLeft{0%{opacity:0;left:390px;} +10%{opacity:1;} +100%{opacity:1;left:-370px;}} +@keyframes moveLeft{0%{opacity:0;left:390px;} +10%{opacity:1;} +100%{opacity:1;left:-370px;}} \ No newline at end of file diff --git a/template/index3/assets/images/002.png b/template/index3/assets/images/002.png new file mode 100644 index 0000000..a8cbf44 Binary files /dev/null and b/template/index3/assets/images/002.png differ diff --git a/template/index3/assets/images/arrows.png b/template/index3/assets/images/arrows.png new file mode 100644 index 0000000..c4f0633 Binary files /dev/null and b/template/index3/assets/images/arrows.png differ diff --git a/template/index3/assets/images/aside.jpg b/template/index3/assets/images/aside.jpg new file mode 100644 index 0000000..ac3bd49 Binary files /dev/null and b/template/index3/assets/images/aside.jpg differ diff --git a/template/index3/assets/images/b4.png b/template/index3/assets/images/b4.png new file mode 100644 index 0000000..85e49e2 Binary files /dev/null and b/template/index3/assets/images/b4.png differ diff --git a/template/index3/assets/images/banbg2.jpg b/template/index3/assets/images/banbg2.jpg new file mode 100644 index 0000000..4ebeb8a Binary files /dev/null and b/template/index3/assets/images/banbg2.jpg differ diff --git a/template/index3/assets/images/bannerbg.jpg b/template/index3/assets/images/bannerbg.jpg new file mode 100644 index 0000000..69c05aa Binary files /dev/null and b/template/index3/assets/images/bannerbg.jpg differ diff --git a/template/index3/assets/images/common_z.png b/template/index3/assets/images/common_z.png new file mode 100644 index 0000000..2555c5d Binary files /dev/null and b/template/index3/assets/images/common_z.png differ diff --git a/template/index3/assets/images/contimg.png b/template/index3/assets/images/contimg.png new file mode 100644 index 0000000..9062a60 Binary files /dev/null and b/template/index3/assets/images/contimg.png differ diff --git a/template/index3/assets/images/ggbg.jpg b/template/index3/assets/images/ggbg.jpg new file mode 100644 index 0000000..ba4f44e Binary files /dev/null and b/template/index3/assets/images/ggbg.jpg differ diff --git a/template/index3/assets/images/guangbg.jpg b/template/index3/assets/images/guangbg.jpg new file mode 100644 index 0000000..a8f408e Binary files /dev/null and b/template/index3/assets/images/guangbg.jpg differ diff --git a/template/index3/assets/images/hxz.png b/template/index3/assets/images/hxz.png new file mode 100644 index 0000000..3b7571f Binary files /dev/null and b/template/index3/assets/images/hxz.png differ diff --git a/template/index3/assets/images/icon-list.jpg b/template/index3/assets/images/icon-list.jpg new file mode 100644 index 0000000..8193506 Binary files /dev/null and b/template/index3/assets/images/icon-list.jpg differ diff --git a/template/index3/assets/images/item1-a-h.png b/template/index3/assets/images/item1-a-h.png new file mode 100644 index 0000000..d4ba766 Binary files /dev/null and b/template/index3/assets/images/item1-a-h.png differ diff --git a/template/index3/assets/images/item1.png b/template/index3/assets/images/item1.png new file mode 100644 index 0000000..38864df Binary files /dev/null and b/template/index3/assets/images/item1.png differ diff --git a/template/index3/assets/images/item2-a-h.png b/template/index3/assets/images/item2-a-h.png new file mode 100644 index 0000000..4238bb8 Binary files /dev/null and b/template/index3/assets/images/item2-a-h.png differ diff --git a/template/index3/assets/images/item2.png b/template/index3/assets/images/item2.png new file mode 100644 index 0000000..b589061 Binary files /dev/null and b/template/index3/assets/images/item2.png differ diff --git a/template/index3/assets/images/item3-a-h.png b/template/index3/assets/images/item3-a-h.png new file mode 100644 index 0000000..e67baa5 Binary files /dev/null and b/template/index3/assets/images/item3-a-h.png differ diff --git a/template/index3/assets/images/item3.png b/template/index3/assets/images/item3.png new file mode 100644 index 0000000..64f04eb Binary files /dev/null and b/template/index3/assets/images/item3.png differ diff --git a/template/index3/assets/images/item4-a-h.png b/template/index3/assets/images/item4-a-h.png new file mode 100644 index 0000000..67ae098 Binary files /dev/null and b/template/index3/assets/images/item4-a-h.png differ diff --git a/template/index3/assets/images/item4.png b/template/index3/assets/images/item4.png new file mode 100644 index 0000000..3c2f0a5 Binary files /dev/null and b/template/index3/assets/images/item4.png differ diff --git a/template/index3/assets/images/item5-a-h.png b/template/index3/assets/images/item5-a-h.png new file mode 100644 index 0000000..0008a29 Binary files /dev/null and b/template/index3/assets/images/item5-a-h.png differ diff --git a/template/index3/assets/images/item5.png b/template/index3/assets/images/item5.png new file mode 100644 index 0000000..16537f6 Binary files /dev/null and b/template/index3/assets/images/item5.png differ diff --git a/template/index3/assets/images/item6-a-h.png b/template/index3/assets/images/item6-a-h.png new file mode 100644 index 0000000..b733c34 Binary files /dev/null and b/template/index3/assets/images/item6-a-h.png differ diff --git a/template/index3/assets/images/item6.png b/template/index3/assets/images/item6.png new file mode 100644 index 0000000..9a0f1c3 Binary files /dev/null and b/template/index3/assets/images/item6.png differ diff --git a/template/index3/assets/images/item7-a-h.png b/template/index3/assets/images/item7-a-h.png new file mode 100644 index 0000000..0ec45f8 Binary files /dev/null and b/template/index3/assets/images/item7-a-h.png differ diff --git a/template/index3/assets/images/item7.png b/template/index3/assets/images/item7.png new file mode 100644 index 0000000..6159c47 Binary files /dev/null and b/template/index3/assets/images/item7.png differ diff --git a/template/index3/assets/images/item8-a-h.png b/template/index3/assets/images/item8-a-h.png new file mode 100644 index 0000000..b53a076 Binary files /dev/null and b/template/index3/assets/images/item8-a-h.png differ diff --git a/template/index3/assets/images/item8.png b/template/index3/assets/images/item8.png new file mode 100644 index 0000000..49b5cb9 Binary files /dev/null and b/template/index3/assets/images/item8.png differ diff --git a/template/index3/assets/images/item9-a-h.png b/template/index3/assets/images/item9-a-h.png new file mode 100644 index 0000000..18601f8 Binary files /dev/null and b/template/index3/assets/images/item9-a-h.png differ diff --git a/template/index3/assets/images/item9.png b/template/index3/assets/images/item9.png new file mode 100644 index 0000000..e0db918 Binary files /dev/null and b/template/index3/assets/images/item9.png differ diff --git a/template/index3/assets/images/ny_bg.png b/template/index3/assets/images/ny_bg.png new file mode 100644 index 0000000..9cf8771 Binary files /dev/null and b/template/index3/assets/images/ny_bg.png differ diff --git a/template/index3/assets/images/right-menu-icons.png b/template/index3/assets/images/right-menu-icons.png new file mode 100644 index 0000000..973a261 Binary files /dev/null and b/template/index3/assets/images/right-menu-icons.png differ diff --git a/template/index3/assets/images/yx_0.jpg b/template/index3/assets/images/yx_0.jpg new file mode 100644 index 0000000..dfb71f7 Binary files /dev/null and b/template/index3/assets/images/yx_0.jpg differ diff --git a/template/index3/assets/js/idangerous.swiper2.7.6.min.js b/template/index3/assets/js/idangerous.swiper2.7.6.min.js new file mode 100644 index 0000000..1392d50 --- /dev/null +++ b/template/index3/assets/js/idangerous.swiper2.7.6.min.js @@ -0,0 +1,16 @@ +/* + * Swiper 2.7.6 + * Mobile touch slider and framework with hardware accelerated transitions + * + * http://www.idangero.us/sliders/swiper/ + * + * Copyright 2010-2015, Vladimir Kharlampidi + * The iDangero.us + * http://www.idangero.us/ + * + * Licensed under GPL & MIT + * + * Released on: February 11, 2015 +*/ +var Swiper=function(a,b){"use strict";function c(a,b){return document.querySelectorAll?(b||document).querySelectorAll(a):jQuery(a,b)}function d(a){return"[object Array]"===Object.prototype.toString.apply(a)?!0:!1}function e(){var a=G-J;return b.freeMode&&(a=G-J),b.slidesPerView>D.slides.length&&!b.centeredSlides&&(a=0),0>a&&(a=0),a}function f(){function a(a){var c,d,e=function(){"undefined"!=typeof D&&null!==D&&(void 0!==D.imagesLoaded&&D.imagesLoaded++,D.imagesLoaded===D.imagesToLoad.length&&(D.reInit(),b.onImagesReady&&D.fireCallback(b.onImagesReady,D)))};a.complete?e():(d=a.currentSrc||a.getAttribute("src"),d?(c=new Image,c.onload=e,c.onerror=e,c.src=d):e())}var d=D.h.addEventListener,e="wrapper"===b.eventTarget?D.wrapper:D.container;if(D.browser.ie10||D.browser.ie11?(d(e,D.touchEvents.touchStart,p),d(document,D.touchEvents.touchMove,q),d(document,D.touchEvents.touchEnd,r)):(D.support.touch&&(d(e,"touchstart",p),d(e,"touchmove",q),d(e,"touchend",r)),b.simulateTouch&&(d(e,"mousedown",p),d(document,"mousemove",q),d(document,"mouseup",r))),b.autoResize&&d(window,"resize",D.resizeFix),g(),D._wheelEvent=!1,b.mousewheelControl){if(void 0!==document.onmousewheel&&(D._wheelEvent="mousewheel"),!D._wheelEvent)try{new WheelEvent("wheel"),D._wheelEvent="wheel"}catch(f){}D._wheelEvent||(D._wheelEvent="DOMMouseScroll"),D._wheelEvent&&d(D.container,D._wheelEvent,j)}if(b.keyboardControl&&d(document,"keydown",i),b.updateOnImagesReady){D.imagesToLoad=c("img",D.container);for(var h=0;h=e&&k[0]<=e+g&&k[1]>=f&&k[1]<=f+h&&(c=!0)}if(!c)return}N?((37===b||39===b)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),39===b&&D.swipeNext(),37===b&&D.swipePrev()):((38===b||40===b)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),40===b&&D.swipeNext(),38===b&&D.swipePrev())}}function j(a){var c=D._wheelEvent,d=0;if(a.detail)d=-a.detail;else if("mousewheel"===c)if(b.mousewheelControlForceToAxis)if(N){if(!(Math.abs(a.wheelDeltaX)>Math.abs(a.wheelDeltaY)))return;d=a.wheelDeltaX}else{if(!(Math.abs(a.wheelDeltaY)>Math.abs(a.wheelDeltaX)))return;d=a.wheelDeltaY}else d=a.wheelDelta;else if("DOMMouseScroll"===c)d=-a.detail;else if("wheel"===c)if(b.mousewheelControlForceToAxis)if(N){if(!(Math.abs(a.deltaX)>Math.abs(a.deltaY)))return;d=-a.deltaX}else{if(!(Math.abs(a.deltaY)>Math.abs(a.deltaX)))return;d=-a.deltaY}else d=Math.abs(a.deltaX)>Math.abs(a.deltaY)?-a.deltaX:-a.deltaY;if(b.freeMode){var f=D.getWrapperTranslate()+d;if(f>0&&(f=0),f<-e()&&(f=-e()),D.setWrapperTransition(0),D.setWrapperTranslate(f),D.updateActiveSlide(f),0===f||f===-e())return}else(new Date).getTime()-V>60&&(0>d?D.swipeNext():D.swipePrev()),V=(new Date).getTime();return b.autoplay&&D.stopAutoplay(!0),a.preventDefault?a.preventDefault():a.returnValue=!1,!1}function k(a){D.allowSlideClick&&(m(a),D.fireCallback(b.onSlideClick,D,a))}function l(a){m(a),D.fireCallback(b.onSlideTouch,D,a)}function m(a){if(a.currentTarget)D.clickedSlide=a.currentTarget;else{var c=a.srcElement;do{if(c.className.indexOf(b.slideClass)>-1)break;c=c.parentNode}while(c);D.clickedSlide=c}D.clickedSlideIndex=D.slides.indexOf(D.clickedSlide),D.clickedSlideLoopIndex=D.clickedSlideIndex-(D.loopedSlides||0)}function n(a){return D.allowLinks?void 0:(a.preventDefault?a.preventDefault():a.returnValue=!1,b.preventLinksPropagation&&"stopPropagation"in a&&a.stopPropagation(),!1)}function o(a){return a.stopPropagation?a.stopPropagation():a.returnValue=!1,!1}function p(a){if(b.preventLinks&&(D.allowLinks=!0),D.isTouched||b.onlyExternal)return!1;var c=a.target||a.srcElement;document.activeElement&&document.activeElement!==document.body&&document.activeElement!==c&&document.activeElement.blur();var d="input select textarea".split(" ");if(b.noSwiping&&c&&t(c))return!1;if(_=!1,D.isTouched=!0,$="touchstart"===a.type,!$&&"which"in a&&3===a.which)return D.isTouched=!1,!1;if(!$||1===a.targetTouches.length){D.callPlugins("onTouchStartBegin"),!$&&!D.isAndroid&&d.indexOf(c.tagName.toLowerCase())<0&&(a.preventDefault?a.preventDefault():a.returnValue=!1);var e=$?a.targetTouches[0].pageX:a.pageX||a.clientX,f=$?a.targetTouches[0].pageY:a.pageY||a.clientY;D.touches.startX=D.touches.currentX=e,D.touches.startY=D.touches.currentY=f,D.touches.start=D.touches.current=N?e:f,D.setWrapperTransition(0),D.positions.start=D.positions.current=D.getWrapperTranslate(),D.setWrapperTranslate(D.positions.start),D.times.start=(new Date).getTime(),I=void 0,b.moveStartThreshold>0&&(X=!1),b.onTouchStart&&D.fireCallback(b.onTouchStart,D,a),D.callPlugins("onTouchStartEnd")}}function q(a){if(D.isTouched&&!b.onlyExternal&&(!$||"mousemove"!==a.type)){var c=$?a.targetTouches[0].pageX:a.pageX||a.clientX,d=$?a.targetTouches[0].pageY:a.pageY||a.clientY;if("undefined"==typeof I&&N&&(I=!!(I||Math.abs(d-D.touches.startY)>Math.abs(c-D.touches.startX))),"undefined"!=typeof I||N||(I=!!(I||Math.abs(d-D.touches.startY)D.touches.startX)return}else if(!b.swipeToNext&&dD.touches.startY)return;if(a.assignedToSwiper)return void(D.isTouched=!1);if(a.assignedToSwiper=!0,b.preventLinks&&(D.allowLinks=!1),b.onSlideClick&&(D.allowSlideClick=!1),b.autoplay&&D.stopAutoplay(!0),!$||1===a.touches.length){if(D.isMoved||(D.callPlugins("onTouchMoveStart"),b.loop&&(D.fixLoop(),D.positions.start=D.getWrapperTranslate()),b.onTouchMoveStart&&D.fireCallback(b.onTouchMoveStart,D)),D.isMoved=!0,a.preventDefault?a.preventDefault():a.returnValue=!1,D.touches.current=N?c:d,D.positions.current=(D.touches.current-D.touches.start)*b.touchRatio+D.positions.start,D.positions.current>0&&b.onResistanceBefore&&D.fireCallback(b.onResistanceBefore,D,D.positions.current),D.positions.current<-e()&&b.onResistanceAfter&&D.fireCallback(b.onResistanceAfter,D,Math.abs(D.positions.current+e())),b.resistance&&"100%"!==b.resistance){var f;if(D.positions.current>0&&(f=1-D.positions.current/J/2,D.positions.current=.5>f?J/2:D.positions.current*f),D.positions.current<-e()){var g=(D.touches.current-D.touches.start)*b.touchRatio+(e()+D.positions.start);f=(J+g)/J;var h=D.positions.current-g*(1-f)/2,i=-e()-J/2;D.positions.current=i>h||0>=f?i:h}}if(b.resistance&&"100%"===b.resistance&&(D.positions.current>0&&(!b.freeMode||b.freeModeFluid)&&(D.positions.current=0),D.positions.current<-e()&&(!b.freeMode||b.freeModeFluid)&&(D.positions.current=-e())),!b.followFinger)return;if(b.moveStartThreshold)if(Math.abs(D.touches.current-D.touches.start)>b.moveStartThreshold||X){if(!X)return X=!0,void(D.touches.start=D.touches.current);D.setWrapperTranslate(D.positions.current)}else D.positions.current=D.positions.start;else D.setWrapperTranslate(D.positions.current);return(b.freeMode||b.watchActiveIndex)&&D.updateActiveSlide(D.positions.current),b.grabCursor&&(D.container.style.cursor="move",D.container.style.cursor="grabbing",D.container.style.cursor="-moz-grabbin",D.container.style.cursor="-webkit-grabbing"),Y||(Y=D.touches.current),Z||(Z=(new Date).getTime()),D.velocity=(D.touches.current-Y)/((new Date).getTime()-Z)/2,Math.abs(D.touches.current-Y)<2&&(D.velocity=0),Y=D.touches.current,Z=(new Date).getTime(),D.callPlugins("onTouchMoveEnd"),b.onTouchMove&&D.fireCallback(b.onTouchMove,D,a),!1}}}function r(a){if(I&&D.swipeReset(),!b.onlyExternal&&D.isTouched){D.isTouched=!1,b.grabCursor&&(D.container.style.cursor="move",D.container.style.cursor="grab",D.container.style.cursor="-moz-grab",D.container.style.cursor="-webkit-grab"),D.positions.current||0===D.positions.current||(D.positions.current=D.positions.start),b.followFinger&&D.setWrapperTranslate(D.positions.current),D.times.end=(new Date).getTime(),D.touches.diff=D.touches.current-D.touches.start,D.touches.abs=Math.abs(D.touches.diff),D.positions.diff=D.positions.current-D.positions.start,D.positions.abs=Math.abs(D.positions.diff);var c=D.positions.diff,d=D.positions.abs,f=D.times.end-D.times.start;5>d&&300>f&&D.allowLinks===!1&&(b.freeMode||0===d||D.swipeReset(),b.preventLinks&&(D.allowLinks=!0),b.onSlideClick&&(D.allowSlideClick=!0)),setTimeout(function(){"undefined"!=typeof D&&null!==D&&(b.preventLinks&&(D.allowLinks=!0),b.onSlideClick&&(D.allowSlideClick=!0))},100);var g=e();if(!D.isMoved&&b.freeMode)return D.isMoved=!1,b.onTouchEnd&&D.fireCallback(b.onTouchEnd,D,a),void D.callPlugins("onTouchEnd");if(!D.isMoved||D.positions.current>0||D.positions.current<-g)return D.swipeReset(),b.onTouchEnd&&D.fireCallback(b.onTouchEnd,D,a),void D.callPlugins("onTouchEnd");if(D.isMoved=!1,b.freeMode){if(b.freeModeFluid){var h,i=1e3*b.momentumRatio,j=D.velocity*i,k=D.positions.current+j,l=!1,m=20*Math.abs(D.velocity)*b.momentumBounceRatio;-g>k&&(b.momentumBounce&&D.support.transitions?(-m>k+g&&(k=-g-m),h=-g,l=!0,_=!0):k=-g),k>0&&(b.momentumBounce&&D.support.transitions?(k>m&&(k=m),h=0,l=!0,_=!0):k=0),0!==D.velocity&&(i=Math.abs((k-D.positions.current)/D.velocity)),D.setWrapperTranslate(k),D.setWrapperTransition(i),b.momentumBounce&&l&&D.wrapperTransitionEnd(function(){_&&(b.onMomentumBounce&&D.fireCallback(b.onMomentumBounce,D),D.callPlugins("onMomentumBounce"),D.setWrapperTranslate(h),D.setWrapperTransition(300))}),D.updateActiveSlide(k)}return(!b.freeModeFluid||f>=300)&&D.updateActiveSlide(D.positions.current),b.onTouchEnd&&D.fireCallback(b.onTouchEnd,D,a),void D.callPlugins("onTouchEnd")}H=0>c?"toNext":"toPrev","toNext"===H&&300>=f&&(30>d||!b.shortSwipes?D.swipeReset():D.swipeNext(!0,!0)),"toPrev"===H&&300>=f&&(30>d||!b.shortSwipes?D.swipeReset():D.swipePrev(!0,!0));var n=0;if("auto"===b.slidesPerView){for(var o,p=Math.abs(D.getWrapperTranslate()),q=0,r=0;rp){n=o;break}n>J&&(n=J)}else n=F*b.slidesPerView;"toNext"===H&&f>300&&(d>=n*b.longSwipesRatio?D.swipeNext(!0,!0):D.swipeReset()),"toPrev"===H&&f>300&&(d>=n*b.longSwipesRatio?D.swipePrev(!0,!0):D.swipeReset()),b.onTouchEnd&&D.fireCallback(b.onTouchEnd,D,a),D.callPlugins("onTouchEnd")}}function s(a,b){return a&&a.getAttribute("class")&&a.getAttribute("class").indexOf(b)>-1}function t(a){var c=!1;do s(a,b.noSwipingClass)&&(c=!0),a=a.parentElement;while(!c&&a.parentElement&&!s(a,b.wrapperClass));return!c&&s(a,b.wrapperClass)&&s(a,b.noSwipingClass)&&(c=!0),c}function u(a,b){var c,d=document.createElement("div");return d.innerHTML=b,c=d.firstChild,c.className+=" "+a,c.outerHTML}function v(a,c,d){function e(){var f=+new Date,l=f-g;h+=i*l/(1e3/60),k="toNext"===j?h>a:a>h,k?(D.setWrapperTranslate(Math.ceil(h)),D._DOMAnimating=!0,window.setTimeout(function(){e()},1e3/60)):(b.onSlideChangeEnd&&("to"===c?d.runCallbacks===!0&&D.fireCallback(b.onSlideChangeEnd,D,j):D.fireCallback(b.onSlideChangeEnd,D,j)),D.setWrapperTranslate(a),D._DOMAnimating=!1)}var f="to"===c&&d.speed>=0?d.speed:b.speed,g=+new Date;if(D.support.transitions||!b.DOMAnimation)D.setWrapperTranslate(a),D.setWrapperTransition(f);else{var h=D.getWrapperTranslate(),i=Math.ceil((a-h)/f*(1e3/60)),j=h>a?"toNext":"toPrev",k="toNext"===j?h>a:a>h;if(D._DOMAnimating)return;e()}D.updateActiveSlide(a),b.onSlideNext&&"next"===c&&d.runCallbacks===!0&&D.fireCallback(b.onSlideNext,D,a),b.onSlidePrev&&"prev"===c&&d.runCallbacks===!0&&D.fireCallback(b.onSlidePrev,D,a),b.onSlideReset&&"reset"===c&&d.runCallbacks===!0&&D.fireCallback(b.onSlideReset,D,a),"next"!==c&&"prev"!==c&&"to"!==c||d.runCallbacks!==!0||w(c)}function w(a){if(D.callPlugins("onSlideChangeStart"),b.onSlideChangeStart)if(b.queueStartCallbacks&&D.support.transitions){if(D._queueStartCallbacks)return;D._queueStartCallbacks=!0,D.fireCallback(b.onSlideChangeStart,D,a),D.wrapperTransitionEnd(function(){D._queueStartCallbacks=!1})}else D.fireCallback(b.onSlideChangeStart,D,a);if(b.onSlideChangeEnd)if(D.support.transitions)if(b.queueEndCallbacks){if(D._queueEndCallbacks)return;D._queueEndCallbacks=!0,D.wrapperTransitionEnd(function(c){D.fireCallback(b.onSlideChangeEnd,c,a)})}else D.wrapperTransitionEnd(function(c){D.fireCallback(b.onSlideChangeEnd,c,a)});else b.DOMAnimation||setTimeout(function(){D.fireCallback(b.onSlideChangeEnd,D,a)},10)}function x(){var a=D.paginationButtons;if(a)for(var b=0;b0&&0===D.slides.length&&D.loadSlides(),b.loop&&D.createLoop(),D.init(),f(),b.pagination&&D.createPagination(!0),b.loop||b.initialSlide>0?D.swipeTo(b.initialSlide,0,!1):D.updateActiveSlide(0),b.autoplay&&D.startAutoplay(),D.centerIndex=D.activeIndex,b.onSwiperCreated&&D.fireCallback(b.onSwiperCreated,D),D.callPlugins("onSwiperCreated")}if(!document.body.outerHTML&&document.body.__defineGetter__&&HTMLElement){var C=HTMLElement.prototype;C.__defineGetter__&&C.__defineGetter__("outerHTML",function(){return(new XMLSerializer).serializeToString(this)})}if(window.getComputedStyle||(window.getComputedStyle=function(a){return this.el=a,this.getPropertyValue=function(b){var c=/(\-([a-z]){1})/g;return"float"===b&&(b="styleFloat"),c.test(b)&&(b=b.replace(c,function(){return arguments[2].toUpperCase()})),a.currentStyle[b]?a.currentStyle[b]:null},this}),Array.prototype.indexOf||(Array.prototype.indexOf=function(a,b){for(var c=b||0,d=this.length;d>c;c++)if(this[c]===a)return c;return-1}),(document.querySelectorAll||window.jQuery)&&"undefined"!=typeof a&&(a.nodeType||0!==c(a).length)){var D=this;D.touches={start:0,startX:0,startY:0,current:0,currentX:0,currentY:0,diff:0,abs:0},D.positions={start:0,abs:0,diff:0,current:0},D.times={start:0,end:0},D.id=(new Date).getTime(),D.container=a.nodeType?a:c(a)[0],D.isTouched=!1,D.isMoved=!1,D.activeIndex=0,D.centerIndex=0,D.activeLoaderIndex=0,D.activeLoopIndex=0,D.previousIndex=null,D.velocity=0,D.snapGrid=[],D.slidesGrid=[],D.imagesToLoad=[],D.imagesLoaded=0,D.wrapperLeft=0,D.wrapperRight=0,D.wrapperTop=0,D.wrapperBottom=0,D.isAndroid=navigator.userAgent.toLowerCase().indexOf("android")>=0;var E,F,G,H,I,J,K={eventTarget:"wrapper",mode:"horizontal",touchRatio:1,speed:300,freeMode:!1,freeModeFluid:!1,momentumRatio:1,momentumBounce:!0,momentumBounceRatio:1,slidesPerView:1,slidesPerGroup:1,slidesPerViewFit:!0,simulateTouch:!0,followFinger:!0,shortSwipes:!0,longSwipesRatio:.5,moveStartThreshold:!1,onlyExternal:!1,createPagination:!0,pagination:!1,paginationElement:"span",paginationClickable:!1,paginationAsRange:!0,resistance:!0,scrollContainer:!1,preventLinks:!0,preventLinksPropagation:!1,noSwiping:!1,noSwipingClass:"swiper-no-swiping",initialSlide:0,keyboardControl:!1,mousewheelControl:!1,mousewheelControlForceToAxis:!1,useCSS3Transforms:!0,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,loop:!1,loopAdditionalSlides:0,roundLengths:!1,calculateHeight:!1,cssWidthAndHeight:!1,updateOnImagesReady:!0,releaseFormElements:!0,watchActiveIndex:!1,visibilityFullFit:!1,offsetPxBefore:0,offsetPxAfter:0,offsetSlidesBefore:0,offsetSlidesAfter:0,centeredSlides:!1,queueStartCallbacks:!1,queueEndCallbacks:!1,autoResize:!0,resizeReInit:!1,DOMAnimation:!0,loader:{slides:[],slidesHTMLType:"inner",surroundGroups:1,logic:"reload",loadAllSlides:!1},swipeToPrev:!0,swipeToNext:!0,slideElement:"div",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",wrapperClass:"swiper-wrapper",paginationElementClass:"swiper-pagination-switch",paginationActiveClass:"swiper-active-switch",paginationVisibleClass:"swiper-visible-switch"};b=b||{};for(var L in K)if(L in b&&"object"==typeof b[L])for(var M in K[L])M in b[L]||(b[L][M]=K[L][M]);else L in b||(b[L]=K[L]);D.params=b,b.scrollContainer&&(b.freeMode=!0,b.freeModeFluid=!0),b.loop&&(b.resistance="100%");var N="horizontal"===b.mode,O=["mousedown","mousemove","mouseup"];D.browser.ie10&&(O=["MSPointerDown","MSPointerMove","MSPointerUp"]),D.browser.ie11&&(O=["pointerdown","pointermove","pointerup"]),D.touchEvents={touchStart:D.support.touch||!b.simulateTouch?"touchstart":O[0],touchMove:D.support.touch||!b.simulateTouch?"touchmove":O[1],touchEnd:D.support.touch||!b.simulateTouch?"touchend":O[2]};for(var P=D.container.childNodes.length-1;P>=0;P--)if(D.container.childNodes[P].className)for(var Q=D.container.childNodes[P].className.split(/\s+/),R=0;R=0;c--)a===D.slides[c]&&(b=c);return b},a.isActive=function(){return a.index()===D.activeIndex?!0:!1},a.swiperSlideDataStorage||(a.swiperSlideDataStorage={}),a.getData=function(b){return a.swiperSlideDataStorage[b]},a.setData=function(b,c){return a.swiperSlideDataStorage[b]=c,a},a.data=function(b,c){return"undefined"==typeof c?a.getAttribute("data-"+b):(a.setAttribute("data-"+b,c),a)},a.getWidth=function(b,c){return D.h.getWidth(a,b,c)},a.getHeight=function(b,c){return D.h.getHeight(a,b,c)},a.getOffset=function(){return D.h.getOffset(a)},a},D.calcSlides=function(a){var c=D.slides?D.slides.length:!1;D.slides=[],D.displaySlides=[];for(var d=0;d=0;d--)D._extendSwiperSlide(D.slides[d]);c!==!1&&(c!==D.slides.length||a)&&(h(),g(),D.updateActiveSlide(),D.params.pagination&&D.createPagination(),D.callPlugins("numberOfSlidesChanged"))},D.createSlide=function(a,c,d){c=c||D.params.slideClass,d=d||b.slideElement;var e=document.createElement(d);return e.innerHTML=a||"",e.className=c,D._extendSwiperSlide(e)},D.appendSlide=function(a,b,c){return a?a.nodeType?D._extendSwiperSlide(a).append():D.createSlide(a,b,c).append():void 0},D.prependSlide=function(a,b,c){return a?a.nodeType?D._extendSwiperSlide(a).prepend():D.createSlide(a,b,c).prepend():void 0},D.insertSlideAfter=function(a,b,c,d){return"undefined"==typeof a?!1:b.nodeType?D._extendSwiperSlide(b).insertAfter(a):D.createSlide(b,c,d).insertAfter(a)},D.removeSlide=function(a){if(D.slides[a]){if(b.loop){if(!D.slides[a+D.loopedSlides])return!1;D.slides[a+D.loopedSlides].remove(),D.removeLoopedSlides(),D.calcSlides(),D.createLoop()}else D.slides[a].remove();return!0}return!1},D.removeLastSlide=function(){return D.slides.length>0?(b.loop?(D.slides[D.slides.length-1-D.loopedSlides].remove(),D.removeLoopedSlides(),D.calcSlides(),D.createLoop()):D.slides[D.slides.length-1].remove(),!0):!1},D.removeAllSlides=function(){for(var a=D.slides.length,b=D.slides.length-1;b>=0;b--)D.slides[b].remove(),b===a-1&&D.setWrapperTranslate(0)},D.getSlide=function(a){return D.slides[a]},D.getLastSlide=function(){return D.slides[D.slides.length-1]},D.getFirstSlide=function(){return D.slides[0]},D.activeSlide=function(){return D.slides[D.activeIndex]},D.fireCallback=function(){var a=arguments[0];if("[object Array]"===Object.prototype.toString.call(a))for(var c=0;c0&&(m.style.paddingLeft="",m.style.paddingRight="",m.style.paddingTop="",m.style.paddingBottom=""),m.style.width="",m.style.height="",b.offsetPxBefore>0&&(N?D.wrapperLeft=b.offsetPxBefore:D.wrapperTop=b.offsetPxBefore),b.offsetPxAfter>0&&(N?D.wrapperRight=b.offsetPxAfter:D.wrapperBottom=b.offsetPxAfter),b.centeredSlides&&(N?(D.wrapperLeft=(J-this.slides[0].getWidth(!0,b.roundLengths))/2,D.wrapperRight=(J-D.slides[D.slides.length-1].getWidth(!0,b.roundLengths))/2):(D.wrapperTop=(J-D.slides[0].getHeight(!0,b.roundLengths))/2,D.wrapperBottom=(J-D.slides[D.slides.length-1].getHeight(!0,b.roundLengths))/2)),N?(D.wrapperLeft>=0&&(m.style.paddingLeft=D.wrapperLeft+"px"),D.wrapperRight>=0&&(m.style.paddingRight=D.wrapperRight+"px")):(D.wrapperTop>=0&&(m.style.paddingTop=D.wrapperTop+"px"),D.wrapperBottom>=0&&(m.style.paddingBottom=D.wrapperBottom+"px")),k=0;var p=0;for(D.snapGrid=[],D.slidesGrid=[],h=0,l=0;lJ){if(b.slidesPerViewFit)D.snapGrid.push(k+D.wrapperLeft),D.snapGrid.push(k+q-J+D.wrapperLeft);else for(var u=0;u<=Math.floor(q/(J+D.wrapperLeft));u++)D.snapGrid.push(0===u?k+D.wrapperLeft:k+D.wrapperLeft+J*u);D.slidesGrid.push(k+D.wrapperLeft)}else D.snapGrid.push(p),D.slidesGrid.push(p);p+=q/2+t/2}else{if(q>J)if(b.slidesPerViewFit)D.snapGrid.push(k),D.snapGrid.push(k+q-J);else if(0!==J)for(var v=0;v<=Math.floor(q/J);v++)D.snapGrid.push(k+J*v);else D.snapGrid.push(k);else D.snapGrid.push(k);D.slidesGrid.push(k)}k+=q,n+=f,o+=g}b.calculateHeight&&(D.height=h),N?(G=n+D.wrapperRight+D.wrapperLeft,b.cssWidthAndHeight&&"height"!==b.cssWidthAndHeight||(m.style.width=n+"px"),b.cssWidthAndHeight&&"width"!==b.cssWidthAndHeight||(m.style.height=D.height+"px")):(b.cssWidthAndHeight&&"height"!==b.cssWidthAndHeight||(m.style.width=D.width+"px"),b.cssWidthAndHeight&&"width"!==b.cssWidthAndHeight||(m.style.height=o+"px"),G=o+D.wrapperTop+D.wrapperBottom)}else if(b.scrollContainer)m.style.width="",m.style.height="",i=D.slides[0].getWidth(!0,b.roundLengths),j=D.slides[0].getHeight(!0,b.roundLengths),G=N?i:j,m.style.width=i+"px",m.style.height=j+"px",F=N?i:j;else{if(b.calculateHeight){for(h=0,j=0,N||(D.container.style.height=""),m.style.height="",l=0;l0&&(N?D.wrapperLeft=F*b.offsetSlidesBefore:D.wrapperTop=F*b.offsetSlidesBefore),b.offsetSlidesAfter>0&&(N?D.wrapperRight=F*b.offsetSlidesAfter:D.wrapperBottom=F*b.offsetSlidesAfter),b.offsetPxBefore>0&&(N?D.wrapperLeft=b.offsetPxBefore:D.wrapperTop=b.offsetPxBefore),b.offsetPxAfter>0&&(N?D.wrapperRight=b.offsetPxAfter:D.wrapperBottom=b.offsetPxAfter),b.centeredSlides&&(N?(D.wrapperLeft=(J-F)/2,D.wrapperRight=(J-F)/2):(D.wrapperTop=(J-F)/2,D.wrapperBottom=(J-F)/2)),N?(D.wrapperLeft>0&&(m.style.paddingLeft=D.wrapperLeft+"px"),D.wrapperRight>0&&(m.style.paddingRight=D.wrapperRight+"px")):(D.wrapperTop>0&&(m.style.paddingTop=D.wrapperTop+"px"),D.wrapperBottom>0&&(m.style.paddingBottom=D.wrapperBottom+"px")),G=N?i+D.wrapperRight+D.wrapperLeft:j+D.wrapperTop+D.wrapperBottom,parseFloat(i)>0&&(!b.cssWidthAndHeight||"height"===b.cssWidthAndHeight)&&(m.style.width=i+"px"),parseFloat(j)>0&&(!b.cssWidthAndHeight||"width"===b.cssWidthAndHeight)&&(m.style.height=j+"px"),k=0,D.snapGrid=[],D.slidesGrid=[],l=0;l0&&(!b.cssWidthAndHeight||"height"===b.cssWidthAndHeight)&&(D.slides[l].style.width=f+"px"),parseFloat(g)>0&&(!b.cssWidthAndHeight||"width"===b.cssWidthAndHeight)&&(D.slides[l].style.height=g+"px")}D.initialized?(D.callPlugins("onInit"),b.onInit&&D.fireCallback(b.onInit,D)):(D.callPlugins("onFirstInit"),b.onFirstInit&&D.fireCallback(b.onFirstInit,D)),D.initialized=!0}},D.reInit=function(a){D.init(!0,a)},D.resizeFix=function(a){D.callPlugins("beforeResizeFix"),D.init(b.resizeReInit||a),b.freeMode?D.getWrapperTranslate()<-e()&&(D.setWrapperTransition(0),D.setWrapperTranslate(-e())):(D.swipeTo(b.loop?D.activeLoopIndex:D.activeIndex,0,!1),b.autoplay&&(D.support.transitions&&"undefined"!=typeof ab?"undefined"!=typeof ab&&(clearTimeout(ab),ab=void 0,D.startAutoplay()):"undefined"!=typeof bb&&(clearInterval(bb),bb=void 0,D.startAutoplay()))),D.callPlugins("afterResizeFix")},D.destroy=function(a){var c=D.h.removeEventListener,d="wrapper"===b.eventTarget?D.wrapper:D.container;if(D.browser.ie10||D.browser.ie11?(c(d,D.touchEvents.touchStart,p),c(document,D.touchEvents.touchMove,q),c(document,D.touchEvents.touchEnd,r)):(D.support.touch&&(c(d,"touchstart",p),c(d,"touchmove",q),c(d,"touchend",r)),b.simulateTouch&&(c(d,"mousedown",p),c(document,"mousemove",q),c(document,"mouseup",r))),b.autoResize&&c(window,"resize",D.resizeFix),h(),b.paginationClickable&&x(),b.mousewheelControl&&D._wheelEvent&&c(D.container,D._wheelEvent,j),b.keyboardControl&&c(document,"keydown",i),b.autoplay&&D.stopAutoplay(),a){D.wrapper.removeAttribute("style");for(var e=0;e=D.snapGrid[g].toFixed(2)&&-dD.snapGrid[f]&&-e0&&(d=0),d===e?!1:(v(d,"prev",{runCallbacks:a}),!0)},D.swipeReset=function(a){"undefined"==typeof a&&(a=!0),D.callPlugins("onSwipeReset");{var c,d=D.getWrapperTranslate(),f=F*b.slidesPerGroup;-e()}if("auto"===b.slidesPerView){c=0;for(var g=0;g=D.snapGrid[g]&&-d0?-D.snapGrid[g+1]:-D.snapGrid[g];break}}-d>=D.snapGrid[D.snapGrid.length-1]&&(c=-D.snapGrid[D.snapGrid.length-1]),d<=-e()&&(c=-e())}else c=0>d?Math.round(d/f)*f:0,d<=-e()&&(c=-e());return b.scrollContainer&&(c=0>d?d:0),c<-e()&&(c=-e()),b.scrollContainer&&J>F&&(c=0),c===d?!1:(v(c,"reset",{runCallbacks:a}),!0)},D.swipeTo=function(a,c,d){a=parseInt(a,10),D.callPlugins("onSwipeTo",{index:a,speed:c}),b.loop&&(a+=D.loopedSlides);var f=D.getWrapperTranslate();if(!(!isFinite(a)||a>D.slides.length-1||0>a)){var g;return g="auto"===b.slidesPerView?-D.slidesGrid[a]:-a*F,g<-e()&&(g=-e()),g===f?!1:("undefined"==typeof d&&(d=!0),v(g,"to",{index:a,speed:c,runCallbacks:d}),!0)}},D._queueStartCallbacks=!1,D._queueEndCallbacks=!1,D.updateActiveSlide=function(a){if(D.initialized&&0!==D.slides.length){D.previousIndex=D.activeIndex,"undefined"==typeof a&&(a=D.getWrapperTranslate()),a>0&&(a=0);var c;if("auto"===b.slidesPerView){if(D.activeIndex=D.slidesGrid.indexOf(-a),D.activeIndex<0){for(c=0;cD.slidesGrid[c]&&-a=d?c:c+1}}else D.activeIndex=Math[b.visibilityFullFit?"ceil":"round"](-a/F);if(D.activeIndex===D.slides.length&&(D.activeIndex=D.slides.length-1),D.activeIndex<0&&(D.activeIndex=0),D.slides[D.activeIndex]){if(D.calcVisibleSlides(a),D.support.classList){var f;for(c=0;c=0?f.classList.add(b.slideVisibleClass):f.classList.remove(b.slideVisibleClass);D.slides[D.activeIndex].classList.add(b.slideActiveClass)}else{var g=new RegExp("\\s*"+b.slideActiveClass),h=new RegExp("\\s*"+b.slideVisibleClass);for(c=0;c=0&&(D.slides[c].className+=" "+b.slideVisibleClass);D.slides[D.activeIndex].className+=" "+b.slideActiveClass}if(b.loop){var i=D.loopedSlides;D.activeLoopIndex=D.activeIndex-i,D.activeLoopIndex>=D.slides.length-2*i&&(D.activeLoopIndex=D.slides.length-2*i-D.activeLoopIndex),D.activeLoopIndex<0&&(D.activeLoopIndex=D.slides.length-2*i+D.activeLoopIndex),D.activeLoopIndex<0&&(D.activeLoopIndex=0)}else D.activeLoopIndex=D.activeIndex;b.pagination&&D.updatePagination(a)}}},D.createPagination=function(a){if(b.paginationClickable&&D.paginationButtons&&x(),D.paginationContainer=b.pagination.nodeType?b.pagination:c(b.pagination)[0],b.createPagination){var d="",e=D.slides.length,f=e;b.loop&&(f-=2*D.loopedSlides);for(var g=0;f>g;g++)d+="<"+b.paginationElement+' class="'+b.paginationElementClass+'">";D.paginationContainer.innerHTML=d}D.paginationButtons=c("."+b.paginationElementClass,D.paginationContainer),a||D.updatePagination(),D.callPlugins("onCreatePagination"),b.paginationClickable&&y()},D.updatePagination=function(a){if(b.pagination&&!(D.slides.length<1)){var d=c("."+b.paginationActiveClass,D.paginationContainer);if(d){var e=D.paginationButtons;if(0!==e.length){for(var f=0;fj&&(j=D.slides.length-2*D.loopedSlides+j),b.loop&&j>=D.slides.length-2*D.loopedSlides&&(j=D.slides.length-2*D.loopedSlides-j,j=Math.abs(j)),i.push(j)}for(h=0;h0&&(a+=D.wrapperLeft),!N&&D.wrapperTop>0&&(a+=D.wrapperTop);for(var g=0;g=-a&&-a+J>=f&&(h=!0),-a>=d&&f>=-a+J&&(h=!0)):(f>-a&&-a+J>=f&&(h=!0),d>=-a&&-a+J>d&&(h=!0),-a>d&&f>-a+J&&(h=!0)),h&&c.push(D.slides[g])}0===c.length&&(c=[D.slides[D.activeIndex]]),D.visibleSlides=c};var ab,bb;D.startAutoplay=function(){if(D.support.transitions){if("undefined"!=typeof ab)return!1;if(!b.autoplay)return;D.callPlugins("onAutoplayStart"),b.onAutoplayStart&&D.fireCallback(b.onAutoplayStart,D),A()}else{if("undefined"!=typeof bb)return!1;if(!b.autoplay)return;D.callPlugins("onAutoplayStart"),b.onAutoplayStart&&D.fireCallback(b.onAutoplayStart,D),bb=setInterval(function(){b.loop?(D.fixLoop(),D.swipeNext(!0,!0)):D.swipeNext(!0,!0)||(b.autoplayStopOnLast?(clearInterval(bb),bb=void 0):D.swipeTo(0))},b.autoplay)}},D.stopAutoplay=function(a){if(D.support.transitions){if(!ab)return;ab&&clearTimeout(ab),ab=void 0,a&&!b.autoplayDisableOnInteraction&&D.wrapperTransitionEnd(function(){A()}),D.callPlugins("onAutoplayStop"),b.onAutoplayStop&&D.fireCallback(b.onAutoplayStop,D)}else bb&&clearInterval(bb),bb=void 0,D.callPlugins("onAutoplayStop"),b.onAutoplayStop&&D.fireCallback(b.onAutoplayStop,D)},D.loopCreated=!1,D.removeLoopedSlides=function(){if(D.loopCreated)for(var a=0;aD.slides.length&&(D.loopedSlides=D.slides.length);var a,c="",d="",e="",f=D.slides.length,g=Math.floor(D.loopedSlides/f),h=D.loopedSlides%f;for(a=0;g*f>a;a++){var i=a;if(a>=f){var j=Math.floor(a/f);i=a-f*j}e+=D.slides[i].outerHTML}for(a=0;h>a;a++)d+=u(b.slideDuplicateClass,D.slides[a].outerHTML);for(a=f-h;f>a;a++)c+=u(b.slideDuplicateClass,D.slides[a].outerHTML);var k=c+e+E.innerHTML+e+d;for(E.innerHTML=k,D.loopCreated=!0,D.calcSlides(),a=0;a=D.slides.length-D.loopedSlides)&&D.slides[a].setData("looped",!0);D.callPlugins("onCreateLoop")}},D.fixLoop=function(){var a;D.activeIndex=2*D.loopedSlides||D.activeIndex>D.slides.length-2*b.slidesPerView)&&(a=-D.slides.length+D.activeIndex+D.loopedSlides,D.swipeTo(a,0,!1))},D.loadSlides=function(){var a="";D.activeLoaderIndex=0;for(var c=b.loader.slides,d=b.loader.loadAllSlides?c.length:b.slidesPerView*(1+b.loader.surroundGroups),e=0;d>e;e++)a+="outer"===b.loader.slidesHTMLType?c[e]:"<"+b.slideElement+' class="'+b.slideClass+'" data-swiperindex="'+e+'">'+c[e]+"";D.wrapper.innerHTML=a,D.calcSlides(!0),b.loader.loadAllSlides||D.wrapperTransitionEnd(D.reloadSlides,!0)},D.reloadSlides=function(){var a=b.loader.slides,c=parseInt(D.activeSlide().data("swiperindex"),10);if(!(0>c||c>a.length-1)){D.activeLoaderIndex=c;var d=Math.max(0,c-b.slidesPerView*b.loader.surroundGroups),e=Math.min(c+b.slidesPerView*(1+b.loader.surroundGroups)-1,a.length-1);if(c>0){var f=-F*(c-d);D.setWrapperTranslate(f),D.setWrapperTransition(0)}var g;if("reload"===b.loader.logic){D.wrapper.innerHTML="";var h="";for(g=d;e>=g;g++)h+="outer"===b.loader.slidesHTMLType?a[g]:"<"+b.slideElement+' class="'+b.slideClass+'" data-swiperindex="'+g+'">'+a[g]+"";D.wrapper.innerHTML=h}else{var i=1e3,j=0;for(g=0;gk||k>e?D.wrapper.removeChild(D.slides[g]):(i=Math.min(k,i),j=Math.max(k,j))}for(g=d;e>=g;g++){var l;i>g&&(l=document.createElement(b.slideElement),l.className=b.slideClass,l.setAttribute("data-swiperindex",g),l.innerHTML=a[g],D.wrapper.insertBefore(l,D.wrapper.firstChild)),g>j&&(l=document.createElement(b.slideElement),l.className=b.slideClass,l.setAttribute("data-swiperindex",g),l.innerHTML=a[g],D.wrapper.appendChild(l))}}D.reInit(!0)}},B()}};Swiper.prototype={plugins:{},wrapperTransitionEnd:function(a,b){"use strict";function c(h){if(h.target===f&&(a(e),e.params.queueEndCallbacks&&(e._queueEndCallbacks=!1),!b))for(d=0;d0||0>e)&&(e=a.offsetWidth-parseFloat(window.getComputedStyle(a,null).getPropertyValue("padding-left"))-parseFloat(window.getComputedStyle(a,null).getPropertyValue("padding-right"))),b&&(e+=parseFloat(window.getComputedStyle(a,null).getPropertyValue("padding-left"))+parseFloat(window.getComputedStyle(a,null).getPropertyValue("padding-right"))),c?Math.ceil(e):e},getHeight:function(a,b,c){"use strict";if(b)return a.offsetHeight;var d=window.getComputedStyle(a,null).getPropertyValue("height"),e=parseFloat(d);return(isNaN(e)||d.indexOf("%")>0||0>e)&&(e=a.offsetHeight-parseFloat(window.getComputedStyle(a,null).getPropertyValue("padding-top"))-parseFloat(window.getComputedStyle(a,null).getPropertyValue("padding-bottom"))),b&&(e+=parseFloat(window.getComputedStyle(a,null).getPropertyValue("padding-top"))+parseFloat(window.getComputedStyle(a,null).getPropertyValue("padding-bottom"))),c?Math.ceil(e):e},getOffset:function(a){"use strict";var b=a.getBoundingClientRect(),c=document.body,d=a.clientTop||c.clientTop||0,e=a.clientLeft||c.clientLeft||0,f=window.pageYOffset||a.scrollTop,g=window.pageXOffset||a.scrollLeft;return document.documentElement&&!window.pageYOffset&&(f=document.documentElement.scrollTop,g=document.documentElement.scrollLeft),{top:b.top+f-d,left:b.left+g-e}},windowWidth:function(){"use strict";return window.innerWidth?window.innerWidth:document.documentElement&&document.documentElement.clientWidth?document.documentElement.clientWidth:void 0},windowHeight:function(){"use strict";return window.innerHeight?window.innerHeight:document.documentElement&&document.documentElement.clientHeight?document.documentElement.clientHeight:void 0},windowScroll:function(){"use strict";return"undefined"!=typeof pageYOffset?{left:window.pageXOffset,top:window.pageYOffset}:document.documentElement?{left:document.documentElement.scrollLeft,top:document.documentElement.scrollTop}:void 0},addEventListener:function(a,b,c,d){"use strict";"undefined"==typeof d&&(d=!1),a.addEventListener?a.addEventListener(b,c,d):a.attachEvent&&a.attachEvent("on"+b,c)},removeEventListener:function(a,b,c,d){"use strict";"undefined"==typeof d&&(d=!1),a.removeEventListener?a.removeEventListener(b,c,d):a.detachEvent&&a.detachEvent("on"+b,c)}},setTransform:function(a,b){"use strict";var c=a.style;c.webkitTransform=c.MsTransform=c.msTransform=c.MozTransform=c.OTransform=c.transform=b},setTranslate:function(a,b){"use strict";var c=a.style,d={x:b.x||0,y:b.y||0,z:b.z||0},e=this.support.transforms3d?"translate3d("+d.x+"px,"+d.y+"px,"+d.z+"px)":"translate("+d.x+"px,"+d.y+"px)";c.webkitTransform=c.MsTransform=c.msTransform=c.MozTransform=c.OTransform=c.transform=e,this.support.transforms||(c.left=d.x+"px",c.top=d.y+"px")},setTransition:function(a,b){"use strict";var c=a.style;c.webkitTransitionDuration=c.MsTransitionDuration=c.msTransitionDuration=c.MozTransitionDuration=c.OTransitionDuration=c.transitionDuration=b+"ms"},support:{touch:window.Modernizr&&Modernizr.touch===!0||function(){"use strict";return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)}(),transforms3d:window.Modernizr&&Modernizr.csstransforms3d===!0||function(){"use strict";var a=document.createElement("div").style;return"webkitPerspective"in a||"MozPerspective"in a||"OPerspective"in a||"MsPerspective"in a||"perspective"in a}(),transforms:window.Modernizr&&Modernizr.csstransforms===!0||function(){"use strict";var a=document.createElement("div").style;return"transform"in a||"WebkitTransform"in a||"MozTransform"in a||"msTransform"in a||"MsTransform"in a||"OTransform"in a}(),transitions:window.Modernizr&&Modernizr.csstransitions===!0||function(){"use strict";var a=document.createElement("div").style;return"transition"in a||"WebkitTransition"in a||"MozTransition"in a||"msTransition"in a||"MsTransition"in a||"OTransition"in a}(),classList:function(){"use strict";var a=document.createElement("div");return"classList"in a}()},browser:{ie8:function(){"use strict";var a=-1;if("Microsoft Internet Explorer"===navigator.appName){var b=navigator.userAgent,c=new RegExp(/MSIE ([0-9]{1,}[\.0-9]{0,})/);null!==c.exec(b)&&(a=parseFloat(RegExp.$1))}return-1!==a&&9>a}(),ie10:window.navigator.msPointerEnabled,ie11:window.navigator.pointerEnabled}},(window.jQuery||window.Zepto)&&!function(a){"use strict";a.fn.swiper=function(b){var c;return this.each(function(d){var e=a(this),f=new Swiper(e[0],b);d||(c=f),e.data("swiper",f)}),c}}(window.jQuery||window.Zepto),"undefined"!=typeof module?module.exports=Swiper:"function"==typeof define&&define.amd&&define([],function(){"use strict";return Swiper}); \ No newline at end of file diff --git a/template/index3/assets/js/jquery.lazyload_1107.js b/template/index3/assets/js/jquery.lazyload_1107.js new file mode 100644 index 0000000..356b7d3 --- /dev/null +++ b/template/index3/assets/js/jquery.lazyload_1107.js @@ -0,0 +1 @@ +!function(e,t,n,i){var o=e(t);e.fn.lazyload=function(r){function f(){var t=0;l.each(function(){var n=e(this);if(!h.skip_invisible||n.is(":visible"))if(e.abovethetop(this,h));else if(e.belowthefold(this,h)){if(++t>h.failure_limit)return!1}else n.trigger("appear"),t=0})}var a,l=this,h={threshold:0,failure_limit:0,event:"scroll",effect:"show",container:t,data_attribute:"original",skip_invisible:!0,appear:null,load:null,placeholder:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"};return r&&(i!==r.failurelimit&&(r.failure_limit=r.failurelimit,delete r.failurelimit),i!==r.effectspeed&&(r.effect_speed=r.effectspeed,delete r.effectspeed),e.extend(h,r)),a=h.container===i||h.container===t?o:e(h.container),0===h.event.indexOf("scroll")&&a.bind(h.event,function(){return f()}),this.each(function(){var t=this,n=e(t);t.loaded=!1,(n.attr("src")===i||n.attr("src")===!1)&&n.is("img")&&n.attr("src",h.placeholder),n.one("appear",function(){if(!this.loaded){if(h.appear){var i=l.length;h.appear.call(t,i,h)}e("").bind("load",function(){var i=n.attr("data-"+h.data_attribute);n.hide(),n.is("img")?n.attr("src",i):n.css("background-image","url('"+i+"')"),n[h.effect](h.effect_speed),t.loaded=!0;var o=e.grep(l,function(e){return!e.loaded});if(l=e(o),h.load){var r=l.length;h.load.call(t,r,h)}}).attr("src",n.attr("data-"+h.data_attribute))}}),0!==h.event.indexOf("scroll")&&n.bind(h.event,function(){t.loaded||n.trigger("appear")})}),o.bind("resize",function(){f()}),/(?:iphone|ipod|ipad).*os 5/gi.test(navigator.appVersion)&&o.bind("pageshow",function(t){t.originalEvent&&t.originalEvent.persisted&&l.each(function(){e(this).trigger("appear")})}),e(n).ready(function(){f()}),this},e.belowthefold=function(n,r){var f;return f=r.container===i||r.container===t?(t.innerHeight?t.innerHeight:o.height())+o.scrollTop():e(r.container).offset().top+e(r.container).height(),f<=e(n).offset().top-r.threshold},e.rightoffold=function(n,r){var f;return f=r.container===i||r.container===t?o.width()+o.scrollLeft():e(r.container).offset().left+e(r.container).width(),f<=e(n).offset().left-r.threshold},e.abovethetop=function(n,r){var f;return f=r.container===i||r.container===t?o.scrollTop():e(r.container).offset().top,f>=e(n).offset().top+r.threshold+e(n).height()},e.leftofbegin=function(n,r){var f;return f=r.container===i||r.container===t?o.scrollLeft():e(r.container).offset().left,f>=e(n).offset().left+r.threshold+e(n).width()},e.inviewport=function(t,n){return!(e.rightoffold(t,n)||e.leftofbegin(t,n)||e.belowthefold(t,n)||e.abovethetop(t,n))},e.extend(e.expr[":"],{"below-the-fold":function(t){return e.belowthefold(t,{threshold:0})},"above-the-top":function(t){return!e.belowthefold(t,{threshold:0})},"right-of-screen":function(t){return e.rightoffold(t,{threshold:0})},"left-of-screen":function(t){return!e.rightoffold(t,{threshold:0})},"in-viewport":function(t){return e.inviewport(t,{threshold:0})},"above-the-fold":function(t){return!e.belowthefold(t,{threshold:0})},"right-of-fold":function(t){return e.rightoffold(t,{threshold:0})},"left-of-fold":function(t){return!e.rightoffold(t,{threshold:0})}})}(jQuery,window,document); \ No newline at end of file diff --git a/template/index3/assets/js/jquery_1107.js b/template/index3/assets/js/jquery_1107.js new file mode 100644 index 0000000..9154efe --- /dev/null +++ b/template/index3/assets/js/jquery_1107.js @@ -0,0 +1,4 @@ +!function(e,t){"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(e,t){function n(e){var t=!!e&&"length"in e&&e.length,n=pt.type(e);return"function"===n||pt.isWindow(e)?!1:"array"===n||0===t||"number"==typeof t&&t>0&&t-1 in e}function r(e,t,n){if(pt.isFunction(t))return pt.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return pt.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(Ct.test(t))return pt.filter(t,e,n);t=pt.filter(t,e)}return pt.grep(e,function(e){return pt.inArray(e,t)>-1!==n})}function i(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}function o(e){var t={};return pt.each(e.match(Dt)||[],function(e,n){t[n]=!0}),t}function a(){rt.addEventListener?(rt.removeEventListener("DOMContentLoaded",s),e.removeEventListener("load",s)):(rt.detachEvent("onreadystatechange",s),e.detachEvent("onload",s))}function s(){(rt.addEventListener||"load"===e.event.type||"complete"===rt.readyState)&&(a(),pt.ready())}function u(e,t,n){if(void 0===n&&1===e.nodeType){var r="data-"+t.replace(Mt,"-$1").toLowerCase();if(n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:qt.test(n)?pt.parseJSON(n):n}catch(i){}pt.data(e,t,n)}else n=void 0}return n}function l(e){var t;for(t in e)if(("data"!==t||!pt.isEmptyObject(e[t]))&&"toJSON"!==t)return!1;return!0}function c(e,t,n,r){if(Ht(e)){var i,o,a=pt.expando,s=e.nodeType,u=s?pt.cache:e,l=s?e[a]:e[a]&&a;if(l&&u[l]&&(r||u[l].data)||void 0!==n||"string"!=typeof t)return l||(l=s?e[a]=nt.pop()||pt.guid++:a),u[l]||(u[l]=s?{}:{toJSON:pt.noop}),("object"==typeof t||"function"==typeof t)&&(r?u[l]=pt.extend(u[l],t):u[l].data=pt.extend(u[l].data,t)),o=u[l],r||(o.data||(o.data={}),o=o.data),void 0!==n&&(o[pt.camelCase(t)]=n),"string"==typeof t?(i=o[t],null==i&&(i=o[pt.camelCase(t)])):i=o,i}}function d(e,t,n){if(Ht(e)){var r,i,o=e.nodeType,a=o?pt.cache:e,s=o?e[pt.expando]:pt.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){pt.isArray(t)?t=t.concat(pt.map(t,pt.camelCase)):t in r?t=[t]:(t=pt.camelCase(t),t=t in r?[t]:t.split(" ")),i=t.length;for(;i--;)delete r[t[i]];if(n?!l(r):!pt.isEmptyObject(r))return}(n||(delete a[s].data,l(a[s])))&&(o?pt.cleanData([e],!0):dt.deleteExpando||a!=a.window?delete a[s]:a[s]=void 0)}}}function f(e,t,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:function(){return pt.css(e,t,"")},u=s(),l=n&&n[3]||(pt.cssNumber[t]?"":"px"),c=(pt.cssNumber[t]||"px"!==l&&+u)&&Ft.exec(pt.css(e,t));if(c&&c[3]!==l){l=l||c[3],n=n||[],c=+u||1;do o=o||".5",c/=o,pt.style(e,t,c+l);while(o!==(o=s()/u)&&1!==o&&--a)}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}function p(e){var t=zt.split("|"),n=e.createDocumentFragment();if(n.createElement)for(;t.length;)n.createElement(t.pop());return n}function h(e,t){var n,r,i=0,o="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):void 0;if(!o)for(o=[],n=e.childNodes||e;null!=(r=n[i]);i++)!t||pt.nodeName(r,t)?o.push(r):pt.merge(o,h(r,t));return void 0===t||t&&pt.nodeName(e,t)?pt.merge([e],o):o}function m(e,t){for(var n,r=0;null!=(n=e[r]);r++)pt._data(n,"globalEval",!t||pt._data(t[r],"globalEval"))}function g(e){Bt.test(e.type)&&(e.defaultChecked=e.checked)}function v(e,t,n,r,i){for(var o,a,s,u,l,c,d,f=e.length,v=p(t),y=[],x=0;f>x;x++)if(a=e[x],a||0===a)if("object"===pt.type(a))pt.merge(y,a.nodeType?[a]:a);else if(Ut.test(a)){for(u=u||v.appendChild(t.createElement("div")),l=(Wt.exec(a)||["",""])[1].toLowerCase(),d=Xt[l]||Xt._default,u.innerHTML=d[1]+pt.htmlPrefilter(a)+d[2],o=d[0];o--;)u=u.lastChild;if(!dt.leadingWhitespace&&$t.test(a)&&y.push(t.createTextNode($t.exec(a)[0])),!dt.tbody)for(a="table"!==l||Vt.test(a)?""!==d[1]||Vt.test(a)?0:u:u.firstChild,o=a&&a.childNodes.length;o--;)pt.nodeName(c=a.childNodes[o],"tbody")&&!c.childNodes.length&&a.removeChild(c);for(pt.merge(y,u.childNodes),u.textContent="";u.firstChild;)u.removeChild(u.firstChild);u=v.lastChild}else y.push(t.createTextNode(a));for(u&&v.removeChild(u),dt.appendChecked||pt.grep(h(y,"input"),g),x=0;a=y[x++];)if(r&&pt.inArray(a,r)>-1)i&&i.push(a);else if(s=pt.contains(a.ownerDocument,a),u=h(v.appendChild(a),"script"),s&&m(u),n)for(o=0;a=u[o++];)It.test(a.type||"")&&n.push(a);return u=null,v}function y(){return!0}function x(){return!1}function b(){try{return rt.activeElement}catch(e){}}function w(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)w(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),i===!1)i=x;else if(!i)return e;return 1===o&&(a=i,i=function(e){return pt().off(e),a.apply(this,arguments)},i.guid=a.guid||(a.guid=pt.guid++)),e.each(function(){pt.event.add(this,t,i,r,n)})}function T(e,t){return pt.nodeName(e,"table")&&pt.nodeName(11!==t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function C(e){return e.type=(null!==pt.find.attr(e,"type"))+"/"+e.type,e}function E(e){var t=on.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function N(e,t){if(1===t.nodeType&&pt.hasData(e)){var n,r,i,o=pt._data(e),a=pt._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)pt.event.add(t,n,s[n][r])}a.data&&(a.data=pt.extend({},a.data))}}function k(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!dt.noCloneEvent&&t[pt.expando]){i=pt._data(t);for(r in i.events)pt.removeEvent(t,r,i.handle);t.removeAttribute(pt.expando)}"script"===n&&t.text!==e.text?(C(t).text=e.text,E(t)):"object"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),dt.html5Clone&&e.innerHTML&&!pt.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):"input"===n&&Bt.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):"option"===n?t.defaultSelected=t.selected=e.defaultSelected:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}}function S(e,t,n,r){t=ot.apply([],t);var i,o,a,s,u,l,c=0,d=e.length,f=d-1,p=t[0],m=pt.isFunction(p);if(m||d>1&&"string"==typeof p&&!dt.checkClone&&rn.test(p))return e.each(function(i){var o=e.eq(i);m&&(t[0]=p.call(this,i,o.html())),S(o,t,n,r)});if(d&&(l=v(t,e[0].ownerDocument,!1,e,r),i=l.firstChild,1===l.childNodes.length&&(l=i),i||r)){for(s=pt.map(h(l,"script"),C),a=s.length;d>c;c++)o=l,c!==f&&(o=pt.clone(o,!0,!0),a&&pt.merge(s,h(o,"script"))),n.call(e[c],o,c);if(a)for(u=s[s.length-1].ownerDocument,pt.map(s,E),c=0;a>c;c++)o=s[c],It.test(o.type||"")&&!pt._data(o,"globalEval")&&pt.contains(u,o)&&(o.src?pt._evalUrl&&pt._evalUrl(o.src):pt.globalEval((o.text||o.textContent||o.innerHTML||"").replace(an,"")));l=i=null}return e}function A(e,t,n){for(var r,i=t?pt.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||pt.cleanData(h(r)),r.parentNode&&(n&&pt.contains(r.ownerDocument,r)&&m(h(r,"script")),r.parentNode.removeChild(r));return e}function D(e,t){var n=pt(t.createElement(e)).appendTo(t.body),r=pt.css(n[0],"display");return n.detach(),r}function L(e){var t=rt,n=cn[e];return n||(n=D(e,t),"none"!==n&&n||(ln=(ln||pt("':"vimeo"===f.type?c='':"vzaar"===f.type&&(c=''),a('
    '+c+"
    ").insertAfter(e.find(".owl-video")),this._playing=e.addClass("owl-video-playing"))},e.prototype.isInFullScreen=function(){var b=c.fullscreenElement||c.mozFullScreenElement||c.webkitFullscreenElement;return b&&a(b).parent().hasClass("owl-video-frame")},e.prototype.destroy=function(){var a,b;this._core.$element.off("click.owl.video");for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.Video=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this.core=b,this.core.options=a.extend({},e.Defaults,this.core.options),this.swapping=!0,this.previous=d,this.next=d,this.handlers={"change.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&(this.previous=this.core.current(),this.next=a.property.value)},this),"drag.owl.carousel dragged.owl.carousel translated.owl.carousel":a.proxy(function(a){a.namespace&&(this.swapping="translated"==a.type)},this),"translate.owl.carousel":a.proxy(function(a){a.namespace&&this.swapping&&(this.core.options.animateOut||this.core.options.animateIn)&&this.swap()},this)},this.core.$element.on(this.handlers)};e.Defaults={animateOut:!1,animateIn:!1},e.prototype.swap=function(){if(1===this.core.settings.items&&a.support.animation&&a.support.transition){this.core.speed(0);var b,c=a.proxy(this.clear,this),d=this.core.$stage.children().eq(this.previous),e=this.core.$stage.children().eq(this.next),f=this.core.settings.animateIn,g=this.core.settings.animateOut;this.core.current()!==this.previous&&(g&&(b=this.core.coordinates(this.previous)-this.core.coordinates(this.next),d.one(a.support.animation.end,c).css({left:b+"px"}).addClass("animated owl-animated-out").addClass(g)),f&&e.one(a.support.animation.end,c).addClass("animated owl-animated-in").addClass(f))}},e.prototype.clear=function(b){a(b.target).css({left:""}).removeClass("animated owl-animated-out owl-animated-in").removeClass(this.core.settings.animateIn).removeClass(this.core.settings.animateOut),this.core.onTransitionEnd()},e.prototype.destroy=function(){var a,b;for(a in this.handlers)this.core.$element.off(a,this.handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)}, +a.fn.owlCarousel.Constructor.Plugins.Animate=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){var e=function(b){this._core=b,this._timeout=null,this._paused=!1,this._handlers={"changed.owl.carousel":a.proxy(function(a){a.namespace&&"settings"===a.property.name?this._core.settings.autoplay?this.play():this.stop():a.namespace&&"position"===a.property.name&&this._core.settings.autoplay&&this._setAutoPlayInterval()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.autoplay&&this.play()},this),"play.owl.autoplay":a.proxy(function(a,b,c){a.namespace&&this.play(b,c)},this),"stop.owl.autoplay":a.proxy(function(a){a.namespace&&this.stop()},this),"mouseover.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"mouseleave.owl.autoplay":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.play()},this),"touchstart.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this._core.is("rotating")&&this.pause()},this),"touchend.owl.core":a.proxy(function(){this._core.settings.autoplayHoverPause&&this.play()},this)},this._core.$element.on(this._handlers),this._core.options=a.extend({},e.Defaults,this._core.options)};e.Defaults={autoplay:!1,autoplayTimeout:5e3,autoplayHoverPause:!1,autoplaySpeed:!1},e.prototype.play=function(a,b){this._paused=!1,this._core.is("rotating")||(this._core.enter("rotating"),this._setAutoPlayInterval())},e.prototype._getNextTimeout=function(d,e){return this._timeout&&b.clearTimeout(this._timeout),b.setTimeout(a.proxy(function(){this._paused||this._core.is("busy")||this._core.is("interacting")||c.hidden||this._core.next(e||this._core.settings.autoplaySpeed)},this),d||this._core.settings.autoplayTimeout)},e.prototype._setAutoPlayInterval=function(){this._timeout=this._getNextTimeout()},e.prototype.stop=function(){this._core.is("rotating")&&(b.clearTimeout(this._timeout),this._core.leave("rotating"))},e.prototype.pause=function(){this._core.is("rotating")&&(this._paused=!0)},e.prototype.destroy=function(){var a,b;this.stop();for(a in this._handlers)this._core.$element.off(a,this._handlers[a]);for(b in Object.getOwnPropertyNames(this))"function"!=typeof this[b]&&(this[b]=null)},a.fn.owlCarousel.Constructor.Plugins.autoplay=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(b){this._core=b,this._initialized=!1,this._pages=[],this._controls={},this._templates=[],this.$element=this._core.$element,this._overrides={next:this._core.next,prev:this._core.prev,to:this._core.to},this._handlers={"prepared.owl.carousel":a.proxy(function(b){b.namespace&&this._core.settings.dotsData&&this._templates.push('
    '+a(b.content).find("[data-dot]").addBack("[data-dot]").attr("data-dot")+"
    ")},this),"added.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,0,this._templates.pop())},this),"remove.owl.carousel":a.proxy(function(a){a.namespace&&this._core.settings.dotsData&&this._templates.splice(a.position,1)},this),"changed.owl.carousel":a.proxy(function(a){a.namespace&&"position"==a.property.name&&this.draw()},this),"initialized.owl.carousel":a.proxy(function(a){a.namespace&&!this._initialized&&(this._core.trigger("initialize",null,"navigation"),this.initialize(),this.update(),this.draw(),this._initialized=!0,this._core.trigger("initialized",null,"navigation"))},this),"refreshed.owl.carousel":a.proxy(function(a){a.namespace&&this._initialized&&(this._core.trigger("refresh",null,"navigation"),this.update(),this.draw(),this._core.trigger("refreshed",null,"navigation"))},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers)};e.Defaults={nav:!1,navText:["prev","next"],navSpeed:!1,navElement:"div",navContainer:!1,navContainerClass:"owl-nav",navClass:["owl-prev","owl-next"],slideBy:1,dotClass:"owl-dot",dotsClass:"owl-dots",dots:!0,dotsEach:!1,dotsData:!1,dotsSpeed:!1,dotsContainer:!1},e.prototype.initialize=function(){var b,c=this._core.settings;this._controls.$relative=(c.navContainer?a(c.navContainer):a("
    ").addClass(c.navContainerClass).appendTo(this.$element)).addClass("disabled"),this._controls.$previous=a("<"+c.navElement+">").addClass(c.navClass[0]).html(c.navText[0]).prependTo(this._controls.$relative).on("click",a.proxy(function(a){this.prev(c.navSpeed)},this)),this._controls.$next=a("<"+c.navElement+">").addClass(c.navClass[1]).html(c.navText[1]).appendTo(this._controls.$relative).on("click",a.proxy(function(a){this.next(c.navSpeed)},this)),c.dotsData||(this._templates=[a("
    ").addClass(c.dotClass).append(a("")).prop("outerHTML")]),this._controls.$absolute=(c.dotsContainer?a(c.dotsContainer):a("
    ").addClass(c.dotsClass).appendTo(this.$element)).addClass("disabled"),this._controls.$absolute.on("click","div",a.proxy(function(b){var d=a(b.target).parent().is(this._controls.$absolute)?a(b.target).index():a(b.target).parent().index();b.preventDefault(),this.to(d,c.dotsSpeed)},this));for(b in this._overrides)this._core[b]=a.proxy(this[b],this)},e.prototype.destroy=function(){var a,b,c,d;for(a in this._handlers)this.$element.off(a,this._handlers[a]);for(b in this._controls)this._controls[b].remove();for(d in this.overides)this._core[d]=this._overrides[d];for(c in Object.getOwnPropertyNames(this))"function"!=typeof this[c]&&(this[c]=null)},e.prototype.update=function(){var a,b,c,d=this._core.clones().length/2,e=d+this._core.items().length,f=this._core.maximum(!0),g=this._core.settings,h=g.center||g.autoWidth||g.dotsData?1:g.dotsEach||g.items;if("page"!==g.slideBy&&(g.slideBy=Math.min(g.slideBy,g.items)),g.dots||"page"==g.slideBy)for(this._pages=[],a=d,b=0,c=0;a=h||0===b){if(this._pages.push({start:Math.min(f,a-d),end:a-d+h-1}),Math.min(f,a-d)===f)break;b=0,++c}b+=this._core.mergers(this._core.relative(a))}},e.prototype.draw=function(){var b,c=this._core.settings,d=this._core.items().length<=c.items,e=this._core.relative(this._core.current()),f=c.loop||c.rewind;this._controls.$relative.toggleClass("disabled",!c.nav||d),c.nav&&(this._controls.$previous.toggleClass("disabled",!f&&e<=this._core.minimum(!0)),this._controls.$next.toggleClass("disabled",!f&&e>=this._core.maximum(!0))),this._controls.$absolute.toggleClass("disabled",!c.dots||d),c.dots&&(b=this._pages.length-this._controls.$absolute.children().length,c.dotsData&&0!==b?this._controls.$absolute.html(this._templates.join("")):b>0?this._controls.$absolute.append(new Array(b+1).join(this._templates[0])):b<0&&this._controls.$absolute.children().slice(b).remove(),this._controls.$absolute.find(".active").removeClass("active"),this._controls.$absolute.children().eq(a.inArray(this.current(),this._pages)).addClass("active"))},e.prototype.onTrigger=function(b){var c=this._core.settings;b.page={index:a.inArray(this.current(),this._pages),count:this._pages.length,size:c&&(c.center||c.autoWidth||c.dotsData?1:c.dotsEach||c.items)}},e.prototype.current=function(){var b=this._core.relative(this._core.current());return a.grep(this._pages,a.proxy(function(a,c){return a.start<=b&&a.end>=b},this)).pop()},e.prototype.getPosition=function(b){var c,d,e=this._core.settings;return"page"==e.slideBy?(c=a.inArray(this.current(),this._pages),d=this._pages.length,b?++c:--c,c=this._pages[(c%d+d)%d].start):(c=this._core.relative(this._core.current()),d=this._core.items().length,b?c+=e.slideBy:c-=e.slideBy),c},e.prototype.next=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!0),b)},e.prototype.prev=function(b){a.proxy(this._overrides.to,this._core)(this.getPosition(!1),b)},e.prototype.to=function(b,c,d){var e;!d&&this._pages.length?(e=this._pages.length,a.proxy(this._overrides.to,this._core)(this._pages[(b%e+e)%e].start,c)):a.proxy(this._overrides.to,this._core)(b,c)},a.fn.owlCarousel.Constructor.Plugins.Navigation=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){"use strict";var e=function(c){this._core=c,this._hashes={},this.$element=this._core.$element,this._handlers={"initialized.owl.carousel":a.proxy(function(c){c.namespace&&"URLHash"===this._core.settings.startPosition&&a(b).trigger("hashchange.owl.navigation")},this),"prepared.owl.carousel":a.proxy(function(b){if(b.namespace){var c=a(b.content).find("[data-hash]").addBack("[data-hash]").attr("data-hash");if(!c)return;this._hashes[c]=b.content}},this),"changed.owl.carousel":a.proxy(function(c){if(c.namespace&&"position"===c.property.name){var d=this._core.items(this._core.relative(this._core.current())),e=a.map(this._hashes,function(a,b){return a===d?b:null}).join();if(!e||b.location.hash.slice(1)===e)return;b.location.hash=e}},this)},this._core.options=a.extend({},e.Defaults,this._core.options),this.$element.on(this._handlers),a(b).on("hashchange.owl.navigation",a.proxy(function(a){var c=b.location.hash.substring(1),e=this._core.$stage.children(),f=this._hashes[c]&&e.index(this._hashes[c]);f!==d&&f!==this._core.current()&&this._core.to(this._core.relative(f),!1,!0)},this))};e.Defaults={URLhashListener:!1},e.prototype.destroy=function(){var c,d;a(b).off("hashchange.owl.navigation");for(c in this._handlers)this._core.$element.off(c,this._handlers[c]);for(d in Object.getOwnPropertyNames(this))"function"!=typeof this[d]&&(this[d]=null)},a.fn.owlCarousel.Constructor.Plugins.Hash=e}(window.Zepto||window.jQuery,window,document),function(a,b,c,d){function e(b,c){var e=!1,f=b.charAt(0).toUpperCase()+b.slice(1);return a.each((b+" "+h.join(f+" ")+f).split(" "),function(a,b){if(g[b]!==d)return e=!c||b,!1}),e}function f(a){return e(a,!0)}var g=a("").get(0).style,h="Webkit Moz O ms".split(" "),i={transition:{end:{WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd",transition:"transitionend"}},animation:{end:{WebkitAnimation:"webkitAnimationEnd",MozAnimation:"animationend",OAnimation:"oAnimationEnd",animation:"animationend"}}},j={csstransforms:function(){return!!e("transform")},csstransforms3d:function(){return!!e("perspective")},csstransitions:function(){return!!e("transition")},cssanimations:function(){return!!e("animation")}};j.csstransitions()&&(a.support.transition=new String(f("transition")),a.support.transition.end=i.transition.end[a.support.transition]),j.cssanimations()&&(a.support.animation=new String(f("animation")),a.support.animation.end=i.animation.end[a.support.animation]),j.csstransforms()&&(a.support.transform=new String(f("transform")),a.support.transform3d=j.csstransforms3d())}(window.Zepto||window.jQuery,window,document); \ No newline at end of file diff --git a/template/index8/assets/picture/aliyun.png b/template/index8/assets/picture/aliyun.png new file mode 100644 index 0000000..1054261 Binary files /dev/null and b/template/index8/assets/picture/aliyun.png differ diff --git a/template/index8/assets/picture/bg-test.png b/template/index8/assets/picture/bg-test.png new file mode 100644 index 0000000..404bd55 Binary files /dev/null and b/template/index8/assets/picture/bg-test.png differ diff --git a/template/index8/assets/picture/logo.png b/template/index8/assets/picture/logo.png new file mode 100644 index 0000000..73ab3ef Binary files /dev/null and b/template/index8/assets/picture/logo.png differ diff --git a/template/index8/assets/picture/optimised.svg b/template/index8/assets/picture/optimised.svg new file mode 100644 index 0000000..5330ab0 --- /dev/null +++ b/template/index8/assets/picture/optimised.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + diff --git a/template/index8/assets/picture/powerfull.svg b/template/index8/assets/picture/powerfull.svg new file mode 100644 index 0000000..ca80934 --- /dev/null +++ b/template/index8/assets/picture/powerfull.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/template/index8/assets/picture/qqpay.png b/template/index8/assets/picture/qqpay.png new file mode 100644 index 0000000..8888496 Binary files /dev/null and b/template/index8/assets/picture/qqpay.png differ diff --git a/template/index8/assets/picture/right.png b/template/index8/assets/picture/right.png new file mode 100644 index 0000000..ed805fa Binary files /dev/null and b/template/index8/assets/picture/right.png differ diff --git a/template/index8/assets/picture/tenpay.png b/template/index8/assets/picture/tenpay.png new file mode 100644 index 0000000..bf945b3 Binary files /dev/null and b/template/index8/assets/picture/tenpay.png differ diff --git a/template/index8/assets/picture/website.svg b/template/index8/assets/picture/website.svg new file mode 100644 index 0000000..09568f8 --- /dev/null +++ b/template/index8/assets/picture/website.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + diff --git a/template/index8/assets/picture/wxpay.png b/template/index8/assets/picture/wxpay.png new file mode 100644 index 0000000..5c85197 Binary files /dev/null and b/template/index8/assets/picture/wxpay.png differ diff --git a/template/index8/index.php b/template/index8/index.php new file mode 100644 index 0000000..a66c9bd --- /dev/null +++ b/template/index8/index.php @@ -0,0 +1,148 @@ + + + + + + + + + <?php echo $conf['title']?> + + + + + + + + + + + + +
    +
    +
    +
    +
    + +
    + + +
    +
    +
    +
    + + +
    +
    + +
    +
    +
    +

    全天候无人值守 7X24小时高效运转

    +
    +
    +
    + + 极速响应 +

    付款后立即回调,无等待,流程超顺畅

    + 加入我们 +
    +
    +
    +
    + + 资金直达 +

    系统收到交易消息后自动将余额提现

    + 加入我们 +
    +
    +
    +
    + + 账户安全 +

    绑定后无法更改,防止他人修改结算账户

    + 加入我们 +
    +
    +
    +
    +
    +
    +
    +
    +
    +平台合作伙伴 +
    +
    + + + + +
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    + + + + + + + \ No newline at end of file diff --git a/template/index8/preview.png b/template/index8/preview.png new file mode 100644 index 0000000..83a7904 Binary files /dev/null and b/template/index8/preview.png differ diff --git a/template/index9/assets/css/style.css b/template/index9/assets/css/style.css new file mode 100644 index 0000000..b2fdc1d --- /dev/null +++ b/template/index9/assets/css/style.css @@ -0,0 +1,3070 @@ + +/* -------------------------------- + +Fonts + +-------------------------------- */ + + +/* -------------------------------- + +Main + +-------------------------------- */ + +*, *::after, *::before { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +html * { + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +html { + font-size: 62.5%; + height: 100%; +} + +body { + font-size: 1.6rem; + font-family: 'Montserrat', sans-serif; + font-weight: 300; + background: #fff; +} +b, strong { + font-weight: 800; +} +a { + text-decoration: none; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; +} +a:hover { + color: #173AE8; +} +.link { + border-bottom: 1px solid #2683ff; +} +.link:hover, .link:focus { + text-decoration: none; + border-color: #173AE8; +} + +h1, h2, h3, h4, h5, h6, a, p, span { + -webkit-font-feature-settings: 'kern' 1; + -moz-font-feature-settings: 'kern' 1; + -ms-font-feature-settings: 'kern' 1; + -o-font-feature-settings: 'kern' 1; + font-feature-settings: 'kern' 1; + text-rendering: optimizelegibility; + font-kerning: normal; +} + +h1, h2, h3, h4, h5, h6 { + font-weight: 800; + color: #2683FF; + margin-bottom: 0.6em; +} +.title { + margin-bottom: 1em; +} +p { + font-weight: 300; + line-height: 1.6em; +} +img { + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -o-user-select: none; + user-select: none; +} + +.section { + padding: 4em 0 5em; +} + +.white { + background: #fff; +} +.grey { + background: #f2f4f6; +} +.normal { + font-weight: normal; +} + +.spacer5 { height: 5px; width: 100%; font-size: 0; margin: 0; padding: 0; border: 0; display: block; } +.spacer10 { height: 10px; width: 100%; font-size: 0; margin: 0; padding: 0; border: 0; display: block; } +.spacer15 { height: 15px; width: 100%; font-size: 0; margin: 0; padding: 0; border: 0; display: block; } +.spacer20 { height: 20px; width: 100%; font-size: 0; margin: 0; padding: 0; border: 0; display: block; } +.spacer25 { height: 25px; width: 100%; font-size: 0; margin: 0; padding: 0; border: 0; display: block; } +.spacer30 { height: 30px; width: 100%; font-size: 0; margin: 0; padding: 0; border: 0; display: block; } +.spacer35 { height: 35px; width: 100%; font-size: 0; margin: 0; padding: 0; border: 0; display: block; } +.spacer40 { height: 40px; width: 100%; font-size: 0; margin: 0; padding: 0; border: 0; display: block; } +.spacer45 { height: 45px; width: 100%; font-size: 0; margin: 0; padding: 0; border: 0; display: block; } +.spacer50 { height: 50px; width: 100%; font-size: 0; margin: 0; padding: 0; border: 0; display: block; } +.spacer100 { height: 100px; width: 100%; font-size: 0; margin: 0; padding: 0; border: 0; display: block; } +.spacer200 { height: 200px; width: 100%; font-size: 0; margin: 0; padding: 0; border: 0; display: block; } + +.mb0 { margin-bottom: 0 !important; } +.mt0 { margin-top: 0 !important; } +.ml0 { margin-left: 0 !important; } +.mr0 { margin-right: 0 !important; } + +/* centered columns styles */ +.row-centered { + text-align:center; +} +.col-centered { + display:inline-block; + float:none; + /* reset the text-align */ + text-align:left; + /* inline-block space fix */ + margin-right:-4px; +} + + +/* -------------------------------- + +Buttons + +-------------------------------- */ + +.btn { + font-weight: 800; + text-transform: uppercase; + background: #2683FF; + color: #FFF; + font-size: 16px; + padding: 14px 50px; + border-radius: 4px; + z-index: 2; + outline: 0; + -webkit-backface-visibility: hidden; + -moz-osx-font-smoothing: grayscale; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; +} +.btn-grey { + font-weight: 800; + text-transform: uppercase; + background: none; + font-size: 15px; + padding: 14px 50px; + border-radius: 4px; + z-index: 2; + outline: 0; + -webkit-backface-visibility: hidden; + -moz-osx-font-smoothing: grayscale; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; +} +.btn:hover, .btn:focus { + color: #fff; + background: #173AE8; + outline: 0; +} +.btn:focus, .btn:active:focus, .btn.active:focus, .btn.focus, .btn:active.focus, .btn.active.focus { + outline: 0; +} + +.btn-transparent { + background: transparent; + border: 2px solid #eee; + color: #555; +} +.btn-transparent:hover { + background: #fff; + color: #333; + border-color: #555; +} +.btn-transparent:focus { + color: #2683ff; + border-color: #2683ff; + background: #fff; +} + +.btn-green { + color: #fff; + background: #88C425; +} +.btn-green:hover, .btn-green:focus { + background: #91D127; +} + +.btn-orange { + background: #FF7F00; + color: #fff; +} +.btn-orange:hover, .btn-orange:focus { + background: #FF6600; +} + +.btn-purple { + background: #7056bf; + color: #fff; +} +.btn-purple:hover, .btn-purple:focus { + background: #7016bf; +} + +.btn-red { + background: transparent; + border-color: #fa6e50; + color: #fa6e50; +} +.btn-red:hover, .btn-red:focus { + background: #fa6e50; + border-color: #fa6e50; + color: #fff; +} + +.btn-white { + background: #fff; + color: #003366; +} +.btn-white:hover, .btn-white:focus { + background: #fff; + color: #2683ff; +} + +.btn-menu { + margin: 28px 0 28px 6px; + padding: 12px 32px 10px; +} + +.btn-action { + margin-top: 18px; + padding: 12px 36px 10px; +} + +.btn-block { + margin-top: 1.6em; + margin-bottom: 1.4em; +} + +.btn-download { + max-width: 100%; +} + +.btn-signup { + margin: 10px auto 20px; + display: block; + max-width: 360px; +} + +.subscribe { + margin-top: 0; + margin-bottom: 15px; +} + + +/* -------------------------------- + +Navigation + +-------------------------------- */ + +.navbar-brand { + padding: 0; + margin: 25px; +} +.logo { + display: inline-block; + margin: 0 5px 0 15px; + width: 14vh; + height: 52px; +} + +.menu { + z-index: 3; + background: none; + border: none; + margin: 0; +} + +.navbar-heroku { + margin-top: 30px; +} + +.navbar-default .navbar-toggle { + border: 2px solid #fff; +} +.navbar-default .navbar-toggle .icon-bar { + background-color: #FFF; + border-radius: 0; +} +.navbar-default .navbar-collapse, .navbar-default .navbar-form { + border: 0; +} +.navbar-default .navbar-toggle:focus { + background: none; +} +.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:active { + background-color: #2683ff; +} +.navbar-default .navbar-collapse.in{ + border-color: transparent; +} +.navbar-collapse.in li { + border-bottom: 1px solid rgba(255, 255, 255, 0.12); +} +.navbar-nav { + margin: 0 -15px; + text-align: center; +} +.navbar-nav>li>a { + padding: 40px 16px; + line-height: 22px; + text-align: center; +} +.nav>li>a:hover, .nav>li>a:focus { + background: none; + color: #fff; +} +.navbar-default .navbar-nav>li>a:hover, .navbar-default .navbar-nav>li>a:focus { + color: #fff; +} +.navbar-default .navbar-nav>li>a { + display: inline-block; + color: #fff; + border: 0; +} +.navbar-default .navbar-nav>li>a:hover { + color: #fff; + text-decoration: underline; +} +.navbar .dropdown { + display: inline-block; +} + +.navbar-default .navbar-nav>.open>a, .navbar-default .navbar-nav>.open>a:hover, .navbar-default .navbar-nav>.open>a:focus { + background-color: transparent; + color: #fff; +} + +.home .nav>li>a.link:hover, .home .nav>li>a.link:focus { + text-decoration: underline; +} + +.navbar-page { + border: 0; + border-radius: 0; + background: #fff; +} +.navbar-page .navbar-nav>li>a { + padding: 40px 16px; + width: 100%; + color: #333; + border: 0; +} +.navbar-page .navbar-nav>li>a:hover { + color: #2683ff; +} +.navbar-page .nav>li>a.link:hover, .navbar-page .nav>li>a.link:focus { + text-decoration: underline; +} +. +.navbar-page .navbar-nav>li>a:hover, .navbar-page .navbar-nav>li>a:focus { + color: #2683ff; +} +.navbar-page .navbar-nav>li>a.active { + color: #2683ff; +} +.navbar-page .navbar-toggle { + margin-top: 34px; + margin-right: 22px; + border: 2px solid #2683ff; +} +.navbar-page .navbar-toggle .icon-bar { + background: #2683ff; +} +.navbar-page .navbar-toggle:hover .icon-bar { + background: #fff; +} + +.navbar .dropdown-menu { + background: rgba(0,0,0,0.4); + top: 80px; + padding: 0; +} +.home .navbar .dropdown-menu { + border: 1px solid rgba(255, 255, 255, 0.2); +} +.navbar .dropdown-menu>li>a { + color: #fff; + font-weight: 300; + font-size: 16px; + border-bottom: 0; + border: 0; + padding: 1em; +} +.navbar .dropdown-menu>li>a:hover { + color: #333; + text-decoration: underline; +} + +.navbar-page .navbar-nav>.open>a, .navbar-page .navbar-nav>.open>a:hover, .navbar-page .navbar-nav>.open>a:focus { + color: #2683ff; +} +.navbar-page .navbar-nav>li>a:hover, .navbar-page .navbar-nav>li>a:focus { + color: #2683ff; +} +.navbar-page .dropdown-menu { + background: #fff; +} +.navbar-page .dropdown-menu>li>a { + color: #333; +} +.navbar-page .dropdown-menu>li>a:hover { + color: #2683ff; +} +.navbar-page .dropdown-menu>li>a:active { + color: #2683ff; +} + +.btn-rent { + background: transparent; + border: 2px solid #eee !important; + padding: 8px 10px !important; + margin-top: 31px; + margin-left: 10px; + width: auto !import/ant; +} +.btn-partner { + background: transparent; + border: 2px solid #eee !important; + padding: 14px 20px !important; +} +.btn-partner:focus, .btn-partner:active, .btn-partner:hover { + border: 2px solid #929292 !important; + color: #929292 !important; + box-shadow: none !important; + text-decoration: none !important; +} +.btn-partner.active { + border-color: #929292 !important; + border: 2px solid #929292 !important; + box-shadow: none !important; +} +.btn-rent:focus, .btn-rent:active, .btn-rent:hover { + border-color: #fff; + color: #fff !important; + box-shadow: none !important; + text-decoration: none !important; +} +.btn-rent.active { + border-color: #fff !important; + color: #fff !important; + box-shadow: none !important; +} +.navbar-page .btn-rent:hover, .navbar-page .btn-rent:focus, .navbar-page .btn-rent:active { + border-color: #2683ff !important; + color: #2683ff !important; +} + +/* -------------------------------- + +Inputs + +-------------------------------- */ + +input, select, textarea { + display: block; + background: #fbfbfb; + border: 1px solid #eee; + border-radius: 4px; + color: #2683FF; + padding: 12px 18px 10px; + margin: 25px auto; + width: 100%; + max-width: 320px; + font-size: 16px; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; +} +input:focus, select:focus, textarea:focus { + outline: 0; + border-color: #2D86fb; +} + +#publicKeys input { + margin-top: 20px; +} + +select { + height: 46px; + text-indent: 10px; + color: #444; +} + +.email { + margin-top: 1em; + margin-bottom: 1em; +} + +::-webkit-input-placeholder { + color: #444; +} +:focus::-webkit-input-placeholder { + color: #BAD7FE; +} +:-moz-placeholder { + color: #444; +} +:focus:-moz-placeholder { + color: #BAD7FE; +} +::-moz-placeholder { + color: #444; +} +:focus::-moz-placeholder { + color: #BAD7FE; +} +:-ms-input-placeholder { + color: #444; +} +:focus:-ms-input-placeholder { + color: #BAD7FE; +} + + + +/* -------------------------------- + +Animated Headlines + +-------------------------------- */ + +.cd-title { + position: relative; + height: 160px; + line-height: 230px; + text-align: center; +} + +.cd-words-wrapper { + display: inline-block; + position: relative; + text-align: left; + padding-right: 5px; + padding-left: 5px; +} +.cd-words-wrapper b { + display: inline-block; + position: absolute; + white-space: nowrap; + left: 0; + top: 0; +} +.cd-words-wrapper b.is-visible { + position: relative; +} +.no-js .cd-words-wrapper b { + opacity: 0; +} +.no-js .cd-words-wrapper b.is-visible { + opacity: 1; +} + + +.cd-headline.type .cd-words-wrapper { + vertical-align: top; + overflow: hidden; +} +.cd-headline.type .cd-words-wrapper::after { + /* vertical bar */ + content: ''; + position: absolute; + right: 0px; + top: 50%; + bottom: auto; + -webkit-transform: translateY(-50%); + -moz-transform: translateY(-50%); + -ms-transform: translateY(-50%); + -o-transform: translateY(-50%); + transform: translateY(-50%); + height: 90%; + width: 3px; + display: inline-block; + margin-left: 15px; + background-color: #fff; +} +.cd-headline.type .cd-words-wrapper.waiting::after { + -webkit-animation: cd-pulse 1s infinite; + -moz-animation: cd-pulse 1s infinite; + animation: cd-pulse 1s infinite; +} +.cd-headline.type .cd-words-wrapper.selected { + background-color: #000; + background-color: rgba(0, 0, 0, 0.9) +} +.cd-headline.type .cd-words-wrapper.selected::after { + visibility: hidden; +} +.cd-headline.type .cd-words-wrapper.selected b { + color: #91D127; +} +.cd-headline.type b { + visibility: hidden; + font-weight: 800; +} +.cd-headline.type b.is-visible { + visibility: visible; +} +.cd-headline.type i { + position: absolute; + visibility: hidden; + font-style: normal; +} +.cd-headline.type i.in { + position: relative; + visibility: visible; +} + +@-webkit-keyframes cd-pulse { + 0% { + -webkit-transform: translateY(-50%) scale(1); + opacity: 1; + } + 40% { + -webkit-transform: translateY(-50%) scale(0.9); + opacity: 0; + } + 100% { + -webkit-transform: translateY(-50%) scale(0); + opacity: 0; + } +} +@-moz-keyframes cd-pulse { + 0% { + -moz-transform: translateY(-50%) scale(1); + opacity: 1; + } + 40% { + -moz-transform: translateY(-50%) scale(0.9); + opacity: 0; + } + 100% { + -moz-transform: translateY(-50%) scale(0); + opacity: 0; + } +} +@keyframes cd-pulse { + 0% { + -webkit-transform: translateY(-50%) scale(1); + -moz-transform: translateY(-50%) scale(1); + -ms-transform: translateY(-50%) scale(1); + -o-transform: translateY(-50%) scale(1); + transform: translateY(-50%) scale(1); + opacity: 1; + } + 40% { + -webkit-transform: translateY(-50%) scale(0.9); + -moz-transform: translateY(-50%) scale(0.9); + -ms-transform: translateY(-50%) scale(0.9); + -o-transform: translateY(-50%) scale(0.9); + transform: translateY(-50%) scale(0.9); + opacity: 0; + } + 100% { + -webkit-transform: translateY(-50%) scale(0); + -moz-transform: translateY(-50%) scale(0); + -ms-transform: translateY(-50%) scale(0); + -o-transform: translateY(-50%) scale(0); + transform: translateY(-50%) scale(0); + opacity: 0; + } +} + +/* -------------------------------- + +Homepage + +-------------------------------- */ + +canvas { + display: block; + vertical-align: bottom; +} +#particles-js { + position: absolute; + width: 100%; + height: 600px; + height: 100vh; + top: 0; + background-image: url(""); + background-repeat: no-repeat; + background-size: cover; + background-position: 50% 50%; +} + +.header { + min-height: 600px; + background: #020307; + background: -moz-linear-gradient(top, #020307 0%, #144fbc 100%); + background: -webkit-gradient(left top, left bottom, color-stop(0%, #020307), color-stop(100%, #144fbc)); + background: -webkit-linear-gradient(top, #020307 0%, #144fbc 100%); + background: -o-linear-gradient(top, #020307 0%, #144fbc 100%); + background: -ms-linear-gradient(top, #020307 0%, #144fbc 100%); + background: linear-gradient(to bottom, #020307 0%, #144fbc 100%); + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#020307', endColorstr='#144fbc', GradientType=0 ); + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -o-user-select: none; + user-select: none; + position: relative; + height: 100vh; + overflow: hidden; +} + +.page .menu { + padding: 0; +} +.page .menu a { + color: #2683ff; +} +.page .title { + font-size: 42px; + margin-bottom: 0.5em; +} +.page .lead { + color: #333; + margin-bottom: 1em; +} +.header-bg { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-size: cover; + -webkit-transition: transform 0.1s ease-in-out; + -moz-transition: transform 0.1s ease-in-out; + -ms-transition: transform 0.1s ease-in-out; + transition: transform 0.1s ease-in-out; +} +.header-content { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: 100%; + height: 100%; + display: table; +} +.headlines { + display: block; + max-width: 800px; + margin: 0 auto; + position: relative; + top: 190px; + top: 22vh; + z-index: 2; + padding: 1em; +} +.headlines h1 { + font-size:49px; + color: #fff; + line-height: 68px; + margin-bottom: 18px; +} +.headlines p { + padding-bottom: 24px; + max-width: 680px; + line-height: 1.8em; + font-size: 18px; + margin: 0 auto; + color: #fff; +} +.notice { + color: #fff; + opacity: 0.7; +} +.home .btn { + position: relative; + z-index: 2; + max-width: 360px; +} +.open-source .btn { + margin: 1.4em auto 0; +} +.home input { + max-width: 360px; +} +.home .email { + padding-bottom: 14px; +} + +.white-tooltip + .tooltip > .tooltip-inner { + background-color: #fff; + color:#333; +} +.tooltip-inner { + padding: 10px; + max-width: 154px; +} + +.terminal{ + background: #020202; + background: rgba(0, 0, 0, 0.9); + height: 370px; + width: 100%; + margin: 0 auto; + padding: 20px 24px; + border-radius: 9px; + box-shadow: 0 10px 40px #000000; + position: absolute; + top: 420px; +} +.terminal p { + color: #91D127; + font-weight: bold; + font-family: monospace; + font-size: 13px; +} +.terminal-text { + display: none; +} + + +/* -------------------------------- + +Value Propositions + +-------------------------------- */ + +.value { + padding: 4em 0 2em; + z-index: 3; + position: relative; +} +.value h4 { + margin-top: 1.2em; +} +.value p { + padding-bottom: 0.4em; +} +.value img { + height: 62px; +} +.value-icon { + background: #fff; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); + border: 1px solid #eee; + padding: 2.7em 2em; + margin: 2em auto; + width: 150px; + height: 150px; + border-radius: 75px; +} +.icon-opensource { + height: 80px; + margin-top: -12px; +} + + +/* -------------------------------- + +Developers + +-------------------------------- */ + +.terminal-wrapper { + width: 100%; + max-width: 642px; + margin: 0 auto; + background: #fff; + border-radius: 9px; + margin-top: 2.1em; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); + border: 1px solid #eee; +} +.terminal-wrapper-2 { + width: 100%; + background: #fff; + border-radius: 9px; + margin-top: 2.1em; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); + border: 1px solid #eee; +} +.terminal-content { + text-align: left; + padding: 2em; +} +.terminal-content code { + font-size: 16px; + font-weight: bold; + font-family: monospace; + background: none; + color: #333; +} +.noselect { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: default; +} +.terminal-content .noselect { + color: #333; +} +.contributor-profile { + width: 70px; + height: 70px; + border-radius: 35px; + margin: 0.8em 0.4em; + display: inline-block; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); +} +.github-card { + margin: 2em auto; +} +.code-example { + padding-top: 14px; + padding-bottom: 9px; +} +.editor { + margin: 20px 0; + background: #fff; + border-radius: 9px; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); + border: 1px solid #eee; +} +pre { + border: 0; + background: #fff !important; +} +.token.selector, .token.attr-name, .token.string, .token.char, .token.builtin, .token.inserted { + color: #88C425; + font-weight: bold; +} +.token.atrule, .token.attr-value, .token.keyword { + color: #2683ff; + font-weight: bold; +} +.token.function { + color: #FF7F00; + font-weight: bold; +} +.line-numbers .line-numbers-rows { + border-right: 1px solid #eee; +} +.line-numbers-rows > span:before { + color: #ddd; +} + +.nav-stacked li.active a { + font-weight: 800; + color: #2683ff; + background: #fff; + border-left-color: #2683ff; + border-radius: 2px; +} +.nav-stacked li a:hover { + color: #2683ff; + border-left-color: #ddd; + background: #f2f2f2; +} +.nav-stacked li a:focus { + color: #2683ff; +} +.nav-stacked li.active a:hover { + border-left-color: #2683ff; +} + + +/* -------------------------------- + +Exchanges + +-------------------------------- */ + +.exchange-logo { + width: 180px; + height: 180px; + padding: 20px; + margin: 30px 20px 20px; + background: #fff; + border-radius: 5px; + border: 1px solid #eee; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); + -webkit-transition: all 200ms ease-in-out; + -moz-transition: all 200ms ease-in-out; + -o-transition: all 200ms ease-in-out; + transition: all 200ms ease-in-out; +} +.exchange-logo:hover { + border-color: #2683ff; +} + + +/* -------------------------------- + +Calculator + +-------------------------------- */ + +.calculator-section { + padding-top: 0; +} +.calculator.form-group { + padding: 2em 4em 2.5em; + background: #fff; + margin: 2em 0; + border-radius: 8px; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); + border: 1px solid #eee; +} +.calculator input { + display: inline-block; + border: 1px solid #E4E4E4; + border-radius: 3px; + margin: 0; + max-width: 100%; +} +.calculator-select { + background: none; + border: 0; + display: inline-block; + margin: 0; + padding: 0; + text-indent: 0; + cursor: pointer; + font-size: 28px; + font-weight: 800; + color: #555; + height: 58px; +} +.calculator-unit { + padding: 0; +} +.calculator .input-group { + margin: 9px 0; + width: 100%; +} +.calculator .lead { + line-height: 36px; + margin-bottom: 0; + padding-top: 0.5em; + font-size: 19px; +} +.calculator .btn-signup { + max-width: 100%; +} +.calculator .input-group-addon:last-child { + width: 100px; + color: #555; + background: #f9f9f9; + border: 1px solid #E4E4E4; + border-radius: 3px; + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-left: 0; + text-align: left; + font-size: 28px; +} +.calculator .input-group-addon:first-child { + background: #fff; + border: 1px solid #E4E4E4; + border-radius: 3px; + border-top-right-radius: 0; + border-bottom-right-radius: 0; + border-right: 0; + font-size: 28px; + color: #88C425; + font-weight: 800; +} +.promise { + color: #999; + font-size: 10px; + margin-top: 14px; +} +input.calculator-price { + font-weight: 800; + color: #88C425; + font-size: 28px; + background: #fff !important; + height: 60px; + box-shadow: none; + -moz-appearance:textfield; +} +input.calculator-price:focus { + border: 1px solid #ddd; + box-shadow: none; +} +.calculator-storage, .calculator-bandwidth { + font-size: 28px; + height: 60px; + padding-left: 20px; + font-weight: 800; +} + + +/* -------------------------------- + +Pricing + +-------------------------------- */ + +.pricing.section { + padding-bottom: 3em; +} +.plans { + margin: 1em auto; +} +.plan { + background: #fff; + margin: 2em 0; + border: 1px solid #eee; + border-radius: 5px; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); +} +.plan-icon { + margin-top: 2em; + margin-bottom: 0.2em; + height: 62px; +} +.plan-title { + line-height: 4em; + text-transform: uppercase; + margin-bottom: 0; + border-bottom: 1px solid #eee; + font-weight: 800; + color: #2683ff; +} +.plan-pricing { + line-height: 2em; + font-size: 42px; + margin-top: 16px; + padding-bottom: 42px; + font-weight: 800; + color: #2683ff; +} +.plan-pricing { + margin-top: 0; +} +.plan-pricing span { + display: block; + font-size: 15px; + line-height: 0; + background: #fff; + text-transform: uppercase; +} + +.plan h4 { + line-height: 1.5em; + padding-top: 2px; + color: #333; +} +.plan-currency { + font-size: 36px; + vertical-align: top; +} +.plan-feature-number, .plan-select-storage, .plan-select-transfer { + margin-bottom: 1.5em; +} + +.compare { + border: 0; +} +.compare-table { + margin: 2em auto; +} +.compare-logo { + width: auto; + height: 64px; + margin-top: 1.4em; +} +.compare-product { + height: 7em; + padding-left: 1em; + padding-right: 1em; + border-bottom: 1px dashed #eee; +} +.compare-pricing { + padding-bottom: 0; + margin-bottom: 0; + margin-top: 22px; + line-height: 2em; + font-size: 34px; + font-weight: 800; + color: #999; +} +.compare-pricing span { + font-size: 18px; + margin-left: 10px; +} + +#getStarted { + margin-bottom: 1em; +} +.get-started-form { + display: none; +} +.get-started-form input { + display: inline-block; + margin: 0; +} +.get-started-form .btn { + margin: 0; + margin-left: 10px; + width: auto; +} +.get-started-form .email { + margin-bottom: 1em; + padding-bottom: 14px; +} + + +/* -------------------------------- + +Upload Section + +-------------------------------- */ + +.upload { + margin: 2.5em auto; + padding: 0 1em; +} +.upload-icons { + display: inline-block; + width: 52px; + margin: 0.75em; +} +.upload-text { + display: inline-block; +} +.upload-gui { + width: 100%; + max-width: 460px; + margin-bottom: 1em; +} +.upload-intro { + margin-bottom: 3em; +} + + +/* -------------------------------- + +Quotes + +-------------------------------- */ + +.quotes { + padding: 4em 0; +} +.quote-image { + width: 134px; + height: 134px; + border-radius: 50%; + margin: 0 auto 1.4em; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); +} + +.slick-slider { + margin-bottom: 0 !important; +} +.slick-slide { + cursor: move; + opacity: 0.5; +} +.slick-current { + opacity: 1; +} +.slick-slide:focus { + outline: 0; +} +.slick-prev:before, .slick-next:before { + color: #2683ff !important; +} +.slick-prev, .slick-next { + z-index: 99; +} +.slick-slide p { + line-height: 1.5; + font-size: 16px; +} +blockquote { + background: #fff; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); + border-radius: 5px; + border: 1px solid #eee; +} + + +/* -------------------------------- + +C2A + +-------------------------------- */ + +.c2a-wrapper { + padding: 5em 0 6em; +} +.c2a h1 { + font-size: 42px; + margin-bottom: 0.5em; +} +.c2a p { + margin-bottom: 1.8em; + font-size: 18px; +} + + +/* -------------------------------- + +Video + +-------------------------------- */ + + +/* -------------------------------- + +Footer + +-------------------------------- */ + +footer { + padding-top: 3.5em; + background: #0e2338; + background-size: cover; + text-align: left; +} +.footer-logo:hover, .footer-logo:focus { + text-decoration: none; +} +.footer-logo { + display: block; + margin-top: 1px; +} +.footer-logo img { + width: 90px; + display: block; +} +footer a { + padding-bottom: 2px; + line-height: 34px; + font-size: 14px; + color: #fff; +} +footer a:hover { + color: #fff; +} +footer p { + font-size: 14px; + line-height: 28px; + margin-bottom: 4px; + color: #fff; +} +footer h5 { + padding-bottom: 0.5em; + margin-top: 1em; + color: #fff; + text-transform: uppercase; +} +footer .connect { +} +footer .connect a { + padding-right: 1.2em; + border: 0; +} +footer .address { + padding: 2em 0 2em; +} +footer .address address { + margin: 0; + color: #525d69; + color: rgba(255,255,255,0.4); + font-size: 14px; +} +footer .list-unstyled { + padding-top: 0.5em; + padding-bottom: 0.5em; +} +.social-link { + height: 22px; + width: 22px; + margin-right: 0.6em; + opacity: 1; + background: #fff; + border-radius: 3px; + padding: 4px; +} +.btn-footer { + font-weight: 800; + text-transform: uppercase; + background: #2683FF; + color: #FFF; + font-size: 16px; + padding: 12px 16px; + border: 0; + z-index: 2; + outline: 0; + -webkit-backface-visibility: hidden; + -moz-osx-font-smoothing: grayscale; + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; +} +.row.is-flex { + display: flex; + flex-wrap: wrap; +} +.row.is-flex > [class*='col-'] { + display: flex; + flex-direction: column; +} + +/* +* And with max cross-browser enabled. +* Nobody should ever write this by hand. +* Use a preprocesser with autoprefixing. +*/ +.row.is-flex { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-wrap: wrap; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.row.is-flex > [class*='col-'] { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: vertical; + -webkit-box-direction: normal; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} + +/* -------------------------------- + +Buckets + +-------------------------------- */ + +.content { + border: 1px solid #eee; + background: #fff; + border-radius: 5px; + padding: 2em; + margin-bottom: 2em; +} +label { + margin-bottom: 0.8em; +} +.table { + margin-bottom: 0; +} +.table-responsive.content { + padding: 0; +} +tr { + -webkit-transition: all 0.15s ease-in-out; + -moz-transition: all 0.15s ease-in-out; + -ms-transition: all 0.15s ease-in-out; + transition: all 0.15s ease-in-out; +} +th, td { + padding: 1.8em; +} + +.table>thead>tr>th { + border-bottom: 1px solid #eee; +} +.table>thead>tr>th, .table>tbody>tr>th, .table>tfoot>tr>th, .table>thead>tr>td, .table>tbody>tr>td, .table>tfoot>tr>td { + border-top: 1px solid #eee; +} +.bucket-plan a { + text-decoration: none; +} +.bucket-icon { + padding: 22px 0 0 26px !important; + margin: 0; + width: 70px; +} +.bucket-icon img { + width: 42px; + padding: 0; + margin: 0; +} +.clickable-row { + cursor: pointer; +} +.btn-create-bucket { + margin-bottom: 2em; +} +.bucket-pricing-icon { + height: 50px; + width: 50px; + margin: 15px; +} + +.page .btn-block { + margin: 0.5em auto; + padding: 0.9em 0 0.8em; +} + +input.parent-code { + margin: 1.2em auto; + line-height: 1.8em; +} +#code { + display: none; +} + + +/* -------------------------------- + +Modals + +-------------------------------- */ + +.modal { + top: 120px; +} +.modal-body { + padding: 1.5em 1em 1em +} +.modal-footer { + padding: 1.5em; +} + +#loginModal .modal-body { + padding: 10px 30px; +} +#loginModal .btn { + margin: 0; + margin-bottom: 2em; +} + +/* -------------------------------- + +Sign Up + +-------------------------------- */ + + +.signup .logo { + margin: 3em auto; + width: 200px; +} +.signup .btn { + margin-bottom: 1.5em; + font-size: 16px; +} +.signup .content { + padding: 2em 3em; +} +.signup input { + min-width: 100%; +} +.signup .forgot-password { + display: block; + margin-top: 8px; +} +.password .title { + margin-bottom: 0.6em; +} +.password .content p { + margin-bottom: 2.5em; +} +.checkbox label { + padding-left: 24px; +} +.checkbox input { + margin: 3px 0 0 -26px !important; +} + + +/* -------------------------------- + +API + +-------------------------------- */ + +.api { + height: calc(100% - 110px); +} + +.api .navbar { + margin-bottom: 0; +} + +.api-wrapper, .api-iframe { + width: 100%; + height: 100%; +} + +.api .section { + padding: 0; +} + + + +/* -------------------------------- + +Community + +-------------------------------- */ + +.newsletter { + padding: 24px; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); + border: 1px solid #eee; + border-radius: 10px; + background: repeating-linear-gradient(135deg, #F29B91 0px, #F09290 30px, transparent 30px, transparent 50px, #83B3DB 50px, #84ADCB 80px, transparent 80px, transparent 100px) +} +.newsletter-inner { + background: #fff; + padding: 48px 32px 42px; +} +twitterwidget { + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); + border-radius: 9px; + margin: 0 auto; + transform: inherit; +} +.EmbeddedTweet { + overflow: visible; +} +.typeform { + height: calc(100% - 108px); +} +.typeform-wrapper { + width: 100%; + height: 100%; +} +.masonry { /* Masonry container */ + -webkit-column-count: 4; + -moz-column-count:4; + column-count: 4; + -webkit-column-gap: 1em; + -moz-column-gap: 1em; + column-gap: 1em; + margin: 1.5em; + padding: 0; + -moz-column-gap: 1.5em; + -webkit-column-gap: 1.5em; + column-gap: 1.5em; + font-size: .85em; +} +.item { + display: inline-block; + background: #fff; + width: 100%; + -webkit-transition:1s ease all; + box-sizing: border-box; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; +} +.item img{max-width:100%;} + +@media only screen and (max-width: 320px) { + .masonry { + -moz-column-count: 1; + -webkit-column-count: 1; + column-count: 1; + } +} + +@media only screen and (min-width: 321px) and (max-width: 767px){ + .masonry { + -moz-column-count: 1; + -webkit-column-count: 1; + column-count: 1; + } +} +@media only screen and (min-width: 768px) and (max-width: 1200px){ + .masonry { + -moz-column-count: 2; + -webkit-column-count: 2; + column-count: 2; + } +} +@media only screen and (min-width: 1201px) { + .masonry { + -moz-column-count: 3; + -webkit-column-count: 3; + column-count: 3; + } +} +/* -------------------------------- + +TEAM + +-------------------------------- */ + + +.team p { + text-align: center; +} +.team-member { + width: 25%; + text-align: center; + padding: 30px; + margin: 20px auto; + display: block; + float: left; +} +.team-member-image { + border-radius: 50%; + margin-bottom: 20px; + width: 70%; + max-width: 180px; + height: 70%; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); +} +.team-member-name { + height: 25px; + margin-bottom: 10px; + font-weight: 800; +} +.team-member-title { + height: 40px; + font-size: 15px; + margin-bottom: 0; +} + +.get-in-touch { + margin-top: 20px; +} + +.team-member-profile-li { + margin-top: 20px; +} + +.team-member-profile { + height: 25px; + width: 25px; + margin-right: 10px; +} +/* -------------------------------- + +FAQ + +-------------------------------- */ + +.panel { + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); + border: 1px solid #eee; +} +.panel-simple { + border: 1px solid #eee; + border-radius: 4px; +} +.panel-grey { + background-color: #FBFBFB; + border-radius: 4px; +} +.panel-home { + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); + border: 1px solid #eee; + border-radius: 4px; + background-color: none; + padding: 20px; + margin: 10px; +} +.panel-title { + border-top-right-radius: 3px; + border-top-left-radius: 3px; + background: none; + line-height: 32px; + margin-top: 0; + font-weight: 300; +} +.panel-title a { + display: block; + width: 100%; + height: 100%; + padding: 12px 20px; + color: #2683ff; +} +.panel-title [data-toggle="collapse"].collapsed { + background: none; +} +.panel-title a.collapsed { + color: #333; +} +.panel-body { + padding: 20px 30px 15px; + background: #fff; + border-bottom-right-radius: 3px; + border-bottom-left-radius: 3px; +} +.panel-body li { + margin-bottom: 10px; +} +.panel-body li p { + font-weight: 800; +} +.panel-default>.panel-heading { + background: #fff; + border-radius: 4px; + padding: 0; +} +.panel-default>.panel-heading+.panel-collapse>.panel-body { + border-top-color: #eee; +} +.panel-group .panel { + margin-bottom: 14px; +} +.panel-link:hover { + text-decoration: none; + border: 0; +} +.panel-card { + padding: 44px; + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); +} +.panel-card-simple { + padding: 46px; +} +.panel-card-partners { + padding: 40px; +} +.panel-link:hover .panel-card { + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); +} +.panel-link:active .panel-card { + box-shadow: 0 1px 15px rgba(3, 104, 255, 0.15); +} +.panel-link p { + color: #333; +} + + + +/* -------------------------------- + +Press + +-------------------------------- */ + +.press-page-title { + margin-bottom: 0; +} +.press-title { + line-height: 32px; + font-size: 18px; + border: 0; + font-weight: 300; + border-bottom: 1px solid; +} +.press-date { + margin-top: 8px; + font-size: 15px; + line-height: 24px; + color: #A8A8A8; +} +.press-source { + display: block; + margin-top: 8px; +} + +.presskit-logo { + border: 1px solid #ddd; + margin: 2em auto; + padding: 1.5em 2em 1em; + background: #fff; +} +.presskit-logo img { + max-width: 250px; + max-height: 250px; + margin: 2em auto; + display: block; + text-align: center; +} +.presskit-logo .link { + margin-left: 1em; +} +.presskit-logo.blue { + background: #2683ff; +} +.presskit-logo.blue .link { + color: #fff; +} +.presskit-logo.orange { + background: #FF7F00; + color: #fff; +} +.presskit-logo.green { + background: #88C425; + color: #fff; +} +.presskit-logo.darkblue { + background: #173AE8; +} +.presskit-logo.darkblue p{ + color: #fff; +} +.blue { + color: #fff; +} + + + +/* -------------------------------- + +404 + +-------------------------------- */ + +.not-found { + background: url('../images/404.jpg'); + background-position: center center; + background-repeat: no-repeat; + background-size: cover; + background-attachment: fixed; + padding: 100px 0 120px; +} +.not-found .title, +.not-found .lead { + color: #fff; + text-shadow: 0 0 10px #000; +} +.not-found .btn { + box-shadow: 0 0 10px #000; +} +.not-found .artwork { + color: #fff; + font-weight: normal; + opacity: 0.5; + display: block; + margin-top: 40px; +} +.not-found .artwork:hover { + opacity: 1; +} + + +/* -------------------------------- + +Contact + +-------------------------------- */ + +.contact textarea { + max-width: 100%; + margin-top: 0; +} +.contact .submit, .contact input { + max-width: 100%; +} + + +/* -------------------------------- + +News + +-------------------------------- */ + +.news { + background: #000; + border-bottom: 1px solid rgba(255, 255, 255, 0.1); +} +.news-content { + padding-top: 1em; + padding-bottom: 0.5em; +} +.news p { + color: #fff; +} + + +/* -------------------------------- + +Token Sale + +-------------------------------- */ + +.tokensale { + overflow-x: hidden; +} + +.tokensale footer { + margin-top: 3em; +} + +.tokensale-headline { + font-size: 44px; +} + +.tokensale .section { + padding-top: 2em; + padding-bottom: 2em; +} + +.tokensale hr { + margin: 0 auto; + margin-bottom: 2em; +} + +.tokensale .token-symbol { + background: #fff; + border-radius: 80px; + margin: 0 auto 2em; + width: 160px; + height: 160px; + border: 10px solid rgba(255, 255, 255, 0.2); + background-clip: content-box; + box-shadow: 0 0 0 10px rgba(255, 255, 255, 0.1); +} +.token-symbol img { + position: relative; + top: 20px; +} +.tokensale .value-icon, .tokensale , .tokensale blockquote, .tokensale .quote-image { + box-shadow: 0 0 15px rgba(0,0,0,.25); +} + +.tokensale .ethaddress, .tokensale .copy { + width: 100%; + margin: 1em auto; + margin-bottom: 0; + padding: 1.4em; + border: 1px solid #eee; + text-align: center; + background: #f9f9f9; +} +.tokensale .copy { + border-top: none; + margin: 0 auto; + padding-top: 10px; + padding-bottom: 20px; +} +.tokensale .copy:hover { + cursor: pointer; +} + +.tokensale .talking-points { + display: flex; + flex-wrap: wrap; + align-item: center; + justify-content: center; +} +.tokensale .talking-point { + display: flex; + align-items: center; + justify-content: center; + border-radius: 50%; + border: 1.5px solid #2683FF; + background-color: #fff; + height: 150px; + width: 150px; + margin: 20px 1em; + text-align: center; +} +.tokensale .talking-point h4 { + color: #2683FF; +} + +.tokensale .why-token-sale .panel.panel-card { + padding: 1em; +} +.tokensale .why-token-sale .panel a { + color: #2683FF; +} +.tokensale .why-token-sale .why-use-callout { + width: 100%; + font-size: 20px; +} + +.tokensale-partner { + padding: 1.5em; + background: #fff; + border-radius: 50%; + max-width: 145px; + box-shadow: 0 0 15px rgba(0,0,0,.25); + margin: 1em auto; +} +.tokensale .email { + display: inline-block; + height: 54px; +} +.tokensale .subscribe { + display: inline-block; + margin: 0; + height: 54px; + top: -2px; + border: 0; + position: relative; +} +.tokensale .newsletter { + background: repeating-linear-gradient(135deg, #F29B91 0px, #F09290 30px, transparent 30px, transparent 50px, #f9f9f9 50px, #f9f9f9 80px, rgba(0, 0, 0, 0) 80px, transparent 100px) +} +.tokensale .newsletter h1 { + color: #2683ff; + margin-bottom: 0.4em; +} +.tokensale .newsletter p { + color: #333; + margin-bottom: 0.2em; +} +.tokensale .promise { + margin-top: 1em; + margin-bottom: 2em; +} + +.tokensale .team, .tokensale .community { + color: #fff; +} +.tokensale .expand-team i, .tokensale .expand-community i { + margin: 0 auto; + font-size: 2em; +} +.tokensale .expand-team:hover, .tokensale .expand-community:hover { + cursor: pointer; +} +.tokensale .expanded-team, .tokensale .expanded-community { + display: none; +} + +.tokensale .team-member-image { + margin-bottom: 10px; + width: 60%; + height: 60%; + max-width: 180px; +} +.tokensale .team .founder-member-profile { + margin-top: 20px; + margin-right: 0; + height: 25px; + width: 25px; +} +.tokensale .team-member-name { + margin-bottom: 5px; +} +.tokensale .team-member { + margin: 10px auto; +} +.tokensale .team-member .team-member-profile { + margin: 0 auto; +} +.tokensale #social h4 { + color: #2683ff; + font-size: 14px; + text-transform: uppercase; +} +.tokensale #social .panel { + border-radius: 50%; + box-shadow: 0 0 15px rgba(0,0,0,.25); + width: 120px; + height: 120px; + margin: 1em auto; + padding: 1.4em 0; +} + +.tokensale #social-small { + position: fixed; + left: 0; + right: 0; + bottom: 0; + z-index: 1000; + display: flex; +} + +/* Portrait and Landscape */ +@media only screen + and (max-device-width: 768px) + and (-webkit-min-device-pixel-ratio: 1) { + .tokensale #social-small { + display: none; + } +} +.tokensale #social-small .link-icon { + margin: 10px 2.5px; + display: flex; + justify-content: center; + align-items: center; + border-radius: 50%; + border: 1.5px solid #2683FF; + height: 40px; + width: 40px; + background-color: #fff; +} +.tokensale #social-small .link-icon:first-child { + margin-left: 10px; +} +.tokensale #social-small .link-icon img { + height: 25px; + width: 25px; +} + +.tokensale-banner { + background: #2683ff; + background-image: url(../images/banner-bg.jpg); + background-size: cover; + background-repeat: no-repeat; + background-position: center center; +} +.tokensale-banner p { + margin: 16px auto; + color: #fff; + text-transform: uppercase; + border-bottom: 1px solid #fff; + width: 275px; +} + +.tokensale .why-token-point { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; +} + +.tokensale .why-use-points { + display: flex; + align-items: center; + justify-content: center; + flex-direction: row; + flex-wrap: wrap; +} + +.tokensale .why-use .why-token-point { + display: flex; + flex-direction: column; + align-items: center; + color: #444; + text-align: center; + padding-top: 30px; + padding-bottom: 30px; +} +.tokensale .why-token-icon { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 30px; + margin-top: 20px; +} +.tokensale .why-token-icon img { + height: 85px; + width: 85px; +} +.tokensale .why-use-callout { + border-top: 2px solid #2683FF; + border-bottom: 2px solid #2683FF; + width: 70%; + margin: 0 auto; + padding-top: 15px; + padding-bottom: 15px; +} + +.tokensale .highlight-icon { + margin-bottom: 30px; + margin-top: 20px; +} +.tokensale .highlight-icon > .glyphicon { + position: relative; + top: 50%; + transform: translateY(-50%); + font-size: 75px; + color: #2683FF; +} + +.secondForm { + padding-left: 20px; + padding-right: 20px; +} + +.contactEmail, .contactComments { + margin: 0; + min-width: 100%; +} + +#confirmation-modal p, #confirmation-modal label { + color: #444; +} + +#confirmation-modal .toggleContactForm { + color: #2683FF; + cursor: pointer; +} + +/* -------------------------------- + Token sale Accordion faqs +-------------------------------- */ + +.tokensale .faqs, .presale .faqs, .tokensale .faqs a { + color: #FFF; +} + +.tokensale .faqs .panel-body h1, +.tokensale .faqs .panel-body h2, +.tokensale .faqs .panel-body h3, +.tokensale .faqs .panel-body h4, +.tokensale .faqs .panel-body h5, +.tokensale .faqs .panel-body h6, +.tokensale .faqs .panel-body p, +.tokensale .faqs .panel-body a { + color: #000; +} + +.tokensale .faqs .panel { + border-color: #FFF; +} + +.tokensale .faqs .panel-heading { + background-color: #2683FF; +} + +.tokensale .faqs .panel-body { + color: #000; + background-color: #FFF; +} + +.tokensale .faqs .panel-body .link { + color: #000; +} +.tokensale .faqs .panel-body .link:hover { + color: #2683FF; +} + +.tokensale .faqs .panel-body .panel-font { + color: #134280; + opacity: 1; +} + +.tokensale .faqs .q-a, .presale .faqs, .q-a { + padding: 20px; + padding-bottom: 40px; + margin: 20px; +} +.tokensale .faqs .question, .presale .faqs .question { + font-weight: bold; + font-size: 22px; + margin-bottom: 5px; +} + + +/* -------------------------------- + Presale class +-------------------------------- */ + +.presale .tokensale-countdown { + margin-bottom: 20px; +} +.presale .presale-contents input { + max-width: 100%; + max-height: 6em; +} + +.presale .presale-contents { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin: 0 auto; +} +.presale .presale-calculator { + display: flex; + justify-content: center; +} +.presale .presale-calculator-results { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: center; + align-items: center; +} +@media (max-width: 700px) { + .presale .presale-calculator-results { + flex-direction: column; + } +} +.presale .presale-calculator-results div { + padding: 0 1em; + width: 300px; +} +.presale .presale-calculator-results div:nth-child(2) { + padding: 0 1em; + width: 100px; +} +.presale .presale-calculator-results .presale-results { + font-weight: bold; + color: #88c425 +} +.presale .presale-difference { + color: #88c425; + font-size: 32px; +} +.presale .presale-disclaimer { + color: #ccc; +} +.presale .presale-form h3 { + padding: 1em 1.5em; +} + +#token-webapp { + height: 1440px; +} + +/* -------------------------------- + +Conversion + +-------------------------------- */ +.conversion, +.conversion h1, +.conversion h2, +.conversion h3, +.conversion h4, +.conversion h5, +.conversion h6 { + color: #fff; +} + +/* -------------------------------- + +Media Queries + +-------------------------------- */ + + +@media (min-width: 1200px) { + .text-left-lg { + text-align: left; + } + .text-right-lg { + text-align: right; + } + .text-center-lg { + text-align: center; + } + .navbar-page { + padding-left: 30px; + padding-right: 30px; + } + .home .plan { + margin: 2em 1em; + } +} + +@media (min-width: 992px) and (max-width: 1199px) { + .text-left-md { + text-align: left; + } + .text-right-md { + text-align: right; + } + .text-center-md { + text-align: center; + } + .value p { + font-size: 14px; + } + .team-member { + padding: 30px 0; + } + .panel-card { + padding: 44px 22px; + } +} + +@media (max-width: 991px) { + .text-left-sm { + text-align: left; + } + .text-right-sm { + text-align: right; + } + .text-center-sm { + text-align: center; + } + .upload { + padding: 0; + margin: 1em auto; + } + .upload-gui { + margin-top: 1em; + } + .navbar-nav>li>a, .navbar-page .navbar-nav>li>a { + padding: 40px 8px; + font-size: 14px; + } + .btn-menu { + padding-left: 15px; + padding-right: 15px; + } + .team-member { + width: 50%; + } + #token-webapp { + height: 1540px; + } +} + +@media (min-width: 767px) and (max-width: 991px) { + .logo { + margin: 0; + margin-right: 8px; + } +} + +@media (max-width: 767px) { + .text-left-xs { + text-align: left; + } + .text-right-xs { + text-align: right; + } + .text-center-xs { + text-align: center; + } + .header { + height: auto; + min-height: 600px; + padding-bottom: 5em; + } + .header-content { + position: relative; + } + .headlines { + top: auto; + } + .navbar-page .logo { + margin-left: 0; + } + .navbar-right { + text-align: center; + padding-bottom: 1em; + } + .navbar-page .navbar-nav>li>a { + padding: 16px; + width: 90%; + } + .navbar-page .navbar-nav>li>a.active { + background: #2683ff; + color: #fff; + box-shadow: none; + } + .navbar-page .navbar-nav>li>a:hover, .navbar-page .navbar-nav>li>a:focus { + box-shadow: none; + background: #f2f2f2; + } + .navbar-page .navbar-nav>li>a.active:hover, .navbar-page .navbar-nav>li>a.active:focus { + background: #2683ff; + } + .navbar-default .navbar-toggle { + margin-top: 2em; + margin-right: 2em; + } + .navbar-default .navbar-nav .open .dropdown-menu>li>a { + color: #fff; + } + .navbar-page .navbar-nav .open .dropdown-menu>li>a { + color: #333; + font-size: 14px; + } + ..navbar-page .navbar-nav .open .dropdown-menu>li>a { + color: #333; + font-size: 14px; + } + .navbar-default .navbar-nav .open .dropdown-menu>li>a:hover, .navbar-default .navbar-nav .open .dropdown-menu>li>a:focus { + color: #fff; + text-decoration: underline; + } + .navbar-page .navbar-nav .open .dropdown-menu>li>a:hover, .navbar-page .navbar-nav .open .dropdown-menu>li>a:focus { + color: #2683ff; + text-decoration: underline; + background: #f2f2f2; + } + .navbar .dropdown.open { + border-bottom: 1px solid rgba(0,0,0,0.2); + } + .navbar-page .dropdown.open { + border-bottom: 0; + } + .navbar-page .open .dropdown-menu { + background-color: #f9f9f9; + } + .home .navbar .dropdown-menu { + border: 1px solid rgba(255, 255, 255, 0.2); + background: rgba(0,0,0,0.4); + border: 0; + text-indent: -8px; + } + + .navbar-page .dropdown-menu { + text-indent: -8px; + } + .navbar li.dropdown { + width: 100%; + } + .navbar .dropdown { + box-shadow: none; + } + .navbar-nav .open .dropdown-menu>li>a { + line-height: 42px; + text-align: center; + } + .btn-menu { + width: 100%; + margin: 0.5em 0; + } + .navbar-page .btn-rent { + width: 90% !important; + margin-top: 18px; + } + .navbar-page .btn-rent:hover { + background: #fff !important; + } + .home .nav>li>.link:hover, .home .nav>li>.link:focus { + border-bottom: 0; + } + .navbar-nav>li>a { + padding: 20px 10px; + } + .btn-rent { + margin: 1em auto; + } + .compare-product { + padding: 0; + } + .compare-pricing { + font-size: 24px; + margin-top: 1.2em; + } + .compare-pricing span { + margin-left: 6px; + } + .compare-logo { + max-width: 150px; + height: auto; + } + .team-member { + padding: 30px 8px; + } + footer .address address { + color: #fff; + } + #token-webapp { + height: 1800px; + } +} + +@media (max-width: 480px) { + .section { + padding: 2em 0; + } + .logo { + width: 100px; + } + .home .navbar-brand { + margin: 25px 0; + } + .navbar-page .navbar-brand { + margin: 15px; + } + .navbar-page .navbar-toggle { + margin-top: 22px; + margin-right: 1em; + } + .btn-action { + padding-left: 10px; + padding-right: 10px; + } + .btn-download { + padding: 22px; + font-size: 16px; + } + .page .btn-block { + font-size: 16px; + } + .headlines { + padding: 0; + } + h1 { + font-size: 32px; + } + .page .title { + font-size: 32px; + } + .btn { + padding-left: 20px; + padding-right: 20px; + } + .headlines h1 { + font-size: 32px; + line-height: 46px; + } + .headlines p { + padding-bottom: 16px; + font-size: 16px; + } + .panel-card { + padding: 28px; + } + .pricing { + padding: 2em 0 4em; + } + .plans { + margin: 0 auto 1em; + } + .traction img { + margin-top: 0.6em; + margin-bottom: 1.5em; + } + .traction h2 { + font-size: 21px; + } + .slick-next { + right: -9px !important; + } + .slick-prev { + left: -9px !important; + } + .c2a-wrapper { + padding: 3em 0 3.5em; + } + .c2a h1 { + font-size: 32px; + line-height: 46px; + } + .c2a p { + font-size: 16px; + } + .compare-pricing { + font-size: 18px; + margin-top: 1em; + } + .compare-pricing span { + font-size: 16px; + margin-left: 0; + display: block; + } + .compare-logo { + max-width: 130px; + height: auto; + } + .team { + padding-top: 50px !important; + } + .team-member { + width: 100%; + padding: 10px 20px; + } + footer h4 { + margin-top: 2em; + padding-bottom: 0; + } + .footer-logo p { + display: block; + } + .tokensale-headline { + font-size: 32px; + } + .tokensale-banner .lead { + font-size: 14px; + } + #token-webapp { + height: 2000px; + } + .tokensale .why-token-point { + padding: 20px 40px; + } + .tokensale .ethaddress { + font-size: 0.8em; + padding: 2em 0; + } + + h1 #board_title { + text-align: center; + } + +} + +/* Timeline */ +.timeline, +.timeline-horizontal { +list-style: none; +padding: 20px; +position: relative; +} +.timeline:before { +top: 40px; +bottom: 0; +position: absolute; +content: " "; +width: 3px; +background-color: #eeeeee; +left: 50%; +margin-left: -1.5px; +} +.timeline .timeline-item { +margin-bottom: 20px; +position: relative; +} +.timeline .timeline-item:before, +.timeline .timeline-item:after { +content: ""; +display: table; +} +.timeline .timeline-item:after { +clear: both; +} +.timeline .timeline-item .timeline-badge { +color: #fff; +width: 26px; +height: 26px; +line-height: 52px; +font-size: 22px; +text-align: center; +position: absolute; +top: 18px; +left: 50%; +margin-left: -9px; +background-color: #7c7c7c; +border: 3px solid #ffffff; +z-index: 100; +border-top-right-radius: 50%; +border-top-left-radius: 50%; +border-bottom-right-radius: 50%; +border-bottom-left-radius: 50%; +} +.timeline .timeline-item .timeline-badge i, +.timeline .timeline-item .timeline-badge .fa, +.timeline .timeline-item .timeline-badge .glyphicon { +top: 2px; +left: 0px; +} +.timeline .timeline-item .timeline-badge.primary { +background-color: #2683FF; +} +.timeline .timeline-item .timeline-badge.info { +background-color: #5bc0de; +} +.timeline .timeline-item .timeline-badge.success { +background-color: #59ba1f; +} +.timeline .timeline-item .timeline-badge.warning { +background-color: #d1bd10; +} +.timeline .timeline-item .timeline-badge.danger { +background-color: #ba1f1f; +} +.timeline .timeline-item .timeline-panel-genesis { + position: relative; + width: 46%; + float: left; + right: 16px; + border: 1px solid #c0c0c0; + background: #ffffff; + border-radius: 2px; + padding: 20px; + -webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.175); + box-shadow: 0 1px 6px rgba(0, 0, 0, 0.175); + } + .timeline .timeline-item .timeline-panel-genesis:before { + position: absolute; + top: 26px; + right: -16px; + display: inline-block; + border-top: 16px solid transparent; + border-left: 16px solid #c0c0c0; + border-right: 0 solid #c0c0c0; + border-bottom: 16px solid transparent; + content: " "; + } +.timeline .timeline-item .timeline-panel { +position: relative; +width: 46%; +float: left; +right: 16px; +border: 1px solid #c0c0c0; +background: #ffffff; +border-radius: 2px; +padding: 20px; +-webkit-box-shadow: 0 1px 6px rgba(0, 0, 0, 0.175); +box-shadow: 0 1px 6px rgba(0, 0, 0, 0.175); +} +.timeline .timeline-item .timeline-panel:before { +position: absolute; +top: 26px; +right: -16px; +display: inline-block; +border-top: 16px solid transparent; +border-left: 16px solid #c0c0c0; +border-right: 0 solid #c0c0c0; +border-bottom: 16px solid transparent; +content: " "; +} +.timeline .timeline-item .timeline-panel .timeline-title { +margin-top: 0; +color: inherit; +} +.timeline .timeline-item .timeline-panel .timeline-body > p, +.timeline .timeline-item .timeline-panel .timeline-body > ul { +margin-bottom: 0; +} +.timeline .timeline-item .timeline-panel .timeline-body > p + p { +margin-top: 5px; +} +.timeline .timeline-item:last-child:nth-child(even) { +float: right; +} +.timeline .timeline-item:nth-child(even) .timeline-panel-genesis { + float: right; + left: 16px; + } + .timeline .timeline-item:nth-child(even) .timeline-panel-genesis:before { + border-left-width: 0; + border-right-width: 14px; + left: -14px; + right: auto; + } + +.timeline .timeline-item:nth-child(even) .timeline-panel { +float: right; +left: 16px; +} +.timeline .timeline-item:nth-child(even) .timeline-panel:before { +border-left-width: 0; +border-right-width: 14px; +left: -14px; +right: auto; +} +.timeline-horizontal { +list-style: none; +position: relative; +padding: 20px 0px 20px 0px; +display: inline-block; +} +.timeline-horizontal:before { +height: 3px; +top: auto; +bottom: 26px; +left: 56px; +right: 0; +width: 100%; +margin-bottom: 20px; +} +.timeline-horizontal .timeline-item { +display: table-cell; +height: 280px; +width: 20%; + +float: none !important; +padding-left: 0px; +padding-right: 20px; +margin: 0 auto; +vertical-align: bottom; +} +.timeline-horizontal .timeline-item .timeline-panel-genesis { + top: auto; + bottom: 64px; + display: inline-block; + float: none !important; + left: 0 !important; + right: 0 !important; + height: 114px; + width: 160px; + margin-bottom: 20px; + margin-right:10px; + border: 1px solid #E2E2E2; border-radius: 4px; background-color: #FFFFFF; box-shadow: 0 2px 12px 0 rgba(0,0,0,0.09); + } + + .timeline-horizontal .timeline-item .timeline-panel-genesis:before { + top: auto; + bottom: -16px; + left: 28px !important; + right: auto; + border-right: 16px solid transparent !important; + border-top: 16px solid #c0c0c0 !important; + border-bottom: 0 solid #c0c0c0 !important; + border-left: 16px solid transparent !important; + } + +.timeline-horizontal .timeline-item .timeline-panel { +top: auto; +bottom: 64px; +display: inline-block; +float: none !important; +left: 0 !important; +right: 0 !important; +height: 114px; +width: 160px; +margin-bottom: 20px; +margin-right:10px; +border: 1px solid #E2E2E2; border-radius: 4px; background-color: #FFFFFF; box-shadow: 0 2px 12px 0 rgba(0,0,0,0.09); +} + +.timeline-horizontal .timeline-item .timeline-panel:before { +top: auto; +bottom: -16px; +left: 28px !important; +right: auto; +border-right: 16px solid transparent !important; +border-top: 16px solid #c0c0c0 !important; +border-bottom: 0 solid #c0c0c0 !important; +border-left: 16px solid transparent !important; +} + + + +.timeline-horizontal .timeline-item:before, +.timeline-horizontal .timeline-item:after { +display: none; +} +.timeline-horizontal .timeline-item .timeline-badge { +top: auto; +bottom: 14px; +left: 43px; +} + +.milestones::-webkit-scrollbar { + width: 0px; + background: transparent; /* make scrollbar transparent */ +} + +.white-paper-header-bg{ + + background: url("../images/background.png") center top no-repeat; + background-size: cover; + +} + +.community-bg { + margin:0px; + background: url("../images/combkgrnd.png") center top no-repeat; + background-size: cover; +} + +.community-city{ + height:445px; + width:1086px; + background: url("../images/comcity.png") center top no-repeat; + background-size: cover; +} + + +.dev-banner-img{ + margin:0px; + background: url("../images/dev-banner-image.png") center top no-repeat; + background-size: cover; +} +/*.bg img{width:100%; margin-top:80px;}*/ diff --git a/template/index9/assets/picture/bg2.png b/template/index9/assets/picture/bg2.png new file mode 100644 index 0000000..0f27e8c Binary files /dev/null and b/template/index9/assets/picture/bg2.png differ diff --git a/template/index9/assets/picture/daoyan.png b/template/index9/assets/picture/daoyan.png new file mode 100644 index 0000000..766121b Binary files /dev/null and b/template/index9/assets/picture/daoyan.png differ diff --git a/template/index9/assets/picture/doudou.svg b/template/index9/assets/picture/doudou.svg new file mode 100644 index 0000000..d89e66f --- /dev/null +++ b/template/index9/assets/picture/doudou.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/index9/assets/picture/easy.svg b/template/index9/assets/picture/easy.svg new file mode 100644 index 0000000..b889149 --- /dev/null +++ b/template/index9/assets/picture/easy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/index9/assets/picture/easyapi-logo.svg b/template/index9/assets/picture/easyapi-logo.svg new file mode 100644 index 0000000..f548ea1 --- /dev/null +++ b/template/index9/assets/picture/easyapi-logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/index9/assets/picture/logo1.ico b/template/index9/assets/picture/logo1.ico new file mode 100644 index 0000000..a84360d Binary files /dev/null and b/template/index9/assets/picture/logo1.ico differ diff --git a/template/index9/assets/picture/money.svg b/template/index9/assets/picture/money.svg new file mode 100644 index 0000000..3c9c8ea --- /dev/null +++ b/template/index9/assets/picture/money.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/index9/assets/picture/risk.svg b/template/index9/assets/picture/risk.svg new file mode 100644 index 0000000..a0b44ed --- /dev/null +++ b/template/index9/assets/picture/risk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/index9/assets/picture/server.svg b/template/index9/assets/picture/server.svg new file mode 100644 index 0000000..832aaea --- /dev/null +++ b/template/index9/assets/picture/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/index9/assets/picture/shop2.svg b/template/index9/assets/picture/shop2.svg new file mode 100644 index 0000000..1b0e2a6 --- /dev/null +++ b/template/index9/assets/picture/shop2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/index9/assets/picture/ssl.svg b/template/index9/assets/picture/ssl.svg new file mode 100644 index 0000000..35665da --- /dev/null +++ b/template/index9/assets/picture/ssl.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/index9/assets/picture/wechatpay.svg b/template/index9/assets/picture/wechatpay.svg new file mode 100644 index 0000000..7f6eff8 --- /dev/null +++ b/template/index9/assets/picture/wechatpay.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/template/index9/index.php b/template/index9/index.php new file mode 100644 index 0000000..40f12eb --- /dev/null +++ b/template/index9/index.php @@ -0,0 +1,300 @@ + + + + + + + <?php echo $conf['title']?> + + + + + + + + + + +
    + +
    + + + +
    +
    +
    +
    +

    每个梦想,都值得灌溉

    +

    + 旨在解决需要使用交易数据流的企业发卡、个人发卡、主机IDC等网站支付需求,提供的一个正规、安全、稳定、可靠、丰富的支付接口 API, + 帮助开发者等个人主体快速使想法转变为产品原型。让创造价值的人体现价值。

    +
    +

    帮助开发者快速将支付(支付宝,钱包,微信)集成到自己相应产品,效率高,见效快,费率低

    +
    +

    Make Something Amazing

    +
    + + +
    + + +
    + +
    + +
    +
    +
    +
    + +
    + +
    +
    + + + + + + +
    + +
    + +
    + Open-Source Software +
    + +

    安全保证

    +

    多重账号保护措施安全可靠;业内费率低,维护商户利益,7*24小时全天候服务;

    +
    + + +
    + +
    + Open-Source Software +
    +

    资金安全

    +

    只负责交易处理不参与资金清算 保障您的资金安全

    + + +
    + + +
    + +
    + Open-Source Software +
    + +

    高效服务

    +

    产品服务灵活组合
    满足企业 多元化 业务需求

    +
    +
    + +
    + +
    +
    + Open-Source Software +
    +

    极简使用

    +

    七行代码,极速完成,支付SDK接入 简洁的操作界面易于使用

    +
    + +
    +
    + Open-Source Software +
    +

    简单易用

    +

    对于线下收款商户,免开发直接使用。开发者可自行对接使用

    +
    + +
    +
    + Open-Source Software +
    +

    完整 API + 开源代码

    +

    提供完整的 API 和丰富的开源开发包、SDK、DEMO 供接入参考

    +
    +
    +
    +
    + +
    +
    +
    + +
    +
    +
    +
    +

    产品价格

    +
    + 使用费用 = 订单费率 + 手续费 + +
    +
    +
    + +
    +
    +
    +
    +
    +

    一次性注册费用

    + +

    由导演易支付收取注册费用

    +
    +
    +
    +
    +
    +
    +
    +
    +

    三网支付订单费率

    + +

    3%由导演易支付官方收取

    +
    +
    +
    +
    +
    +
    +
    +
    +
    +

    站长创业资助

    + +

    1-2%初创项目有减免机制最低0.8%

    +
    +
    +
    +
    +
    +
    +
    +
    +
    + + +
    +
    +
    +

    开通流程

    +
    + 自助开户,开通流程大概需要 3 分钟 +
    +
    + + +
    +
    + +
    +
    + +
    +
    + +
    +
    +
    +
    +
    + +
      © 2020 All Rights Reserved. 
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/template/index9/preview.png b/template/index9/preview.png new file mode 100644 index 0000000..d9fb5a3 Binary files /dev/null and b/template/index9/preview.png differ diff --git a/user/ajax.php b/user/ajax.php new file mode 100644 index 0000000..dd0c406 --- /dev/null +++ b/user/ajax.php @@ -0,0 +1,465 @@ +0 && $money>$conf['pay_maxmoney'])exit('{"code":-1,"msg":"最大支付金额是'.$conf['pay_maxmoney'].'元"}'); + if($conf['pay_minmoney']>0 && $money<$conf['pay_minmoney'])exit('{"code":-1,"msg":"最小支付金额是'.$conf['pay_minmoney'].'元"}'); + $trade_no=date("YmdHis").rand(11111,99999); + $return_url=$siteurl.'user/test.php?ok=1&trade_no='.$trade_no; + $domain=getdomain($return_url); + if(!$DB->exec("INSERT INTO `pre_order` (`trade_no`,`out_trade_no`,`uid`,`tid`,`addtime`,`name`,`money`,`notify_url`,`return_url`,`domain`,`ip`,`status`) VALUES (:trade_no, :out_trade_no, :uid, 3, NOW(), :name, :money, :notify_url, :return_url, :domain, :clientip, 0)", [':trade_no'=>$trade_no, ':out_trade_no'=>$trade_no, ':uid'=>$conf['test_pay_uid'], ':name'=>$name, ':money'=>$money, ':notify_url'=>$return_url, ':return_url'=>$return_url, ':domain'=>$domain, ':clientip'=>$clientip]))exit('{"code":-1,"msg":"创建订单失败,请返回重试!"}'); + $result = ['code'=>0, 'msg'=>'succ', 'url'=>'../submit2.php?typeid='.$typeid.'&trade_no='.$trade_no]; + exit(json_encode($result)); +break; +case 'login': + $type=intval($_POST['type']); + $user=trim(daddslashes($_POST['user'])); + $pass=trim(daddslashes($_POST['pass'])); + if(empty($user) || empty($pass))exit('{"code":-1,"msg":"请确保各项不能为空"}'); + if(!$_POST['csrf_token'] || $_POST['csrf_token']!=$_SESSION['csrf_token'])exit('{"code":-1,"msg":"CSRF TOKEN ERROR"}'); + + if($conf['captcha_open_login']==1){ + $GtSdk = new \lib\GeetestLib($conf['CAPTCHA_ID'], $conf['PRIVATE_KEY']); + $data = array( + 'user_id' => 'public', # 网站用户id + 'client_type' => "web", # web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式 + 'ip_address' => $clientip # 请在此处传输用户请求验证时所携带的IP + ); + if ($_SESSION['gtserver'] == 1) { //服务器正常 + $result = $GtSdk->success_validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'], $data); + if ($result) { + //echo '{"status":"success"}'; + } else{ + exit('{"code":-1,"msg":"验证失败,请重新验证"}'); + } + }else{ //服务器宕机,走failback模式 + if ($GtSdk->fail_validate($_POST['geetest_challenge'],$_POST['geetest_validate'],$_POST['geetest_seccode'])) { + //echo '{"status":"success"}'; + }else{ + exit('{"code":-1,"msg":"验证失败,请重新验证"}'); + } + } + } + + if($type==1 && is_numeric($user) && strlen($user)<=6)$type=0; + if($type==1){ + $userrow=$DB->getRow("SELECT * FROM pre_user WHERE email='{$user}' OR phone='{$user}' limit 1"); + $pass=getMd5Pwd($pass, $userrow['uid']); + }else{ + $userrow=$DB->getRow("SELECT * FROM pre_user WHERE uid='{$user}' limit 1"); + if($userrow && $userrow['keylogin']==0){ + exit('{"code":-1,"msg":"该商户未开启密钥登录,请使用账号密码登录!"}'); + } + } + if($userrow && ($type==0 && $pass==$userrow['key'] || $type==1 && $pass==$userrow['pwd'])) { + $uid = $userrow['uid']; + if($user_id=$_SESSION['Oauth_alipay_uid']){ + $DB->exec("update `pre_user` set `alipay_uid` ='$user_id' where `uid`='$uid'"); + unset($_SESSION['Oauth_alipay_uid']); + } + if($qq_uid=$_SESSION['Oauth_qq_uid']){ + $DB->exec("update `pre_user` set `qq_uid` ='$qq_uid' where `uid`='$uid'"); + unset($_SESSION['Oauth_qq_uid']); + } + $city=get_ip_city($clientip); + $DB->exec("insert into `pre_log` (`uid`,`type`,`date`,`ip`,`city`) values ('".$uid."','普通登录','".$date."','".$clientip."','".$city."')"); + $session=md5($uid.$userrow['key'].$password_hash); + $expiretime=time()+604800; + $token=authcode("{$uid}\t{$session}\t{$expiretime}", 'ENCODE', SYS_KEY); + ob_clean(); + setcookie("user_token", $token, time() + 604800); + $DB->exec("update `pre_user` set `lasttime` ='$date' where `uid`='$uid'"); + if(empty($userrow['account']) || empty($userrow['username'])){ + $result=array("code"=>0,"msg"=>"登录成功!正在跳转到收款账号设置","url"=>"./editinfo.php?start=1"); + }else{ + $result=array("code"=>0,"msg"=>"登录成功!正在跳转到用户中心","url"=>"./"); + } + unset($_SESSION['csrf_token']); + }else { + $result=array("code"=>-1,"msg"=>"用户名或密码不正确!"); + } + exit(json_encode($result)); +break; +case 'captcha': + $GtSdk = new \lib\GeetestLib($conf['CAPTCHA_ID'], $conf['PRIVATE_KEY']); + $data = array( + 'user_id' => isset($uid)?$uid:'public', # 网站用户id + 'client_type' => "web", # web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式 + 'ip_address' => $clientip # 请在此处传输用户请求验证时所携带的IP + ); + $status = $GtSdk->pre_process($data, 1); + $_SESSION['gtserver'] = $status; + $_SESSION['user_id'] = isset($uid)?$uid:'public'; + echo $GtSdk->get_response_str(); +break; +case 'sendcode': + $sendto=daddslashes(htmlspecialchars(strip_tags(trim($_POST['sendto'])))); + if($conf['reg_open']==0)exit('{"code":-1,"msg":"未开放商户申请"}'); + if(isset($_SESSION['send_mail']) && $_SESSION['send_mail']>time()-10){ + exit('{"code":-1,"msg":"请勿频繁发送验证码"}'); + } + + $GtSdk = new \lib\GeetestLib($conf['CAPTCHA_ID'], $conf['PRIVATE_KEY']); + + $data = array( + 'user_id' => 'public', # 网站用户id + 'client_type' => "web", # web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式 + 'ip_address' => $clientip # 请在此处传输用户请求验证时所携带的IP + ); + + if ($_SESSION['gtserver'] == 1) { //服务器正常 + $result = $GtSdk->success_validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'], $data); + if ($result) { + //echo '{"status":"success"}'; + } else{ + exit('{"code":-1,"msg":"验证失败,请重新验证"}'); + } + }else{ //服务器宕机,走failback模式 + if ($GtSdk->fail_validate($_POST['geetest_challenge'],$_POST['geetest_validate'],$_POST['geetest_seccode'])) { + //echo '{"status":"success"}'; + }else{ + exit('{"code":-1,"msg":"验证失败,请重新验证"}'); + } + } + + if($conf['verifytype']==1){ + $phone = $sendto; + $row=$DB->getRow("select * from pre_user where phone='$phone' limit 1"); + if($row){ + exit('{"code":-1,"msg":"该手机号已经注册过商户,如需找回商户信息,请返回登录页面点击找回商户"}'); + } + $row=$DB->getRow("select * from pre_regcode where `to`='$phone' order by id desc limit 1"); + if($row['time']>time()-60){ + exit('{"code":-1,"msg":"两次发送短信之间需要相隔60秒!"}'); + } + $count=$DB->getColumn("select count(*) from pre_regcode where `to`='$phone' and time>'".(time()-3600*24)."'"); + if($count>2){ + exit('{"code":-1,"msg":"该手机号码发送次数过多,请更换号码!"}'); + } + $count=$DB->getColumn("select count(*) from pre_regcode where ip='$clientip' and time>'".(time()-3600*24)."'"); + if($count>5){ + exit('{"code":-1,"msg":"你今天发送次数过多,已被禁止注册"}'); + } + $code = rand(111111,999999); + $result = send_sms($phone, $code, 'reg'); + if($result===true){ + if($DB->exec("insert into `pre_regcode` (`type`,`code`,`to`,`time`,`ip`,`status`) values ('1','".$code."','".$phone."','".time()."','".$clientip."','0')")){ + $_SESSION['send_mail']=time(); + exit('{"code":0,"msg":"succ"}'); + }else{ + exit('{"code":-1,"msg":"写入数据库失败。'.$DB->error().'"}'); + } + }else{ + exit('{"code":-1,"msg":"短信发送失败 '.$result.'"}'); + } + }else{ + $email = $sendto; + $row=$DB->getRow("select * from pre_user where email='$email' limit 1"); + if($row){ + exit('{"code":-1,"msg":"该邮箱已经注册过商户,如需找回商户信息,请返回登录页面点击找回商户"}'); + } + $row=$DB->getRow("select * from pre_regcode where `to`='$email' order by id desc limit 1"); + if($row['time']>time()-60){ + exit('{"code":-1,"msg":"两次发送邮件之间需要相隔60秒!"}'); + } + $count=$DB->getColumn("select count(*) from pre_regcode where `to`='$email' and time>'".(time()-3600*24)."'"); + if($count>6){ + exit('{"code":-1,"msg":"该邮箱发送次数过多,请更换邮箱!"}'); + } + $count=$DB->getColumn("select count(*) from pre_regcode where ip='$clientip' and time>'".(time()-3600*24)."'"); + if($count>10){ + exit('{"code":-1,"msg":"你今天发送次数过多,已被禁止注册"}'); + } + $sub = $conf['sitename'].' - 验证码获取'; + $code = rand(1111111,9999999); + $msg = '您的验证码是:'.$code; + $result = send_mail($email, $sub, $msg); + if($result===true){ + if($DB->exec("insert into `pre_regcode` (`type`,`code`,`to`,`time`,`ip`,`status`) values ('0','".$code."','".$email."','".time()."','".$clientip."','0')")){ + $_SESSION['send_mail']=time(); + exit('{"code":0,"msg":"succ"}'); + }else{ + exit('{"code":-1,"msg":"写入数据库失败。'.$DB->error().'"}'); + } + }else{ + file_put_contents('mail.log',$result); + exit('{"code":-1,"msg":"邮件发送失败"}'); + } + } +break; +case 'reg': + if($conf['reg_open']==0)exit('{"code":-1,"msg":"未开放商户申请"}'); + $email=daddslashes(htmlspecialchars(strip_tags(trim($_POST['email'])))); + $phone=daddslashes(htmlspecialchars(strip_tags(trim($_POST['phone'])))); + $code=trim(daddslashes($_POST['code'])); + $pwd=trim(daddslashes($_POST['pwd'])); + + if(isset($_SESSION['reg_submit']) && $_SESSION['reg_submit']>time()-600){ + exit('{"code":-1,"msg":"请勿频繁注册"}'); + } + if($conf['verifytype']==1 && empty($phone) || $conf['verifytype']==0 && empty($email) || empty($code) || empty($pwd)){ + exit('{"code":-1,"msg":"请确保各项不能为空"}'); + } + if(!$_POST['csrf_token'] || $_POST['csrf_token']!=$_SESSION['csrf_token'])exit('{"code":-1,"msg":"CSRF TOKEN ERROR"}'); + if (strlen($pwd) < 6) { + exit('{"code":-1,"msg":"密码不能低于6位"}'); + }elseif ($pwd == $email) { + exit('{"code":-1,"msg":"密码不能和邮箱相同"}'); + }elseif ($pwd == $phone) { + exit('{"code":-1,"msg":"密码不能和手机号码相同"}'); + }elseif (is_numeric($pwd)) { + exit('{"code":-1,"msg":"密码不能为纯数字"}'); + } + if($conf['verifytype']==1){ + if(!is_numeric($phone) || strlen($phone)!=11){ + exit('{"code":-1,"msg":"手机号码不正确"}'); + } + $row=$DB->getRow("select * from pre_user where phone='$phone' limit 1"); + if($row){ + exit('{"code":-1,"msg":"该手机号已经注册过商户,如需找回商户信息,请返回登录页面点击找回商户"}'); + } + }else{ + if(!preg_match('/^[A-z0-9._-]+@[A-z0-9._-]+\.[A-z0-9._-]+$/', $email)){ + exit('{"code":-1,"msg":"邮箱格式不正确"}'); + } + $row=$DB->getRow("select * from pre_user where email='$email' limit 1"); + if($row){ + exit('{"code":-1,"msg":"该邮箱已经注册过商户,如需找回商户信息,请返回登录页面点击找回商户"}'); + } + } + if($conf['verifytype']==1){ + $row=$DB->getRow("select * from pre_regcode where type=1 and code='$code' and `to`='$phone' order by id desc limit 1"); + }else{ + $row=$DB->getRow("select * from pre_regcode where type=0 and code='$code' and `to`='$email' order by id desc limit 1"); + } + if(!$row){ + exit('{"code":-1,"msg":"验证码不正确!"}'); + } + if($row['time']0){ + exit('{"code":-1,"msg":"验证码已失效,请重新获取"}'); + } + if($conf['reg_pay']==1){ + $gid = $DB->getColumn("SELECT gid FROM pre_user WHERE uid='{$conf['reg_pay_uid']}' limit 1"); + if($gid===false)exit('{"code":-1,"msg":"注册收款商户ID不存在"}'); + $return_url = $siteurl.'user/reg.php?regok=1'; + $trade_no=date("YmdHis").rand(11111,99999); + $domain=getdomain($return_url); + if(!$DB->exec("INSERT INTO `pre_order` (`trade_no`,`out_trade_no`,`uid`,`tid`,`addtime`,`name`,`money`,`notify_url`,`return_url`,`domain`,`ip`,`status`) VALUES (:trade_no, :out_trade_no, :uid, 1, NOW(), :name, :money, :notify_url, :return_url, :domain, :clientip, 0)", [':trade_no'=>$trade_no, ':out_trade_no'=>$trade_no, ':uid'=>$conf['reg_pay_uid'], ':name'=>'商户申请', ':money'=>$conf['reg_pay_price'], ':notify_url'=>$return_url, ':return_url'=>$return_url, ':domain'=>$domain, ':clientip'=>$clientip])) + exit('{"code":-1,"msg":"创建订单失败,请返回重试!"}'); + + $cacheData = ['verifytype'=>$conf['verifytype'], 'email'=>$email, 'phone'=>$phone, 'pwd'=>$pwd, 'addtime'=>$date, 'codeid'=>$row['id']]; + $sds = $CACHE->save('reg_'.$trade_no ,$cacheData, time()+3600); + if($sds){ + $paytype = \lib\Channel::getTypes($gid); + $result=array("code"=>2,"msg"=>"订单创建成功!","trade_no"=>$trade_no,"need"=>$conf['reg_pay_price'],"paytype"=>$paytype); + unset($_SESSION['csrf_token']); + }else{ + $result=array("code"=>-1,"msg"=>"订单创建失败!".$DB->error()); + } + }else{ + $key = random(32); + $sds=$DB->exec("INSERT INTO `pre_user` (`key`, `money`, `email`, `phone`, `addtime`, `pay`, `settle`, `keylogin`, `apply`, `status`) VALUES (:key, '0.00', :email, :phone, NOW(), 1, 1, 0, 0, 1)", [':key'=>$key, ':email'=>$email, ':phone'=>$phone]); + $uid=$DB->lastInsertId(); + if($sds){ + $pwd = getMd5Pwd($pwd, $uid); + $DB->exec("update `pre_user` set `pwd` ='{$pwd}' where `uid`='$uid'"); + if(!empty($email)){ + $sub = $conf['sitename'].' - 注册成功通知'; + $msg = '

    商户注册成功通知

    感谢您注册'.$conf['sitename'].'!
    您的登录账号:'.($info['email']?$info['email']:$info['phone']).'
    您的商户ID:'.$uid.'
    您的商户秘钥:'.$key.'
    '.$conf['sitename'].'官网:'.$_SERVER['HTTP_HOST'].'
    商户管理后台】'; + $result = send_mail($email, $sub, $msg); + } + $DB->exec("update `pre_regcode` set `status` ='1' where `id`='{$row['id']}'"); + $_SESSION['reg_submit']=time(); + $result=array("code"=>1,"msg"=>"申请商户成功!","uid"=>$uid,"key"=>$key); + unset($_SESSION['csrf_token']); + }else{ + $result=array("code"=>-1,"msg"=>"申请商户失败!".$DB->error()); + } + } + exit(json_encode($result)); +break; +case 'sendcode2': + $verifytype=$_POST['type']; + $sendto=daddslashes(htmlspecialchars(strip_tags(trim($_POST['sendto'])))); + if(isset($_SESSION['send_mail']) && $_SESSION['send_mail']>time()-10){ + exit('{"code":-1,"msg":"请勿频繁发送验证码"}'); + } + + $GtSdk = new \lib\GeetestLib($conf['CAPTCHA_ID'], $conf['PRIVATE_KEY']); + + $data = array( + 'user_id' => 'public', # 网站用户id + 'client_type' => "web", # web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式 + 'ip_address' => $clientip # 请在此处传输用户请求验证时所携带的IP + ); + + if ($_SESSION['gtserver'] == 1) { //服务器正常 + $result = $GtSdk->success_validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'], $data); + if ($result) { + //echo '{"status":"success"}'; + } else{ + exit('{"code":-1,"msg":"验证失败,请重新验证"}'); + } + }else{ //服务器宕机,走failback模式 + if ($GtSdk->fail_validate($_POST['geetest_challenge'],$_POST['geetest_validate'],$_POST['geetest_seccode'])) { + //echo '{"status":"success"}'; + }else{ + exit('{"code":-1,"msg":"验证失败,请重新验证"}'); + } + } + + if($verifytype=='phone'){ + $phone = $sendto; + $userrow=$DB->getRow("select * from pre_user where phone='$phone' limit 1"); + if(!$userrow){ + exit('{"code":-1,"msg":"该手机号未找到注册商户"}'); + } + $row=$DB->getRow("select * from pre_regcode where `to`='$phone' order by id desc limit 1"); + if($row['time']>time()-60){ + exit('{"code":-1,"msg":"两次发送短信之间需要相隔60秒!"}'); + } + $count=$DB->getColumn("select count(*) from pre_regcode where `to`='$phone' and time>'".(time()-3600*24)."'"); + if($count>2){ + exit('{"code":-1,"msg":"该手机号码发送次数过多,请更换号码!"}'); + } + $count=$DB->getColumn("select count(*) from pre_regcode where ip='$clientip' and time>'".(time()-3600*24)."'"); + if($count>5){ + exit('{"code":-1,"msg":"你今天发送次数过多,已被禁止找回密码"}'); + } + $code = rand(111111,999999); + $result = send_sms($phone, $code, 'find'); + if($result===true){ + if($DB->exec("insert into `pre_regcode` (`uid`,`type`,`code`,`to`,`time`,`ip`,`status`) values ('".$userrow['uid']."','5','".$code."','".$phone."','".time()."','".$clientip."','0')")){ + $_SESSION['send_mail']=time(); + exit('{"code":0,"msg":"succ"}'); + }else{ + exit('{"code":-1,"msg":"写入数据库失败。'.$DB->error().'"}'); + } + }else{ + exit('{"code":-1,"msg":"短信发送失败 '.$result.'"}'); + } + }else{ + $email = $sendto; + $userrow=$DB->getRow("select * from pre_user where email='$email' limit 1"); + if(!$userrow){ + exit('{"code":-1,"msg":"该邮箱未找到注册商户"}'); + } + $row=$DB->getRow("select * from pre_regcode where `to`='$email' order by id desc limit 1"); + if($row['time']>time()-60){ + exit('{"code":-1,"msg":"两次发送邮件之间需要相隔60秒!"}'); + } + $count=$DB->getColumn("select count(*) from pre_regcode where `to`='$email' and time>'".(time()-3600*24)."'"); + if($count>6){ + exit('{"code":-1,"msg":"该邮箱发送次数过多,请更换邮箱!"}'); + } + $count=$DB->getColumn("select count(*) from pre_regcode where ip='$clientip' and time>'".(time()-3600*24)."'"); + if($count>10){ + exit('{"code":-1,"msg":"你今天发送次数过多,已被禁止找回密码"}'); + } + $sub = $conf['sitename'].' - 重置密码验证'; + $code = rand(1111111,9999999); + $msg = '您的验证码是:'.$code.',用于'.$conf['sitename'].'重置密码,请勿泄露验证码,如非本人操作请忽略。'; + $result = send_mail($email, $sub, $msg); + if($result===true){ + if($DB->exec("insert into `pre_regcode` (`uid`,`type`,`code`,`to`,`time`,`ip`,`status`) values ('".$userrow['uid']."','4','".$code."','".$email."','".time()."','".$clientip."','0')")){ + $_SESSION['send_mail']=time(); + exit('{"code":0,"msg":"succ"}'); + }else{ + exit('{"code":-1,"msg":"写入数据库失败。'.$DB->error().'"}'); + } + }else{ + file_put_contents('mail.log',$result); + exit('{"code":-1,"msg":"邮件发送失败"}'); + } + } +break; +case 'findpwd': + $verifytype=$_POST['type']; + $account=daddslashes(htmlspecialchars(strip_tags(trim($_POST['account'])))); + $code=trim(daddslashes($_POST['code'])); + $pwd=trim(daddslashes($_POST['pwd'])); + + if(empty($account) || empty($code) || empty($pwd)){ + exit('{"code":-1,"msg":"请确保各项不能为空"}'); + } + if(!$_POST['csrf_token'] || $_POST['csrf_token']!=$_SESSION['csrf_token'])exit('{"code":-1,"msg":"CSRF TOKEN ERROR"}'); + if (strlen($pwd) < 6) { + exit('{"code":-1,"msg":"密码不能低于6位"}'); + }elseif ($pwd == $account && $verifytype=='email') { + exit('{"code":-1,"msg":"密码不能和邮箱相同"}'); + }elseif ($pwd == $account && $verifytype=='phone') { + exit('{"code":-1,"msg":"密码不能和手机号码相同"}'); + }elseif (is_numeric($pwd)) { + exit('{"code":-1,"msg":"密码不能为纯数字"}'); + } + if($verifytype=='phone'){ + if(!is_numeric($account) || strlen($account)!=11){ + exit('{"code":-1,"msg":"手机号码不正确"}'); + } + $userrow=$DB->getRow("select * from pre_user where phone='$account' limit 1"); + if(!$userrow){ + exit('{"code":-1,"msg":"该手机号未找到注册商户"}'); + } + }else{ + if(!preg_match('/^[A-z0-9._-]+@[A-z0-9._-]+\.[A-z0-9._-]+$/', $account)){ + exit('{"code":-1,"msg":"邮箱格式不正确"}'); + } + $userrow=$DB->getRow("select * from pre_user where email='$account' limit 1"); + if(!$userrow){ + exit('{"code":-1,"msg":"该邮箱未找到注册商户"}'); + } + } + if($verifytype=='phone'){ + $row=$DB->getRow("select * from pre_regcode where type=5 and code='$code' and `to`='$account' order by id desc limit 1"); + }else{ + $row=$DB->getRow("select * from pre_regcode where type=4 and code='$code' and `to`='$account' order by id desc limit 1"); + } + if(!$row){ + exit('{"code":-1,"msg":"验证码不正确!"}'); + } + if($row['time']0){ + exit('{"code":-1,"msg":"验证码已失效,请重新获取"}'); + } + + $pwd = getMd5Pwd($pwd, $userrow['uid']); + $sqs=$DB->exec("update `pre_user` set `pwd` ='{$pwd}' where `uid`='{$userrow['uid']}'"); + if($sqs!==false){ + exit('{"code":1,"msg":"重置密码成功!请牢记新密码"}'); + }else{ + exit('{"code":-1,"msg":"重置密码失败!'.$DB->error().'"}'); + } +break; +case 'qrcode': + unset($_SESSION['openid']); + if(!empty($conf['localurl_wxpay']) && !strpos($conf['localurl_wxpay'],$_SERVER['HTTP_HOST'])){ + $qrcode = $conf['localurl_wxpay'].'user/openid.php?sid='.session_id(); + }else{ + $qrcode = $siteurl.'user/openid.php?sid='.session_id(); + } + $result=array("code"=>0,"msg"=>"succ","url"=>$qrcode); + exit(json_encode($result)); + break; +case 'getopenid': + if(isset($_SESSION['openid']) && !empty($_SESSION['openid'])){ + $result=array("code"=>0,"msg"=>"succ","openid"=>$_SESSION['openid']); + }else{ + $result=array("code"=>-1); + } + exit(json_encode($result)); + break; +default: + exit('{"code":-4,"msg":"No Act"}'); +break; +} \ No newline at end of file diff --git a/user/ajax2.php b/user/ajax2.php new file mode 100644 index 0000000..48c24e9 --- /dev/null +++ b/user/ajax2.php @@ -0,0 +1,553 @@ +getColumn("SELECT count(*) FROM pre_order WHERE uid={$uid} AND status=1"); + $orders_today=$DB->getColumn("SELECT count(*) from pre_order WHERE uid={$uid} AND status=1 AND date='$today'"); + + $settle_money=$DB->getColumn("SELECT sum(getmoney) FROM pre_settle WHERE uid={$uid} and status=1"); + $settle_money=round($settle_money,2); + + $order_today['all']=$DB->getColumn("SELECT sum(getmoney) FROM pre_order WHERE uid={$uid} AND status=1 AND date='$today'"); + $order_today['all']=round($order_today['all'],2); + $order_today['alipay']=$DB->getColumn("SELECT sum(getmoney) FROM pre_order WHERE uid={$uid} AND type=(SELECT id FROM pre_type WHERE name='alipay') AND status=1 AND date='$today'"); + $order_today['alipay']=round($order_today['alipay'],2); + $order_today['wxpay']=$DB->getColumn("SELECT sum(getmoney) FROM pre_order WHERE uid={$uid} AND type=(SELECT id FROM pre_type WHERE name='wxpay') AND status=1 AND date='$today'"); + $order_today['wxpay']=round($order_today['wxpay'],2); + $order_today['qqpay']=$DB->getColumn("SELECT sum(getmoney) FROM pre_order WHERE uid={$uid} AND type=(SELECT id FROM pre_type WHERE name='qqpay') AND status=1 AND date='$today'"); + $order_today['qqpay']=round($order_today['qqpay'],2); + + $order_lastday['all']=$DB->getColumn("SELECT sum(getmoney) FROM pre_order WHERE uid={$uid} AND status=1 AND date='$lastday'"); + $order_lastday['all']=round($order_lastday['all'],2); + $order_lastday['alipay']=$DB->getColumn("SELECT sum(getmoney) FROM pre_order WHERE uid={$uid} AND type=(SELECT id FROM pre_type WHERE name='alipay') AND status=1 AND date='$lastday'"); + $order_lastday['alipay']=round($order_lastday['alipay'],2); + $order_lastday['wxpay']=$DB->getColumn("SELECT sum(getmoney) FROM pre_order WHERE uid={$uid} AND type=(SELECT id FROM pre_type WHERE name='wxpay') AND status=1 AND date='$lastday'"); + $order_lastday['wxpay']=round($order_lastday['wxpay'],2); + $order_lastday['qqpay']=$DB->getColumn("SELECT sum(getmoney) FROM pre_order WHERE uid={$uid} AND type=(SELECT id FROM pre_type WHERE name='qqpay') AND status=1 AND date='$lastday'"); + $order_lastday['qqpay']=round($order_lastday['qqpay'],2); + + $result=['code'=>0, 'orders'=>$orders, 'orders_today'=>$orders_today, 'settle_money'=>$settle_money, 'order_today'=>$order_today, 'order_lastday'=>$order_lastday]; + exit(json_encode($result)); +break; +case 'sendcode': + $situation=trim($_POST['situation']); + $target=daddslashes(htmlspecialchars(strip_tags(trim($_POST['target'])))); + if(isset($_SESSION['send_mail']) && $_SESSION['send_mail']>time()-10){ + exit('{"code":-1,"msg":"请勿频繁发送验证码"}'); + } + $GtSdk = new \lib\GeetestLib($conf['CAPTCHA_ID'], $conf['PRIVATE_KEY']); + + $data = array( + 'user_id' => $uid, # 网站用户id + 'client_type' => "web", # web:电脑上的浏览器;h5:手机上的浏览器,包括移动应用内完全内置的web_view;native:通过原生SDK植入APP应用的方式 + 'ip_address' => $clientip # 请在此处传输用户请求验证时所携带的IP + ); + + if ($_SESSION['gtserver'] == 1) { //服务器正常 + $result = $GtSdk->success_validate($_POST['geetest_challenge'], $_POST['geetest_validate'], $_POST['geetest_seccode'], $data); + if ($result) { + //echo '{"status":"success"}'; + } else{ + exit('{"code":-1,"msg":"验证失败,请重新验证"}'); + } + }else{ //服务器宕机,走failback模式 + if ($GtSdk->fail_validate($_POST['geetest_challenge'],$_POST['geetest_validate'],$_POST['geetest_seccode'])) { + //echo '{"status":"success"}'; + }else{ + exit('{"code":-1,"msg":"验证失败,请重新验证"}'); + } + } + if($conf['verifytype']==1){ + if($situation=='bind'){ + $phone=$target; + if(empty($phone) || strlen($phone)!=11){ + exit('{"code":-1,"msg":"请填写正确的手机号码!"}'); + } + if($phone==$userrow['phone']){ + exit('{"code":-1,"msg":"你填写的手机号码和之前一样"}'); + } + $row=$DB->getRow("select * from pre_user where phone='$phone' limit 1"); + if($row){ + exit('{"code":-1,"msg":"该手机号码已经绑定过其它商户"}'); + } + }else{ + if(empty($userrow['phone']) || strlen($userrow['phone'])!=11){ + exit('{"code":-1,"msg":"请先绑定手机号码!"}'); + } + $phone=$userrow['phone']; + } + $row=$DB->getRow("select * from pre_regcode where `to`='$phone' order by id desc limit 1"); + if($row['time']>time()-60){ + exit('{"code":-1,"msg":"两次发送短信之间需要相隔60秒!"}'); + } + $count=$DB->getColumn("select count(*) from pre_regcode where `to`='$phone' and time>'".(time()-3600*24)."'"); + if($count>2){ + exit('{"code":-1,"msg":"该手机号码发送次数过多,暂无法发送!"}'); + } + $count=$DB->getColumn("select count(*) from pre_regcode where ip='$clientip' and time>'".(time()-3600*24)."'"); + if($count>5){ + exit('{"code":-1,"msg":"你今天发送次数过多,已被禁止发送"}'); + } + $code = rand(111111,999999); + $result = send_sms($phone, $code, 'edit'); + if($result===true){ + if($DB->exec("insert into `pre_regcode` (`uid`,`type`,`code`,`to`,`time`,`ip`,`status`) values ('".$uid."','3','".$code."','".$phone."','".time()."','".$clientip."','0')")){ + $_SESSION['send_mail']=time(); + exit('{"code":0,"msg":"succ"}'); + }else{ + exit('{"code":-1,"msg":"写入数据库失败。'.$DB->error().'"}'); + } + }else{ + exit('{"code":-1,"msg":"短信发送失败 '.$result.'"}'); + } + }else{ + if($situation=='bind'){ + $email=$target; + if(!preg_match('/^[A-z0-9._-]+@[A-z0-9._-]+\.[A-z0-9._-]+$/', $email)){ + exit('{"code":-1,"msg":"邮箱格式不正确"}'); + } + if($email==$userrow['email']){ + exit('{"code":-1,"msg":"你填写的邮箱和之前一样"}'); + } + $row=$DB->getRow("select * from pre_user where email='$email' limit 1"); + if($row){ + exit('{"code":-1,"msg":"该邮箱已经绑定过其它商户"}'); + } + }else{ + if(empty($userrow['email']) || strpos($userrow['email'],'@')===false){ + exit('{"code":-1,"msg":"请先绑定邮箱!"}'); + } + $email=$userrow['email']; + } + $row=$DB->getRow("select * from pre_regcode where `to`='$email' order by id desc limit 1"); + if($row['time']>time()-60){ + exit('{"code":-1,"msg":"两次发送邮件之间需要相隔60秒!"}'); + } + $count=$DB->getColumn("select count(*) from pre_regcode where `to`='$email' and time>'".(time()-3600*24)."'"); + if($count>6){ + exit('{"code":-1,"msg":"该邮箱发送次数过多,请更换邮箱!"}'); + } + $count=$DB->getColumn("select count(*) from pre_regcode where ip='$clientip' and time>'".(time()-3600*24)."'"); + if($count>10){ + exit('{"code":-1,"msg":"你今天发送次数过多,已被禁止发送"}'); + } + $sub = $conf['sitename'].' - 验证码获取'; + $code = rand(1111111,9999999); + if($situation=='settle')$msg = '您正在修改结算账号信息,验证码是:'.$code; + elseif($situation=='mibao')$msg = '您正在修改密保邮箱,验证码是:'.$code; + elseif($situation=='bind')$msg = '您正在绑定新邮箱,验证码是:'.$code; + else $msg = '您的验证码是:'.$code; + $result = send_mail($email, $sub, $msg); + if($result===true){ + if($DB->exec("insert into `pre_regcode` (`uid`,`type`,`code`,`to`,`time`,`ip`,`status`) values ('".$uid."','2','".$code."','".$email."','".time()."','".$clientip."','0')")){ + $_SESSION['send_mail']=time(); + exit('{"code":0,"msg":"succ"}'); + }else{ + exit('{"code":-1,"msg":"写入数据库失败。'.$DB->error().'"}'); + } + }else{ + file_put_contents('mail.log',$result); + exit('{"code":-1,"msg":"邮件发送失败"}'); + } + } +break; +case 'verifycode': + $code=trim(daddslashes($_POST['code'])); + if($conf['verifytype']==1){ + $row=$DB->getRow("select * from pre_regcode where uid='$uid' and type=3 and code='$code' and `to`='{$userrow['phone']}' order by id desc limit 1"); + }else{ + $row=$DB->getRow("select * from pre_regcode where uid='$uid' and type=2 and code='$code' and `to`='{$userrow['email']}' order by id desc limit 1"); + } + if(!$row){ + exit('{"code":-1,"msg":"验证码不正确!"}'); + } + if($row['time']0){ + exit('{"code":-1,"msg":"验证码已失效,请重新获取"}'); + } + $_SESSION['verify_ok']=$uid; + $DB->exec("update `pre_regcode` set `status` ='1' where `id`='{$row['id']}'"); + exit('{"code":1,"msg":"succ"}'); +break; +case 'completeinfo': + $type=intval($_POST['stype']); + $account=daddslashes(htmlspecialchars(strip_tags(trim($_POST['account'])))); + $username=daddslashes(htmlspecialchars(strip_tags(trim($_POST['username'])))); + $email=daddslashes(htmlspecialchars(strip_tags(trim($_POST['email'])))); + $qq=daddslashes(htmlspecialchars(strip_tags(trim($_POST['qq'])))); + $url=daddslashes(htmlspecialchars(strip_tags(trim($_POST['url'])))); + + if($account==null || $username==null || $qq==null || $url==null){ + exit('{"code":-1,"msg":"请确保每项都不为空"}'); + } + if($type==1 && strlen($account)!=11 && strpos($account,'@')==false){ + exit('{"code":-1,"msg":"请填写正确的支付宝账号!"}'); + } + if($type==2 && strlen($account)<3){ + exit('{"code":-1,"msg":"请填写正确的微信"}'); + } + if($type==3 && (strlen($account)<5 || strlen($account)>10 || !is_numeric($account))){ + exit('{"code":-1,"msg":"请填写正确的QQ号码"}'); + } + if(strlen($qq)<5 || strlen($account)>10 || !is_numeric($qq)){ + exit('{"code":-1,"msg":"请填写正确的QQ"}'); + } + if(strlen($url)<4 || strpos($url,'.')==false){ + exit('{"code":-1,"msg":"请填写正确的网站域名!"}'); + } + if($conf['verifytype']==1){ + if(!preg_match('/^[A-z0-9._-]+@[A-z0-9._-]+\.[A-z0-9._-]+$/', $email)){ + exit('{"code":-1,"msg":"邮箱格式不正确"}'); + } + if($email!=$userrow['email']){ + $row=$DB->getRow("select * from pre_user where email='$email' limit 1"); + if($row){ + exit('{"code":-1,"msg":"该邮箱已经绑定过其它商户,如需找回,请退出登录后找回密码"}'); + } + $sqls=",`email` ='{$email}'"; + } + } + $sqs=$DB->exec("update `pre_user` set `settle_id` ='{$type}',`account` ='{$account}',`username` ='{$username}',`qq` ='{$qq}',`url` ='{$url}'{$sqls} where `uid`='$uid'"); + if($sqs!==false){ + exit('{"code":1,"msg":"succ"}'); + }else{ + exit('{"code":-1,"msg":"保存失败!'.$DB->error().'"}'); + } +break; +case 'edit_settle': + $type=intval($_POST['stype']); + $account=daddslashes(htmlspecialchars(strip_tags(trim($_POST['account'])))); + $username=daddslashes(htmlspecialchars(strip_tags(trim($_POST['username'])))); + + if($account==null || $username==null){ + exit('{"code":-1,"msg":"请确保每项都不为空"}'); + } + if($type==1 && strlen($account)!=11 && strpos($account,'@')==false){ + exit('{"code":-1,"msg":"请填写正确的支付宝账号!"}'); + } + if($type==2 && strlen($account)<3){ + exit('{"code":-1,"msg":"请填写正确的微信"}'); + } + if($type==3 && (strlen($account)<5 || strlen($account)>10 || !is_numeric($account))){ + exit('{"code":-1,"msg":"请填写正确的QQ号码"}'); + } + if($userrow['type']!=2 && !empty($userrow['account']) && !empty($userrow['username']) && ($userrow['account']!=$account || $userrow['username']!=$username) && $_SESSION['verify_ok']!==$uid){ + if($conf['verifytype']==1 && (empty($userrow['phone']) || strlen($userrow['phone'])!=11)){ + exit('{"code":-1,"msg":"请先绑定手机号码!"}'); + }elseif($conf['verifytype']==0 && (empty($userrow['email']) || strpos($userrow['email'],'@')===false)){ + exit('{"code":-1,"msg":"请先绑定邮箱!"}'); + } + exit('{"code":2,"msg":"need verify"}'); + } + $sqs=$DB->exec("update `pre_user` set `settle_id` ='{$type}',`account` ='{$account}',`username` ='{$username}' where `uid`='$uid'"); + if($sqs!==false){ + exit('{"code":1,"msg":"succ"}'); + }else{ + exit('{"code":-1,"msg":"保存失败!'.$DB->error().'"}'); + } +break; +case 'edit_info': + $email=daddslashes(htmlspecialchars(strip_tags(trim($_POST['email'])))); + $qq=daddslashes(htmlspecialchars(strip_tags(trim($_POST['qq'])))); + $url=daddslashes(htmlspecialchars(strip_tags(trim($_POST['url'])))); + $keylogin=intval($_POST['keylogin']); + + if($qq==null || $url==null){ + exit('{"code":-1,"msg":"请确保每项都不为空"}'); + } + if($conf['verifytype']==1){ + if($email!=$userrow['email']){ + $row=$DB->getRow("select * from pre_user where email='$email' limit 1"); + if($row){ + exit('{"code":-1,"msg":"该邮箱已经绑定过其它商户,如需找回,请退出登录后找回密码"}'); + } + } + $sqs=$DB->exec("update `pre_user` set `email` ='{$email}',`qq` ='{$qq}',`url` ='{$url}',`keylogin` ='{$keylogin}' where `uid`='$uid'"); + }else{ + $sqs=$DB->exec("update `pre_user` set `qq` ='{$qq}',`url` ='{$url}',`keylogin` ='{$keylogin}' where `uid`='$uid'"); + } + if($sqs!==false){ + exit('{"code":1,"msg":"succ"}'); + }else{ + exit('{"code":-1,"msg":"保存失败!'.$DB->error().'"}'); + } +break; +case 'edit_mode': + $mode=intval($_POST['mode']); + + $sqs=$DB->exec("update `pre_user` set `mode` ='{$mode}' where `uid`='$uid'"); + if($sqs!==false){ + exit('{"code":1,"msg":"succ"}'); + }else{ + exit('{"code":-1,"msg":"保存失败!'.$DB->error().'"}'); + } +break; +case 'edit_bind': + $email=daddslashes(htmlspecialchars(strip_tags(trim($_POST['email'])))); + $phone=daddslashes(htmlspecialchars(strip_tags(trim($_POST['phone'])))); + $code=daddslashes(trim($_POST['code'])); + + if($code==null || $email==null && $phone==null){ + exit('{"code":-1,"msg":"请确保每项都不为空"}'); + } + if(empty($_SESSION['verify_ok']) || $_SESSION['verify_ok']!=$uid){ + exit('{"code":2,"msg":"请先完成验证"}'); + } + if($conf['verifytype']==1){ + $row=$DB->getRow("select * from pre_regcode where type=3 and code='$code' and `to`='$phone' order by id desc limit 1"); + }else{ + $row=$DB->getRow("select * from pre_regcode where type=2 and code='$code' and `to`='$email' order by id desc limit 1"); + } + if(!$row){ + exit('{"code":-1,"msg":"验证码不正确!"}'); + } + if($row['time']0){ + exit('{"code":-1,"msg":"验证码已失效,请重新获取"}'); + } + if($conf['verifytype']==1){ + $sqs=$DB->exec("update `pre_user` set `phone` ='{$phone}' where `uid`='$uid'"); + }else{ + $sqs=$DB->exec("update `pre_user` set `email` ='{$email}' where `uid`='$uid'"); + } + if($sqs!==false){ + exit('{"code":1,"msg":"succ"}'); + }else{ + exit('{"code":-1,"msg":"保存失败!'.$DB->error().'"}'); + } +break; +case 'checkbind': + if($conf['verifytype']==1 && (empty($userrow['phone']) || strlen($userrow['phone'])!=11)){ + exit('{"code":1,"msg":"bind"}'); + }elseif($conf['verifytype']==0 && (empty($userrow['email']) || strpos($userrow['email'],'@')===false)){ + exit('{"code":1,"msg":"bind"}'); + }elseif(isset($_SESSION['verify_ok']) && $_SESSION['verify_ok']===$uid){ + exit('{"code":1,"msg":"bind"}'); + }else{ + exit('{"code":2,"msg":"need verify"}'); + } +break; +case 'resetKey': + if(isset($_POST['submit'])){ + $key = random(32); + $sql = "UPDATE pre_user SET `key`='$key' WHERE uid='$uid'"; + if($DB->exec($sql)!==false)exit('{"code":0,"msg":"重置密钥成功","key":"'.$key.'"}'); + else exit('{"code":-1,"msg":"重置密钥失败['.$DB->error().']"}'); + } +break; +case 'edit_pwd': + $oldpwd=trim($_POST['oldpwd']); + $newpwd=trim($_POST['newpwd']); + $newpwd2=trim($_POST['newpwd2']); + + if(!empty($userrow['pwd']) && $oldpwd==null || $newpwd==null || $newpwd2==null){ + exit('{"code":-1,"msg":"请确保每项都不为空"}'); + } + if(!empty($userrow['pwd']) && getMd5Pwd($oldpwd, $uid)!=$userrow['pwd']){ + exit('{"code":-1,"msg":"旧密码不正确"}'); + } + if($newpwd!=$newpwd2){ + exit('{"code":-1,"msg":"两次输入密码不一致!"}'); + } + if($oldpwd==$newpwd){ + exit('{"code":-1,"msg":"旧密码和新密码相同!"}'); + } + if (strlen($newpwd) < 6) { + exit('{"code":-1,"msg":"新密码不能低于6位"}'); + }elseif ($newpwd == $userrow['email']) { + exit('{"code":-1,"msg":"新密码不能和邮箱相同"}'); + }elseif ($newpwd == $userrow['phone']) { + exit('{"code":-1,"msg":"新密码不能和手机号码相同"}'); + }elseif (is_numeric($newpwd)) { + exit('{"code":-1,"msg":"新密码不能为纯数字"}'); + } + $pwd = getMd5Pwd($newpwd, $uid); + $sqs=$DB->exec("update `pre_user` set `pwd` ='{$pwd}' where `uid`='$uid'"); + if($sqs!==false){ + exit('{"code":1,"msg":"修改密码成功!请牢记新密码"}'); + }else{ + exit('{"code":-1,"msg":"修改密码失败!'.$DB->error().'"}'); + } +break; +case 'edit_codename': + $codename=daddslashes(htmlspecialchars(strip_tags(trim($_POST['codename'])))); + + $sqs=$DB->exec("update `pre_user` set `codename` ='{$codename}' where `uid`='$uid'"); + if($sqs!==false){ + exit('{"code":1,"msg":"保存成功!"}'); + }else{ + exit('{"code":-1,"msg":"保存失败!'.$DB->error().'"}'); + } +break; +case 'certificate': + $certname=daddslashes(htmlspecialchars(strip_tags(trim($_POST['certname'])))); + $certno=daddslashes(htmlspecialchars(strip_tags(trim($_POST['certno'])))); + if(!$_POST['csrf_token'] || $_POST['csrf_token']!=$_SESSION['csrf_token'])exit('{"code":-1,"msg":"CSRF TOKEN ERROR"}'); + if($userrow['cert']==1)exit('{"code":-1,"msg":"你已完成实名认证"}'); + if($conf['cert_money']>0 && $userrow['money']<$conf['cert_money'])exit('{"code":-1,"msg":"账户余额不足'.$conf['cert_money'].'元,无法完成认证"}'); + if(empty($certname) || empty($certno))exit('{"code":-1,"msg":"请确保各项不能为空"}'); + if(strlen($certname)<3)exit('{"code":-1,"msg":"姓名填写错误"}'); + if(!is_idcard($certno))exit('{"code":-1,"msg":"身份证号不正确"}'); + /*$row=$DB->getRow("SELECT uid,phone,email FROM pre_user WHERE certname='$certname' AND certno='$certno' AND cert=1 LIMIT 1"); + if($row){ + exit('{"code":-2,"msg":"账号:'.($row['phone']?$row['phone']:$row['email']).'(商户ID:'.$row['uid'].')已经使用此身份认证,是否将该认证信息关联到当前商户?关联需要输入商户ID '.$row['uid'].' 的商户密钥","uid":"'.$row['uid'].'"}'); + }*/ + $channel = \lib\Channel::get($conf['cert_channel']); + if(!$channel)exit('{"code":-1,"msg":"当前实名认证通道信息不存在"}'); + define("IN_PLUGIN", true); + define("PAY_ROOT", PLUGIN_ROOT.'alipay/'); + require_once PAY_ROOT."inc/AlipayCertifyService.php"; + $certify = new AlipayCertifyService($config); + $outer_order_no = date("YmdHis").rand(000,999).$uid; + $certifyResult = $certify->initialize($outer_order_no, $certname, $certno, 'SMART_FACE'); + if(isset($certifyResult['certify_id'])){ + $_SESSION[$uid.'_certify_id']=$certifyResult['certify_id']; + $sqs=$DB->exec("update `pre_user` set `certno` ='{$certno}',`certname` ='{$certname}' where `uid`='$uid'"); + if($sqs!==false){ + exit('{"code":1,"msg":"succ","certify_id":"'.$certifyResult['certify_id'].'","url":"'.$siteurl.'user/alipaycert.php?id='.$certifyResult['certify_id'].'"}'); + }else{ + exit('{"code":-1,"msg":"保存信息失败'.$DB->error().'"}'); + } + }else{ + exit('{"code":-1,"msg":"支付宝接口返回异常['.$certifyResult['sub_code'].']'.$certifyResult['sub_msg'].'"}'); + } +break; +case 'cert_query': + $certify_id = isset($_POST['certify_id'])?$_POST['certify_id']:exit('{"code":-1,"msg":"param is error"}'); + if(!$_POST['csrf_token'] || $_POST['csrf_token']!=$_SESSION['csrf_token'])exit('{"code":-1,"msg":"CSRF TOKEN ERROR"}'); + if(isset($_SESSION[$uid.'_certify_id']) && $_SESSION[$uid.'_certify_id'] == $certify_id){ + $channel = \lib\Channel::get($conf['cert_channel']); + if(!$channel)exit('{"code":-1,"msg":"当前实名认证通道信息不存在"}'); + define("IN_PLUGIN", true); + define("PAY_ROOT", PLUGIN_ROOT.'alipay/'); + require_once PAY_ROOT."inc/AlipayCertifyService.php"; + $certify = new AlipayCertifyService($config); + $certifyResult = $certify->query($certify_id); + if(isset($certifyResult['passed'])){ + if($certifyResult['passed'] == 'T'){ + unset($_SESSION[$uid]['certify_id']); + $DB->exec("update `pre_user` set `cert`=1,`certtime`='$date' where `uid`='$uid'"); + if($conf['cert_money']>0){ + changeUserMoney($uid, $conf['cert_money'], false, '实名认证'); + } + exit('{"code":1,"msg":"succ","passed":true}'); + }else{ + exit('{"code":1,"msg":"succ","passed":false}'); + } + }else{ + exit('{"code":-1,"msg":"支付宝接口返回异常['.$certifyResult['sub_code'].']'.$certifyResult['sub_msg'].'"}'); + } + }else{ + exit('{"code":-1,"msg":"Access Denied"}'); + } +break; +/*case 'cert_bind': + $touid=intval($_POST['touid']); + $certname=daddslashes(htmlspecialchars(strip_tags(trim($_POST['certname'])))); + $certno=daddslashes(htmlspecialchars(strip_tags(trim($_POST['certno'])))); + if(!$_POST['csrf_token'] || $_POST['csrf_token']!=$_SESSION['csrf_token'])exit('{"code":-1,"msg":"CSRF TOKEN ERROR"}'); + if($userrow['cert']==1)exit('{"code":-1,"msg":"你已完成实名认证"}'); + if(empty($certname) || empty($certno))exit('{"code":-1,"msg":"请确保各项不能为空"}'); + if(strlen($certname)<3)exit('{"code":-1,"msg":"姓名填写错误"}'); + if(!is_idcard($certno))exit('{"code":-1,"msg":"身份证号不正确"}'); + $row=$DB->getRow("SELECT uid,certname,certno,cert FROM pre_user WHERE uid='$touid' LIMIT 1"); + if($row && $row['cert']==1 && $row['certname']==$certname && $row['certno']==$certno){ + $sqs=$DB->exec("update `pre_user` set `cert`='1',`certno`='{$certno}',`certname`='{$certname}',`certtime`='{$date}' where `uid`='$uid'"); + if($sqs!==false){ + exit('{"code":1,"msg":"关联实名认证成功!"}'); + }else{ + exit('{"code":-1,"msg":"关联实名认证失败!'.$DB->error().'"}'); + } + }else{ + exit('{"code":-1,"msg":"关联实名认证失败!"}'); + } +break;*/ +case 'notify': + $trade_no=daddslashes(trim($_POST['trade_no'])); + $row=$DB->getRow("select * from pre_order where trade_no='$trade_no' AND uid=$uid limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前订单不存在!"}'); + if($row['status']==0)exit('{"code":-1,"msg":"订单尚未支付,无法重新通知!"}'); + $url=creat_callback_user($row,$userrow['key']); + if($row['notify']>0) + $DB->exec("update pre_order set notify=0 where trade_no='$trade_no'"); + exit('{"code":0,"url":"'.($_POST['isreturn']==1?$url['return']:$url['notify']).'"}'); +break; +case 'settle_result': + $id=intval($_GET['id']); + $row=$DB->getRow("select * from pre_settle where id='$id' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前结算记录不存在!"}'); + $result = ['code'=>0,'msg'=>$row['result']]; + exit(json_encode($result)); +break; +case 'recharge': + $money=trim(daddslashes($_POST['money'])); + $typeid=intval($_POST['typeid']); + $name = '充值余额 UID:'.$uid; + if(!$_POST['csrf_token'] || $_POST['csrf_token']!=$_SESSION['csrf_token'])exit('{"code":-1,"msg":"CSRF TOKEN ERROR"}'); + if($money<=0 || !is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))exit('{"code":-1,"msg":"金额不合法"}'); + if($conf['pay_maxmoney']>0 && $money>$conf['pay_maxmoney'])exit('{"code":-1,"msg":"最大支付金额是'.$conf['pay_maxmoney'].'元"}'); + if($conf['pay_minmoney']>0 && $money<$conf['pay_minmoney'])exit('{"code":-1,"msg":"最小支付金额是'.$conf['pay_minmoney'].'元"}'); + $trade_no=date("YmdHis").rand(11111,99999); + $return_url=$siteurl.'user/recharge.php?ok=1&trade_no='.$trade_no; + $domain=getdomain($return_url); + if(!$DB->exec("INSERT INTO `pre_order` (`trade_no`,`out_trade_no`,`uid`,`tid`,`addtime`,`name`,`money`,`notify_url`,`return_url`,`domain`,`ip`,`status`) VALUES (:trade_no, :out_trade_no, :uid, 2, NOW(), :name, :money, :notify_url, :return_url, :domain, :clientip, 0)", [':trade_no'=>$trade_no, ':out_trade_no'=>$trade_no, ':uid'=>$uid, ':name'=>$name, ':money'=>$money, ':notify_url'=>$return_url, ':return_url'=>$return_url, ':domain'=>$domain, ':clientip'=>$clientip]))exit('{"code":-1,"msg":"创建订单失败,请返回重试!"}'); + unset($_SESSION['csrf_token']); + $result = ['code'=>0, 'msg'=>'succ', 'url'=>'../submit2.php?typeid='.$typeid.'&trade_no='.$trade_no]; + exit(json_encode($result)); +break; +case 'groupinfo': + $gid=intval($_POST['gid']); + $row=$DB->getRow("select * from pre_group where gid='$gid' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前会员等级不存在!"}'); + if($row['isbuy']==0) + exit('{"code":-1,"msg":"当前会员等级无法购买!"}'); + if($gid==$userrow['gid'])exit('{"code":-1,"msg":"你已购买此会员等级,请勿重复购买"}'); + if($row['expire']==0)$expire='永久'; + else $expire=$row['expire'].'个月'; + $result = ['code'=>0,'msg'=>'succ','gid'=>$gid,'name'=>$row['name'],'price'=>$row['price'],'expire'=>$expire]; + exit(json_encode($result)); +break; +case 'groupbuy': + $gid=intval($_POST['gid']); + $row=$DB->getRow("select * from pre_group where gid='$gid' limit 1"); + if(!$row) + exit('{"code":-1,"msg":"当前会员等级不存在!"}'); + if($row['isbuy']==0) + exit('{"code":-1,"msg":"当前会员等级无法购买!"}'); + if($gid==$userrow['gid'])exit('{"code":-1,"msg":"你已购买此会员等级,请勿重复购买"}'); + if(!$_POST['csrf_token'] || $_POST['csrf_token']!=$_SESSION['csrf_token'])exit('{"code":-1,"msg":"CSRF TOKEN ERROR"}'); + $money = $row['price']; + $typeid=intval($_POST['typeid']); + if($typeid==0){ + if($money>$userrow['money'])exit('{"code":-1,"msg":"余额不足,请选择其他方式支付"}'); + changeUserMoney($uid, $money, false, '购买会员'); + changeUserGroup($uid, $gid); + unset($_SESSION['csrf_token']); + $result = ['code'=>1, 'msg'=>'购买会员成功!']; + exit(json_encode($result)); + }else{ + $name = '购买会员 #'.$gid.'#'; + $trade_no=date("YmdHis").rand(11111,99999); + $return_url=$siteurl.'user/groupbuy.php?ok=1&trade_no='.$trade_no; + $domain=getdomain($return_url); + if(!$DB->exec("INSERT INTO `pre_order` (`trade_no`,`out_trade_no`,`uid`,`tid`,`addtime`,`name`,`money`,`notify_url`,`return_url`,`domain`,`ip`,`status`) VALUES (:trade_no, :out_trade_no, :uid, 4, NOW(), :name, :money, :notify_url, :return_url, :domain, :clientip, 0)", [':trade_no'=>$trade_no, ':out_trade_no'=>$trade_no, ':uid'=>$uid, ':name'=>$name, ':money'=>$money, ':notify_url'=>$return_url, ':return_url'=>$return_url, ':domain'=>$domain, ':clientip'=>$clientip]))exit('{"code":-1,"msg":"创建订单失败,请返回重试!"}'); + unset($_SESSION['csrf_token']); + $result = ['code'=>0, 'msg'=>'succ', 'url'=>'../submit2.php?typeid='.$typeid.'&trade_no='.$trade_no]; + exit(json_encode($result)); + } +break; +default: + exit('{"code":-4,"msg":"No Act"}'); +break; +} \ No newline at end of file diff --git a/user/alipaycert.php b/user/alipaycert.php new file mode 100644 index 0000000..203149c --- /dev/null +++ b/user/alipaycert.php @@ -0,0 +1,35 @@ +certify($certify_id); +?> + + + + + + + 正在跳转 + + + +

    正在跳转,请稍候...

    + + + \ No newline at end of file diff --git a/user/alipaycertok.php b/user/alipaycertok.php new file mode 100644 index 0000000..53b4dd2 --- /dev/null +++ b/user/alipaycertok.php @@ -0,0 +1,32 @@ +window.location.href='./certificate.php?certify_id={$_SESSION[$uid.'_certify_id']}';"); +} +@header('Content-Type: text/html; charset=UTF-8'); +?> + + + + + + + + + +
    +

    实名认证结果页面

    +
    +
    +
    +
    +实名认证成功,请关闭此页面 +
    +
    + + + \ No newline at end of file diff --git a/user/apply.php b/user/apply.php new file mode 100644 index 0000000..702992e --- /dev/null +++ b/user/apply.php @@ -0,0 +1,145 @@ +window.location.href='./login.php';"); +$title='申请提现'; +include './head.php'; +?> +query("SELECT realmoney from pre_order where uid={$uid} and status=1 and endtime>='$today'"); + $order_today=0; + while($row = $rs->fetch()) + { + $order_today+=$row['realmoney']; + } + $enable_money=round($userrow['money']-$order_today,2); + if($enable_money<0)$enable_money=0; +}else{ + $enable_money=$userrow['money']; +} + +if(isset($_GET['act']) && $_GET['act']=='do'){ + if($_POST['submit']=='申请提现'){ + $money=daddslashes(strip_tags($_POST['money'])); + if(!is_numeric($money) || !preg_match('/^[0-9.]+$/', $money))exit(""); + if($enable_money<$conf['settle_money']){ + exit(""); + } + if($money<$conf['settle_money']){ + exit(""); + } + if($userrow['settle']==0){ + exit(""); + } + if($conf['settle_rate']>0){ + $fee=round($money*$conf['settle_rate']/100,2); + if($fee<$conf['settle_fee_min'])$fee=$conf['settle_fee_min']; + if($fee>$conf['settle_fee_max'])$fee=$conf['settle_fee_max']; + $realmoney=$money-$fee; + }else{ + $realmoney=$money; + } + if($DB->exec("INSERT INTO `pre_settle` (`uid`, `type`, `username`, `account`, `money`, `realmoney`, `addtime`, `status`) VALUES ('{$uid}', '{$userrow['settle_id']}', '{$userrow['username']}', '{$userrow['account']}', '{$money}', '{$realmoney}', '{$date}', '0')")){ + changeUserMoney($uid, $money, false, '手动提现'); + } + exit(""); + } +} + + +?> +
    +
    + +
    +

    申请提现

    +
    +
    + +
    + +
    + +
    +
    + 申请提现 +
    +
    +
    +
    + + +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    + +
    + +
    +
    +
    +

    +
    + +
    +

    +

    注意事项

    + 当前最低提现金额为
    + 当前手动提现模式是:T+1,可提现余额为截止到前一天你的收入':'T+0,可提现余额为截止到现在你的收入';?>
    + 申请提现后,你的款项将在1个工作日内下发到指定账户内。 +
    +
    +
    +
    +
    +
    +
    + + + \ No newline at end of file diff --git a/user/assets/css/animate.min.css b/user/assets/css/animate.min.css new file mode 100644 index 0000000..789ed0e --- /dev/null +++ b/user/assets/css/animate.min.css @@ -0,0 +1,6 @@ +@charset "UTF-8";/*! +Animate.css - http://daneden.me/animate +Licensed under the MIT license - http://opensource.org/licenses/MIT + +Copyright (c) 2013 Daniel Eden +*/.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}@-webkit-keyframes bounce{0%,100%,20%,53%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,100%,20%,53%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1);-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}40%,43%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-30px,0);-ms-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-transition-timing-function:cubic-bezier(0.755,.050,.855,.060);transition-timing-function:cubic-bezier(0.755,.050,.855,.060);-webkit-transform:translate3d(0,-15px,0);-ms-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);-ms-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes pulse{0%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);-ms-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}100%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes rubberBand{0%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}30%{-webkit-transform:scale3d(1.25,.75,1);-ms-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(0.75,1.25,1);-ms-transform:scale3d(0.75,1.25,1);transform:scale3d(0.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);-ms-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);-ms-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);-ms-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}100%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,100%{-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);-ms-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);-ms-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}@keyframes swing{20%{-webkit-transform:rotate3d(0,0,1,15deg);-ms-transform:rotate3d(0,0,1,15deg);transform:rotate3d(0,0,1,15deg)}40%{-webkit-transform:rotate3d(0,0,1,-10deg);-ms-transform:rotate3d(0,0,1,-10deg);transform:rotate3d(0,0,1,-10deg)}60%{-webkit-transform:rotate3d(0,0,1,5deg);-ms-transform:rotate3d(0,0,1,5deg);transform:rotate3d(0,0,1,5deg)}80%{-webkit-transform:rotate3d(0,0,1,-5deg);-ms-transform:rotate3d(0,0,1,-5deg);transform:rotate3d(0,0,1,-5deg)}100%{-webkit-transform:rotate3d(0,0,1,0deg);-ms-transform:rotate3d(0,0,1,0deg);transform:rotate3d(0,0,1,0deg)}}.swing{-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes tada{0%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);-ms-transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg);transform:scale3d(.9,.9,.9) rotate3d(0,0,1,-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);-ms-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);-ms-transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg);transform:scale3d(1.1,1.1,1.1) rotate3d(0,0,1,-3deg)}100%{-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;transform:none}}@keyframes wobble{0%{-webkit-transform:none;-ms-transform:none;transform:none}15%{-webkit-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);-ms-transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg);transform:translate3d(-25%,0,0) rotate3d(0,0,1,-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);-ms-transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg);transform:translate3d(20%,0,0) rotate3d(0,0,1,3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);-ms-transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg);transform:translate3d(-15%,0,0) rotate3d(0,0,1,-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);-ms-transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg);transform:translate3d(10%,0,0) rotate3d(0,0,1,2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);-ms-transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg);transform:translate3d(-5%,0,0) rotate3d(0,0,1,-1deg)}100%{-webkit-transform:none;-ms-transform:none;transform:none}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes bounceIn{0%,100%,20%,40%,60%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}@keyframes bounceIn{0%,100%,20%,40%,60%,80%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);-ms-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);-ms-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);-ms-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);-ms-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}100%{opacity:1;-webkit-transform:scale3d(1,1,1);-ms-transform:scale3d(1,1,1);transform:scale3d(1,1,1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounceInDown{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInDown{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);-ms-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);-ms-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);-ms-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);-ms-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}100%{-webkit-transform:none;-ms-transform:none;transform:none}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInLeft{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);-ms-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);-ms-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);-ms-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);-ms-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}100%{-webkit-transform:none;-ms-transform:none;transform:none}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;transform:none}}@keyframes bounceInRight{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);-ms-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);-ms-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);-ms-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);-ms-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}100%{-webkit-transform:none;-ms-transform:none;transform:none}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}@keyframes bounceInUp{0%,100%,60%,75%,90%{-webkit-transition-timing-function:cubic-bezier(0.215,.61,.355,1);transition-timing-function:cubic-bezier(0.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);-ms-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);-ms-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);-ms-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);-ms-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}100%{-webkit-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);-ms-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);-ms-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}100%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);-ms-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);-ms-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);-ms-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);-ms-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);-ms-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);-ms-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);-ms-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);-ms-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);-ms-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);-ms-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);-ms-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);-ms-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);-ms-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);-ms-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,100%,0);-ms-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,2000px,0);-ms-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%,0,0);-ms-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);-ms-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0);-ms-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(2000px,0,0);-ms-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-100%,0);-ms-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);-ms-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-360deg);-ms-transform:perspective(400px) rotate3d(0,1,0,-360deg);transform:perspective(400px) rotate3d(0,1,0,-360deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-ms-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-ms-transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);transform:perspective(400px) translate3d(0,0,150px) rotate3d(0,1,0,-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);-ms-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;-ms-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);-ms-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);-ms-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(1,0,0,10deg);-ms-transform:perspective(400px) rotate3d(1,0,0,10deg);transform:perspective(400px) rotate3d(1,0,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-5deg);-ms-transform:perspective(400px) rotate3d(1,0,0,-5deg);transform:perspective(400px) rotate3d(1,0,0,-5deg)}100%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);-ms-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-20deg);-ms-transform:perspective(400px) rotate3d(0,1,0,-20deg);transform:perspective(400px) rotate3d(0,1,0,-20deg);-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotate3d(0,1,0,10deg);-ms-transform:perspective(400px) rotate3d(0,1,0,10deg);transform:perspective(400px) rotate3d(0,1,0,10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-5deg);-ms-transform:perspective(400px) rotate3d(0,1,0,-5deg);transform:perspective(400px) rotate3d(0,1,0,-5deg)}100%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(1,0,0,-20deg);-ms-transform:perspective(400px) rotate3d(1,0,0,-20deg);transform:perspective(400px) rotate3d(1,0,0,-20deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(1,0,0,90deg);-ms-transform:perspective(400px) rotate3d(1,0,0,90deg);transform:perspective(400px) rotate3d(1,0,0,90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);-ms-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotate3d(0,1,0,-15deg);-ms-transform:perspective(400px) rotate3d(0,1,0,-15deg);transform:perspective(400px) rotate3d(0,1,0,-15deg);opacity:1}100%{-webkit-transform:perspective(400px) rotate3d(0,1,0,90deg);-ms-transform:perspective(400px) rotate3d(0,1,0,90deg);transform:perspective(400px) rotate3d(0,1,0,90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY;-webkit-animation-duration:.75s;animation-duration:.75s}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;transform:none;opacity:1}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);-ms-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);-ms-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);-ms-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}100%{-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{0%{opacity:1}100%{-webkit-transform:translate3d(100%,0,0) skewX(30deg);-ms-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,-200deg);-ms-transform:rotate3d(0,0,1,-200deg);transform:rotate3d(0,0,1,-200deg);opacity:0}100%{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);-ms-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,45deg);-ms-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,45deg);-ms-transform:rotate3d(0,0,1,45deg);transform:rotate3d(0,0,1,45deg);opacity:0}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;transform:none;opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-90deg);-ms-transform:rotate3d(0,0,1,-90deg);transform:rotate3d(0,0,1,-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:none;-ms-transform:none;transform:none;opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;opacity:1}100%{-webkit-transform-origin:center;-ms-transform-origin:center;transform-origin:center;-webkit-transform:rotate3d(0,0,1,200deg);-ms-transform:rotate3d(0,0,1,200deg);transform:rotate3d(0,0,1,200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0,0,1,45deg);transform:rotate(0,0,1,45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0,0,1,45deg);-ms-transform:rotate(0,0,1,45deg);transform:rotate(0,0,1,45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,-45deg);-ms-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;opacity:1}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate3d(0,0,1,-45deg);-ms-transform:rotate3d(0,0,1,-45deg);transform:rotate3d(0,0,1,-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;opacity:1}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate3d(0,0,1,90deg);-ms-transform:rotate3d(0,0,1,90deg);transform:rotate3d(0,0,1,90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate3d(0,0,1,80deg);-ms-transform:rotate3d(0,0,1,80deg);transform:rotate3d(0,0,1,80deg);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate3d(0,0,1,60deg);-ms-transform:rotate3d(0,0,1,60deg);transform:rotate3d(0,0,1,60deg);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}100%{-webkit-transform:translate3d(0,700px,0);-ms-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);-ms-transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg);transform:translate3d(-100%,0,0) rotate3d(0,0,1,-120deg)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}@keyframes rollOut{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);-ms-transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg);transform:translate3d(100%,0,0) rotate3d(0,0,1,120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-ms-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-ms-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-ms-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-ms-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-ms-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-ms-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-ms-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-ms-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);-ms-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}100%{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-ms-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-ms-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);-ms-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);-ms-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;-ms-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);-ms-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}100%{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);-ms-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;-ms-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-ms-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(0.55,.055,.675,.19);animation-timing-function:cubic-bezier(0.55,.055,.675,.19)}100%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-ms-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;-ms-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(0.175,.885,.32,1);animation-timing-function:cubic-bezier(0.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp} \ No newline at end of file diff --git a/user/assets/css/app.css b/user/assets/css/app.css new file mode 100644 index 0000000..312d79d --- /dev/null +++ b/user/assets/css/app.css @@ -0,0 +1,5177 @@ +/* + +*/ + +html { + background-color: #f0f3f4; +} + +body { + font-family: "Source Sans Pro", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + -webkit-font-smoothing: antialiased; + line-height: 1.42857143; + color: #58666e; + background-color: transparent; +} + +*:focus { + outline: 0 !important; +} + +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + margin: 0; +} + +a { + color: #363f44; + text-decoration: none; + cursor: pointer; +} + +a:hover, +a:focus { + color: #141719; + text-decoration: none; +} + +label { + font-weight: normal; +} + +small, +.small { + font-size: 13px; +} + +.badge, +.label { + font-weight: bold; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2); +} + +.badge.bg-light, +.label.bg-light { + text-shadow: none; +} + +.badge { + background-color: #cfdadd; +} + +.badge.up { + position: relative; + top: -10px; + padding: 3px 6px; + margin-left: -10px; +} + +.badge-sm { + padding: 2px 5px !important; + font-size: 85%; +} + +.label-sm { + padding-top: 0; + padding-bottom: 1px; +} + +.badge-white { + padding: 2px 6px; + background-color: transparent; + border: 1px solid rgba(255, 255, 255, 0.35); +} + +.badge-empty { + color: inherit; + background-color: transparent; + border: 1px solid rgba(0, 0, 0, 0.15); +} + +blockquote { + border-color: #dee5e7; +} + +.caret-white { + border-top-color: #fff; + border-top-color: rgba(255, 255, 255, 0.65); +} + +a:hover .caret-white { + border-top-color: #fff; +} + +.thumbnail { + border-color: #dee5e7; +} + +.progress { + background-color: #edf1f2; +} + +.progress-xxs { + height: 2px; +} + +.progress-xs { + height: 6px; +} + +.progress-sm { + height: 12px; +} + +.progress-sm .progress-bar { + font-size: 10px; + line-height: 1em; +} + +.progress, +.progress-bar { + -webkit-box-shadow: none; + box-shadow: none; +} + +.progress-bar-primary { + background-color: #7266ba; +} + +.progress-bar-info { + background-color: #23b7e5; +} + +.progress-bar-success { + background-color: #27c24c; +} + +.progress-bar-warning { + background-color: #fad733; +} + +.progress-bar-danger { + background-color: #f05050; +} + +.progress-bar-black { + background-color: #1c2b36; +} + +.progress-bar-white { + background-color: #fff; +} + +.accordion-group, +.accordion-inner { + border-color: #dee5e7; + border-radius: 2px; +} + +.alert { + font-size: 13px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2); +} + +.alert .close i { + display: block; + font-size: 12px; + font-weight: normal; +} + +.form-control { + border-color: #cfdadd; + border-radius: 2px; +} + +.form-control, +.form-control:focus { + -webkit-box-shadow: none; + box-shadow: none; +} + +.form-control:focus { + border-color: #23b7e5; +} + +.form-horizontal .control-label.text-left { + text-align: left; +} + +.form-control-spin { + position: absolute; + top: 50%; + right: 10px; + z-index: 2; + margin-top: -7px; +} + +.input-lg { + height: 45px; +} + +.input-group-addon { + background-color: #edf1f2; + border-color: #cfdadd; +} + +.list-group { + border-radius: 2px; +} + +.list-group.no-radius .list-group-item { + border-radius: 0 !important; +} + +.list-group.no-borders .list-group-item { + border: none; +} + +.list-group.no-border .list-group-item { + border-width: 1px 0; +} + +.list-group.no-bg .list-group-item { + background-color: transparent; +} + +.list-group-item { + padding-right: 15px; + border-color: #e7ecee; +} + +a.list-group-item:hover, +a.list-group-item:focus, +a.list-group-item.hover { + background-color: #f6f8f8; +} + +.list-group-item.media { + margin-top: 0; +} + +.list-group-item.active { + color: #fff; + background-color: #23b7e5 !important; + border-color: #23b7e5 !important; +} + +.list-group-item.active .text-muted { + color: #ace4f5 !important; +} + +.list-group-item.active a { + color: #fff; +} + +.list-group-item.focus { + background-color: #e4eaec !important; +} + +.list-group-item.select { + position: relative; + z-index: 1; + background-color: #dbeef9 !important; + border-color: #c5e4f5; +} + +.list-group-alt .list-group-item:nth-child(2n+2) { + background-color: rgba(0, 0, 0, 0.02) !important; +} + +.list-group-lg .list-group-item { + padding-top: 15px; + padding-bottom: 15px; +} + +.list-group-sm .list-group-item { + padding: 6px 10px; +} + +.list-group-sp .list-group-item { + margin-bottom: 5px; + border-radius: 3px; +} + +.list-group-item > .badge { + margin-right: 0; +} + +.list-group-item > .fa-chevron-right { + float: right; + margin-top: 4px; + margin-right: -5px; +} + +.list-group-item > .fa-chevron-right + .badge { + margin-right: 5px; +} + +.nav-pills.no-radius > li > a { + border-radius: 0; +} + +.nav-pills > li.active > a { + color: #fff !important; + background-color: #23b7e5; +} + +.nav-pills > li.active > a:hover, +.nav-pills > li.active > a:active { + background-color: #19a9d5; +} + +.nav > li > a:hover, +.nav > li > a:focus { + background-color: #f6f8f8; +} + +.nav.nav-lg > li > a { + padding: 20px 20px; +} + +.nav.nav-md > li > a { + padding: 15px 15px; +} + +.nav.nav-sm > li > a { + padding: 6px 12px; +} + +.nav.nav-xs > li > a { + padding: 4px 10px; +} + +.nav.nav-xxs > li > a { + padding: 1px 10px; +} + +.nav.nav-rounded > li > a { + border-radius: 20px; +} + +.nav .open > a, +.nav .open > a:hover, +.nav .open > a:focus { + background-color: #f6f8f8; +} + +.nav-tabs { + border-color: #dee5e7; +} + +.nav-tabs > li > a { + border-bottom-color: #dee5e7; + border-radius: 2px 2px 0 0; +} + +.nav-tabs > li:hover > a, +.nav-tabs > li.active > a, +.nav-tabs > li.active > a:hover { + border-color: #dee5e7; +} + +.nav-tabs > li.active > a { + border-bottom-color: #fff !important; +} + +.nav-tabs-alt .nav-tabs.nav-justified > li { + display: table-cell; + width: 1%; +} + +.nav-tabs-alt .nav-tabs > li > a { + background: transparent !important; + border-color: transparent !important; + border-bottom-color: #dee5e7 !important; + border-radius: 0; +} + +.nav-tabs-alt .nav-tabs > li.active > a { + border-bottom-color: #23b7e5 !important; +} + +.tab-container { + margin-bottom: 15px; +} + +.tab-container .tab-content { + padding: 15px; + background-color: #fff; + border: 1px solid #dee5e7; + border-top-width: 0; + border-radius: 0 0 2px 2px; +} + +.pagination > li > a { + border-color: #dee5e7; +} + +.pagination > li > a:hover, +.pagination > li > a:focus { + background-color: #edf1f2; + border-color: #dee5e7; +} + +.panel { + border-radius: 2px; +} + +.panel .accordion-toggle { + display: block; + font-size: 14px; + cursor: pointer; +} + +.panel .list-group-item { + border-color: #edf1f2; +} + +.panel.no-borders { + border-width: 0; +} + +.panel.no-borders .panel-heading, +.panel.no-borders .panel-footer { + border-width: 0; +} + +.panel-heading { + border-radius: 2px 2px 0 0; +} + +.panel-default .panel-heading { + background-color: #f6f8f8; +} + +.panel-heading.no-border { + margin: -1px -1px 0 -1px; + border: none; +} + +.panel-heading .nav { + margin: -10px -15px; +} + +.panel-heading .list-group { + background: transparent; +} + +.panel-footer { + background-color: #ffffff; + border-color: #edf1f2; + border-radius: 0 0 2px 2px; +} + +.panel-default { + border-color: #dee5e7; +} + +.panel-default > .panel-heading, +.panel-default > .panel-footer { + border-color: #edf1f2; +} + +.panel-group .panel-heading + .panel-collapse .panel-body { + border-top: 1px solid #eaedef; +} + +.table > tbody > tr > td, +.table > tfoot > tr > td { + padding: 8px 15px; + border-top: 1px solid #eaeff0; +} + +.table > thead > tr > th { + padding: 8px 15px; + border-bottom: 1px solid #eaeff0; +} + +.table-bordered { + border-color: #eaeff0; +} + +.table-bordered > tbody > tr > td { + border-color: #eaeff0; +} + +.table-bordered > thead > tr > th { + border-color: #eaeff0; +} + +.table-striped > tbody > tr:nth-child(odd) > td, +.table-striped > tbody > tr:nth-child(odd) > th { + background-color: #fafbfc; +} + +.table-striped > thead > th { + background-color: #fafbfc; + border-right: 1px solid #eaeff0; +} + +.table-striped > thead > th:last-child { + border-right: none; +} + +.well, +pre { + background-color: #edf1f2; + border-color: #dee5e7; +} + +.dropdown-menu { + border: 1px solid #dee5e7; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 2px; + -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); +} + +.dropdown-menu.pull-left { + left: 100%; +} + +.dropdown-menu > .panel { + margin: -5px 0; + border: none; +} + +.dropdown-menu > li > a { + padding: 5px 15px; +} + +.dropdown-menu > li > a:hover, +.dropdown-menu > li > a:focus, +.dropdown-menu > .active > a, +.dropdown-menu > .active > a:hover, +.dropdown-menu > .active > a:focus { + color: #141719; + background-color: #edf1f2 !important; + background-image: none; + filter: none; +} + +.dropdown-header { + padding: 5px 15px; +} + +.dropdown-submenu { + position: relative; +} + +.dropdown-submenu:hover > a, +.dropdown-submenu:focus > a { + color: #58666e; + background-color: #edf1f2 !important; +} + +.dropdown-submenu:hover > .dropdown-menu, +.dropdown-submenu:focus > .dropdown-menu { + display: block; +} + +.dropdown-submenu.pull-left { + float: none !important; +} + +.dropdown-submenu.pull-left > .dropdown-menu { + left: -100%; + margin-left: 10px; +} + +.dropdown-submenu .dropdown-menu { + top: 0; + left: 100%; + margin-top: -6px; + margin-left: -1px; +} + +.dropup .dropdown-submenu > .dropdown-menu { + top: auto; + bottom: 0; +} + +.btn-group > .btn { + margin-left: -1px; +} + +/*cols*/ + +.col-lg-2-4 { + position: relative; + min-height: 1px; + padding-right: 15px; + padding-left: 15px; +} + +.col-0 { + clear: left; +} + +.row.no-gutter { + margin-right: 0; + margin-left: 0; +} + +.no-gutter [class*="col"] { + padding: 0; +} + +.row-sm { + margin-right: -10px; + margin-left: -10px; +} + +.row-sm > div { + padding-right: 10px; + padding-left: 10px; +} + +.modal-backdrop { + background-color: #3a3f51; +} + +.modal-backdrop.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +.modal-over { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.modal-center { + position: absolute; + top: 50%; + left: 50%; +} + +/*layout*/ + +html, +body { + width: 100%; + height: 100%; +} + +body { + overflow-x: hidden; +} + +.app { + position: relative; + width: 100%; + height: auto; + min-height: 100%; +} + +.app:before { + position: absolute; + top: 0; + bottom: 0; + z-index: -1; + display: block; + width: inherit; + background-color: #f0f3f4; + border: inherit; + content: ""; +} + +.app-header-fixed { + padding-top: 50px; +} + +.app-header-fixed .app-header { + position: fixed; + top: 0; + width: 100%; +} + +.app-header { + z-index: 1025; + border-radius: 0; +} + +.app-aside { + float: left; +} + +.app-aside:before { + position: absolute; + top: 0; + bottom: 0; + z-index: -1; + width: inherit; + background-color: inherit; + border: inherit; + content: ""; +} + +.app-aside-footer { + position: absolute; + bottom: 0; + z-index: 1000; + width: 100%; + max-width: 200px; +} + +.app-aside-folded .app-aside-footer { + max-width: 60px; +} + +.app-aside-footer ~ div { + padding-bottom: 50px; +} + +.app-aside-right { + padding-bottom: 50px; +} + +.app-content { + height: 100%; +} + +.app-content:before, +.app-content:after { + display: table; + content: " "; +} + +.app-content:after { + clear: both; +} + +.app-content-full { + position: absolute; + top: 50px; + bottom: 50px; + width: auto !important; + height: auto; + padding: 0 !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} + +.app-content-full.h-full { + bottom: 0; + height: auto; +} + +.app-content-body { + float: left; + width: 100%; + padding-bottom: 50px; +} + +.app-footer { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 1005; +} + +.app-footer.app-footer-fixed { + position: fixed; +} + +.hbox { + display: table; + width: 100%; + height: 100%; + border-spacing: 0; + table-layout: fixed; +} + +.hbox .col { + display: table-cell; + float: none; + height: 100%; + vertical-align: top; +} + +.v-middle { + vertical-align: middle !important; +} + +.v-top { + vertical-align: top !important; +} + +.v-bottom { + vertical-align: bottom !important; +} + +.vbox { + position: relative; + display: table; + width: 100%; + height: 100%; + min-height: 240px; + border-spacing: 0; +} + +.vbox .row-row { + display: table-row; + height: 100%; +} + +.vbox .row-row .cell { + position: relative; + width: 100%; + height: 100%; + overflow: auto; + -webkit-overflow-scrolling: touch; +} + +.ie .vbox .row-row .cell { + display: table-cell; +} + +.vbox .row-row .cell .cell-inner { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; +} + +.navbar { + margin: 0; + border-width: 0; + border-radius: 0; +} + +.navbar .navbar-form-sm { + margin-top: 10px; + margin-bottom: 10px; +} + +.navbar-md { + min-height: 60px; +} + +.navbar-md .navbar-btn { + margin-top: 13px; +} + +.navbar-md .navbar-form { + margin-top: 15px; +} + +.navbar-md .navbar-nav > li > a { + padding-top: 20px; + padding-bottom: 20px; +} + +.navbar-md .navbar-brand { + line-height: 60px; +} + +.navbar-header > button { + padding: 10px 17px; + font-size: 16px; + line-height: 30px; + text-decoration: none; + background-color: transparent; + border: none; +} + +.navbar-brand { + display: inline-block; + float: none; + height: auto; + padding: 0 20px; + font-size: 20px; + font-weight: 700; + line-height: 50px; + text-align: center; +} + +.navbar-brand:hover { + text-decoration: none; +} + +.navbar-brand img { + display: inline; + max-height: 20px; + margin-top: -4px; + vertical-align: middle; +} + +@media (min-width: 768px) { + .app-aside, + .navbar-header { + width: 200px; + } + .navbar-collapse, + .app-content, + .app-footer { + margin-left: 200px; + } + .app-aside-right { + position: absolute; + top: 50px; + right: 0; + bottom: 0; + z-index: 1000; + } + .app-aside-right.pos-fix { + z-index: 1010; + } + .visible-folded { + display: none; + } + .app-aside-folded .hidden-folded { + display: none !important; + } + .app-aside-folded .visible-folded { + display: inherit; + } + .app-aside-folded .text-center-folded { + text-align: center; + } + .app-aside-folded .pull-none-folded { + float: none !important; + } + .app-aside-folded .w-auto-folded { + width: auto; + } + .app-aside-folded .app-aside, + .app-aside-folded .navbar-header { + width: 60px; + } + .app-aside-folded .navbar-collapse, + .app-aside-folded .app-content, + .app-aside-folded .app-footer { + margin-left: 60px; + } + .app-aside-folded .app-header .navbar-brand { + display: block; + padding: 0; + } + .app-aside-fixed .app-header .navbar-header { + position: fixed; + } + .app-aside-fixed .aside-wrap { + position: fixed; + top: 50px; + bottom: 0; + left: 0; + z-index: 1000; + width: 199px; + overflow: hidden; + } + .app-aside-fixed .aside-wrap .navi-wrap { + position: relative; + width: 217px; + height: 100%; + overflow-x: hidden; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + } + .app-aside-fixed .aside-wrap .navi-wrap::-webkit-scrollbar { + -webkit-appearance: none; + } + .app-aside-fixed .aside-wrap .navi-wrap::-webkit-scrollbar:vertical { + width: 17px; + } + .app-aside-fixed .aside-wrap .navi-wrap > * { + width: 200px; + } + .smart .app-aside-fixed .aside-wrap .navi-wrap { + width: 200px; + } + .app-aside-fixed.app-aside-folded .app-aside { + position: fixed; + top: 0; + bottom: 0; + z-index: 1010; + } + .app-aside-fixed.app-aside-folded .aside-wrap { + width: 59px; + } + .app-aside-fixed.app-aside-folded .aside-wrap .navi-wrap { + width: 77px; + } + .app-aside-fixed.app-aside-folded .aside-wrap .navi-wrap > * { + width: 60px; + } + .smart .app-aside-fixed.app-aside-folded .aside-wrap .navi-wrap { + width: 60px; + } + .bg-auto:before { + position: absolute; + top: 0; + bottom: 0; + z-index: -1; + width: inherit; + background-color: inherit; + border: inherit; + content: ""; + } + .bg-auto.b-l:before { + margin-left: -1px; + } + .bg-auto.b-r:before { + margin-right: -1px; + } + .col.show { + display: table-cell !important; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hbox-auto-sm { + display: block; + } + .hbox-auto-sm > .col { + display: block; + width: auto; + height: auto; + } + .hbox-auto-sm > .col.show { + display: block !important; + } +} + +@media (max-width: 767px) { + .app-aside { + float: none; + } + .app-content-full { + width: 100% !important; + } + .hbox-auto-xs { + display: block; + } + .hbox-auto-xs > .col { + display: block; + width: auto; + height: auto; + } + .navbar-nav { + margin-top: 0; + margin-bottom: 0; + } + .navbar-nav > li > a { + box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1); + } + .navbar-nav > li > a .up { + top: 0; + } + .navbar-nav > li > a .avatar { + width: 30px; + margin-top: -5px; + } + .navbar-nav .open .dropdown-menu { + background-color: #fff; + } + .navbar-form { + margin-top: 0 !important; + margin-bottom: 0 !important; + box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.1); + } + .navbar-form .form-group { + margin-bottom: 0; + } +} + +html { + background: url('../img/bg.jpg'); + background-attachment: fixed; + background-size: cover; +} + +.app.container { + padding-right: 0; + padding-left: 0; +} + +@media (min-width: 768px) { + .app.container { + width: 750px; + -webkit-box-shadow: 0 0 30px rgba(0, 0, 0, 0.3); + box-shadow: 0 0 30px rgba(0, 0, 0, 0.3); + } + .app.container .app-aside { + overflow-x: hidden; + } + .app.container.app-aside-folded .app-aside { + overflow-x: visible; + } + .app.container.app-aside-fixed .aside-wrap { + left: inherit; + } + .app.container.app-aside-fixed.app-aside-folded .app-aside > ul.nav { + position: absolute; + } + .app.container .app-header, + .app.container .app-aside { + max-width: 750px; + } + .app.container .app-footer-fixed { + right: auto; + left: auto; + width: 100%; + max-width: 550px; + } + .app.container.app-aside-folded .app-footer-fixed { + max-width: 690px; + } + .app.container.app-aside-dock .app-footer-fixed { + max-width: 750px; + } +} + +@media (min-width: 992px) { + .app.container { + width: 970px; + } + .app.container .app-header, + .app.container .app-aside { + max-width: 970px; + } + .app.container .app-footer-fixed { + max-width: 770px; + } + .app.container.app-aside-folded .app-footer-fixed { + max-width: 910px; + } + .app.container.app-aside-dock .app-footer-fixed { + max-width: 970px; + } +} + +@media (min-width: 1200px) { + .app.container { + width: 1170px; + } + .app.container .app-header, + .app.container .app-aside { + max-width: 1170px; + } + .app.container .app-footer-fixed { + max-width: 970px; + } + .app.container.app-aside-folded .app-footer-fixed { + max-width: 1110px; + } + .app.container.app-aside-dock .app-footer-fixed { + max-width: 1170px; + } +} + +.nav-sub { + height: 0; + margin-left: -20px; + overflow: hidden; + opacity: 0; + -webkit-transition: all 0.2s ease-in-out 0s; + transition: all 0.2s ease-in-out 0s; +} + +.active > .nav-sub, +.app-aside-folded li:hover > .nav-sub, +.app-aside-folded li:focus > .nav-sub, +.app-aside-folded li:active > .nav-sub { + height: auto !important; + margin-left: 0; + overflow: auto; + opacity: 1; +} + +.nav-sub-header { + display: none !important; +} + +.nav-sub-header a { + padding: 15px 20px; +} + +.navi ul.nav li { + position: relative; + display: block; +} + +.navi ul.nav li li a { + padding-left: 55px; +} + +.navi ul.nav li li ul { + display: none; +} + +.navi ul.nav li li.active > ul { + display: block; +} + +.navi ul.nav li a { + position: relative; + display: block; + padding: 10px 20px; + font-weight: normal; + text-transform: none; + -webkit-transition: background-color 0.2s ease-in-out 0s; + transition: background-color 0.2s ease-in-out 0s; +} + +.navi ul.nav li a .badge, +.navi ul.nav li a .label { + padding: 2px 5px; + margin-top: 2px; + font-size: 11px; +} + +.navi ul.nav li a > i { + position: relative; + float: left; + width: 40px; + margin: -10px -10px; + margin-right: 5px; + overflow: hidden; + line-height: 40px; + text-align: center; +} + +.navi ul.nav li a > i:before { + position: relative; + z-index: 2; +} + +@media (min-width: 768px) { + .app-aside-folded .nav-sub-header { + display: block !important; + } + .app-aside-folded .nav-sub-header a { + padding: 15px 20px !important; + } + .app-aside-folded .navi > ul > li > a { + position: relative; + height: 50px; + padding: 0; + text-align: center; + border: none; + } + .app-aside-folded .navi > ul > li > a span { + display: none; + } + .app-aside-folded .navi > ul > li > a span.pull-right { + display: none !important; + } + .app-aside-folded .navi > ul > li > a i { + display: block; + float: none; + width: auto; + margin: 0; + font-size: 16px; + line-height: 50px; + border: none !important; + } + .app-aside-folded .navi > ul > li > a i b { + left: 0 !important; + } + .app-aside-folded .navi > ul > li > a .badge, + .app-aside-folded .navi > ul > li > a .label { + position: absolute; + top: 8px; + right: 12px; + z-index: 3; + } + .app-aside-folded .navi > ul > li > ul { + position: absolute; + top: 0 !important; + left: 100%; + z-index: 1050; + width: 200px; + height: 0 !important; + -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); + } + .app-aside-folded .navi li li a { + padding-left: 20px !important; + } + .app-aside-folded.app-aside-fixed .app-aside > ul.nav { + position: fixed; + left: 80px; + z-index: 1010; + display: block; + width: 260px; + height: auto; + overflow: visible; + overflow-y: auto; + opacity: 1; + -webkit-overflow-scrolling: touch; + } + .app-aside-folded.app-aside-fixed .app-aside > ul.nav:before { + position: absolute; + top: 0; + left: -60px; + width: 60px; + height: 50px; + content: ""; + } + .app-aside-folded.app-aside-fixed .app-aside > ul.nav a { + padding-right: 20px !important; + padding-left: 20px !important; + } +} + +@media (max-width: 767px) { + .app { + overflow-x: hidden; + } + .app-content { + -webkit-transition: -webkit-transform 0.2s ease; + -moz-transition: -moz-transform 0.2s ease; + -o-transition: -o-transform 0.2s ease; + transition: transform 0.2s ease; + } + .off-screen { + position: absolute; + top: 50px; + bottom: 0; + z-index: 1010; + display: block !important; + width: 75%; + overflow-x: hidden; + overflow-y: auto; + visibility: visible; + -webkit-overflow-scrolling: touch; + } + .off-screen + * { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1015; + width: 100%; + padding-top: 50px; + overflow: hidden; + background-color: #f0f3f4; + -webkit-transform: translate3d(75%, 0, 0px); + transform: translate3d(75%, 0, 0px); + -webkit-transition: -webkit-transform 0.2s ease; + -moz-transition: -moz-transform 0.2s ease; + -o-transition: -o-transform 0.2s ease; + transition: transform 0.2s ease; + -webkit-backface-visibility: hidden; + -moz-backface-visibility: hidden; + backface-visibility: hidden; + } + .off-screen + * .off-screen-toggle { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1020; + display: block !important; + } + .off-screen.pull-right { + right: 0; + } + .off-screen.pull-right + * { + -webkit-transform: translate3d(-75%, 0, 0px); + transform: translate3d(-75%, 0, 0px); + } +} + +@media (min-width: 992px) { + .app-aside-dock .app-content, + .app-aside-dock .app-footer { + margin-left: 0; + } + .app-aside-dock .app-aside-footer ~ div { + padding-bottom: 0; + } + .app-aside-dock.app-aside-fixed.app-header-fixed { + padding-top: 115px; + } + .app-aside-dock.app-aside-fixed .app-aside { + position: fixed; + top: 50px; + z-index: 1000; + width: 100%; + } + .app-aside-dock .app-aside, + .app-aside-dock .aside-wrap, + .app-aside-dock .navi-wrap { + position: relative; + top: 0; + float: none; + width: 100% !important; + overflow: visible !important; + } + .app-aside-dock .navi-wrap > * { + width: auto !important; + } + .app-aside-dock .app-aside { + bottom: auto !important; + } + .app-aside-dock .app-aside.b-r { + border-bottom: 1px solid #dee5e7; + border-right-width: 0; + } + .app-aside-dock .app-aside:before { + display: none; + } + .app-aside-dock .app-aside nav > .nav { + float: left; + } + .app-aside-dock .app-aside .hidden-folded, + .app-aside-dock .app-aside .line, + .app-aside-dock .app-aside .navi-wrap > div { + display: none !important; + } + .app-aside-dock .app-aside .navi > ul > li { + position: relative; + display: inline-block; + float: left; + } + .app-aside-dock .app-aside .navi > ul > li > a { + height: auto; + padding: 10px 15px 12px 15px; + text-align: center; + } + .app-aside-dock .app-aside .navi > ul > li > a > .badge, + .app-aside-dock .app-aside .navi > ul > li > a > .label { + position: absolute; + top: 5px; + right: 8px; + padding: 1px 4px; + } + .app-aside-dock .app-aside .navi > ul > li > a > i { + display: block; + float: none; + width: 40px; + margin-top: -10px; + margin-right: auto; + margin-bottom: -7px; + margin-left: auto; + font-size: 14px; + line-height: 40px; + } + .app-aside-dock .app-aside .navi > ul > li > a > span.pull-right { + position: absolute; + bottom: 2px; + left: 50%; + display: block !important; + margin-left: -6px; + line-height: 1; + } + .app-aside-dock .app-aside .navi > ul > li > a > span.pull-right i { + width: 12px; + font-size: 12px; + line-height: 12px; + } + .app-aside-dock .app-aside .navi > ul > li > a > span.pull-right i.text { + line-height: 14px; + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); + } + .app-aside-dock .app-aside .navi > ul > li > a > span { + display: block; + font-weight: normal; + } + .app-aside-dock .app-aside .navi > ul > li .nav-sub { + position: absolute; + top: auto !important; + left: 0; + z-index: 1050; + display: none; + width: 200px; + height: auto !important; + -webkit-box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.1); + } + .app-aside-dock .app-aside .navi > ul > li .nav-sub-header { + display: none !important; + } + .app-aside-dock .app-aside .navi li li a { + padding-left: 15px; + } + .app-aside-dock .app-aside .navi li:hover > .nav-sub, + .app-aside-dock .app-aside .navi li:focus > .nav-sub, + .app-aside-dock .app-aside .navi li:active > .nav-sub { + display: block; + height: auto !important; + margin-left: 0; + overflow: auto; + opacity: 1; + } +} + +.arrow { + z-index: 10; + border-width: 9px; +} + +.arrow, +.arrow:after { + position: absolute; + display: block; + width: 0; + height: 0; + border-color: transparent; + border-style: solid; +} + +.arrow:after { + border-width: 8px; + content: ""; +} + +.arrow.top { + top: -9px; + left: 50%; + margin-left: -9px; + border-bottom-color: rgba(0, 0, 0, 0.1); + border-top-width: 0; +} + +.arrow.top:after { + top: 1px; + margin-left: -8px; + border-bottom-color: #ffffff; + border-top-width: 0; +} + +.arrow.top.arrow-primary:after { + border-bottom-color: #7266ba; +} + +.arrow.top.arrow-info:after { + border-bottom-color: #23b7e5; +} + +.arrow.top.arrow-success:after { + border-bottom-color: #27c24c; +} + +.arrow.top.arrow-danger:after { + border-bottom-color: #f05050; +} + +.arrow.top.arrow-warning:after { + border-bottom-color: #fad733; +} + +.arrow.top.arrow-light:after { + border-bottom-color: #edf1f2; +} + +.arrow.top.arrow-dark:after { + border-bottom-color: #3a3f51; +} + +.arrow.top.arrow-black:after { + border-bottom-color: #1c2b36; +} + +.arrow.right { + top: 50%; + right: -9px; + margin-top: -9px; + border-left-color: rgba(0, 0, 0, 0.1); + border-right-width: 0; +} + +.arrow.right:after { + right: 1px; + bottom: -8px; + border-left-color: #ffffff; + border-right-width: 0; +} + +.arrow.right.arrow-primary:after { + border-left-color: #7266ba; +} + +.arrow.right.arrow-info:after { + border-left-color: #23b7e5; +} + +.arrow.right.arrow-success:after { + border-left-color: #27c24c; +} + +.arrow.right.arrow-danger:after { + border-left-color: #f05050; +} + +.arrow.right.arrow-warning:after { + border-left-color: #fad733; +} + +.arrow.right.arrow-light:after { + border-left-color: #edf1f2; +} + +.arrow.right.arrow-dark:after { + border-left-color: #3a3f51; +} + +.arrow.right.arrow-black:after { + border-left-color: #1c2b36; +} + +.arrow.bottom { + bottom: -9px; + left: 50%; + margin-left: -9px; + border-top-color: rgba(0, 0, 0, 0.1); + border-bottom-width: 0; +} + +.arrow.bottom:after { + bottom: 1px; + margin-left: -8px; + border-top-color: #ffffff; + border-bottom-width: 0; +} + +.arrow.bottom.arrow-primary:after { + border-top-color: #7266ba; +} + +.arrow.bottom.arrow-info:after { + border-top-color: #23b7e5; +} + +.arrow.bottom.arrow-success:after { + border-top-color: #27c24c; +} + +.arrow.bottom.arrow-danger:after { + border-top-color: #f05050; +} + +.arrow.bottom.arrow-warning:after { + border-top-color: #fad733; +} + +.arrow.bottom.arrow-light:after { + border-top-color: #edf1f2; +} + +.arrow.bottom.arrow-dark:after { + border-top-color: #3a3f51; +} + +.arrow.bottom.arrow-black:after { + border-top-color: #1c2b36; +} + +.arrow.left { + top: 50%; + left: -9px; + margin-top: -9px; + border-right-color: rgba(0, 0, 0, 0.1); + border-left-width: 0; +} + +.arrow.left:after { + bottom: -8px; + left: 1px; + border-right-color: #ffffff; + border-left-width: 0; +} + +.arrow.left.arrow-primary:after { + border-right-color: #7266ba; +} + +.arrow.left.arrow-info:after { + border-right-color: #23b7e5; +} + +.arrow.left.arrow-success:after { + border-right-color: #27c24c; +} + +.arrow.left.arrow-danger:after { + border-right-color: #f05050; +} + +.arrow.left.arrow-warning:after { + border-right-color: #fad733; +} + +.arrow.left.arrow-light:after { + border-right-color: #edf1f2; +} + +.arrow.left.arrow-dark:after { + border-right-color: #3a3f51; +} + +.arrow.left.arrow-black:after { + border-right-color: #1c2b36; +} + +.arrow.pull-left { + left: 19px; +} + +.arrow.pull-right { + right: 19px; + left: auto; +} + +.arrow.pull-up { + top: 19px; +} + +.arrow.pull-down { + top: auto; + bottom: 19px; +} + +.btn { + font-weight: 500; + border-radius: 2px; + outline: 0!important; +} + +.btn-link { + color: #58666e; +} + +.btn-link.active { + box-shadow: none; + webkit-box-shadow: none; +} + +.btn-default { + color: #58666e !important; + background-color: #fcfdfd; + background-color: #fff; + border-color: #dee5e7; + border-bottom-color: #d8e1e3; + -webkit-box-shadow: 0 1px 1px rgba(90, 90, 90, 0.1); + box-shadow: 0 1px 1px rgba(90, 90, 90, 0.1); +} + +.btn-default:hover, +.btn-default:focus, +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + color: #58666e !important; + background-color: #edf1f2; + border-color: #c7d3d6; +} + +.btn-default:active, +.btn-default.active, +.open .dropdown-toggle.btn-default { + background-image: none; +} + +.btn-default.disabled, +.btn-default[disabled], +fieldset[disabled] .btn-default, +.btn-default.disabled:hover, +.btn-default[disabled]:hover, +fieldset[disabled] .btn-default:hover, +.btn-default.disabled:focus, +.btn-default[disabled]:focus, +fieldset[disabled] .btn-default:focus, +.btn-default.disabled:active, +.btn-default[disabled]:active, +fieldset[disabled] .btn-default:active, +.btn-default.disabled.active, +.btn-default[disabled].active, +fieldset[disabled] .btn-default.active { + background-color: #fcfdfd; + border-color: #dee5e7; +} + +.btn-default.btn-bg { + border-color: rgba(0, 0, 0, 0.1); + background-clip: padding-box; +} + +.btn-primary { + color: #ffffff !important; + background-color: #7266ba; + border-color: #7266ba; +} + +.btn-primary:hover, +.btn-primary:focus, +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + color: #ffffff !important; + background-color: #6254b2; + border-color: #5a4daa; +} + +.btn-primary:active, +.btn-primary.active, +.open .dropdown-toggle.btn-primary { + background-image: none; +} + +.btn-primary.disabled, +.btn-primary[disabled], +fieldset[disabled] .btn-primary, +.btn-primary.disabled:hover, +.btn-primary[disabled]:hover, +fieldset[disabled] .btn-primary:hover, +.btn-primary.disabled:focus, +.btn-primary[disabled]:focus, +fieldset[disabled] .btn-primary:focus, +.btn-primary.disabled:active, +.btn-primary[disabled]:active, +fieldset[disabled] .btn-primary:active, +.btn-primary.disabled.active, +.btn-primary[disabled].active, +fieldset[disabled] .btn-primary.active { + background-color: #7266ba; + border-color: #7266ba; +} + +.btn-success { + color: #ffffff !important; + background-color: #27c24c; + border-color: #27c24c; +} + +.btn-success:hover, +.btn-success:focus, +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + color: #ffffff !important; + background-color: #23ad44; + border-color: #20a03f; +} + +.btn-success:active, +.btn-success.active, +.open .dropdown-toggle.btn-success { + background-image: none; +} + +.btn-success.disabled, +.btn-success[disabled], +fieldset[disabled] .btn-success, +.btn-success.disabled:hover, +.btn-success[disabled]:hover, +fieldset[disabled] .btn-success:hover, +.btn-success.disabled:focus, +.btn-success[disabled]:focus, +fieldset[disabled] .btn-success:focus, +.btn-success.disabled:active, +.btn-success[disabled]:active, +fieldset[disabled] .btn-success:active, +.btn-success.disabled.active, +.btn-success[disabled].active, +fieldset[disabled] .btn-success.active { + background-color: #27c24c; + border-color: #27c24c; +} + +.btn-info { + color: #ffffff !important; + background-color: #23b7e5; + border-color: #23b7e5; +} + +.btn-info:hover, +.btn-info:focus, +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + color: #ffffff !important; + background-color: #19a9d5; + border-color: #189ec8; +} + +.btn-info:active, +.btn-info.active, +.open .dropdown-toggle.btn-info { + background-image: none; +} + +.btn-info.disabled, +.btn-info[disabled], +fieldset[disabled] .btn-info, +.btn-info.disabled:hover, +.btn-info[disabled]:hover, +fieldset[disabled] .btn-info:hover, +.btn-info.disabled:focus, +.btn-info[disabled]:focus, +fieldset[disabled] .btn-info:focus, +.btn-info.disabled:active, +.btn-info[disabled]:active, +fieldset[disabled] .btn-info:active, +.btn-info.disabled.active, +.btn-info[disabled].active, +fieldset[disabled] .btn-info.active { + background-color: #23b7e5; + border-color: #23b7e5; +} + +.btn-warning { + color: #ffffff !important; + background-color: #fad733; + border-color: #fad733; +} + +.btn-warning:hover, +.btn-warning:focus, +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + color: #ffffff !important; + background-color: #f9d21a; + border-color: #f9cf0b; +} + +.btn-warning:active, +.btn-warning.active, +.open .dropdown-toggle.btn-warning { + background-image: none; +} + +.btn-warning.disabled, +.btn-warning[disabled], +fieldset[disabled] .btn-warning, +.btn-warning.disabled:hover, +.btn-warning[disabled]:hover, +fieldset[disabled] .btn-warning:hover, +.btn-warning.disabled:focus, +.btn-warning[disabled]:focus, +fieldset[disabled] .btn-warning:focus, +.btn-warning.disabled:active, +.btn-warning[disabled]:active, +fieldset[disabled] .btn-warning:active, +.btn-warning.disabled.active, +.btn-warning[disabled].active, +fieldset[disabled] .btn-warning.active { + background-color: #fad733; + border-color: #fad733; +} + +.btn-danger { + color: #ffffff !important; + background-color: #f05050; + border-color: #f05050; +} + +.btn-danger:hover, +.btn-danger:focus, +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + color: #ffffff !important; + background-color: #ee3939; + border-color: #ed2a2a; +} + +.btn-danger:active, +.btn-danger.active, +.open .dropdown-toggle.btn-danger { + background-image: none; +} + +.btn-danger.disabled, +.btn-danger[disabled], +fieldset[disabled] .btn-danger, +.btn-danger.disabled:hover, +.btn-danger[disabled]:hover, +fieldset[disabled] .btn-danger:hover, +.btn-danger.disabled:focus, +.btn-danger[disabled]:focus, +fieldset[disabled] .btn-danger:focus, +.btn-danger.disabled:active, +.btn-danger[disabled]:active, +fieldset[disabled] .btn-danger:active, +.btn-danger.disabled.active, +.btn-danger[disabled].active, +fieldset[disabled] .btn-danger.active { + background-color: #f05050; + border-color: #f05050; +} + +.btn-dark { + color: #ffffff !important; + background-color: #3a3f51; + border-color: #3a3f51; +} + +.btn-dark:hover, +.btn-dark:focus, +.btn-dark:active, +.btn-dark.active, +.open .dropdown-toggle.btn-dark { + color: #ffffff !important; + background-color: #2f3342; + border-color: #292d39; +} + +.btn-dark:active, +.btn-dark.active, +.open .dropdown-toggle.btn-dark { + background-image: none; +} + +.btn-dark.disabled, +.btn-dark[disabled], +fieldset[disabled] .btn-dark, +.btn-dark.disabled:hover, +.btn-dark[disabled]:hover, +fieldset[disabled] .btn-dark:hover, +.btn-dark.disabled:focus, +.btn-dark[disabled]:focus, +fieldset[disabled] .btn-dark:focus, +.btn-dark.disabled:active, +.btn-dark[disabled]:active, +fieldset[disabled] .btn-dark:active, +.btn-dark.disabled.active, +.btn-dark[disabled].active, +fieldset[disabled] .btn-dark.active { + background-color: #3a3f51; + border-color: #3a3f51; +} + +.btn-black { + color: #ffffff !important; + background-color: #1c2b36; + border-color: #1c2b36; +} + +.btn-black:hover, +.btn-black:focus, +.btn-black:active, +.btn-black.active, +.open .dropdown-toggle.btn-black { + color: #ffffff !important; + background-color: #131e25; + border-color: #0e161b; +} + +.btn-black:active, +.btn-black.active, +.open .dropdown-toggle.btn-black { + background-image: none; +} + +.btn-black.disabled, +.btn-black[disabled], +fieldset[disabled] .btn-black, +.btn-black.disabled:hover, +.btn-black[disabled]:hover, +fieldset[disabled] .btn-black:hover, +.btn-black.disabled:focus, +.btn-black[disabled]:focus, +fieldset[disabled] .btn-black:focus, +.btn-black.disabled:active, +.btn-black[disabled]:active, +fieldset[disabled] .btn-black:active, +.btn-black.disabled.active, +.btn-black[disabled].active, +fieldset[disabled] .btn-black.active { + background-color: #1c2b36; + border-color: #1c2b36; +} + +.btn-icon { + width: 34px; + height: 34px; + padding: 0 !important; + text-align: center; +} + +.btn-icon i { + position: relative; + top: -1px; + line-height: 34px; +} + +.btn-icon.btn-sm { + width: 30px; + height: 30px; +} + +.btn-icon.btn-sm i { + line-height: 30px; +} + +.btn-icon.btn-lg { + width: 45px; + height: 45px; +} + +.btn-icon.btn-lg i { + line-height: 45px; +} + +.btn-rounded { + padding-right: 15px; + padding-left: 15px; + border-radius: 50px; +} + +.btn-rounded.btn-lg { + padding-right: 25px; + padding-left: 25px; +} + +.btn > i.pull-left, +.btn > i.pull-right { + line-height: 1.42857143; +} + +.btn-block { + padding-right: 12px; + padding-left: 12px; +} + +.btn-group-vertical > .btn:first-child:not(:last-child) { + border-top-right-radius: 2px; +} + +.btn-group-vertical > .btn:last-child:not(:first-child) { + border-bottom-left-radius: 2px; +} + +.btn-addon i { + position: relative; + float: left; + width: 34px; + height: 34px; + margin: -7px -12px; + margin-right: 12px; + line-height: 34px; + text-align: center; + background-color: rgba(0, 0, 0, 0.1); + border-radius: 2px 0 0 2px; +} + +.btn-addon i.pull-right { + margin-right: -12px; + margin-left: 12px; + border-radius: 0 2px 2px 0; +} + +.btn-addon.btn-sm i { + width: 30px; + height: 30px; + margin: -6px -10px; + margin-right: 10px; + line-height: 30px; +} + +.btn-addon.btn-sm i.pull-right { + margin-right: -10px; + margin-left: 10px; +} + +.btn-addon.btn-lg i { + width: 45px; + height: 45px; + margin: -11px -16px; + margin-right: 16px; + line-height: 45px; +} + +.btn-addon.btn-lg i.pull-right { + margin-right: -16px; + margin-left: 16px; +} + +.btn-addon.btn-default i { + background-color: transparent; + border-right: 1px solid #dee5e7; +} + +.btn-groups .btn { + margin-bottom: 5px; +} + +.list-icon i { + display: inline-block; + width: 40px; + margin: 0; + font-size: 14px; + text-align: center; + vertical-align: middle; + -webkit-transition: font-size 0.2s; + transition: font-size 0.2s; +} + +.list-icon div { + line-height: 40px; + white-space: nowrap; +} + +.list-icon div:hover i { + font-size: 26px; +} + +.settings { + position: fixed; + top: 120px; + right: -240px; + z-index: 1050; + width: 240px; + -webkit-transition: right 0.2s; + transition: right 0.2s; +} + +.settings.active { + right: -1px; +} + +.settings > .btn { + position: absolute; + top: -1px; + left: -42px; + padding: 10px 15px; + background: #f6f8f8 !important; + border-color: #dee5e7; + border-right-width: 0; +} + +.settings .i-checks span b { + display: inline-block; + float: left; + width: 50%; + height: 20px; +} + +.settings .i-checks span b.header { + height: 10px; +} + +.streamline { + position: relative; + border-color: #dee5e7; +} + +.streamline .sl-item:after, +.streamline:after { + position: absolute; + bottom: 0; + left: 0; + width: 9px; + height: 9px; + margin-left: -5px; + background-color: #fff; + border-color: inherit; + border-style: solid; + border-width: 1px; + border-radius: 10px; + content: ''; +} + +.sl-item { + position: relative; + padding-bottom: 1px; + border-color: #dee5e7; +} + +.sl-item:before, +.sl-item:after { + display: table; + content: " "; +} + +.sl-item:after { + clear: both; +} + +.sl-item:after { + top: 6px; + bottom: auto; +} + +.sl-item.b-l { + margin-left: -1px; +} + +.timeline { + padding: 0; + margin: 0; +} + +.tl-item { + display: block; +} + +.tl-item:before, +.tl-item:after { + display: table; + content: " "; +} + +.tl-item:after { + clear: both; +} + +.visible-left { + display: none; +} + +.tl-wrap { + display: block; + padding: 15px 0 15px 20px; + margin-left: 6em; + border-color: #dee5e7; + border-style: solid; + border-width: 0 0 0 4px; +} + +.tl-wrap:before, +.tl-wrap:after { + display: table; + content: " "; +} + +.tl-wrap:after { + clear: both; +} + +.tl-wrap:before { + position: relative; + top: 15px; + float: left; + width: 10px; + height: 10px; + margin-left: -27px; + background: #edf1f2; + border-color: inherit; + border-style: solid; + border-width: 3px; + border-radius: 50%; + content: ""; + box-shadow: 0 0 0 4px #f0f3f4; +} + +.tl-wrap:hover:before { + background: transparent; + border-color: #fff; +} + +.tl-date { + position: relative; + top: 10px; + display: block; + float: left; + width: 4.5em; + margin-left: -7.5em; + text-align: right; +} + +.tl-content { + position: relative; + display: inline-block; + padding-top: 10px; + padding-bottom: 10px; +} + +.tl-content.block { + display: block; + width: 100%; +} + +.tl-content.panel { + margin-bottom: 0; +} + +.tl-header { + display: block; + width: 12em; + margin-left: 2px; + text-align: center; +} + +.timeline-center .tl-item { + margin-left: 50%; +} + +.timeline-center .tl-item .tl-wrap { + margin-left: -2px; +} + +.timeline-center .tl-header { + width: auto; + margin: 0; +} + +.timeline-center .tl-left { + margin-right: 50%; + margin-left: 0; +} + +.timeline-center .tl-left .hidden-left { + display: none !important; +} + +.timeline-center .tl-left .visible-left { + display: inherit; +} + +.timeline-center .tl-left .tl-wrap { + float: right; + padding-right: 20px; + padding-left: 0; + margin-right: -2px; + border-right-width: 4px; + border-left-width: 0; +} + +.timeline-center .tl-left .tl-wrap:before { + float: right; + margin-right: -27px; + margin-left: 0; +} + +.timeline-center .tl-left .tl-date { + float: right; + margin-right: -8.5em; + margin-left: 0; + text-align: left; +} + +.i-switch { + position: relative; + display: inline-block; + width: 35px; + height: 20px; + margin: 0; + cursor: pointer; + background-color: #27c24c; + border-radius: 30px; +} + +.i-switch input { + position: absolute; + opacity: 0; + filter: alpha(opacity=0); +} + +.i-switch input:checked + i:before { + top: 50%; + right: 5px; + bottom: 50%; + left: 50%; + border-width: 0; + border-radius: 5px; +} + +.i-switch input:checked + i:after { + margin-left: 16px; +} + +.i-switch i:before { + position: absolute; + top: -1px; + right: -1px; + bottom: -1px; + left: -1px; + background-color: #fff; + border: 1px solid #f0f0f0; + border-radius: 30px; + content: ""; + -webkit-transition: all 0.2s; + transition: all 0.2s; +} + +.i-switch i:after { + position: absolute; + top: 1px; + bottom: 1px; + width: 18px; + background-color: #fff; + border-radius: 50%; + content: ""; + -webkit-box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.25); + box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.25); + -webkit-transition: margin-left 0.3s; + transition: margin-left 0.3s; +} + +.i-switch-md { + width: 40px; + height: 24px; +} + +.i-switch-md input:checked + i:after { + margin-left: 17px; +} + +.i-switch-md i:after { + width: 22px; +} + +.i-switch-lg { + width: 50px; + height: 30px; +} + +.i-switch-lg input:checked + i:after { + margin-left: 21px; +} + +.i-switch-lg i:after { + width: 28px; +} + +.i-checks { + padding-left: 20px; + cursor: pointer; +} + +.i-checks input { + position: absolute; + margin-left: -20px; + opacity: 0; +} + +.i-checks input:checked + i { + border-color: #23b7e5; +} + +.i-checks input:checked + i:before { + top: 4px; + left: 4px; + width: 10px; + height: 10px; + background-color: #23b7e5; +} + +.i-checks input:checked + span .active { + display: inherit; +} + +.i-checks input[type="radio"] + i, +.i-checks input[type="radio"] + i:before { + border-radius: 50%; +} + +.i-checks input[disabled] + i, +fieldset[disabled] .i-checks input + i { + border-color: #dee5e7; +} + +.i-checks input[disabled] + i:before, +fieldset[disabled] .i-checks input + i:before { + background-color: #dee5e7; +} + +.i-checks > i { + position: relative; + display: inline-block; + width: 20px; + height: 20px; + margin-top: -2px; + margin-right: 4px; + margin-left: -20px; + line-height: 1; + vertical-align: middle; + background-color: #fff; + border: 1px solid #cfdadd; +} + +.i-checks > i:before { + position: absolute; + top: 50%; + left: 50%; + width: 0; + height: 0; + background-color: transparent; + content: ""; + -webkit-transition: all 0.2s; + transition: all 0.2s; +} + +.i-checks > span { + margin-left: -20px; +} + +.i-checks > span .active { + display: none; +} + +.i-checks-sm input:checked + i:before { + top: 3px; + left: 3px; + width: 8px; + height: 8px; +} + +.i-checks-sm > i { + width: 16px; + height: 16px; + margin-right: 6px; + margin-left: -18px; +} + +.i-checks-lg input:checked + i:before { + top: 8px; + left: 8px; + width: 12px; + height: 12px; +} + +.i-checks-lg > i { + width: 30px; + height: 30px; +} + +.datepicker { + margin: 0 5px; +} + +.datepicker .btn-default { + border-width: 0; + box-shadow: none; +} + +.datepicker .btn[disabled] { + opacity: 0.4; +} + +.datepicker .btn-info .text-info { + color: #fff !important; +} + +/*Charts*/ + +.jqstooltip { + padding: 5px 10px !important; + background-color: rgba(0, 0, 0, 0.8) !important; + border: solid 1px #000 !important; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} + +.easyPieChart { + position: relative; + text-align: center; +} + +.easyPieChart > div { + position: relative; + z-index: 1; +} + +.easyPieChart > div .text { + position: absolute; + top: 60%; + width: 100%; + line-height: 1; +} + +.easyPieChart > div img { + margin-top: -4px; +} + +.easyPieChart canvas { + position: absolute; + top: 0; + left: 0; + z-index: 0; +} + +#flotTip { + z-index: 100; + padding: 4px 10px; + font-size: 12px; + color: #fff; + background-color: rgba(0, 0, 0, 0.8); + border: solid 1px #000 !important; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; +} + +.legendColorBox > div { + margin: 5px; + border: none !important; +} + +.legendColorBox > div > div { + border-radius: 10px; +} + +.sortable-placeholder { + min-height: 50px; + margin-bottom: 5px; + list-style: none; + border: 1px dashed #CCC; +} + +.panel .dataTables_wrapper { + padding-top: 10px; +} + +.panel .dataTables_wrapper > .row { + margin: 0; +} + +.panel .dataTables_wrapper > .row > .col-sm-12 { + padding: 0; +} + +.st-sort-ascent:before { + content: '\25B2'; +} + +.st-sort-descent:before { + content: '\25BC'; +} + +.st-selected td { + background: #f0f9ec !important; +} + +.chosen-choices, +.chosen-single, +.bootstrap-tagsinput { + border-color: #cfdadd !important; + border-radius: 2px !important; +} + +.bootstrap-tagsinput { + padding: 5px 12px !important; +} + +.item { + position: relative; +} + +.item .top { + position: absolute; + top: 0; + left: 0; +} + +.item .bottom { + position: absolute; + bottom: 0; + left: 0; +} + +.item .center { + position: absolute; + top: 50%; +} + +.item-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + display: none; +} + +.item-overlay.active, +.item:hover .item-overlay { + display: block; +} + +.form-validation .form-control.ng-dirty.ng-invalid { + border-color: #f05050; +} + +.form-validation .form-control.ng-dirty.ng-valid, +.form-validation .form-control.ng-dirty.ng-valid:focus { + border-color: #27c24c; +} + +.form-validation .i-checks .ng-invalid.ng-dirty + i { + border-color: #f05050; +} + +.ng-animate .bg-auto:before { + display: none; +} + +[ui-view].ng-leave { + display: none; +} + +[ui-view].ng-leave.smooth { + display: block; +} + +.smooth.ng-animate { + position: absolute; + width: 100%; + height: 100%; + overflow: hidden; +} + +.fade-in-right-big.ng-enter { + -webkit-animation: fadeInRightBig 0.5s; + animation: fadeInRightBig 0.5s; +} + +.fade-in-right-big.ng-leave { + -webkit-animation: fadeOutLeftBig 0.5s; + animation: fadeOutLeftBig 0.5s; +} + +.fade-in-left-big.ng-enter { + -webkit-animation: fadeInLeftBig 0.5s; + animation: fadeInLeftBig 0.5s; +} + +.fade-in-left-big.ng-leave { + -webkit-animation: fadeOutRightBig 0.5s; + animation: fadeOutRightBig 0.5s; +} + +.fade-in-up-big.ng-enter { + -webkit-animation: fadeInUpBig 0.5s; + animation: fadeInUpBig 0.5s; +} + +.fade-in-up-big.ng-leave { + -webkit-animation: fadeOutUpBig 0.5s; + animation: fadeOutUpBig 0.5s; +} + +.fade-in-down-big.ng-enter { + -webkit-animation: fadeInDownBig 0.5s; + animation: fadeInDownBig 0.5s; +} + +.fade-in-down-big.ng-leave { + -webkit-animation: fadeOutDownBig 0.5s; + animation: fadeOutDownBig 0.5s; +} + +.fade-in.ng-enter { + -webkit-animation: fadeIn 0.5s; + animation: fadeIn 0.5s; +} + +.fade-in.ng-leave { + -webkit-animation: fadeOut 0.5s; + animation: fadeOut 0.5s; +} + +.fade-in-right.ng-enter { + -webkit-animation: fadeInRight 0.5s; + animation: fadeInRight 0.5s; +} + +.fade-in-right.ng-leave { + -webkit-animation: fadeOutLeft 0.5s; + animation: fadeOutLeft 0.5s; +} + +.fade-in-left.ng-enter { + -webkit-animation: fadeInLeft 0.5s; + animation: fadeInLeft 0.5s; +} + +.fade-in-left.ng-leave { + -webkit-animation: fadeOutRight 0.5s; + animation: fadeOutRight 0.5s; +} + +.fade-in-up.ng-enter { + -webkit-animation: fadeInUp 0.5s; + animation: fadeInUp 0.5s; +} + +.fade-in-up.ng-leave { + -webkit-animation: fadeOutUp 0.5s; + animation: fadeOutUp 0.5s; +} + +.fade-in-down.ng-enter { + -webkit-animation: fadeInDown 0.5s; + animation: fadeInDown 0.5s; +} + +.fade-in-down.ng-leave { + -webkit-animation: fadeOutDown 0.5s; + animation: fadeOutDown 0.5s; +} + +.bg-gd { + background-image: -webkit-gradient(linear, left 0, left 100%, from(rgba(40, 50, 60, 0)), to(rgba(40, 50, 60, 0.075))); + background-image: -webkit-linear-gradient(top, rgba(40, 50, 60, 0), 0, rgba(40, 50, 60, 0.075), 100%); + background-image: -moz-linear-gradient(top, rgba(40, 50, 60, 0) 0, rgba(40, 50, 60, 0.075) 100%); + background-image: linear-gradient(to bottom, rgba(40, 50, 60, 0) 0, rgba(40, 50, 60, 0.075) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0028323c', endColorstr='#1328323c', GradientType=0); + filter: none; +} + +.bg-gd-dk { + background-image: -webkit-gradient(linear, left 10%, left 100%, from(rgba(40, 50, 60, 0)), to(rgba(40, 50, 60, 0.5))); + background-image: -webkit-linear-gradient(top, rgba(40, 50, 60, 0), 10%, rgba(40, 50, 60, 0.5), 100%); + background-image: -moz-linear-gradient(top, rgba(40, 50, 60, 0) 10%, rgba(40, 50, 60, 0.5) 100%); + background-image: linear-gradient(to bottom, rgba(40, 50, 60, 0) 10%, rgba(40, 50, 60, 0.5) 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0028323c', endColorstr='#8028323c', GradientType=0); + filter: none; +} + +.bg-light { + color: #58666e; + background-color: #edf1f2; +} + +.bg-light.lt, +.bg-light .lt { + background-color: #f3f5f6; +} + +.bg-light.lter, +.bg-light .lter { + background-color: #f6f8f8; +} + +.bg-light.dk, +.bg-light .dk { + background-color: #e4eaec; +} + +.bg-light.dker, +.bg-light .dker { + background-color: #dde6e9; +} + +.bg-light.bg, +.bg-light .bg { + background-color: #edf1f2; +} + +.bg-dark { + color: #a6a8b1; + background-color: #3a3f51; +} + +.bg-dark.lt, +.bg-dark .lt { + background-color: #474c5e; +} + +.bg-dark.lter, +.bg-dark .lter { + background-color: #54596a; +} + +.bg-dark.dk, +.bg-dark .dk { + background-color: #2e3344; +} + +.bg-dark.dker, +.bg-dark .dker { + background-color: #232735; +} + +.bg-dark.bg, +.bg-dark .bg { + background-color: #3a3f51; +} + +.bg-dark a { + color: #c1c3c9; +} + +.bg-dark a:hover { + color: #ffffff; +} + +.bg-dark a.list-group-item:hover, +.bg-dark a.list-group-item:focus { + background-color: inherit; +} + +.bg-dark .nav > li:hover > a, +.bg-dark .nav > li:focus > a, +.bg-dark .nav > li.active > a { + color: #ffffff; + background-color: #2e3344; +} + +.bg-dark .nav > li > a { + color: #b4b6bd; +} + +.bg-dark .nav > li > a:hover, +.bg-dark .nav > li > a:focus { + background-color: #32374a; +} + +.bg-dark .nav .open > a { + background-color: #2e3344; +} + +.bg-dark .caret { + border-top-color: #a6a8b1; + border-bottom-color: #a6a8b1; +} + +.bg-dark.navbar .nav > li.active > a { + color: #ffffff; + background-color: #2e3344; +} + +.bg-dark .open > a, +.bg-dark .open > a:hover, +.bg-dark .open > a:focus { + color: #ffffff; +} + +.bg-dark .text-muted { + color: #8b8e99 !important; +} + +.bg-dark .text-lt { + color: #eaebed !important; +} + +.bg-dark.auto .list-group-item, +.bg-dark .auto .list-group-item { + background-color: transparent; + border-color: #2f3342 !important; +} + +.bg-dark.auto .list-group-item:hover, +.bg-dark .auto .list-group-item:hover, +.bg-dark.auto .list-group-item:focus, +.bg-dark .auto .list-group-item:focus, +.bg-dark.auto .list-group-item:active, +.bg-dark .auto .list-group-item:active, +.bg-dark.auto .list-group-item.active, +.bg-dark .auto .list-group-item.active { + background-color: #2e3344 !important; +} + +.bg-black { + color: #7793a7; + background-color: #1c2b36; +} + +.bg-black.lt, +.bg-black .lt { + background-color: #263845; +} + +.bg-black.lter, +.bg-black .lter { + background-color: #314554; +} + +.bg-black.dk, +.bg-black .dk { + background-color: #131e26; +} + +.bg-black.dker, +.bg-black .dker { + background-color: #0a1015; +} + +.bg-black.bg, +.bg-black .bg { + background-color: #1c2b36; +} + +.bg-black a { + color: #96abbb; +} + +.bg-black a:hover { + color: #ffffff; +} + +.bg-black a.list-group-item:hover, +.bg-black a.list-group-item:focus { + background-color: inherit; +} + +.bg-black .nav > li:hover > a, +.bg-black .nav > li:focus > a, +.bg-black .nav > li.active > a { + color: #ffffff; + background-color: #131e26; +} + +.bg-black .nav > li > a { + color: #869fb1; +} + +.bg-black .nav > li > a:hover, +.bg-black .nav > li > a:focus { + background-color: #16232d; +} + +.bg-black .nav .open > a { + background-color: #131e26; +} + +.bg-black .caret { + border-top-color: #7793a7; + border-bottom-color: #7793a7; +} + +.bg-black.navbar .nav > li.active > a { + color: #ffffff; + background-color: #131e26; +} + +.bg-black .open > a, +.bg-black .open > a:hover, +.bg-black .open > a:focus { + color: #ffffff; +} + +.bg-black .text-muted { + color: #5c798f !important; +} + +.bg-black .text-lt { + color: #c4d0d9 !important; +} + +.bg-black.auto .list-group-item, +.bg-black .auto .list-group-item { + background-color: transparent; + border-color: #131e25 !important; +} + +.bg-black.auto .list-group-item:hover, +.bg-black .auto .list-group-item:hover, +.bg-black.auto .list-group-item:focus, +.bg-black .auto .list-group-item:focus, +.bg-black.auto .list-group-item:active, +.bg-black .auto .list-group-item:active, +.bg-black.auto .list-group-item.active, +.bg-black .auto .list-group-item.active { + background-color: #131e26 !important; +} + +.bg-primary { + color: #f4f3f9; + background-color: #7266ba; +} + +.bg-primary.lt, +.bg-primary .lt { + background-color: #847abf; +} + +.bg-primary.lter, +.bg-primary .lter { + background-color: #958dc6; +} + +.bg-primary.dk, +.bg-primary .dk { + background-color: #6051b5; +} + +.bg-primary.dker, +.bg-primary .dker { + background-color: #5244a9; +} + +.bg-primary.bg, +.bg-primary .bg { + background-color: #7266ba; +} + +.bg-primary a { + color: #ffffff; +} + +.bg-primary a:hover { + color: #ffffff; +} + +.bg-primary a.list-group-item:hover, +.bg-primary a.list-group-item:focus { + background-color: inherit; +} + +.bg-primary .nav > li:hover > a, +.bg-primary .nav > li:focus > a, +.bg-primary .nav > li.active > a { + color: #ffffff; + background-color: #6051b5; +} + +.bg-primary .nav > li > a { + color: #f2f2f2; +} + +.bg-primary .nav > li > a:hover, +.bg-primary .nav > li > a:focus { + background-color: #6658b8; +} + +.bg-primary .nav .open > a { + background-color: #6051b5; +} + +.bg-primary .caret { + border-top-color: #f4f3f9; + border-bottom-color: #f4f3f9; +} + +.bg-primary.navbar .nav > li.active > a { + color: #ffffff; + background-color: #6051b5; +} + +.bg-primary .open > a, +.bg-primary .open > a:hover, +.bg-primary .open > a:focus { + color: #ffffff; +} + +.bg-primary .text-muted { + color: #d6d3e6 !important; +} + +.bg-primary .text-lt { + color: #ffffff !important; +} + +.bg-primary.auto .list-group-item, +.bg-primary .auto .list-group-item { + background-color: transparent; + border-color: #6254b2 !important; +} + +.bg-primary.auto .list-group-item:hover, +.bg-primary .auto .list-group-item:hover, +.bg-primary.auto .list-group-item:focus, +.bg-primary .auto .list-group-item:focus, +.bg-primary.auto .list-group-item:active, +.bg-primary .auto .list-group-item:active, +.bg-primary.auto .list-group-item.active, +.bg-primary .auto .list-group-item.active { + background-color: #6051b5 !important; +} + +.bg-success { + color: #c6efd0; + background-color: #27c24c; +} + +.bg-success.lt, +.bg-success .lt { + background-color: #31d257; +} + +.bg-success.lter, +.bg-success .lter { + background-color: #48d46a; +} + +.bg-success.dk, +.bg-success .dk { + background-color: #20af42; +} + +.bg-success.dker, +.bg-success .dker { + background-color: #1a9c39; +} + +.bg-success.bg, +.bg-success .bg { + background-color: #27c24c; +} + +.bg-success a { + color: #eefaf1; +} + +.bg-success a:hover { + color: #ffffff; +} + +.bg-success a.list-group-item:hover, +.bg-success a.list-group-item:focus { + background-color: inherit; +} + +.bg-success .nav > li:hover > a, +.bg-success .nav > li:focus > a, +.bg-success .nav > li.active > a { + color: #ffffff; + background-color: #20af42; +} + +.bg-success .nav > li > a { + color: #daf5e0; +} + +.bg-success .nav > li > a:hover, +.bg-success .nav > li > a:focus { + background-color: #22b846; +} + +.bg-success .nav .open > a { + background-color: #20af42; +} + +.bg-success .caret { + border-top-color: #c6efd0; + border-bottom-color: #c6efd0; +} + +.bg-success.navbar .nav > li.active > a { + color: #ffffff; + background-color: #20af42; +} + +.bg-success .open > a, +.bg-success .open > a:hover, +.bg-success .open > a:focus { + color: #ffffff; +} + +.bg-success .text-muted { + color: #9ee4af !important; +} + +.bg-success .text-lt { + color: #ffffff !important; +} + +.bg-success.auto .list-group-item, +.bg-success .auto .list-group-item { + background-color: transparent; + border-color: #23ad44 !important; +} + +.bg-success.auto .list-group-item:hover, +.bg-success .auto .list-group-item:hover, +.bg-success.auto .list-group-item:focus, +.bg-success .auto .list-group-item:focus, +.bg-success.auto .list-group-item:active, +.bg-success .auto .list-group-item:active, +.bg-success.auto .list-group-item.active, +.bg-success .auto .list-group-item.active { + background-color: #20af42 !important; +} + +.bg-info { + color: #dcf2f8; + background-color: #23b7e5; +} + +.bg-info.lt, +.bg-info .lt { + background-color: #3dbde5; +} + +.bg-info.lter, +.bg-info .lter { + background-color: #55c3e6; +} + +.bg-info.dk, +.bg-info .dk { + background-color: #16aad8; +} + +.bg-info.dker, +.bg-info .dker { + background-color: #1199c4; +} + +.bg-info.bg, +.bg-info .bg { + background-color: #23b7e5; +} + +.bg-info a { + color: #ffffff; +} + +.bg-info a:hover { + color: #ffffff; +} + +.bg-info a.list-group-item:hover, +.bg-info a.list-group-item:focus { + background-color: inherit; +} + +.bg-info .nav > li:hover > a, +.bg-info .nav > li:focus > a, +.bg-info .nav > li.active > a { + color: #ffffff; + background-color: #16aad8; +} + +.bg-info .nav > li > a { + color: #f2f2f2; +} + +.bg-info .nav > li > a:hover, +.bg-info .nav > li > a:focus { + background-color: #17b2e2; +} + +.bg-info .nav .open > a { + background-color: #16aad8; +} + +.bg-info .caret { + border-top-color: #dcf2f8; + border-bottom-color: #dcf2f8; +} + +.bg-info.navbar .nav > li.active > a { + color: #ffffff; + background-color: #16aad8; +} + +.bg-info .open > a, +.bg-info .open > a:hover, +.bg-info .open > a:focus { + color: #ffffff; +} + +.bg-info .text-muted { + color: #b0e1f1 !important; +} + +.bg-info .text-lt { + color: #ffffff !important; +} + +.bg-info.auto .list-group-item, +.bg-info .auto .list-group-item { + background-color: transparent; + border-color: #19a9d5 !important; +} + +.bg-info.auto .list-group-item:hover, +.bg-info .auto .list-group-item:hover, +.bg-info.auto .list-group-item:focus, +.bg-info .auto .list-group-item:focus, +.bg-info.auto .list-group-item:active, +.bg-info .auto .list-group-item:active, +.bg-info.auto .list-group-item.active, +.bg-info .auto .list-group-item.active { + background-color: #16aad8 !important; +} + +.bg-warning { + color: #fffefa; + background-color: #fad733; +} + +.bg-warning.lt, +.bg-warning .lt { + background-color: #f8da4e; +} + +.bg-warning.lter, +.bg-warning .lter { + background-color: #f7de69; +} + +.bg-warning.dk, +.bg-warning .dk { + background-color: #fcd417; +} + +.bg-warning.dker, +.bg-warning .dker { + background-color: #face00; +} + +.bg-warning.bg, +.bg-warning .bg { + background-color: #fad733; +} + +.bg-warning a { + color: #ffffff; +} + +.bg-warning a:hover { + color: #ffffff; +} + +.bg-warning a.list-group-item:hover, +.bg-warning a.list-group-item:focus { + background-color: inherit; +} + +.bg-warning .nav > li:hover > a, +.bg-warning .nav > li:focus > a, +.bg-warning .nav > li.active > a { + color: #ffffff; + background-color: #fcd417; +} + +.bg-warning .nav > li > a { + color: #f2f2f2; +} + +.bg-warning .nav > li > a:hover, +.bg-warning .nav > li > a:focus { + background-color: #fcd621; +} + +.bg-warning .nav .open > a { + background-color: #fcd417; +} + +.bg-warning .caret { + border-top-color: #fffefa; + border-bottom-color: #fffefa; +} + +.bg-warning.navbar .nav > li.active > a { + color: #ffffff; + background-color: #fcd417; +} + +.bg-warning .open > a, +.bg-warning .open > a:hover, +.bg-warning .open > a:focus { + color: #ffffff; +} + +.bg-warning .text-muted { + color: #fbf2cb !important; +} + +.bg-warning .text-lt { + color: #ffffff !important; +} + +.bg-warning.auto .list-group-item, +.bg-warning .auto .list-group-item { + background-color: transparent; + border-color: #f9d21a !important; +} + +.bg-warning.auto .list-group-item:hover, +.bg-warning .auto .list-group-item:hover, +.bg-warning.auto .list-group-item:focus, +.bg-warning .auto .list-group-item:focus, +.bg-warning.auto .list-group-item:active, +.bg-warning .auto .list-group-item:active, +.bg-warning.auto .list-group-item.active, +.bg-warning .auto .list-group-item.active { + background-color: #fcd417 !important; +} + +.bg-danger { + color: #ffffff; + background-color: #f05050; +} + +.bg-danger.lt, +.bg-danger .lt { + background-color: #f06a6a; +} + +.bg-danger.lter, +.bg-danger .lter { + background-color: #f18282; +} + +.bg-danger.dk, +.bg-danger .dk { + background-color: #f13636; +} + +.bg-danger.dker, +.bg-danger .dker { + background-color: #f21b1b; +} + +.bg-danger.bg, +.bg-danger .bg { + background-color: #f05050; +} + +.bg-danger a { + color: #ffffff; +} + +.bg-danger a:hover { + color: #ffffff; +} + +.bg-danger a.list-group-item:hover, +.bg-danger a.list-group-item:focus { + background-color: inherit; +} + +.bg-danger .nav > li:hover > a, +.bg-danger .nav > li:focus > a, +.bg-danger .nav > li.active > a { + color: #ffffff; + background-color: #f13636; +} + +.bg-danger .nav > li > a { + color: #f2f2f2; +} + +.bg-danger .nav > li > a:hover, +.bg-danger .nav > li > a:focus { + background-color: #f13f3f; +} + +.bg-danger .nav .open > a { + background-color: #f13636; +} + +.bg-danger .caret { + border-top-color: #ffffff; + border-bottom-color: #ffffff; +} + +.bg-danger.navbar .nav > li.active > a { + color: #ffffff; + background-color: #f13636; +} + +.bg-danger .open > a, +.bg-danger .open > a:hover, +.bg-danger .open > a:focus { + color: #ffffff; +} + +.bg-danger .text-muted { + color: #e6e6e6 !important; +} + +.bg-danger .text-lt { + color: #ffffff !important; +} + +.bg-danger.auto .list-group-item, +.bg-danger .auto .list-group-item { + background-color: transparent; + border-color: #ee3939 !important; +} + +.bg-danger.auto .list-group-item:hover, +.bg-danger .auto .list-group-item:hover, +.bg-danger.auto .list-group-item:focus, +.bg-danger .auto .list-group-item:focus, +.bg-danger.auto .list-group-item:active, +.bg-danger .auto .list-group-item:active, +.bg-danger.auto .list-group-item.active, +.bg-danger .auto .list-group-item.active { + background-color: #f13636 !important; +} + +.bg-white { + color: #58666e; + background-color: #fff; +} + +.bg-white a { + color: #363f44; +} + +.bg-white a:hover { + color: #1f2427; +} + +.bg-white .text-muted { + color: #98a6ad !important; +} + +.bg-white .lt, +.bg-white .lter, +.bg-white .dk, +.bg-white .dker { + background-color: #fff; +} + +.bg-white-only { + background-color: #fff; +} + +.bg-white-opacity { + background-color: rgba(255, 255, 255, 0.5); +} + +.bg-black-opacity { + background-color: rgba(32, 43, 54, 0.5); +} + +a.bg-light:hover { + color: #363f44; +} + +a.bg-primary:hover { + background-color: #6254b2; +} + +a.text-primary:hover { + color: #6254b2; +} + +.text-primary { + color: #7266ba; +} + +.text-primary-lt { + color: #8278c2; +} + +.text-primary-lter { + color: #9289ca; +} + +.text-primary-dk { + color: #6254b2; +} + +.text-primary-dker { + color: #564aa3; +} + +a.bg-info:hover { + background-color: #19a9d5; +} + +a.text-info:hover { + color: #19a9d5; +} + +.text-info { + color: #23b7e5; +} + +.text-info-lt { + color: #3abee8; +} + +.text-info-lter { + color: #51c6ea; +} + +.text-info-dk { + color: #19a9d5; +} + +.text-info-dker { + color: #1797be; +} + +a.bg-success:hover { + background-color: #23ad44; +} + +a.text-success:hover { + color: #23ad44; +} + +.text-success { + color: #27c24c; +} + +.text-success-lt { + color: #2ed556; +} + +.text-success-lter { + color: #43d967; +} + +.text-success-dk { + color: #23ad44; +} + +.text-success-dker { + color: #1e983b; +} + +a.bg-warning:hover { + background-color: #f9d21a; +} + +a.text-warning:hover { + color: #f9d21a; +} + +.text-warning { + color: #fad733; +} + +.text-warning-lt { + color: #fbdc4c; +} + +.text-warning-lter { + color: #fbe165; +} + +.text-warning-dk { + color: #f9d21a; +} + +.text-warning-dker { + color: #f4ca06; +} + +a.bg-danger:hover { + background-color: #ee3939; +} + +a.text-danger:hover { + color: #ee3939; +} + +.text-danger { + color: #f05050; +} + +.text-danger-lt { + color: #f26767; +} + +.text-danger-lter { + color: #f47f7f; +} + +.text-danger-dk { + color: #ee3939; +} + +.text-danger-dker { + color: #ec2121; +} + +a.bg-dark:hover { + background-color: #2f3342; +} + +a.text-dark:hover { + color: #2f3342; +} + +.text-dark { + color: #3a3f51; +} + +.text-dark-lt { + color: #454b60; +} + +.text-dark-lter { + color: #4f566f; +} + +.text-dark-dk { + color: #2f3342; +} + +.text-dark-dker { + color: #252833; +} + +a.bg-#000000:hover { + background-color: #131e25; +} + +a.text-#000000:hover { + color: #131e25; +} + +.text-#000000 { + color: #1c2b36; +} + +.text-#000000-lt { + color: #253847; +} + +.text-#000000-lter { + color: #2d4658; +} + +.text-#000000-dk { + color: #131e25; +} + +.text-#000000-dker { + color: #0b1014; +} + +.text-white { + color: #fff; +} + +.text-black { + color: #000; +} + +.text-muted { + color: #98a6ad; +} + +.pos-rlt { + position: relative; +} + +.pos-stc { + position: static !important; +} + +.pos-abt { + position: absolute; +} + +.pos-fix { + position: fixed; +} + +.show { + visibility: visible; +} + +.line { + width: 100%; + height: 2px; + margin: 10px 0; + overflow: hidden; + font-size: 0; +} + +.line-xs { + margin: 0; +} + +.line-lg { + margin-top: 15px; + margin-bottom: 15px; +} + +.line-dashed { + background-color: transparent; + border-style: dashed !important; + border-width: 0; +} + +.no-line { + border-width: 0; +} + +.no-border, +.no-borders { + border-color: transparent; + border-width: 0; +} + +.no-radius { + border-radius: 0; +} + +.block { + display: block; +} + +.block.hide { + display: none; +} + +.inline { + display: inline-block !important; +} + +.none { + display: none; +} + +.pull-none { + float: none; +} + +.rounded { + border-radius: 500px; +} + +.clear { + display: block; + overflow: hidden; +} + +.no-bg { + color: inherit; + background-color: transparent; +} + +.no-select { + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + -webkit-touch-callout: none; +} + +.l-h { + line-height: 1.42857143; +} + +.l-h-0x { + line-height: 0; +} + +.l-h-1x { + line-height: 1.2; +} + +.l-h-2x { + line-height: 2em; +} + +.l-s-1x { + letter-spacing: 1; +} + +.l-s-2x { + letter-spacing: 2; +} + +.l-s-3x { + letter-spacing: 3; +} + +.font-normal { + font-weight: normal; +} + +.font-thin { + font-weight: 300; +} + +.font-bold { + font-weight: 700; +} + +.text-3x { + font-size: 3em; +} + +.text-2x { + font-size: 2em; +} + +.text-lg { + font-size: 18px; +} + +.text-md { + font-size: 16px; +} + +.text-base { + font-size: 14px; +} + +.text-sm { + font-size: 13px; +} + +.text-xs { + font-size: 12px; +} + +.text-xxs { + text-indent: -9999px; +} + +.text-ellipsis { + display: block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-u-c { + text-transform: uppercase; +} + +.text-l-t { + text-decoration: line-through; +} + +.text-u-l { + text-decoration: underline; +} + +.text-active, +.active > .text, +.active > .auto .text { + display: none !important; +} + +.active > .text-active, +.active > .auto .text-active { + display: inline-block !important; +} + +.box-shadow { + box-shadow: 0 2px 2px rgba(0, 0, 0, 0.05), 0 1px 0 rgba(0, 0, 0, 0.05); +} + +.box-shadow-lg { + box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.05); +} + +.text-shadow { + font-size: 170px; + text-shadow: 0 1px 0 #dee5e7, 0 2px 0 #fcfdfd, 0 5px 10px rgba(0, 0, 0, 0.125), 0 10px 20px rgba(0, 0, 0, 0.2); +} + +.no-shadow { + -webkit-box-shadow: none !important; + box-shadow: none !important; +} + +.wrapper-xs { + padding: 5px; +} + +.wrapper-sm { + padding: 10px; +} + +.wrapper { + padding: 15px; +} + +.wrapper-md { + padding: 20px; +} + +.wrapper-lg { + padding: 30px; +} + +.wrapper-xl { + padding: 50px; +} + +.padder-lg { + padding-right: 30px; + padding-left: 30px; +} + +.padder-md { + padding-right: 20px; + padding-left: 20px; +} + +.padder { + padding-right: 15px; + padding-left: 15px; +} + +.padder-v { + padding-top: 15px; + padding-bottom: 15px; +} + +.no-padder { + padding: 0 !important; +} + +.pull-in { + margin-right: -15px; + margin-left: -15px; +} + +.pull-out { + margin: -10px -15px; +} + +.b { + border: 1px solid rgba(0, 0, 0, 0.05); +} + +.b-a { + border: 1px solid #dee5e7; +} + +.b-t { + border-top: 1px solid #dee5e7; +} + +.b-r { + border-right: 1px solid #dee5e7; +} + +.b-b { + border-bottom: 1px solid #dee5e7; +} + +.b-l { + border-left: 1px solid #dee5e7; +} + +.b-light { + border-color: #edf1f2; +} + +.b-dark { + border-color: #3a3f51; +} + +.b-black { + border-color: #3a3f51; +} + +.b-primary { + border-color: #7266ba; +} + +.b-success { + border-color: #27c24c; +} + +.b-info { + border-color: #23b7e5; +} + +.b-warning { + border-color: #fad733; +} + +.b-danger { + border-color: #f05050; +} + +.b-white { + border-color: #ffffff; +} + +.b-dashed { + border-style: dashed !important; +} + +.b-l-light { + border-left-color: #edf1f2; +} + +.b-l-dark { + border-left-color: #3a3f51; +} + +.b-l-black { + border-left-color: #3a3f51; +} + +.b-l-primary { + border-left-color: #7266ba; +} + +.b-l-success { + border-left-color: #27c24c; +} + +.b-l-info { + border-left-color: #23b7e5; +} + +.b-l-warning { + border-left-color: #fad733; +} + +.b-l-danger { + border-left-color: #f05050; +} + +.b-l-white { + border-left-color: #ffffff; +} + +.b-l-2x { + border-left-width: 2px; +} + +.b-l-3x { + border-left-width: 3px; +} + +.b-l-4x { + border-left-width: 4px; +} + +.b-l-5x { + border-left-width: 5px; +} + +.b-2x { + border-width: 2px; +} + +.b-3x { + border-width: 3px; +} + +.b-4x { + border-width: 4px; +} + +.b-5x { + border-width: 5px; +} + +.r { + border-radius: 2px 2px 2px 2px; +} + +.r-2x { + border-radius: 4px; +} + +.r-3x { + border-radius: 6px; +} + +.r-l { + border-radius: 2px 0 0 2px; +} + +.r-r { + border-radius: 0 2px 2px 0; +} + +.r-t { + border-radius: 2px 2px 0 0; +} + +.r-b { + border-radius: 0 0 2px 2px; +} + +.m-xxs { + margin: 2px 4px; +} + +.m-xs { + margin: 5px; +} + +.m-sm { + margin: 10px; +} + +.m { + margin: 15px; +} + +.m-md { + margin: 20px; +} + +.m-lg { + margin: 30px; +} + +.m-xl { + margin: 50px; +} + +.m-n { + margin: 0 !important; +} + +.m-l-none { + margin-left: 0 !important; +} + +.m-l-xs { + margin-left: 5px; +} + +.m-l-sm { + margin-left: 10px; +} + +.m-l { + margin-left: 15px; +} + +.m-l-md { + margin-left: 20px; +} + +.m-l-lg { + margin-left: 30px; +} + +.m-l-xl { + margin-left: 40px; +} + +.m-l-xxl { + margin-left: 50px; +} + +.m-l-n-xxs { + margin-left: -1px; +} + +.m-l-n-xs { + margin-left: -5px; +} + +.m-l-n-sm { + margin-left: -10px; +} + +.m-l-n { + margin-left: -15px; +} + +.m-l-n-md { + margin-left: -20px; +} + +.m-l-n-lg { + margin-left: -30px; +} + +.m-l-n-xl { + margin-left: -40px; +} + +.m-l-n-xxl { + margin-left: -50px; +} + +.m-t-none { + margin-top: 0 !important; +} + +.m-t-xxs { + margin-top: 1px; +} + +.m-t-xs { + margin-top: 5px; +} + +.m-t-sm { + margin-top: 10px; +} + +.m-t { + margin-top: 15px; +} + +.m-t-md { + margin-top: 20px; +} + +.m-t-lg { + margin-top: 30px; +} + +.m-t-xl { + margin-top: 40px; +} + +.m-t-xxl { + margin-top: 50px; +} + +.m-t-n-xxs { + margin-top: -1px; +} + +.m-t-n-xs { + margin-top: -5px; +} + +.m-t-n-sm { + margin-top: -10px; +} + +.m-t-n { + margin-top: -15px; +} + +.m-t-n-md { + margin-top: -20px; +} + +.m-t-n-lg { + margin-top: -30px; +} + +.m-t-n-xl { + margin-top: -40px; +} + +.m-t-n-xxl { + margin-top: -50px; +} + +.m-r-none { + margin-right: 0 !important; +} + +.m-r-xxs { + margin-right: 1px; +} + +.m-r-xs { + margin-right: 5px; +} + +.m-r-sm { + margin-right: 10px; +} + +.m-r { + margin-right: 15px; +} + +.m-r-md { + margin-right: 20px; +} + +.m-r-lg { + margin-right: 30px; +} + +.m-r-xl { + margin-right: 40px; +} + +.m-r-xxl { + margin-right: 50px; +} + +.m-r-n-xxs { + margin-right: -1px; +} + +.m-r-n-xs { + margin-right: -5px; +} + +.m-r-n-sm { + margin-right: -10px; +} + +.m-r-n { + margin-right: -15px; +} + +.m-r-n-md { + margin-right: -20px; +} + +.m-r-n-lg { + margin-right: -30px; +} + +.m-r-n-xl { + margin-right: -40px; +} + +.m-r-n-xxl { + margin-right: -50px; +} + +.m-b-none { + margin-bottom: 0 !important; +} + +.m-b-xxs { + margin-bottom: 1px; +} + +.m-b-xs { + margin-bottom: 5px; +} + +.m-b-sm { + margin-bottom: 10px; +} + +.m-b { + margin-bottom: 15px; +} + +.m-b-md { + margin-bottom: 20px; +} + +.m-b-lg { + margin-bottom: 30px; +} + +.m-b-xl { + margin-bottom: 40px; +} + +.m-b-xxl { + margin-bottom: 50px; +} + +.m-b-n-xxs { + margin-bottom: -1px; +} + +.m-b-n-xs { + margin-bottom: -5px; +} + +.m-b-n-sm { + margin-bottom: -10px; +} + +.m-b-n { + margin-bottom: -15px; +} + +.m-b-n-md { + margin-bottom: -20px; +} + +.m-b-n-lg { + margin-bottom: -30px; +} + +.m-b-n-xl { + margin-bottom: -40px; +} + +.m-b-n-xxl { + margin-bottom: -50px; +} + +.avatar { + position: relative; + display: block; + white-space: nowrap; + border-radius: 500px; +} + +.avatar img { + width: 100%; + border-radius: 500px; +} + +.avatar i { + position: absolute; + top: 0; + left: 0; + width: 10px; + height: 10px; + margin: 2px; + border-style: solid; + border-width: 2px; + border-radius: 100%; +} + +.avatar i.right { + right: 0; + left: auto; +} + +.avatar i.bottom { + top: auto; + right: 0; + bottom: 0; + left: auto; +} + +.avatar i.left { + top: auto; + bottom: 0; +} + +.avatar i.on { + background-color: #27c24c; +} + +.avatar i.off { + background-color: #98a6ad; +} + +.avatar i.busy { + background-color: #f05050; +} + +.avatar i.away { + background-color: #fad733; +} + +.avatar.thumb-md i { + width: 12px; + height: 12px; + margin: 3px; +} + +.avatar.thumb-sm i { + margin: 1px; +} + +.avatar.thumb-xs i { + margin: 0; +} + +.w-1x { + width: 1em; +} + +.w-2x { + width: 2em; +} + +.w-3x { + width: 3em; +} + +.w-xxs { + width: 60px; +} + +.w-xs { + width: 90px; +} + +.w-sm { + width: 150px; +} + +.w { + width: 200px; +} + +.w-md { + width: 240px; +} + +.w-lg { + width: 280px; +} + +.w-xl { + width: 320px; +} + +.w-xxl { + width: 360px; +} + +.w-full { + width: 100%; +} + +.w-auto { + width: auto; +} + +.h-auto { + height: auto; +} + +.h-full { + height: 100%; +} + +.thumb-xl { + display: inline-block; + width: 128px; +} + +.thumb-lg { + display: inline-block; + width: 96px; +} + +.thumb-md { + display: inline-block; + width: 64px; +} + +.thumb { + display: inline-block; + width: 50px; +} + +.thumb-sm { + display: inline-block; + width: 40px; +} + +.thumb-xs { + display: inline-block; + width: 34px; +} + +.thumb-xxs { + display: inline-block; + width: 30px; +} + +.thumb-wrapper { + padding: 2px; + border: 1px solid #dee5e7; +} + +.thumb img, +.thumb-xs img, +.thumb-sm img, +.thumb-md img, +.thumb-lg img, +.thumb-btn img { + height: auto; + max-width: 100%; + vertical-align: middle; +} + +.img-full { + width: 100%; +} + +.img-full img { + width: 100%; +} + +.scrollable { + overflow-x: hidden; + overflow-y: auto; + -webkit-overflow-scrolling: touch; +} + +.scrollable.hover { + overflow-y: hidden !important; +} + +.scrollable.hover:hover { + overflow: visible !important; + overflow-y: auto !important; +} + +.smart .scrollable { + overflow-y: auto !important; +} + +.scroll-x, +.scroll-y { + overflow: hidden; + -webkit-overflow-scrolling: touch; +} + +.scroll-y { + overflow-y: auto; +} + +.scroll-x { + overflow-x: auto; +} + +.hover-action { + display: none; +} + +.hover-rotate { + -webkit-transition: all 0.2s ease-in-out 0.1s; + transition: all 0.2s ease-in-out 0.1s; +} + +.hover-anchor:hover > .hover-action, +.hover-anchor:focus > .hover-action, +.hover-anchor:active > .hover-action { + display: inherit; +} + +.hover-anchor:hover > .hover-rotate, +.hover-anchor:focus > .hover-rotate, +.hover-anchor:active > .hover-rotate { + -webkit-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} + +.backdrop { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1050; +} + +.backdrop.fade { + opacity: 0; + filter: alpha(opacity=0); +} + +.backdrop.in { + opacity: 0.8; + filter: alpha(opacity=80); +} + +/*desktop*/ + +@media screen and (min-width: 992px) { + .col-lg-2-4 { + float: left; + width: 20.000%; + } +} + +@media (min-width: 768px) and (max-width: 991px) { + .hidden-sm.show { + display: inherit !important; + } + .no-m-sm { + margin: 0 !important; + } +} + +/*phone*/ + +@media (max-width: 767px) { + .w-auto-xs { + width: auto; + } + .shift { + display: none !important; + } + .shift.in { + display: block !important; + } + .row-2 [class*="col"] { + float: left; + width: 50%; + } + .row-2 .col-0 { + clear: none; + } + .row-2 li:nth-child(odd) { + margin-left: 0; + clear: left; + } + .text-center-xs { + text-align: center; + } + .text-left-xs { + text-align: left; + } + .text-right-xs { + text-align: right; + } + .no-border-xs { + border-width: 0; + } + .pull-none-xs { + float: none !important; + } + .pull-right-xs { + float: right !important; + } + .pull-left-xs { + float: left !important; + } + .dropdown-menu.pull-none-xs { + left: 0; + } + .hidden-xs.show { + display: inherit !important; + } + .wrapper-lg, + .wrapper-md { + padding: 15px; + } + .padder-lg, + .padder-md { + padding-right: 15px; + padding-left: 15px; + } + .no-m-xs { + margin: 0 !important; + } +} + +.butterbar { + position: relative; + height: 3px; + margin-bottom: -3px; +} + +.butterbar .bar { + position: absolute; + width: 100%; + height: 0; + text-indent: -9999px; + background-color: #23b7e5; +} + +.butterbar .bar:before { + position: absolute; + right: 50%; + left: 50%; + height: 3px; + background-color: inherit; + content: ""; +} + +.butterbar.active { + -webkit-animation: changebar 2.25s infinite 0.75s; + -moz-animation: changebar 2.25s infinite 0.75s; + animation: changebar 2.25s infinite 0.75s; +} + +.butterbar.active .bar { + -webkit-animation: changebar 2.25s infinite; + -moz-animation: changebar 2.25s infinite; + animation: changebar 2.25s infinite; +} + +.butterbar.active .bar:before { + -webkit-animation: movingbar 0.75s infinite; + -moz-animation: movingbar 0.75s infinite; + animation: movingbar 0.75s infinite; +} + +/* Moving bar */ + +@-webkit-keyframes movingbar { + 0% { + right: 50%; + left: 50%; + } + 99.9% { + right: 0; + left: 0; + } + 100% { + right: 50%; + left: 50%; + } +} + +@-moz-keyframes movingbar { + 0% { + right: 50%; + left: 50%; + } + 99.9% { + right: 0; + left: 0; + } + 100% { + right: 50%; + left: 50%; + } +} + +@keyframes movingbar { + 0% { + right: 50%; + left: 50%; + } + 99.9% { + right: 0; + left: 0; + } + 100% { + right: 50%; + left: 50%; + } +} + +/* change bar */ + +@-webkit-keyframes changebar { + 0% { + background-color: #23b7e5; + } + 33.3% { + background-color: #23b7e5; + } + 33.33% { + background-color: #fad733; + } + 66.6% { + background-color: #fad733; + } + 66.66% { + background-color: #7266ba; + } + 99.9% { + background-color: #7266ba; + } +} + +@-moz-keyframes changebar { + 0% { + background-color: #23b7e5; + } + 33.3% { + background-color: #23b7e5; + } + 33.33% { + background-color: #fad733; + } + 66.6% { + background-color: #fad733; + } + 66.66% { + background-color: #7266ba; + } + 99.9% { + background-color: #7266ba; + } +} + +@keyframes changebar { + 0% { + background-color: #23b7e5; + } + 33.3% { + background-color: #23b7e5; + } + 33.33% { + background-color: #fad733; + } + 66.6% { + background-color: #fad733; + } + 66.66% { + background-color: #7266ba; + } + 99.9% { + background-color: #7266ba; + } +} \ No newline at end of file diff --git a/user/assets/css/captcha.css b/user/assets/css/captcha.css new file mode 100644 index 0000000..068a09e --- /dev/null +++ b/user/assets/css/captcha.css @@ -0,0 +1 @@ +#captcha_text{height:42px;width:100%;text-align:center;border-radius:2px;background-color:#F3F3F3;color:#BBBBBB;font-size:14px;letter-spacing:0.1px;line-height:42px}#captcha_wait{display:none;height:42px;width:100%;text-align:center;border-radius:2px;background-color:#F3F3F3}.loading{margin:auto;width:70px;height:20px}.loading-dot{float:left;width:8px;height:8px;margin:18px 4px;background:#ccc;-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%;opacity:0;-webkit-box-shadow:0 0 2px black;-moz-box-shadow:0 0 2px black;-ms-box-shadow:0 0 2px black;-o-box-shadow:0 0 2px black;box-shadow:0 0 2px black;-webkit-animation:loadingFade 1s infinite;-moz-animation:loadingFade 1s infinite;animation:loadingFade 1s infinite}.loading-dot:nth-child(1){-webkit-animation-delay:0s;-moz-animation-delay:0s;animation-delay:0s}.loading-dot:nth-child(2){-webkit-animation-delay:0.1s;-moz-animation-delay:0.1s;animation-delay:0.1s}.loading-dot:nth-child(3){-webkit-animation-delay:0.2s;-moz-animation-delay:0.2s;animation-delay:0.2s}.loading-dot:nth-child(4){-webkit-animation-delay:0.3s;-moz-animation-delay:0.3s;animation-delay:0.3s}@-webkit-keyframes loadingFade{0%{opacity:0}50%{opacity:0.8}100%{opacity:0}}@-moz-keyframes loadingFade{0%{opacity:0}50%{opacity:0.8}100%{opacity:0}}@keyframes loadingFade{0%{opacity:0}50%{opacity:0.8}100%{opacity:0}} \ No newline at end of file diff --git a/user/assets/css/font.css b/user/assets/css/font.css new file mode 100644 index 0000000..da41329 --- /dev/null +++ b/user/assets/css/font.css @@ -0,0 +1,18 @@ +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 300; + src: local('Source Sans Pro Light'), local('SourceSansPro-Light'), url('../fonts/sourcesanspro/sourcesanspro-light.woff') format('woff'); +} +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 400; + src: local('Source Sans Pro'), local('SourceSansPro-Regular'), url('../fonts/sourcesanspro/sourcesanspro.woff') format('woff'); +} +@font-face { + font-family: 'Source Sans Pro'; + font-style: normal; + font-weight: 700; + src: local('Source Sans Pro Bold'), local('SourceSansPro-Bold'), url('../fonts/sourcesanspro/sourcesanspro-bold.woff') format('woff'); +} \ No newline at end of file diff --git a/user/assets/fonts/sourcesanspro/sourcesanspro-bold.woff b/user/assets/fonts/sourcesanspro/sourcesanspro-bold.woff new file mode 100644 index 0000000..1da9934 Binary files /dev/null and b/user/assets/fonts/sourcesanspro/sourcesanspro-bold.woff differ diff --git a/user/assets/fonts/sourcesanspro/sourcesanspro-light.woff b/user/assets/fonts/sourcesanspro/sourcesanspro-light.woff new file mode 100644 index 0000000..b76e3ed Binary files /dev/null and b/user/assets/fonts/sourcesanspro/sourcesanspro-light.woff differ diff --git a/user/assets/fonts/sourcesanspro/sourcesanspro.woff b/user/assets/fonts/sourcesanspro/sourcesanspro.woff new file mode 100644 index 0000000..6809507 Binary files /dev/null and b/user/assets/fonts/sourcesanspro/sourcesanspro.woff differ diff --git a/user/assets/img/alipay.png b/user/assets/img/alipay.png new file mode 100644 index 0000000..c363717 Binary files /dev/null and b/user/assets/img/alipay.png differ diff --git a/user/assets/img/logo.png b/user/assets/img/logo.png new file mode 100644 index 0000000..ef1f858 Binary files /dev/null and b/user/assets/img/logo.png differ diff --git a/user/assets/img/p0.jpg b/user/assets/img/p0.jpg new file mode 100644 index 0000000..ab2fbc5 Binary files /dev/null and b/user/assets/img/p0.jpg differ diff --git a/user/assets/img/qr.png b/user/assets/img/qr.png new file mode 100644 index 0000000..e51aa29 Binary files /dev/null and b/user/assets/img/qr.png differ diff --git a/user/assets/img/user.png b/user/assets/img/user.png new file mode 100644 index 0000000..3e01021 Binary files /dev/null and b/user/assets/img/user.png differ diff --git a/user/assets/js/app.min.js b/user/assets/js/app.min.js new file mode 100644 index 0000000..94f4933 --- /dev/null +++ b/user/assets/js/app.min.js @@ -0,0 +1,4 @@ +if(!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){function c(a){var b=a.length,c=_.type(a);return"function"===c||_.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}function d(a,b,c){if(_.isFunction(b))return _.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return _.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(hb.test(b))return _.filter(b,a,c);b=_.filter(b,a)}return _.grep(a,function(a){return U.call(b,a)>=0!==c})}function e(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function f(a){var b=ob[a]={};return _.each(a.match(nb)||[],function(a,c){b[c]=!0}),b}function g(){Z.removeEventListener("DOMContentLoaded",g,!1),a.removeEventListener("load",g,!1),_.ready()}function h(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=_.expando+h.uid++}function i(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(ub,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:tb.test(c)?_.parseJSON(c):c}catch(e){}sb.set(a,b,c)}else c=void 0;return c}function j(){return!0}function k(){return!1}function l(){try{return Z.activeElement}catch(a){}}function m(a,b){return _.nodeName(a,"table")&&_.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function n(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function o(a){var b=Kb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function p(a,b){for(var c=0,d=a.length;d>c;c++)rb.set(a[c],"globalEval",!b||rb.get(b[c],"globalEval"))}function q(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(rb.hasData(a)&&(f=rb.access(a),g=rb.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)_.event.add(b,e,j[e][c])}sb.hasData(a)&&(h=sb.access(a),i=_.extend({},h),sb.set(b,i))}}function r(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&_.nodeName(a,b)?_.merge([a],c):c}function s(a,b){var c=b.nodeName.toLowerCase();"input"===c&&yb.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function t(b,c){var d,e=_(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:_.css(e[0],"display");return e.detach(),f}function u(a){var b=Z,c=Ob[a];return c||(c=t(a,b),"none"!==c&&c||(Nb=(Nb||_("