<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>I@laoer.com &#187; iPhone</title>
	<atom:link href="http://i.laoer.com/tag/iphone/feed" rel="self" type="application/rss+xml" />
	<link>http://i.laoer.com</link>
	<description>技术、生活、感悟 -- Laoer的博客</description>
	<lastBuildDate>Mon, 30 Jan 2012 10:03:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>支付宝无线商户接入遇到的问题总结</title>
		<link>http://i.laoer.com/ms-alipay.html</link>
		<comments>http://i.laoer.com/ms-alipay.html#comments</comments>
		<pubDate>Wed, 18 Jan 2012 08:12:44 +0000</pubDate>
		<dc:creator>Laoer</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[支付宝]]></category>

		<guid isPermaLink="false">http://i.laoer.com/?p=544</guid>
		<description><![CDATA[最近我在为“星点无线”产品增加手机支付功能，支付当然首先想到的是支付宝，而且也在其他类似无线产品里看到集成支付宝应用。 首先在支付宝无线商户平台里签约，我们分别签了“手机网页支付”和“手机应用内支付”，所在行业的费率会有所不同，请根据实际情况选择，“手机网页支付”和“手机应用内支付”的费率也不同，“手机应用内支付”低一些。 最开始，我只想简单一点，在iOS应用里内嵌Web，采用手机网页支付，服务器端是用PHP，手机网页支付，采用MD5和RSA两种签名方式，MD5相对简单，但安全性不如RSA，我最开始测试MD5，而且之前在网站上集成支付宝，也没啥问题，开始是比较顺利的，到支付宝支付时，支付宝默认选择了短信支付方式（可能和我们签约的分类有关），也就是支付宝会通过手机短信发送一个验证码，然后回复验证码，支付宝再会发送一个短信，短信里包含一个URL，点击这个URL，会提示支付完成，然后转到我们网站的回调地址，我方程序完整成个订单，但支付宝提供的这个URL，有时候打开会报错误，而且也不是每次都错，非常的奇怪，更大的问题是在成功后回调我服务器程序时报签名不对，我仔细检查了配置，没有问题，只能一点点排错，最后发现支付宝提供的Demo包里alipay_function.php的para_filter方法有问题，这个方法会漏掉回传的out_trade_no参数，非常的奇怪，只有修改这个方法为 function para_filter&#40;$parameter&#41; &#123; $para = array&#40;&#41;; foreach &#40;$parameter as $key=&#38;gt;$val&#41; &#123; if&#40;$key == &#34;sign&#34; &#124;&#124; $key == &#34;sign_type&#34; &#124;&#124; $val == &#34;&#34;&#41; &#123; continue; &#125; else &#123; $para&#91;$key&#93; = $parameter&#91;$key&#93;; &#125; &#125; return $para; &#125; 签名问题解决，但由于短信支付最后这个URL的诡异表现，我为此专门询问支付宝客户支持，得到的回答是他们也发现这个问题，但不知道是什么原因造成的，技术也解决不了，竟然也有支付宝解决不了的问题啊！ 这个问题不能解决，确实对用户的体验不太好，我只能选择“手机应用内支付”，支付宝提供了iOS的集成代码，文档也算详尽，但iOS的签名采用RSA，所以在服务器端先要改为RSA的（RSA的alipay_function.php para_filter方法有同样的问题），生成公钥、私钥的方法在文档里比较清楚，就是注意上传商户公钥时一定要删除文件头“&#8212;&#8211;BEGIN PUBLIC KEY&#8212;&#8211;”与文件尾“&#8212;&#8211;END PUBLIC KEY&#8212;&#8211;”还有空格、换行，变成一行字符串并保存为TXT文件，商户私钥在PHP程序不需要转为PKCS8格式，而在其他语言里（比如Objective-C）需要转为PKCS8格式，并在iOS应用里设置plist文件中RSA private key变量时，要把PKCS8格式私钥的换行和头尾的“&#8212;&#8211;BEGIN PRIVATE KEY&#8212;&#8211;”与“&#8212;&#8211;END PRIVATE KEY&#8212;&#8211;”删除。 在iPhone真机调试过程中，跳到支付宝应用时报签名错误，我又仔细检查了好几遍，确定没什么问题，后来在支付宝的指导下先测试运行他们提供的Demo程序，没有问题，说明签名密钥没问题，肯定是要签名的数据有问题，我对比了一下发现AlixPayOrder中的productDescription不能为空，也就是传输数据中的body变量不能为空，终于完成了无线支付的集成。 支付宝提供的文档还算比较全面，但有些地方还是有些含糊，如果是iOS集成的话，先测试它提供的Demo程序，以确定密钥的正确性，仔细调试，记录Log，还是比较容易集成的。]]></description>
			<content:encoded><![CDATA[<p>最近我在为“<a title="星点无线" href="http://itunes.apple.com/cn/app/id448294946?mt=8" target="_blank">星点无线</a>”产品增加手机支付功能，支付当然首先想到的是支付宝，而且也在其他类似无线产品里看到集成支付宝应用。</p>
<p>首先在<a title="支付宝无线商户平台" href="https://ms.alipay.com/index.htm" target="_blank">支付宝无线商户平台</a>里签约，我们分别签了“手机网页支付”和“手机应用内支付”，所在行业的费率会有所不同，请根据实际情况选择，“手机网页支付”和“手机应用内支付”的费率也不同，“手机应用内支付”低一些。</p>
<p>最开始，我只想简单一点，在iOS应用里内嵌Web，采用手机网页支付，服务器端是用PHP，手机网页支付，采用MD5和RSA两种签名方式，MD5相对简单，但安全性不如RSA，我最开始测试MD5，而且之前在网站上集成支付宝，也没啥问题，开始是比较顺利的，到支付宝支付时，支付宝默认选择了短信支付方式（可能和我们签约的分类有关），也就是支付宝会通过手机短信发送一个验证码，然后回复验证码，支付宝再会发送一个短信，短信里包含一个URL，点击这个URL，会提示支付完成，然后转到我们网站的回调地址，我方程序完整成个订单，但支付宝提供的这个URL，有时候打开会报错误，而且也不是每次都错，非常的奇怪，更大的问题是在成功后回调我服务器程序时报签名不对，我仔细检查了配置，没有问题，只能一点点排错，最后发现支付宝提供的Demo包里alipay_function.php的para_filter方法有问题，这个方法会漏掉回传的out_trade_no参数，非常的奇怪，只有修改这个方法为</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> para_filter<span style="color: #009900;">&#40;</span><span style="color: #000088;">$parameter</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$para</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$parameter</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$key</span><span style="color: #339933;">=&amp;</span>gt<span style="color: #339933;">;</span><span style="color: #000088;">$val</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$key</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;sign&quot;</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$key</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;sign_type&quot;</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$val</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">&quot;&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">continue</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$para</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$parameter</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$key</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$para</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>签名问题解决，但由于短信支付最后这个URL的诡异表现，我为此专门询问支付宝客户支持，得到的回答是他们也发现这个问题，但不知道是什么原因造成的，技术也解决不了，竟然也有支付宝解决不了的问题啊！</p>
<p>这个问题不能解决，确实对用户的体验不太好，我只能选择“手机应用内支付”，支付宝提供了iOS的集成代码，文档也算详尽，但iOS的签名采用RSA，所以在服务器端先要改为RSA的（RSA的alipay_function.php para_filter方法有同样的问题），生成公钥、私钥的方法在文档里比较清楚，就是注意上传商户公钥时一定要<span style="color: #ff0000;">删除文件头“&#8212;&#8211;BEGIN PUBLIC KEY&#8212;&#8211;”与文件尾“&#8212;&#8211;END PUBLIC KEY&#8212;&#8211;”还有空格、换行，变成一行字符串并保存为TXT文件</span>，商户私钥在PHP程序不需要转为PKCS8格式，而在其他语言里（比如Objective-C）需要转为PKCS8格式，并在iOS应用里设置plist文件中RSA private key变量时，要把PKCS8格式私钥的换行和头尾的“&#8212;&#8211;BEGIN PRIVATE KEY&#8212;&#8211;”与“&#8212;&#8211;END PRIVATE KEY&#8212;&#8211;”删除。</p>
<p>在iPhone真机调试过程中，跳到支付宝应用时报签名错误，我又仔细检查了好几遍，确定没什么问题，后来在支付宝的指导下先测试运行他们提供的Demo程序，没有问题，说明签名密钥没问题，肯定是要签名的数据有问题，我对比了一下发现AlixPayOrder中的productDescription不能为空，也就是传输数据中的body变量不能为空，终于完成了无线支付的集成。</p>
<p>支付宝提供的文档还算比较全面，但有些地方还是有些含糊，如果是iOS集成的话，先测试它提供的Demo程序，以确定密钥的正确性，仔细调试，记录Log，还是比较容易集成的。</p>
]]></content:encoded>
			<wfw:commentRss>http://i.laoer.com/ms-alipay.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>星点无线1.5</title>
		<link>http://i.laoer.com/starrymobile-1-5.html</link>
		<comments>http://i.laoer.com/starrymobile-1-5.html#comments</comments>
		<pubDate>Tue, 08 Nov 2011 09:44:04 +0000</pubDate>
		<dc:creator>Laoer</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://i.laoer.com/?p=504</guid>
		<description><![CDATA[今天，星点无线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下开发。    ]]></description>
			<content:encoded><![CDATA[<p>今天，星点无线1.5已经通过App Store的审核，上架了，地址在<a href="http://itunes.apple.com/cn/app/id448294946?mt=8" target="_blank">http://itunes.apple.com/cn/app/id448294946?mt=8</a>，也可以在App Store里搜索“星点无线”或是“StarryMobile”找到这个应用。</p>
<p>星点无线1.5的主要改变有<br />
全新UI设计<br />
支持iOS5<br />
更加舒适的用户体验<br />
提高运行速度与稳定性<br />
支持调查任务筛选与优惠券排序<br />
增加信息推送功能<br />
修复优惠券显示文字高度的BUG</p>
<p>星点无线1.0和1.1的原始程序是我们找外包团队开发的，1.0和1.1发布时，我已经修改了其中很多的代码，在我们设计1.5的功能时，我觉得，不能在1.0/1.1的基础上改了，老版本存在许多的问题，特别是在性能及内存使用方面有很多不足，代码整体质量不高，我准备重写1.5版本，来个干净彻底，我是10.1假期之后开始重写，在美工设计的配合下，到10月底完成了这个版本，期间iOS5正好发布，这个工程也转到iOS5下开发。</p>
<p><a href="http://i.laoer.com/wp-content/uploads/2011/11/Screenshot-2011.10.31-17.06.51.png"><img class="alignnone size-medium wp-image-505" title="星点无线-StarryMobile" src="http://i.laoer.com/wp-content/uploads/2011/11/Screenshot-2011.10.31-17.06.51-208x300.png" alt="" width="208" height="300" /></a> <a href="http://i.laoer.com/wp-content/uploads/2011/11/Screenshot-2011.10.31-17.00.50.png"><img class="alignnone size-medium wp-image-506" title="星点无线-StarryMobile" src="http://i.laoer.com/wp-content/uploads/2011/11/Screenshot-2011.10.31-17.00.50-208x300.png" alt="" width="208" height="300" /></a></p>
<p><a href="http://i.laoer.com/wp-content/uploads/2011/11/Screenshot-2011.10.31-17.01.34.png"><img class="alignnone size-medium wp-image-507" title="星点无线-StarryMobile" src="http://i.laoer.com/wp-content/uploads/2011/11/Screenshot-2011.10.31-17.01.34-208x300.png" alt="" width="208" height="300" /></a> <a href="http://i.laoer.com/wp-content/uploads/2011/11/Screenshot-2011.10.31-17.18.33.png"><img class="alignnone size-medium wp-image-508" title="星点无线-StarryMobile" src="http://i.laoer.com/wp-content/uploads/2011/11/Screenshot-2011.10.31-17.18.33-208x300.png" alt="" width="208" height="300" /></a></p>
<p><a href="http://i.laoer.com/wp-content/uploads/2011/11/Screenshot-2011.10.31-17.22.05.png"><img class="alignnone size-medium wp-image-509" title="星点无线-StarryMobile" src="http://i.laoer.com/wp-content/uploads/2011/11/Screenshot-2011.10.31-17.22.05-208x300.png" alt="" width="208" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://i.laoer.com/starrymobile-1-5.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>星点无线</title>
		<link>http://i.laoer.com/starrymobile.html</link>
		<comments>http://i.laoer.com/starrymobile.html#comments</comments>
		<pubDate>Fri, 30 Sep 2011 01:00:42 +0000</pubDate>
		<dc:creator>Laoer</dc:creator>
				<category><![CDATA[iOS]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://i.laoer.com/?p=466</guid>
		<description><![CDATA[星点无线-StarryMobile是一个免费的iPhone应用程序，通过完成基于地理位置的调查任务，可以获得积分或相关优惠券，用户可以方便的管理与使用获得优惠券，或将积分兑换为奖品。 这个产品是我们公司开发的，我编写了其中很大一部分代码，也是我对iOS开发的第一次实践，在后面将不断增加新的功能，并与我们的星点网（www.xingdian.com）有更好的整合。 欢迎大家到App Store里下载使用，http://itunes.apple.com/us/app/id448294946?mt=8      ]]></description>
			<content:encoded><![CDATA[<p><a title="星点无线" href="http://itunes.apple.com/us/app/id448294946?mt=8" target="_blank">星点无线-StarryMobile</a>是一个免费的iPhone应用程序，通过完成基于地理位置的调查任务，可以获得积分或相关优惠券，用户可以方便的管理与使用获得优惠券，或将积分兑换为奖品。</p>
<p>这个产品是我们公司开发的，我编写了其中很大一部分代码，也是我对iOS开发的第一次实践，在后面将不断增加新的功能，并与我们的星点网（<a title="星点网" href="http://www.xingdian.com" target="_blank">www.xingdian.com</a>）有更好的整合。</p>
<p>欢迎大家到App Store里下载使用，<a title="App Store - 星点无线" href="http://itunes.apple.com/us/app/id448294946?mt=8" target="_blank">http://itunes.apple.com/us/app/id448294946?mt=8</a></p>
<p><a href="http://i.laoer.com/wp-content/uploads/2011/09/Screenshot-2011.09.19-16.16.05.png"><img class="alignnone size-medium wp-image-467" title="星点无线" src="http://i.laoer.com/wp-content/uploads/2011/09/Screenshot-2011.09.19-16.16.05-200x300.png" alt="" width="200" height="300" /></a> <a href="http://i.laoer.com/wp-content/uploads/2011/09/Screenshot-2011.09.19-16.15.34.png"><img class="alignnone size-medium wp-image-468" title="星点无线" src="http://i.laoer.com/wp-content/uploads/2011/09/Screenshot-2011.09.19-16.15.34-200x300.png" alt="星点无线" width="200" height="300" /></a> <a href="http://i.laoer.com/wp-content/uploads/2011/09/Screenshot-2011.09.21-17.47.35.png"><img class="alignnone size-medium wp-image-469" title="星点无线" src="http://i.laoer.com/wp-content/uploads/2011/09/Screenshot-2011.09.21-17.47.35-200x300.png" alt="星点无线" width="200" height="300" /></a></p>
<p><a href="http://i.laoer.com/wp-content/uploads/2011/09/Screenshot-2011.09.29-17.20.08.png"><img class="alignnone size-medium wp-image-470" title="星点无线" src="http://i.laoer.com/wp-content/uploads/2011/09/Screenshot-2011.09.29-17.20.08-200x300.png" alt="星点无线" width="200" height="300" /></a> <a href="http://i.laoer.com/wp-content/uploads/2011/09/Screenshot-2011.09.29-17.20.38.png"><img class="alignnone size-medium wp-image-471" title="星点无线" src="http://i.laoer.com/wp-content/uploads/2011/09/Screenshot-2011.09.29-17.20.38-200x300.png" alt="星点无线" width="200" height="300" /></a> <a href="http://i.laoer.com/wp-content/uploads/2011/09/Screenshot-2011.09.29-17.22.03.png"><img class="alignnone size-medium wp-image-472" title="星点无线" src="http://i.laoer.com/wp-content/uploads/2011/09/Screenshot-2011.09.29-17.22.03-200x300.png" alt="星点无线" width="200" height="300" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://i.laoer.com/starrymobile.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>终于用上iPhone了</title>
		<link>http://i.laoer.com/use-iphone.html</link>
		<comments>http://i.laoer.com/use-iphone.html#comments</comments>
		<pubDate>Wed, 08 Jul 2009 02:25:40 +0000</pubDate>
		<dc:creator>Laoer</dc:creator>
				<category><![CDATA[生活]]></category>
		<category><![CDATA[iPhone]]></category>

		<guid isPermaLink="false">http://i.laoer.com/?p=362</guid>
		<description><![CDATA[作为IT人，iPhone似乎成了标志，看着朋友同事都用上了iPhone，终于，最近想换手机，我也买了一个iPhone，二代，16G，黑色，美版（因为港版要贵一些），软件是3.0。 iPhone最大的优势在于，它做成了一个平台，大家可以在上面开发小应用，通过Apple iTunes Store发售，开发者、Apple都可以得益，同时可以满足用户在多方面的需求，这是一个非常好的模式。以前的文章里也说过，平台化是互联网的趋势，通过平台可以发掘出无穷的力量，让更多的人参与进来，毕竟一个商业主体所能做的事情是有限的。 在iPhone上装了Facebook、Twitterrific、万年历、金山词霸等等，甚至在安装了WordPress的插件后，可以通过iPhone来写自己的Blog了。 为了保证家里的Wi-Fi稳定，我特意找出了以前一个不用的无线路由器，放在在自己的房间里，我想在不远的将来，3G普及的时候，那就真的是无线互联的的时代了。 唯一不满的是在使用Wi-Fi上网的时候，iPhone的电用的太快了。]]></description>
			<content:encoded><![CDATA[<p>作为IT人，iPhone似乎成了标志，看着朋友同事都用上了iPhone，终于，最近想换手机，我也买了一个iPhone，二代，16G，黑色，美版（因为港版要贵一些），软件是3.0。</p>
<p>iPhone最大的优势在于，它做成了一个平台，大家可以在上面开发小应用，通过Apple iTunes Store发售，开发者、Apple都可以得益，同时可以满足用户在多方面的需求，这是一个非常好的模式。以前的文章里也说过，平台化是互联网的趋势，通过平台可以发掘出无穷的力量，让更多的人参与进来，毕竟一个商业主体所能做的事情是有限的。</p>
<p>在iPhone上装了Facebook、Twitterrific、万年历、金山词霸等等，甚至在安装了WordPress的插件后，可以通过iPhone来写自己的Blog了。</p>
<p>为了保证家里的Wi-Fi稳定，我特意找出了以前一个不用的无线路由器，放在在自己的房间里，我想在不远的将来，3G普及的时候，那就真的是无线互联的的时代了。</p>
<p>唯一不满的是在使用Wi-Fi上网的时候，iPhone的电用的太快了。</p>
]]></content:encoded>
			<wfw:commentRss>http://i.laoer.com/use-iphone.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

