支付宝无线商户接入遇到的问题总结

最近我在为“星点无线”产品增加手机支付功能,支付当然首先想到的是支付宝,而且也在其他类似无线产品里看到集成支付宝应用。

首先在支付宝无线商户平台里签约,我们分别签了“手机网页支付”和“手机应用内支付”,所在行业的费率会有所不同,请根据实际情况选择,“手机网页支付”和“手机应用内支付”的费率也不同,“手机应用内支付”低一些。

最开始,我只想简单一点,在iOS应用里内嵌Web,采用手机网页支付,服务器端是用PHP,手机网页支付,采用MD5和RSA两种签名方式,MD5相对简单,但安全性不如RSA,我最开始测试MD5,而且之前在网站上集成支付宝,也没啥问题,开始是比较顺利的,到支付宝支付时,支付宝默认选择了短信支付方式(可能和我们签约的分类有关),也就是支付宝会通过手机短信发送一个验证码,然后回复验证码,支付宝再会发送一个短信,短信里包含一个URL,点击这个URL,会提示支付完成,然后转到我们网站的回调地址,我方程序完整成个订单,但支付宝提供的这个URL,有时候打开会报错误,而且也不是每次都错,非常的奇怪,更大的问题是在成功后回调我服务器程序时报签名不对,我仔细检查了配置,没有问题,只能一点点排错,最后发现支付宝提供的Demo包里alipay_function.php的para_filter方法有问题,这个方法会漏掉回传的out_trade_no参数,非常的奇怪,只有修改这个方法为

function para_filter($parameter) {
  $para = array();
  foreach ($parameter as $key=>$val) {
    if($key == "sign" || $key == "sign_type" || $val == "") {
      continue;
    } else {
      $para[$key] = $parameter[$key];
    }
  }
  return $para;
}

签名问题解决,但由于短信支付最后这个URL的诡异表现,我为此专门询问支付宝客户支持,得到的回答是他们也发现这个问题,但不知道是什么原因造成的,技术也解决不了,竟然也有支付宝解决不了的问题啊!

这个问题不能解决,确实对用户的体验不太好,我只能选择“手机应用内支付”,支付宝提供了iOS的集成代码,文档也算详尽,但iOS的签名采用RSA,所以在服务器端先要改为RSA的(RSA的alipay_function.php para_filter方法有同样的问题),生成公钥、私钥的方法在文档里比较清楚,就是注意上传商户公钥时一定要删除文件头“—–BEGIN PUBLIC KEY—–”与文件尾“—–END PUBLIC KEY—–”还有空格、换行,变成一行字符串并保存为TXT文件,商户私钥在PHP程序不需要转为PKCS8格式,而在其他语言里(比如Objective-C)需要转为PKCS8格式,并在iOS应用里设置plist文件中RSA private key变量时,要把PKCS8格式私钥的换行和头尾的“—–BEGIN PRIVATE KEY—–”与“—–END PRIVATE KEY—–”删除。

在iPhone真机调试过程中,跳到支付宝应用时报签名错误,我又仔细检查了好几遍,确定没什么问题,后来在支付宝的指导下先测试运行他们提供的Demo程序,没有问题,说明签名密钥没问题,肯定是要签名的数据有问题,我对比了一下发现AlixPayOrder中的productDescription不能为空,也就是传输数据中的body变量不能为空,终于完成了无线支付的集成。

支付宝提供的文档还算比较全面,但有些地方还是有些含糊,如果是iOS集成的话,先测试它提供的Demo程序,以确定密钥的正确性,仔细调试,记录Log,还是比较容易集成的。

面对乞讨儿童

我每天上下班往返于上海浦西浦东,乘坐地铁2号线,近期发现2号线上带小孩乞讨的非常多,基本上每周都会碰到。

之前偶尔也能碰到带小孩乞讨的,我基本选择沉默,也不给他们钱,但看到抱在怀里熟睡的孩子,看到他们露在外面的小手,我总会想哭,孩子们应该享受美好的童年,应该被爸爸妈妈呵护,但现在可能是被拐骗,变成了赚钱的工具,甚至是被犯罪集团控制。

我终于忍无可忍了,决定要采取行动,帮助解救这些孩子,首先我准备每看到这样的情况就用手机拍下来,在新浪微博上有一个@随手拍照解救乞讨儿童的微博,我把照片@给它,但是给我的回复基本是“请马上报警”,昨晚我乘坐2号线回家,在龙阳路上来一对男女,女的身上背着一个小孩,大概是个男孩,1-2岁的样子,开始乞讨,从我前面走过之后,我就拨了110,将情况告知警方,110说警察马上会到,更让我意外的是就在我报警之后,竟然又有2拨带小孩乞讨的上来,一个是女的,孩子抱在怀里,由于看到前一拨可能不远,坐了一站就下了,后来的一个也是女的,拉这一个小孩,大概3岁,一路地铁运行很正常,乞讨者在流动,最后我也不知道警察是否采取了行动。

根据我的观察,乞讨者多出现与晚上8点以后,地铁上人较少,可以走动,在上下班高峰时间很少碰到,由于地铁处于运动状态,人员流动性太大,对于报警后处置带来很大的难度,所以我很希望上海警方能针对此问题展开转向行动,解救被拐儿童,让宝贝回家。

根据法律规定,就算是自己亲生子女,带出来乞讨也是违法的,与这些非法犯罪活动做斗争,其实就是保护我们自己的孩子,但我也希望政府、执法者能真的负起责任,我们这个国家,如果连保护妇女儿童都保护不了,何谈幸福?何谈民生?

以下是我最近在地铁里拍到的带小孩乞讨的照片,由于是用手机拍的,所以比较模糊,而且有些没有拍到正面。

 

 

 

后面2天又碰到带小孩乞讨的,注意这个带红帽子的小孩,我就碰到了3次

  

最新进展,今天(2011-12-22)在微博上,上海警方对于轨道交通乞讨儿童的问题做出了回应

http://weibo.com/2493592183/xDceptVjv

我的评论是:

感谢@警民直通车-上海 @lamesaint 对于轨道交通内乞讨儿童问题的回应,但是能否用未成年人保护法来保障这些儿童的权益,普通市民对于这样的现象该如何提供帮助?

2012-12-23,新闻《沪警方整治轨交流浪乞讨 部分职业乞丐月入过万》

读乔布斯传

读完乔布斯传已经有一段时间了,从当时以沉重的心情读完最后一页到现在这段时间,我一直在思考,乔布斯是如何让苹果如此的成功?

这本传记是唯一一本乔布斯授权的传记,总体来看,比较清楚的描绘了乔布斯这个人,他从为人上来说绝对算不上高尚,甚至有些刻薄,但这并不是最重要的,我思考的是为什么他能够真正的改变世界。

机遇,如果没有他的合伙人沃兹,不可能有苹果的诞生,不可能有第一桶金,当然也是因为个人电脑的时代,特别是有了Apple II,可以让乔布斯在Macintosh上折腾,Macintosh有划时代的意义,但在商业上并不太成功。

挫折与基石,从某种意义上来说,乔布什出走苹果后的NeXT公司的NeXTSTEP系统,是现在Mac OS/iOS的基石,奠定了这10几年来的高速发展的基础,我在做iOS开发时,越来越感觉,这套体系,绝对不是一朝一夕能做出来的,确实是需要长时间的积累,正是苹果这么多年来的积累,才造就了现在iOS的辉煌。

人才,“你要么是天才,要么是笨蛋”,这是乔布斯看人的原则,也就是说没有中间层的人。在苹果,汇集了世界级的顶尖人才,使得创新、创想变成了现实。

至简,从简单到复杂容易,但由复杂到简单,而且是极其的简单,才是真正的难,乔布斯善于由繁到简,而且极其准确。

远见,乔布斯总能比别人多看到未来几年,能使其产品领导世界电子消费品的时尚潮流,这一点,是学不来的,只能说这种眼光与思维,是与生俱来的。

可以说,这个世界,在一段时间里很难再出现乔布斯一样的人物,中国有些人刻意模仿乔布斯,甚至提出要培养乔布斯式人才,这让人觉得非常可笑,乔布斯与苹果的成功,有偶然也有必然,只有伟大的创新才是前进的源泉。

星点无线1.5

今天,星点无线1.5已经通过App Store的审核,上架了,地址在http://itunes.apple.com/cn/app/id448294946?mt=8,也可以在App Store里搜索“星点无线”或是“StarryMobile”找到这个应用。

星点无线1.5的主要改变有
全新UI设计
支持iOS5
更加舒适的用户体验
提高运行速度与稳定性
支持调查任务筛选与优惠券排序
增加信息推送功能
修复优惠券显示文字高度的BUG

星点无线1.0和1.1的原始程序是我们找外包团队开发的,1.0和1.1发布时,我已经修改了其中很多的代码,在我们设计1.5的功能时,我觉得,不能在1.0/1.1的基础上改了,老版本存在许多的问题,特别是在性能及内存使用方面有很多不足,代码整体质量不高,我准备重写1.5版本,来个干净彻底,我是10.1假期之后开始重写,在美工设计的配合下,到10月底完成了这个版本,期间iOS5正好发布,这个工程也转到iOS5下开发。

 

 

星点调查 for iPad

星点调查 for iPad已在10月6日通过App Store的审核,上线了,星点调查是一款依托与星点调查平台的调研终端工具,支持多种调查题型,可以帮助商业用户快速进行调研数据收集,有兴趣的朋友可以下载使用:http://itunes.apple.com/us/app/id467284642?mt=8

星点调查是我独立编写的iOS程序,并且是建立在星点调查开放平台之上(http://open.starrysurvey.com/),因此验证了星点调查开放平台可以方便的为企业灵活构建调查业务。

  

缅怀Steve Jobs

今天早上惊闻Steve Jobs辞世的消息,虽然知道乔帮主健康状况一直不好,也知道这一天迟早会到来,但这一天真的到来时,不免让人惆怅。

Steve Jobs 1955-2011

对于Steve给Apple,Apple给全世界带来的变革大家都已说的很多,只能说Steve是真正的天才,是这个时代变革的领导者,而今天,他的这个伟大时代终结了,我只能回忆使用Apple产品的点滴,来缅怀这位伟人。

在我上小学的时候,我爸爸单位就有一台基本闲置的Apple II型电脑,我清楚的记得放了学跑到爸爸单位用它来打游戏,我玩的几个游戏有“十项全能”、“赛车”、“忍者”、“挖金子”,其中“挖金子”游戏玩的最好,这个游戏在后来的任天堂游戏机上也有,如今我还记得那个墨绿屏幕上一闪一闪的小人,后来我用这台电脑编写BASIC程序,也可以说,我的编程启蒙就是从这里开始的,到了90年代,PC机开始一统天下,Apple在我的记忆中渐渐远去了,直到98年我开始上网,认识了一些做广告设计的网友,他们公司里都是用Apple电脑,很大的显示器,是使用SONY特丽珑显像管,色彩逼真,但对于它的单键鼠标,却感觉很奇怪,后来我很好的一个网友小姑娘,她自己用一台当时刚上市的G3,就是那个半透明机身的一体机,也就是最早的iMac,感觉好神奇,另一个做设计公司的网友,则购买的G4,当时Apple虽然够酷,但确感觉还是比较小众。

21世纪,Apple开始进入辉煌,iPod、iPhone、iPad一连串的创新产品,引领着消费电子产品的方向,2009年,我开始使用iPhone,2010年,我购买了MacBook Pro作为我的工作电脑,同在2010年,又购买了iPad,如今我在编写iPhone、iPad上的程序,就是现在,我使用着MacBook Pro来书写这篇Blog。

Steve Jobs的时代就要远去,但希望Steve Jobs的精神能永存与Apple,在未来能给我们带来充满无尽想象的产品,乔帮主一路走好!

从宝宝生病说起

10月2日,宝宝再次因急性肠胃炎去看病,医院是离我们相对较近的上海儿科医院,小孩不生病是不可能的,所以儿科医院也是去了很多次了,首先是挂号,我们大概早上不到10点到的医院,为了减少等待时间,我挂的特需门诊,儿科医院特需门诊的挂号费是每次80元,我们的序号是35,相对来说,看特需门诊的人还是少些,但就这样,等我们看到的时候,已经是11点10分左右了,看病的过程比较简单,5分钟以内,基本能确定是肠胃炎,就开了吊针,同时要验一下血,然后我就去缴费,拿药(大概120多元),宝宝他们先去验血,然后直接到输液室等我,我拿药到输液室,交了药,同样需要排队等待,这段时间里,我拿了化验单给医生看了一下,确实是白细胞高,有炎症,由于药只开了一天,叮嘱明天还要来看,这个医生明天还在,回到输液室,等了大概1个小时,宝宝才打上针,总共2瓶,第1瓶100ml,是氯化钠注射液+头孢曲松钠-罗氏芬,第二瓶是250ml,主要是葡萄糖、氯化钾、维生素B6,应该是因为宝宝没有吃饭补充的营养成分,本想打好吊针就回家,但就在第一瓶100ml的注射液输完的时候,发现宝宝脸上出现小疙瘩,然后整个脸部发红,我们觉得有些不对,马上叫值班医生,医生看了之后,确定应该是过敏反应,马上就给我开了开瑞坦和一个药膏,开瑞坦口服,药膏外敷,说如果不严重不需要打针,当我拿了 药回来之后,宝宝脸上已经起了大片的皮疹,同时非常红,我觉得不对,还是叫来医生,医生叫我们去她办公室里,当面让我们把药给宝宝服下,同时把药膏敷在脸上,再看看身上是否也出了皮疹,当时身上没有出皮疹,我们就从办公室出来,在外面的床上让宝宝躺着,但过了一会皮疹没有下去的迹象,同时身上也有几个小包出现了,我觉得还不行,马上再叫医生,当时我已经紧张的不行了,感觉身体发软,医生过来看了一下,就让我们去抢救室,让护士马上注射抗过敏药物,并且注射100ml氯化钠,冲一下,此后,宝宝的过敏症状才开始逐步缓解,并睡了一小觉,抢救室护士期间记录此次药物不良反应,复印了病例,我们等宝宝醒了,去给医生看了一下之后,确定没什么问题,我们终于回家了,到家已经4点多了。

宝宝不是过敏性体质,而且以前用头孢和青霉素也没有出过不良反应,就是罗氏芬之前也用过,不过当时肌肉注射,不是静脉注射,照理来说罗氏芬应该是比较好的抗生素,为此我在网上搜了一下,发现头孢曲松纳–罗氏芬的不良反应还是有明确说明的:

头孢曲松钠国家药品不良反应监测中心病例报告数据库统计显示,抗感染药不良事件报告比例接近总体报告的50%;头孢曲松钠不良事件报告总数、严重报告数量在抗感染药中均占较高比例,死亡病例报告数量位居抗感染药首位。为此,国家食品药品监督管理局日前召开新闻发布会,专门对头孢曲松钠的临床不合理使用提出警示。

第二天,也就是10月3号,再次去儿科医院复诊,这次去的早,7点多就出门了,但到了医院已经是排起长队拿号,我和宝宝的妈妈、爷爷、奶奶协同作战,挂了还是昨天医生的特需门诊,第5号,医生看了昨天的过敏反应记录,不敢再用罗氏芬,换了阿奇霉素,再打一天吊针,并开了一些口服药,药费170多,打完吊针11点回到家,宝宝的状态也好了很多,开始蹦蹦跳跳了。

其实小孩子生病是常事,但这次如此让我紧张,让我思考了一下中国医疗的问题。

首先是花费,这两天,挂号费、药费、停车费等等乱七八糟加在一起,要600元以上了,而且药费中医保已承担一部分了,虽然大部分人还是选择普通门诊,但要花费大量的时间等待,真正看病的时间估计也就是几分钟。看个感冒要花几百块,中国的老百姓,真的看不起病。

其次,医疗资源分配极不合理,国家总是宣传首诊在社区,但实际情况就是社区医院(包括一些内地医院)的技术水平实在不行,看不好病不说,有时候还把病情给耽误了,这次在儿科医院就碰到家长凌晨5点开车从嘉兴过来,就看个感冒,说是在嘉兴看不好,就是我们宝宝的肠胃炎,在社区门诊我想也应该能处理,但现在大家都不太信任社区医院,大量患者不管是大病小病,全往大医院跑,大医院里人满为患(假期时儿科医院里草坪上都是躺的从外第来的患儿家属),医生护士每天看这么多人,服务质量一定下降,患者看病时感觉没有尊严。如果能把优质的医疗资源放在基层社区和农村,同时把一些口碑好的民营医院纳入医保,大医院的紧张状况是可以缓解的。

再有就是,医生现在诊断依赖仪器,我老婆说现在看病这套路她都会了,说来了就是验血、做B超、打吊针;医生的责任心大大的下降,抗生素滥用,这个严重的后果我们总有一天会承受;医院已经是搂钱的耙子,但很多时候,你不交钱就是不给你看。

另一个让我、我爸妈对宝宝生病紧张的原因,是因为我小时候曾经得过的一场大病,也可以比较一下这30多年来中国医疗环境的变化。

我大概10个月的时候得了脑膜炎,谁都知道这个病不是闹着玩的,如果治疗不及时,可能会在数小时内死亡或造成永久性的脑损伤,算我命大,一切都好,但整个治疗的过程让我爸妈是记忆犹新,他们总和我说,是因为碰到了那个年代与好的医生,那大概是78年春节的时候,中国西部城市兰州,当时中国社会,优质的医疗资源都在基层,给我主治的医生原来是北京儿童医院的医生,认真负责,当时我注射激素后,出现大片水痘,她急得不行,连夜去查阅大量相关资料,找治疗方法,让我安然脱险;我入院时正是过年前,医院里都在分年货,得知我这个危重病人,马上放下手里的东西,投入救治;由于需要一种药,父母的同事朋友,在临晨3-4点时,四处寻找,终于找到药品,用单位的卡车送到医院(那时没有出租车,更没有私家车);为了治好我,医生、护士、朋友投入了大量的努力,我需要感谢的人太多了…但是今天,我不知道是否还有不收红包的医生,是否还有为了一线救治希望也要坚持到底的医生?

我的主治医生,已经70多岁了,现在居住在苏州,她是治疗儿童哮喘方面的专家,虽已退休,但现在每周还会开2-3天的专家门诊,等有空时,我一定要带上宝宝去看看我的这个救民恩人。

在中国,如果你是一个好医生,你一定会得到所有人的尊重!

星点无线

星点无线-StarryMobile是一个免费的iPhone应用程序,通过完成基于地理位置的调查任务,可以获得积分或相关优惠券,用户可以方便的管理与使用获得优惠券,或将积分兑换为奖品。

这个产品是我们公司开发的,我编写了其中很大一部分代码,也是我对iOS开发的第一次实践,在后面将不断增加新的功能,并与我们的星点网(www.xingdian.com)有更好的整合。

欢迎大家到App Store里下载使用,http://itunes.apple.com/us/app/id448294946?mt=8

 星点无线 星点无线

星点无线 星点无线 星点无线

iPad程序不能正常翻转显示的问题

最近做了一个星点调查的iPad客户端程序,提交App Store审核之后被打回了,说程序只支持纵向显示,在用户翻转之后(即Home键在上面时)也应该能正常显示。

我想只要在shouldAutorotateToInterfaceOrientation方法里加上反向的支持就可以了,即

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait || interfaceOrientation == UIInterfaceOrientationPortraitUpsideDown);
}

但是修改之后,发一些页面没有问题,但有些页面还是不能正常显示,有些情况下翻转屏幕有效,有些情况下不行,我百思不得其解,搜索了大量资料(大多是英文的,中文的几乎没有),但也没有完全能解释清楚的,我只能不算试错,发现似乎是UINavigationController默认情况下不能支持UIInterfaceOrientationPortraitUpsideDown,网上的资料也好像提到这个原因,我仔细检查了一下,我的UINavigationController用法似乎不太对,于是我新建一个类,继承自UINavigationController,重写其shouldAutorotateToInterfaceOrientation方法,使其支持UIInterfaceOrientationPortraitUpsideDown,试了一下,果然好了:)

三亚之行

由于平时工作太忙,已经很久没有出去旅游过了,在老婆的强烈要求下,无论如何要带宝宝出去玩一下,宝宝还没见过大海,所以我们选择了三亚,在中秋假期去玩一下。

几年前我和老婆去过海南,当时是跟团,对于景点有了基本的了解,所以这次选择自由行,不把时间浪费在一些垃圾景点,我们9月8日晚上出发,9月12日晚上回来,8号、9号住在三亚湾的海韵度假酒店,10号、11号住在亚龙湾天域度假酒店,总体上感觉海韵非常的不错,如果不是非要住在亚龙湾的话,海韵是很好的选择,它是新建的酒店,设置、服务都让人满意,天域的设施感觉上就比较旧了,位置基本上处于亚龙湾中部,穿过酒店的花园,就到海边了,住的人挺多的。

本次旅游比较遗憾的是,中间2天都下雨,而且是大雨,天气非常不好,没有了阳光沙滩的味道,期间我们去了一趟非诚勿扰2里面的那个山上的鸟巢度假酒店,但非酒店客人不能参观,走了一下那个索桥,上下山的路上鸟瞰亚龙湾的风景不错,不过比起175的门票价格,还是有些不值。

由于下雨风大,海浪比较高,在亚龙湾的几天都不能到海里游泳,只能挑不下雨的时候在酒店的用泳池里游了游,宝宝倒是在沙滩边挖沙子挖过了瘾,12号这天天气还不错,多云,但我们也要回来啦。


海韵客房里可以看到海景


三亚湾的早晨


三亚湾


还是老外比较奔放


亚龙湾


天域的花园,好像正在布置中秋晚上的自助餐