php QQ第三方登陆SDK程序代码

 更新时间:2016年11月25日 16:21  点击:2015
自己重写的一个php QQ第三方登陆SDK程序代码,官方的不敢恭维了所以自己再写了一个


主要是考虑到QQ的PHP SDK写的真是太烂了,纯属是普及API知识,而不是到手就可以部署的类库。。反正自己都写了一个了,就拿出来分享下。。

什么也不多说,直接上代码。

 

Qq_sdk.php

 

 代码如下 复制代码

<?php

/**

* QQ开发平台 SDK

* 作者:偶尔陶醉

* blog: www.stutostu.com

*/ 

 

class Qq_sdk{ 

 

//配置APP参数

private $app_id = 你的APP ID; 

private $app_secret = ‘你的APP_secret’; 

private $redirect = 你的回调地址;

 

function __construct() 

 

 

/**

* [get_access_token 获取access_token]

* @param [string] $code [登陆后返回的$_GET['code']]

* @return [array] [expires_in 为有效时间 , access_token 为授权码 ; 失败返回 error , error_description ]

*/ 

function get_access_token($code) 

//获取access_token

$token_url = ‘https://graph.qq.com/oauth2.0/token?grant_type=authorization_code&’

. ‘client_id=’ . $this->app_id . ‘&redirect_uri=’ . urlencode($this->redirect)//回调地址

. ‘&client_secret=’ . $this->app_secret . ‘&code=’ . $code; 

$token = array(); 

//expires_in 为access_token 有效时间增量 

parse_str($this->_curl_get_content($token_url), $token); 

 

return $token; 

 

/**

* [get_open_id 获取用户唯一ID,openid]

* @param [string] $token [授权码]

* @return [array] [成功返回client_id 和 openid ;失败返回error 和 error_msg]

*/ 

function get_open_id($token) 

$str = $this->_curl_get_content(‘https://graph.qq.com/oauth2.0/me?access_token=’ . $token);

if (strpos($str, “callback”) !== false) 

$lpos = strpos($str, “(“); 

$rpos = strrpos($str, “)”); 

$str = substr($str, $lpos + 1, $rpos – $lpos -1); 

$user = json_decode($str, TRUE); 

 

return $user; 

 

/**

* [get_user_info 获取用户信息]

* @param [string] $token [授权码]

* @param [string] $open_id [用户唯一ID]

* @return [array] [ret:返回码,为0时成功。msg为错误信息,正确返回时为空。...params]

*/ 

function get_user_info($token, $open_id) 

 

//组装URL

$user_info_url = ‘https://graph.qq.com/user/get_use
r_info?’

. ‘access_token=’ . $token 

. ‘&oauth_consumer_key=’ . $this->app_id 

. ‘&openid=’ . $open_id 

. ‘&format=json’; 

 

$info = json_decode($this->_curl_get_content($user_info_url), TRUE); 

 

return $info; 

 

private function _curl_get_content($url) 

$ch = curl_init(); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 

curl_setopt($ch, CURLOPT_URL, $url); 

//设置超时时间为3s

curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 3); 

$result = curl_exec($ch); 

curl_close($ch); 

 

return $result; 

 

 

/* end of Qq_sdk.php */ 

 

 

使用方法:在你网站上放置超链接,地址为:https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=你的APP_ID&redirect_uri=你的回调地址

在回调地址上调用我上面这个qq_sdk即可。

demo如下:

 代码如下 复制代码

 

if(empty($_GET['code'])) 

exit(‘参数非法’); 

 

include(‘qq_sdk’); 

$qq_sdk = new Qq_sdk(); 

$token = $qq_sdk->get_access_token($_GET['code']); 

print_r($token); 

 

$open_id = $qq_sdk->get_open_id($token['access_token']); 

print_r($open_id); 

 

 

$user_info = $qq_sdk->get_user_info($token['access_token'], $open_id['openid']); 

print_r($user_info); 

本文章给各位同学介绍分享淘宝API辅助函数-适用CI框架,有需要了解的朋友可参考。

最近在重写一个淘宝客的网站,考虑到以后的拓展性,所以把它整合进CI里面了,这就出现个问题了,淘宝的SDK怎么整合进类库呢?仔细阅读淘宝API文档后,发现一个非SDK调用方法,我在这基础上加以修改整合成CI的helper函数,现在把源码分享给大家,希望帮到有需要的同学。

    调用方法很简单,传入一个数组参数,其中method是你打算调用的API接口,其余的参数根据API接口的实际需要填入。我这里给个调用例子给大家看下。

 

 代码如下 复制代码


  
$paramArr = array(   
    ’method’    => ’taobao.taobaoke.items.get’,  //API名称   
    ’fields’    =>’num_iid,title,nick,pic_url,price,click_url,seller_credit_score,   
commission,commission_rate,volume’,   
    ’pid’       =>YOUR PID,   
    ’page_size’ =>YOUR PAGE_SIZE,   
    ’sort’      =>YOUR SORT,   
    ’keyword’   =>your keyword,   
);   
$this->load->helper(‘taoapi’);   
$result['item_list'] = send($paramArr);  

由于使用php来写图片主色调识别功能太麻烦了,所以我给大家介绍利用利用k-means聚类算法识别图片主色调方法,比php要己100倍哦。

识别图片主色调这个,网上貌似有几种方法,不过,最准确,最优雅的解决方案还是利用聚类算法来做。。。

直接上代码。。。。不过,我测试结果表示,用PHP来做,效率不佳,PHP不适合做这种大规模运算~~~,用nodejs做 效率可以高出100倍左右。。。

 代码如下 复制代码

<?php 

$start = microtime(TRUE); 

main(); 

 

function main($img = ‘colors_files/T1OX3eXldXXXcqfYM._111424.jpg’) 

 

 

list($width, $height, $mime_code) = getimagesize($img); 

 

$im = null; 

$point = array(); 

switch ($mime_code) 

# jpg 

case 2: 

$im =imagecreatefromjpeg($img); 

break; 

 

# png 

case 3: 

 

default: 

exit(‘擦 ,什么图像?解析不了啊’); 

 

$new_width = 100; 

$new_height = 100; 

$pixel = imagecreatetruecolor($new_width, $new_height); 

imagecopyresampled($pixel, $im, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

 

run_time(); 

 

$i = $new_width; 

while ($i–) 

# reset高度 

$k = $new_height; 

while ($k–) 

$rgb = ImageColorAt($im, $i, $k); 

array_push($point, array(‘r’=>($rgb >> 16) & 0xFF, ‘g’=>($rgb >> 8) & 0xFF, ‘b’=>$rgb & 0xFF)); 

imagedestroy($im); 

imagedestroy($pixel); 

 

run_time(); 

 

$color = kmeans($point); 

 

run_time(); 

 

foreach ($color as $key => $value) 

&nb
sp; { 

echo ‘<br><span style=“background-color:’ . RGBToHex($value[0]) . ‘” >’ . RGBToHex($value[0]) . ‘</span>’; 

 

 

function run_time() 

global $start; 

echo ‘<br/>消耗:’, microtime(TRUE) – $start; 

 

function kmeans($point=array(), $k=3, $min_diff=1) 

global $ii; 

$point_len = count($point); 

$clusters = array(); 

$cache = array(); 

 

 

for ($i=0; $i < 256; $i++) 

$cache[$i] = $i*$i; 

 

# 随机生成k值 

$i = $k; 

$index = 0; 

while ($i–) 

$index = mt_rand(1,$point_len-100); 

array_push($clusters, array($point[$index], array($point[$index]))); 

 

 

run_time(); 

$point_list = array(); 

 

$run_num = 0; 

 

while (TRUE) 

foreach ($point as $value) 

$smallest_distance = 10000000; 

 

# 求出距离最小的点 

# index用于保存point最靠近的k值 

$index = 0; 

$i = $k; 

while ($i–) 

$distance = 0; 

foreach ($value as $key => $p1) 

&n
bsp; if ($p1 > $clusters[$i][0][$key]) 

$distance += $cache[$p1 - $clusters[$i][0][$key]]; 

else 

$distance += $cache[$clusters[$i][0][$key] – $p1]; 

 

$ii++; 

 

if ($distance < $smallest_distance) 

$smallest_distance = $distance; 

$index = $i; 

$point_list[$index][] = $value; 

 

$diff = 0; 

# 1个1个迭代k值 

$i = $k; 

while ($i–) 

$old = $clusters[$i]; 

 

# 移到到队列中心 

$center = calculateCenter($point_list[$i], 3); 

# 形成新的k值集合队列 

$new_cluster = array($center, $point_list[$i]); 

$clusters[$i] = $new_cluster; 

 

# 计算新的k值与队列所在点的位置 

$diff = euclidean($old[0], $center); 

 

# 判断是否已足够聚合 

if ($diff < $min_diff) 

break; 
>

 

echo ‘—>’.$ii; 

 

return $clusters; 

 

# 计算2点距离 

$ii = 0; 

function euclidean($p1, $p2) 

 

$s = 0; 

foreach ($p1 as $key => $value) 

 

$temp = ($value – $p2[$key]); 

$s += $temp*$temp; 

 

return sqrt($s); 

 

 

# 移动k值到所有点的中心 

function calculateCenter($point_list, $attr_num) { 

$vals = array(); 

$point_num = 0; 

 

$keys = array_keys($point_list[0]); 

foreach($keys as $value) 

$vals[$value] = 0; 

 

foreach ($point_list as $arr) 

$point_num++; 

foreach ($arr as $key => $value) 

$vals[$key] += $value; 

 

 

foreach ($keys as $index) 

$vals[$index] = $vals[$index] / $point_num; 

 

return $vals; 

 

 

 

function RGBToHex($r, $g=”, $b=”) 

if (is_array($r)) 

$b = $r['b']; 

$g = $r['g']; 


$r = $r['r']; 

 

$hex = “#”; 

$hex.= str_pad(dechex($r), 2, ’0′, STR_PAD_LEFT); 

$hex.= str_pad(dechex($g), 2, ’0′, STR_PAD_LEFT); 

$hex.= str_pad(dechex($b), 2, ’0′, STR_PAD_LEFT); 

 

return $hex; 

?> 

本文章来给各位同学介绍一个不错的需要登录的php 文件上传管理系统,功能简单有需要了解的同学可参考。
 代码如下 复制代码

<?php
$admin_pw="admin";//管理密码
$uploaddir="upload";//上传目录
session_start();
if($_GET['action']=="getcode")
{
  setcode();
  exit();
}
if($_POST['password']==$admin_pw && $_POST['yz']==$_SESSION['yzcode'])
{
  $_SESSION['logined']=$admin_pw;
}
if($_GET['action']=="logout")
{
  $_SESSION['logined']="";
  header("location: ".$_SERVER['PHP_SELF']);
  exit();
}
if($_SESSION['logined']!=$admin_pw)
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>请登录</title>
</head>
<body>
<form action="" method="post">
输入密码:<input type="password" name="password" style="width:100px;" /><br />验证字符:<input type="text" style="width:40px;" name="yz" /><a href="#" onclick="document.tzm.src='?action=getcode';"><img src="?action=getcode" alt="验证码" id="tzm" name="tzm" /></a><br /><input type="submit" value="进入管理" />
</form>
</body>
</html>
<?php
}
else
{
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文件上传</title>
</head>
<body>
<?php
  if($_POST['ac']=="upload")
  {
 $fileall=explode('.',$_FILES['file']['name']);
 $filetype=$fileall[count($fileall)-1];
 $filename=$uploaddir."/".$_FILES['file']['name']."_".rand(1,999999999).".".$filetype;
 $fileexists=file_exists($filename);
 while($fileexists==true)
 {
  $filename=$uploaddir."/".$_FILES['file']['name']."_".rand(1,999999999).".".$filetype;
  $fileexists=file_exists($filename);
 }
 if(move_uploaded_file($_FILES["file"]["tmp_name"],$filename))
 {
  $url="http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
  echo "文件:".$filename." 上传成功!<br>文件地址:<input type=text style='width:350px;' value=".dirname($url)."/".$filename." /><a href=".dirname($url)."/".$filename." target="_blank">测试</a>";
 }
 else
 {
  echo "文件".$filename."上传失败!";
 }
  }
?>
<form action="" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="file" id="file" width="100px" /><input type="hidden" name="ac" value="upload" /><input type="submit" value="上传" />
</form>
<p><a href="?action=logout">退出登录</a></p>
</body>
</html>
<?php
}


function setcode()
{
  Header("Content-type: image/gif");
  $border = 0; //是否要边框 1要:0不要
  $how = 4; //验证码位数
  $w = $how*15; //图片宽度
  $h = 20; //图片高度
  $fontsize = 5; //字体大小
  $alpha = "abcdefghijkmnopqrstuvwxyz"; //验证码内容1:字母
  $number = "0123456789"; //验证码内容2:数字
  $randcode = ""; //验证码字符串初始化
  srand((double)microtime()*1000000); //初始化随机数种子
  $im = ImageCreate($w, $h); //创建验证图片
  $bgcolor = ImageColorAllocate($im, 255, 255, 255); //设置背景颜色
  ImageFill($im, 0, 0, $bgcolor); //填充背景色
  if($border)
  {
    $black = ImageColorAllocate($im, 0, 0, 0); //设置边框颜色
    ImageRectangle($im, 0, 0, $w-1, $h-1, $black);//绘制边框
  }
  for($i=0; $i<$how; $i++)
  {  
    $alpha_or_number = mt_rand(0, 1); //字母还是数字
    $str = $alpha_or_number ? $alpha : $number;
    $which = mt_rand(0, strlen($str)-1); //取哪个字符
    $code = substr($str, $which, 1); //取字符
    $j = !$i ? 4 : $j+15; //绘字符位置
    $color3 = ImageColorAllocate($im, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100)); //字符随即颜色
    ImageChar($im, $fontsize, $j, 3, $code, $color3); //绘字符
    $randcode .= $code; //逐位加入验证码字符串
  }
  $_SESSION['yzcode'] = $randcode;
  Imagegif($im);
  ImageDestroy($im);
}
?>

初期就这些需求,然后根据网上的资料,采用了一种阶段式抽取的方法,大家下面看一下整体的程序: 该程序是在ThinkPHP框架下完成的,使用了一些框架自带的类库和函数,下面我会逐一进行说明,控制器部分

抽奖算法需要满足的需求如下:

1.可以控制中奖的概率

2.具有随机性

3.最好可以控制奖品的数量

4.根据用户ID或者ip、手机号、QQ号等条件限制抽奖次数


初期就这些需求,然后根据网上的资料,采用了一种阶段式抽取的方法,大家下面看一下整体的程序:

该程序是在ThinkPHP框架下完成的,使用了一些框架自带的类库和函数,下面我会逐一进行说明,控制器部分:

 代码如下 复制代码
<?php
 
/**
 *
 *
 * @lanfengye <zibin_5257@163.com>
 */
class ChoujiangAction extends Action {
     //抽奖的开始时间
    var $begin_time="2012-12-25 14:00:00"; //开始时间  0-不限制
    //抽奖的结束时间
    var $stop_time="0";  //结束时间  0-不限制
     
    //本次抽奖的奖项信息,必须按照从大到小的顺序进行填写,id为奖次,prize为中奖信息,v为中奖概率,num为奖品数量
    //需要注意的是,该处也必须包含不中奖的信息,概率从小到大进行排序
    var $prize_arr = array(
        '0' => array('id' => 1, 'prize' => '44元购买1G/年空间', 'v' => 1,'num'=>1),
        '1' => array('id' => 2, 'prize' => '55元购买1G/年空间', 'v' => 2,'num'=>2),
        '2' => array('id' => 3, 'prize' => '66元购买1G/年空间', 'v' => 5,'num'=>2),
        '3' => array('id' => 4, 'prize' => '77元购买1G/年空间', 'v' => 10,'num'=>3),
        '4' => array('id' => 5, 'prize' => '88元购买1G/年空间', 'v' => 15,'num'=>4),
        '5' => array('id' => 6, 'prize' => '99元购买1G/年空间', 'v' => 67,'num'=>10),
    );
    
 
    //首页显示方法    
    public function index(){
        //连接数据库,去获取本次中奖的人员名单
        $Choujiang=M('Choujiang');
        $this->assign('list', $Choujiang->where("rid>0")->order('id desc')->select());
        unset($Choujiang);
         
        //在首页中显示抽奖的开始时间
        $this->assign('begin_time',$this->begin_time);
         
        $this->display();
    }
     
 
     
    /**
     * 生成中奖信息,ajax进行请求该方法,需要客户填写QQ号码
     */
    public function make() {
        $qq_no=  trim($_POST['qq_no']);
        import('ORG.Util.Input');
        $qq_no=Input::getVar($qq_no);
         
        if(empty($qq_no)){
            $this->ajaxReturn(1, '请正确填写QQ号码!');
            exit;
        }
         
        if(!empty($this->begin_time) && time()<strtotime($this->begin_time)){
            $this->ajaxReturn(1, '抽奖还没有开始,开始时间为:'.$this->begin_time);
            exit;
        }
         
        if(!empty($this->stop_time) && time()>strtotime($this->stop_time)){
            $this->ajaxReturn(1, '本次抽奖已经结束,结束时间为:'.$this->stop_time);
            exit;
        }
         
         //获取奖项信息数组,来源于私有成员
        $prize_arr=  $this->prize_arr;
         
        foreach ($prize_arr as $key => $val) {
            $arr[$val['id']] = $val['v'];
        }
        //$rid中奖的序列号码
        $rid = $this->get_rand($arr); //根据概率获取奖项id
         
        $str = $prize_arr[$rid - 1]['prize']; //中奖项
         
        $Choujiang=M('Choujiang');
         
            //从数据库中获取特定QQ号已经参加抽奖的次数,如果大于等于3则提示次数用完
        if($Choujiang->where("qq_no='{$qq_no}'")->count()>=3){
            $str='您3次抽奖机会已经用完!';
            $rid=0;
            //从数据库中获取特定奖项序号的次数,大于等于设置的最大次数则提示奖品被抽完,如果需要一直中最后一个纪念奖,则修改该处即可
        }elseif ($Choujiang->where("rid={$rid}")->count()>=$prize_arr[$rid-1]['num']) {
            $str='很抱歉,您所抽中的奖项已经中完!';
            $rid=0;
        }
        //生成一个用户抽奖的数据,用来记录到数据库
        $data=array(
            'rid'=>$rid,
            'pop'=>$str,
            'qq_no'=>$qq_no,
            'input_time'=>time()
        );
        //将用户抽奖信息数组写入数据库
         
        $Choujiang->add($data);
        unset($Choujiang);
         
         //ajax返回信息
        $this->ajaxReturn(1, $str);
    }
     
    /**
     * 根据概率获取中奖号码
     */
    private function get_rand($proArr) {
        $result = '';
        //概率数组的总概率精度
        $proSum = array_sum($proArr);
        //概率数组循环
        foreach ($proArr as $key => $proCur) {
            $randNum = mt_rand(1, $proSum);
            if ($randNum <= $proCur) {
                $result = $key;
                break;
            } else {
                $proSum -= $proCur;
            }
        }
        unset($proArr);
        return $result;
    }
     
}
 
 
 
?>

该算法简单使用,并发访问性能非常好,稍加改动就可以用于各种场合,结合用户登录等信息可有效控制每个人的抽奖次数。将开始和结束之间更改为数组,就可以完善成为每天特定时间抽奖的程序。

[!--infotagslink--]

相关文章

  • C#开发Windows窗体应用程序的简单操作步骤

    这篇文章主要介绍了C#开发Windows窗体应用程序的简单操作步骤,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-04-12
  • C++调用C#的DLL程序实现方法

    本文通过例子,讲述了C++调用C#的DLL程序的方法,作出了以下总结,下面就让我们一起来学习吧。...2020-06-25
  • 不打开网页直接查看网站的源代码

      有一种方法,可以不打开网站而直接查看到这个网站的源代码..   这样可以有效地防止误入恶意网站...   在浏览器地址栏输入:   view-source:http://...2016-09-20
  • php 调用goolge地图代码

    <?php require('path.inc.php'); header('content-Type: text/html; charset=utf-8'); $borough_id = intval($_GET['id']); if(!$borough_id){ echo ' ...2016-11-25
  • 微信小程序 页面传值详解

    这篇文章主要介绍了微信小程序 页面传值详解的相关资料,需要的朋友可以参考下...2017-03-13
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • C#使用Process类调用外部exe程序

    本文通过两个示例讲解了一下Process类调用外部应用程序的基本用法,并简单讲解了StartInfo属性,有需要的朋友可以参考一下。...2020-06-25
  • JS+CSS实现分类动态选择及移动功能效果代码

    本文实例讲述了JS+CSS实现分类动态选择及移动功能效果代码。分享给大家供大家参考,具体如下:这是一个类似选项卡功能的选择插件,与普通的TAb区别是加入了动画效果,多用于商品类网站,用作商品分类功能,不过其它网站也可以用,...2015-10-21
  • JS实现自定义简单网页软键盘效果代码

    本文实例讲述了JS实现自定义简单网页软键盘效果。分享给大家供大家参考,具体如下:这是一款自定义的简单点的网页软键盘,没有使用任何控件,仅是为了练习JavaScript编写水平,安全性方面没有过多考虑,有顾虑的可以不用,目的是学...2015-11-08
  • php 取除连续空格与换行代码

    php 取除连续空格与换行代码,这些我们都用到str_replace与正则函数 第一种: $content=str_replace("n","",$content); echo $content; 第二种: $content=preg_replac...2016-11-25
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • PHP实现清除wordpress里恶意代码

    公司一些wordpress网站由于下载的插件存在恶意代码,导致整个服务器所有网站PHP文件都存在恶意代码,就写了个简单的脚本清除。恶意代码示例...2015-10-23
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • JS实现双击屏幕滚动效果代码

    本文实例讲述了JS实现双击屏幕滚动效果代码。分享给大家供大家参考,具体如下:这里演示双击滚屏效果代码的实现方法,不知道有觉得有用处的没,现在网上还有很多还在用这个特效的呢,代码分享给大家吧。运行效果截图如下:在线演...2015-10-30
  • js识别uc浏览器的代码

    其实挺简单的就是if(navigator.userAgent.indexOf('UCBrowser') > -1) {alert("uc浏览器");}else{//不是uc浏览器执行的操作}如果想测试某个浏览器的特征可以通过如下方法获取JS获取浏览器信息 浏览器代码名称:navigator...2015-11-08
  • 微信小程序二维码生成工具 weapp-qrcode详解

    这篇文章主要介绍了微信小程序 二维码生成工具 weapp-qrcode详解,教大家如何在项目中引入weapp-qrcode.js文件,通过实例代码给大家介绍的非常详细,需要的朋友可以参考下...2021-10-23
  • JS日期加减,日期运算代码

    一、日期减去天数等于第二个日期function cc(dd,dadd){//可以加上错误处理var a = new Date(dd)a = a.valueOf()a = a - dadd * 24 * 60 * 60 * 1000a = new Date(a)alert(a.getFullYear() + "年" + (a.getMonth() +...2015-11-08
  • uniapp微信小程序:key失效的解决方法

    这篇文章主要介绍了uniapp微信小程序:key失效的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-01-20
  • PHP开发微信支付的代码分享

    微信支付,即便交了保证金,你还是处理测试阶段,不能正式发布。必须到你通过程序测试提交订单、发货通知等数据到微信的系统中,才能申请发布。然后,因为在微信中是通过JS方式调用API,必须在微信后台设置支付授权目录,而且要到...2014-05-31
  • 将c#编写的程序打包成应用程序的实现步骤分享(安装,卸载) 图文

    时常会写用c#一些程序,但如何将他们和photoshop一样的大型软件打成一个压缩包,以便于发布....2020-06-25