《真的爱你》童声演绎 致敬母爱


《真的爱你》它收录在Beyond于1989年发行的粤语专辑《Beyond IV》 内。该作品的词作者为梁美薇,曲作者为黄家驹,演唱者为Beyond。

小哲分享的这个版本是由来自香港谭芷昀演唱,是《中国新声代》第二季的学员,于2007年11月22日出生,有香港小巨肺之称。

歌词道出对母爱的歌颂及母爱的伟大,更寄托了黄家驹在母亲节送给母亲最好的祝福,后来随着Beyond所关注的层面的变化,这个“你”的含义就越来越广泛。所以演唱《真的爱你》除了表达一种对母亲爱的歌颂以外,还有一种对社会关注的大爱。

歌曲歌词:

无法可修饰的一对手
带出温暖永远在背后
纵使啰嗦始终关注
不懂珍惜太内疚

沉醉于音阶她不赞赏
母亲的爱却永未退让
决心冲开心中挣扎
亲恩终可报答

春风化雨暖透我的心
一生眷顾无言地送赠
是你多么温馨的目光
教我坚毅望着前路

叮嘱我跌倒不应放弃
没法解释怎可报尽亲恩
爱意宽大是无限
请准我说声真的爱你

无法可修饰的一对手
带出温暖永远在背后
纵使啰嗦始终关注
不懂珍惜太内疚

仍记起温馨的一对手
始终给我照顾未变样
理想今天终于等到
分享光辉盼做到

春风化雨暖透我的心
一生眷顾无言地送赠
是你多么温馨的目光
教我坚毅望着前路

叮嘱我跌倒不应放弃
没法解释怎可报尽亲恩
爱意宽大是无限
请准我说声真的爱你

春风化雨暖透我的心
一生眷顾无言地送赠
是你多么温馨的目光
教我坚毅望着前路

叮嘱我跌倒不应放弃
没法解释怎可报尽亲恩
爱意宽大是无限
请准我说声真的爱你

是你多么温馨的目光(Woo)
教我坚毅望着前路
叮嘱我跌倒不应放弃(Woo)
没法解释怎可报尽亲恩(Woo)
爱意宽大是无限
请准我说声真的爱你(Woo)

[2016.06.16]小哲谈谈神奇的邓巴数字

著名的“邓巴数字”,也就是150定律(Rule Of150),即由英国牛津大学的人类学家罗宾·邓巴(Robin Dunbar)提出。该定律根据猿猴的智力与社交网络推断出:人类智力将允许人类拥有稳定社交网络的人数是148人,四舍五入大约是150人。

从生物学上来说,这取决于人类大脑对于关系的承载能力,当超过150个节点时,大脑皮层将会无法有效的去覆盖这些节点,导致部分节点流失,从而始终保持150节点范围。从每个人有效利用时间来看,一天24小时,除去吃饭睡觉的时间,实际受支配的时间约12小时,即使不用工作学习,每个社交节点仅消耗10分钟,一天也仅能与72个朋友联系,而现实除去工作学习,每天剩余时间甚至不足以维持100人的社交网络。由这个定理,我们得到了一个结论,人的好友上限为150人,来自不同的渠道。

具体的关于邓巴数字的东西,可以去百度百科了解,小哲认为每个人都有个体差异,但是150这个数字可能真的适用于大多数人,翻看下自己的朋友圈和通讯录以及QQ好友列表,也许远不止150这个数字,但各种好友名单里,绝大多数人都可能只是弱连接,一年也联系不了几次,甚至是之前的同学朋友或者同事和客户,大概就此沉底根本没有再次的交集。社交网络给了我们联系,却未必给我们交流;拉近了我们的距离,却未必增加我们的亲密;激发了我们社交的天性,却可能磨平了我们沟通的能力。社交的幸福感来自社交的质量而不是数量,来自于沟通的深度而不是频率。小心,莫让技术令你的人际关系变得越来越扁平和肤浅。

小哲得出一个结论,我们没有必要和这个世界上的每一个人成为朋友,没有必要让所有人都喜欢自己,将自己的时间和精力平均分配给每一位朋友没有意义,做的事情没有必要满足所有人的期许。我们需要明白邓巴数字,了解心理距离同心圆,懂得对身边的人好,有三五至交好友,有自己的兴趣爱好,懂得说不,并且非常明白如何不给别人、更重要的是给自己添麻烦。所以你朋友的友善,只是一种修养,并不意味着承认你在他心中的地位。他的独来独往,仅仅是与你的圈子没有交集而已,并不意味着他没有自己的圈子。从大环境来讲,这是从熟人社会往陌生人社会转变后非常正常的社交适应行为。收获幸福的目的不变,环境变了,当然我们实现的方式会进行调整,很自然。

微软收购领英 Microsoft & LinkedIn

微软在昨天宣布以262亿美元收购职场社交巨头LinkedIn,这可能是这家老牌软件巨头在移动市场失利后,试图通过商业市场来破局的行动——而且从这个角度看确实不失为明智之举。

微软收购LinkedIn只是一个开始,接下来更多新旧巨头将加入到这场互联网诞生以来最大的一次收割和整合中来,比如IBM、甲骨文、谷歌、苹果等,而并购的争夺对象可能包括Salesforce、Twitter、特斯拉、Airbnb、UBER等。

LinkedIn拥有将近1.5亿的月活跃用户,他们是遍布全球大小企业中的职场精英,而微软的大部分收入也来自企业,它的核心直接用户也正是这些职场精英,只不过微软一直没有找到一种有效的方式来建立它和直接用户之间的紧密关系——这让微软擅长的云计算和人工智能等被裹上了一层薄雾——就像Facebook与它的用户之间的关系一样,而LinkedIn则可以帮助它驱散迷雾、实现这一夙愿。

从最理想化的状态讲,微软收购LinkedIn,属于各取所需。

第一,微软,需要一个新的平台,需要分社交网络一杯羹,需要更多的用户使用微软的软件。总之,它需要的太多。之前,从为苹果开发新版Office软件开始,微软正逐渐成为苹果iPhone最好的应用开发者之一。在我看来,微软的根本目的是想变被动为主动,让用户在不使用Windows操作系统的情况下继续依赖微软。而微软收购LinkedIn,则同样希望LinkedIn上的海量用户可以成为微软的用户,并且替微软吸附更多的用户。

第二,LinkedIn,虽然之前有过迅猛的发展,但是最近一段时间却陷入了“瓶颈”状态。LinkedIn的2016年第一季度财报显示,LinkedIn净亏损为4580万美元,每股亏损为35美分。而年初,LinkedIn的股价更是曾经暴跌甚至被腰斩。被微软收购,至少可以从声势上为LinkedIn缓解一下当前的紧张局势。

以上两点,是比较理想的结果。

但是,理想不同于现实。即便将LinkedIn收入囊中,微软的社交网络之路也并不好走!

首先,LinkedIn是职场社交网站,并非纯粹的社交网站。其目标虽然“精准”,但有些“固化”。它所面临的竞争压力很大,因为除了新生的职场社交网站以外,Facebook这样的巨头同样可以推出招聘业务。

第二,LinkedIn的业务是为企业招聘服务,营收依赖于企业。但是,这个市场极易饱和,甚至有可能会萎缩。所以,由于性质的局限,LinkedIn的业务扩张、营收可能很难再有巨大的突破。“天花板”迟早会来临。

第三,微软能帮助LinkedIn蜕变为更强大的社交网站吗?这是个问题。我想,微软收购LinkedIn的目的不仅仅是继续让它做一个职场社交网站。像Facebook一样,这应该是微软的目标。但是,不管是LinkedI本身,还是微软,他们有这样的能力吗?

第四,历史证明,微软很难有成功的交易。这一次,收购LinkedI能成为例外吗?失败的收购历史,或许就是一种企业文化。

第五,市场并不看好微软。收购的消息传出后,LinkedI的股价大涨。但是,微软的股价却下跌2.6%。看上去,市场并不怎么看好微软。

第六,微软此次收购,需要通过新发债券来融资。这样的话,会增加微软的资产负债。而收购之后,LinkedI的亏损会让微软的业绩变得难看,甚至会影响微软的股市表现。

第七,微软会不会真的让LinkedI独立发展,这是个很重要的问题。

通过以上几点看,微软收购LinkedI的前途肯定会很坎坷。

不过,这是个LinkedI重生的机会,也是微软更加强大的机会,如果二者好好珍惜、好好把握,美好的前景还是可以期待的。

虽然将LinkedIn收入囊中,但微软的社交网络之路并不好走!最后,引用一句LinkedIn CEO杰夫·维纳的一句话,祝他们二者好运吧:“今天的声明,即LinkedIn将与微软合并,将是我们共同旅程的下一步。这将是实现我们使命和愿景过程中的下一块踏脚石。而作为公司的CEO,这也将是我一生中最伟大职业体验的下一篇章。”

[2016.05.12]小哲谈谈奇妙的安慰剂效应

小哲今天来谈谈“安慰剂效应”,这个1955年由毕阙博士提出的理论迫使我们反思治疗虚无主义,善意的谎言,安慰剂治疗能否用于临床等哲学问题。同时,与之相对应的是反安慰剂效应,即病人不相信治疗有效,可能会令病情恶化。安慰剂效应并不是由所服用的药物引起的,而是基于病人心理上对康复的期望。对此效应的大小,研究仍存在争议。

安慰剂效应有时候真的很有效果,在某些情况下,小的病痛真的可以通过非常相信的药给治好,但万万东西本身并没有治病的作用,在医学上的“安慰剂效应”,指的是在不让病人知情的情况下服用完全没有药效的假药,但病人却得到了和真药一样甚至更好的效果。这种似是而非的现象在医学和心理学研究中都并不鲜见。在治疗痴呆症、抑郁症及其他认知或精神病症的药物进行药物试验时,一组病人服用真药,另一组病人服用糖丸,结果很难判断药物是否有效,因为安慰剂效应太强了。由此,不少医生在对病人进行治疗时,不得不将这种“安慰剂效应”考虑进去。

小哲一直就觉得百事可乐可以治疗感冒,而且屡试不爽,这和安慰剂作用可能也有一定的关系吧!人们在刷牙的时候,其实牙膏里的薄荷是没有清洁作用的,薄荷带来的清凉其实和辣椒带来的辣感一样,不是味觉而是一直对口腔刺激的触觉,这种感觉让人以为口腔清洁有效了,最终人们也慢慢的习惯了这种东西,说不定还真有口气清新让人舒适的作用。可能薄荷牙膏的例子不太适用于解释安慰剂效应,但是小哲还是觉得安慰剂效应的存在确实提醒我们在考虑问题的时候该多一种思维方式吧!例如人们崇拜专家、名医,信赖所谓的好药、贵药、进口药等也是“安慰剂效应”在起作怪。

安慰剂效应的具体科学原理是这样的,早期的研究发现,如果用化学药物阻断患者大脑内的内啡肽(一种天然的镇痛剂)分泌,就可以部分阻断安慰剂效应。之后的大脑扫描显示,很多种神经传递因子在起作用,其中很多与阿片和大麻的作用机制一致。也有研究显示,多巴胺(一种影响情感和愉悦、奖赏的化学分子)的分泌会受到安慰剂的影响。去年的一项研究发现,分泌多巴胺的一个基因会影响安慰剂的效果。携带有这种基因的人群更容易受安慰剂影响而获得症状缓解。

小哲最后总结,安慰剂效应的存在是值得我们深思的一个问题,在查询资料的过程中,小哲发现这个效应不仅仅是在医学范畴之中,在心理学、哲学等范畴都有它的存在的意义,所以了解这个效应还是很有必要的。

微信公众平台开发接口PHP SDK完整版

[php]
<?php
/*
来自互联网仅供参考。
小哲部落格 www.yedapi.com
*/

define("TOKEN", "weixin");

$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET[‘echostr’])) {
$wechatObj->responseMsg();
}else{
$wechatObj->valid();
}

class wechatCallbackapiTest
{
//验证签名
public function valid()
{
$echoStr = $_GET["echostr"];
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if($tmpStr == $signature){
echo $echoStr;
exit;
}
}

//响应消息
public function responseMsg()
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)){
$this->logger("R \r\n".$postStr);
$postObj = simplexml_load_string($postStr, ‘SimpleXMLElement’, LIBXML_NOCDATA);
$RX_TYPE = trim($postObj->MsgType);

if (($postObj->MsgType == "event") && ($postObj->Event == "subscribe" || $postObj->Event == "unsubscribe")){
//过滤关注和取消关注事件
}else{

}

//消息类型分离
switch ($RX_TYPE)
{
case "event":
$result = $this->receiveEvent($postObj);
break;
case "text":
if (strstr($postObj->Content, "第三方")){
$result = $this->relayPart3("http://www.fangbei.org/test.php".’?’.$_SERVER[‘QUERY_STRING’], $postStr);
}else{
$result = $this->receiveText($postObj);
}
break;
case "image":
$result = $this->receiveImage($postObj);
break;
case "location":
$result = $this->receiveLocation($postObj);
break;
case "voice":
$result = $this->receiveVoice($postObj);
break;
case "video":
$result = $this->receiveVideo($postObj);
break;
case "link":
$result = $this->receiveLink($postObj);
break;
default:
$result = "unknown msg type: ".$RX_TYPE;
break;
}
$this->logger("T \r\n".$result);
echo $result;
}else {
echo "";
exit;
}
}

//接收事件消息
private function receiveEvent($object)
{
$content = "";
switch ($object->Event)
{
case "subscribe":
$content = "欢迎关注方倍工作室 ";
$content .= (!empty($object->EventKey))?("\n来自二维码场景 ".str_replace("qrscene_","",$object->EventKey)):"";
break;
case "unsubscribe":
$content = "取消关注";
break;
case "CLICK":
switch ($object->EventKey)
{
case "COMPANY":
$content = array();
$content[] = array("Title"=>"方倍工作室", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
break;
default:
$content = "点击菜单:".$object->EventKey;
break;
}
break;
case "VIEW":
$content = "跳转链接 ".$object->EventKey;
break;
case "SCAN":
$content = "扫描场景 ".$object->EventKey;
break;
case "LOCATION":
$content = "上传位置:纬度 ".$object->Latitude.";经度 ".$object->Longitude;
break;
case "scancode_waitmsg":
if ($object->ScanCodeInfo->ScanType == "qrcode"){
$content = "扫码带提示:类型 二维码 结果:".$object->ScanCodeInfo->ScanResult;
}else if ($object->ScanCodeInfo->ScanType == "barcode"){
$codeinfo = explode(",",strval($object->ScanCodeInfo->ScanResult));
$codeValue = $codeinfo[1];
$content = "扫码带提示:类型 条形码 结果:".$codeValue;
}else{
$content = "扫码带提示:类型 ".$object->ScanCodeInfo->ScanType." 结果:".$object->ScanCodeInfo->ScanResult;
}
break;
case "scancode_push":
$content = "扫码推事件";
break;
case "pic_sysphoto":
$content = "系统拍照";
break;
case "pic_weixin":
$content = "相册发图:数量 ".$object->SendPicsInfo->Count;
break;
case "pic_photo_or_album":
$content = "拍照或者相册:数量 ".$object->SendPicsInfo->Count;
break;
case "location_select":
$content = "发送位置:标签 ".$object->SendLocationInfo->Label;
break;
default:
$content = "receive a new event: ".$object->Event;
break;
}

if(is_array($content)){
if (isset($content[0][‘PicUrl’])){
$result = $this->transmitNews($object, $content);
}else if (isset($content[‘MusicUrl’])){
$result = $this->transmitMusic($object, $content);
}
}else{
$result = $this->transmitText($object, $content);
}
return $result;
}

//接收文本消息
private function receiveText($object)
{
$keyword = trim($object->Content);
//多客服人工回复模式
if (strstr($keyword, "请问在吗") || strstr($keyword, "在线客服")){
$result = $this->transmitService($object);
return $result;
}

//自动回复模式
if (strstr($keyword, "文本")){
$content = "这是个文本消息";
}else if (strstr($keyword, "表情")){
$content = "中国:".$this->bytes_to_emoji(0x1F1E8).$this->bytes_to_emoji(0x1F1F3)."\n仙人掌:".$this->bytes_to_emoji(0x1F335);
}else if (strstr($keyword, "单图文")){
$content = array();
$content[] = array("Title"=>"单图文标题", "Description"=>"单图文内容", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
}else if (strstr($keyword, "图文") || strstr($keyword, "多图文")){
$content = array();
$content[] = array("Title"=>"多图文1标题", "Description"=>"", "PicUrl"=>"http://discuz.comli.com/weixin/weather/icon/cartoon.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
$content[] = array("Title"=>"多图文2标题", "Description"=>"", "PicUrl"=>"http://d.hiphotos.bdimg.com/wisegame/pic/item/f3529822720e0cf3ac9f1ada0846f21fbe09aaa3.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
$content[] = array("Title"=>"多图文3标题", "Description"=>"", "PicUrl"=>"http://g.hiphotos.bdimg.com/wisegame/pic/item/18cb0a46f21fbe090d338acc6a600c338644adfd.jpg", "Url" =>"http://m.cnblogs.com/?u=txw1958");
}else if (strstr($keyword, "音乐")){
$content = array();
$content = array("Title"=>"最炫民族风", "Description"=>"歌手:凤凰传奇", "MusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3", "HQMusicUrl"=>"http://121.199.4.61/music/zxmzf.mp3");
}else{
$content = date("Y-m-d H:i:s",time())."\nOpenID:".$object->FromUserName."\n技术支持 方倍工作室";
}

if(is_array($content)){
if (isset($content[0])){
$result = $this->transmitNews($object, $content);
}else if (isset($content[‘MusicUrl’])){
$result = $this->transmitMusic($object, $content);
}
}else{
$result = $this->transmitText($object, $content);
}
return $result;
}

//接收图片消息
private function receiveImage($object)
{
$content = array("MediaId"=>$object->MediaId);
$result = $this->transmitImage($object, $content);
return $result;
}

//接收位置消息
private function receiveLocation($object)
{
$content = "你发送的是位置,经度为:".$object->Location_Y.";纬度为:".$object->Location_X.";缩放级别为:".$object->Scale.";位置为:".$object->Label;
$result = $this->transmitText($object, $content);
return $result;
}

//接收语音消息
private function receiveVoice($object)
{
if (isset($object->Recognition) && !empty($object->Recognition)){
$content = "你刚才说的是:".$object->Recognition;
$result = $this->transmitText($object, $content);
}else{
$content = array("MediaId"=>$object->MediaId);
$result = $this->transmitVoice($object, $content);
}
return $result;
}

//接收视频消息
private function receiveVideo($object)
{
$content = array("MediaId"=>$object->MediaId, "ThumbMediaId"=>$object->ThumbMediaId, "Title"=>"", "Description"=>"");
$result = $this->transmitVideo($object, $content);
return $result;
}

//接收链接消息
private function receiveLink($object)
{
$content = "你发送的是链接,标题为:".$object->Title.";内容为:".$object->Description.";链接地址为:".$object->Url;
$result = $this->transmitText($object, $content);
return $result;
}

//回复文本消息
private function transmitText($object, $content)
{
if (!isset($content) || empty($content)){
return "";
}

$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), $content);

return $result;
}

//回复图文消息
private function transmitNews($object, $newsArray)
{
if(!is_array($newsArray)){
return "";
}
$itemTpl = " <item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>
";
$item_str = "";
foreach ($newsArray as $item){
$item_str .= sprintf($itemTpl, $item[‘Title’], $item[‘Description’], $item[‘PicUrl’], $item[‘Url’]);
}
$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>%s</ArticleCount>
<Articles>
$item_str </Articles>
</xml>";

$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), count($newsArray));
return $result;
}

//回复音乐消息
private function transmitMusic($object, $musicArray)
{
if(!is_array($musicArray)){
return "";
}
$itemTpl = "<Music>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<MusicUrl><![CDATA[%s]]></MusicUrl>
<HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
</Music>";

$item_str = sprintf($itemTpl, $musicArray[‘Title’], $musicArray[‘Description’], $musicArray[‘MusicUrl’], $musicArray[‘HQMusicUrl’]);

$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[music]]></MsgType>
$item_str
</xml>";

$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());
return $result;
}

//回复图片消息
private function transmitImage($object, $imageArray)
{
$itemTpl = "<Image>
<MediaId><![CDATA[%s]]></MediaId>
</Image>";

$item_str = sprintf($itemTpl, $imageArray[‘MediaId’]);

$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[image]]></MsgType>
$item_str
</xml>";

$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());
return $result;
}

//回复语音消息
private function transmitVoice($object, $voiceArray)
{
$itemTpl = "<Voice>
<MediaId><![CDATA[%s]]></MediaId>
</Voice>";

$item_str = sprintf($itemTpl, $voiceArray[‘MediaId’]);
$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[voice]]></MsgType>
$item_str
</xml>";

$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());
return $result;
}

//回复视频消息
private function transmitVideo($object, $videoArray)
{
$itemTpl = "<Video>
<MediaId><![CDATA[%s]]></MediaId>
<ThumbMediaId><![CDATA[%s]]></ThumbMediaId>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
</Video>";

$item_str = sprintf($itemTpl, $videoArray[‘MediaId’], $videoArray[‘ThumbMediaId’], $videoArray[‘Title’], $videoArray[‘Description’]);

$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA]></MsgType>
$item_str
</xml>";

$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());
return $result;
}

//回复多客服消息
private function transmitService($object)
{
$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[transfer_customer_service]]></MsgType>
</xml>";
$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time());
return $result;
}

//回复第三方接口消息
private function relayPart3($url, $rawData)
{
$headers = array("Content-Type: text/xml; charset=utf-8");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $rawData);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}

//字节转Emoji表情
function bytes_to_emoji($cp)
{
if ($cp > 0x10000){ # 4 bytes
return chr(0xF0 | (($cp & 0x1C0000) >> 18)).chr(0x80 | (($cp & 0x3F000) >> 12)).chr(0x80 | (($cp & 0xFC0) >> 6)).chr(0x80 | ($cp & 0x3F));
}else if ($cp > 0x800){ # 3 bytes
return chr(0xE0 | (($cp & 0xF000) >> 12)).chr(0x80 | (($cp & 0xFC0) >> 6)).chr(0x80 | ($cp & 0x3F));
}else if ($cp > 0x80){ # 2 bytes
return chr(0xC0 | (($cp & 0x7C0) >> 6)).chr(0x80 | ($cp & 0x3F));
}else{ # 1 byte
return chr($cp);
}
}

//日志记录
private function logger($log_content)
{
if(isset($_SERVER[‘HTTP_APPNAME’])){ //SAE
sae_set_display_errors(false);
sae_debug($log_content);
sae_set_display_errors(true);
}else if($_SERVER[‘REMOTE_ADDR’] != "127.0.0.1"){ //LOCAL
$max_size = 1000000;
$log_filename = "log.xml";
if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
file_put_contents($log_filename, date(‘Y-m-d H:i:s’)." ".$log_content."\r\n", FILE_APPEND);
}
}
}
?>
[/php]