PHP全局管理微信公众平台token

由于微信平台对获取token有限制,而且每次获取的token不一样,需要对获取到的token,ticket之类的数据进行服务器全局保存,而且有7200秒的限制,如果token不同步或超时,会导致相关接口不可用.
对于java这类语言而言,维护全局变量是很简单的事,但是PHP做全局一直是个麻烦事,需要借助第三方的功能才能实现,如数据库,缓存,文件系统等,我这里提供一种文件系统全局保存ticket的方式,对单台服务器有效,如果要用在多台服务器上,可以实现成一个http接口给其他服务器获取token

下面是PHP代码

<?php
//weixin.php
//全局保存ticket和token,系统中的所有获取token的地方通过引用该文件
//注意:需要保证该php文件可以读写同目录下的lock,_weixin_tickets.php两个文件.
$cdir=dirname(__FILE__);
$file=$cdir.'/lock';
if(!file_exists($file)) touch($file);
$lock=fopen($file,'w');
flock($lock,LOCK_EX);

$tokenFile=$cdir.'/_weixin_tickets.php';
$ticketData=include($tokenFile);
//如果token超时,更新token
if(time()-$ticketData['time']>=7100){
    $url="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=myappid&secret=mysecret";
    $datas=json_decode(file_get_contents($url));

    $ticketData=array(
        'access_token'=>$datas->access_token,
        'time'=>time()
    );
    $token=$ticketData['access_token'];
    $rdata=file_get_contents("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={$token}&type=jsapi");
    $datas=json_decode($rdata);
    $ticketData['ticket']=$datas->ticket;

    unlink($tokenFile);
    file_put_contents($tokenFile,"<?php\nreturn ".var_export($ticketData,true).";");
}

flock($lock,LOCK_UN);
fclose($lock);

return $ticketData;

如果需要多个服务器共享token,可以某一台服务器实现一个内部http接口,引用该文件,输出token等信息,如下示例

//内部api
<?php
$ticketData=include("/path/to/weixin.php");
echo json_encode($ticketData);

苹果公司logo为什么缺了一块

苹果公司的logo为什么缺了一块一直都是大家很喜欢讨论的问题,各种说法都有,有说是纪念图灵的,还有跟圣经扯上关系的,今天,我再添加一种说法,哈哈.

这也是今天我看到apple II机器的logo时想到的,请看下面的apple II 机器的logo图片:

看起来实际上好像是作者想把一个完整的苹果图标,和”apple II”这串英文字结合起来. 而对”apple II”串字进行了描边而已,从而导致一个原本完整的苹果图标被apple II盖上后少了一块.   所以或许大家想多了,实际上苹果图标右边少的一块实际上是字母 a的一部分而已.

我随便做了个示意的动图,来证实我的想法,注意,由于我没有这么好的字体,所以我打的这个”a”与苹果logo的缺口不能完全对上.

所以我在想,很多时候很简单的一个问题,是不是大家把它给想多了. 就像很多电影一样,总会有人理解出好多不一样的内涵出来,有可能导演根本没这么想呢.

关于ibeacon

好久没写点什么了,感觉没写什么心里就有点空虚. 最近在搞ibeacon方面的电路板,正好对ibeacon的推送有些想法先记下来,等板子好了后再来验证一番.

ibeacon是个好东西, 是苹果在去年就带给大家的新技术. 顾名思义,它就是一个信标,通过基于蓝牙4.0的协议,让一个蓝牙4.0设备成为一个信标,每固定一个时间向周围广播一个信标信号,这个信号包含这个设备的id.当有手机或其他移动设备进入到这个信标所在的范围内时,会收到这个信号并接收到这个id, 系统同时可以根据信号强度估出一个距离值, 最终将这个事件(附带id和距离等信息),通知给系统中感兴趣的应用程序.

Continue reading “关于ibeacon”

php har解压程序

<?php
if($argc!=2){
	echo "usage: php har_extractor.php <archive file name>";
	exit();
}

$urlBase="http://a.b.com/";
$archiveFileName=$argv[1];
$data=file_get_contents($archiveFileName);
$archive=json_decode($data);
$entries=$archive->log->entries;
for($i=0;$i<count($entries);$i++){
	$entry=$entries[$i];
	$filePath=str_replace($urlBase,'',$entry->request->url);
	if(strlen($filePath)==strpos($filePath,'/')+1) $filePath.="index.html";
	$fileDir=dirname($filePath);
	$fileName=basename($filePath);
	if(strpos($fileName,'?')!==false) $fileName=substr($fileName,0,strpos($fileName,'?'));
	if($fileName=='') $fileName='index.html';
	if(!file_exists($fileDir)) mkdir($fileDir,0777,true);
	$encoding=$entry->response->content->encoding;
	
	$data=$entry->response->content->text;
	if($encoding=='base64'){
		$data=base64_decode($data);
	}
	file_put_contents($fileDir.'/'.$fileName,$data);
}

关于充电宝可以盗取用户隐私的新闻

最近CCTV爆光了一个新闻是充电宝可以盗取用户隐私,看起来很是不可信,由于编辑和记者对技术方面不了解,未解释盗取数据的方式,加上央视经常会报道一些没脑子的新闻,导致现在有点奇怪的新闻都让人怀疑了,不过这个新闻,我还是要帮央视说句话。

我想移动充电宝怎么盗取用户数据、盗取的用户数据怎么通过网络提交到服务器上、这样的充电宝的成本是大家最关心的问题。

1. 怎么盗取用户数据?

首先,用过安卓手机的人,都有插上电脑后,无缘无故被一些助手软件偷偷的装上app的经历,而充电宝给手机装app也是非常简单的事,只要充电宝内的cpu支持USB-HOST模式,并且实现了android的adb协议,那么充电宝就可以像一台PC机一样控制android手机了,既然可以控制手机,想拿什么数据应该也不是难事吧!最简单的办法就是给手机装个app,由那个app来拿数据。

2. 数据怎么提交到网络上?

很多人觉得新闻不靠谱,是因为觉得充电宝里有张上网卡上网才行,实则不然,其实真正的上网卡是用户自己的手机卡,充电宝既然能控制整个手机、给手机装app啥的,它当然也可以使用手机的网络来提交数据。

3. 生产成本多少?

现在,支持USB-HOST的主控芯片,最便宜的价格大约10几元(单片价格,如果批量或者二手的价更便宜),加上外围的一些成本,整个控制系统估计30来块就可以实现。电池的话价格就很乱了,现在市面上都有那种一节电池加上沙袋的假充电宝,如果它也给一节充电池在里面,成本估计也就3,40元左右(或许更低)

4. 如何避免中招?

避免也很简单,使用只能充电的数据线即可。因为一般的usb是要有四根线的,有两根线是传输数据信号的,如果用那种没有数据线的充电线,就没有问题了。

所以,这个新闻还是不能笑笑了之,至少它是可行的 🙂 ,举个简单的例子:一个想知道你隐私的人特地买一个来送给你,或想办法让你得到或捡到,我想,那个人200,300或更高价都愿意买!!

macbook pro无法充电,原因竟然是…

今天我的macbook插上电源适配器后,发现电池充不进电,插头上的充电灯不亮,但是电脑显示使用了适配器的电源,也就是说适配器不是坏的,用了一下午实在受不了了,试了多种方法都没办法解决,最后检查了一下充电口,发现充电口那儿有异物。。。。掏出来后就可以用了,居然是个辣椒片。。。以后要注意啊。