1.支付宝支付
在说完了微信支付之后,下面我们来说一说支付宝支付,支付宝支付相对微信支付而言要简单很多,下面大家就一起来研究一下。
1.1支付宝开放平台注册
支付宝开放平台(支付宝支付是免费的,注册成功后使用的主要为AppKey/SecretKey,其中SecrectKey交由后台完成集成)
平台入口:https://open.alipay.com/platform/home.htm。
1.2下载并使用SDK
支付宝支付SDK可以到支付宝开放平台下载(附带文档Demo)
或者您使用的是Pods,直接在Podfile添加你要的SDK版本,Pods Update就可以了(Pods的好处是方便管理三方)
这里使用的是Pods直接下载的:(AliPaySDK-2.0)
1.3项目中操作
同上一篇博客所说的微信一样,添加好URL Schemes、添加白名单(这里就不在附图说明了)
1.4使用支付
在使用支付的时候,要和后台沟通好,他需要哪些参数用于生成订单你就给他哪些参数(他要写好接口,返回的是你用于调起支付的message)
关于支付宝支付回调有两种模式,在这里要注意一下,一种是在未安装支付宝客户端的时候发起的网页支付,另一种是安装客户端由客户端调起支付。
1)这是对返回参数的操作:(未安装支付宝客户端,调起网页支付)
<code class="language-Python hljs objectivec has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *mesage = [responseObject objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"resultCode"</span>]; <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *appScheme = @<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"alisdkdemo"</span>; [[AlipaySDK defaultService] payOrder:mesage fromScheme:appScheme callback:^(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> *resultDic) { <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> code = [[resultDic objectForKey:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"resultStatus"</span>] intValue]; <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>(code == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9000</span>){ <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//SVProgressHUD使用的第三方作为提示</span> [SVProgressHUD showSuccessWithStatus:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"支付成功"</span>]; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (code == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8000</span>){ [SVProgressHUD showInfoWithStatus:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"正在处理中"</span>]; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (code == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4000</span>){ [SVProgressHUD showInfoWithStatus:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"订单支付失败"</span>]; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (code == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6001</span>){ [SVProgressHUD showInfoWithStatus:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"用户中途取消"</span>]; }<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">else</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (code == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6002</span>){ [SVProgressHUD showInfoWithStatus:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"网络连接出错"</span>]; } }]; </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li><li style="box-sizing: border-box; padding: 0px 5px;">30</li></ul>
2)这是对返回参数的操作:(安装支付宝客户端,调起支付)
<code class="language-Python hljs objectivec has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;">- (<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">BOOL</span>)application:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">UIApplication</span> *)application openURL:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSURL</span> *)url sourceApplication:(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSString</span> *)sourceApplication annotation:(<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">id</span>)annotation { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// 支付宝(有几种模式这里只举例:safepay)</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ([url<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">.host</span> isEqualToString:@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"safepay"</span>]) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//安装客户端调起支付和未安装客户端调起支付方法是有区别的 </span> [[AlipaySDK defaultService]processOderWithPaymentResult:url standbyCallback:^(<span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSDictionary</span> *resultDic) { <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//支付成功(同理可以根据状态码判断其他的状态)</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">if</span>([resultDic[@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"resultStatus"</span>] floatValue] == <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9000</span>){ <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//返回状态(有很多人会犯这个错误 要注意下)</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">return</span> <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">YES</span>; } }</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li></ul>
1.5支付宝支付常见异常Bug处理
支付宝支付其实非常简单的,常见的问题也不是非常多,当第一次做支付的时候,可能会忽略掉,客户端调起支付,误把网页支付当做通用的,其实呢,两次两种调起是分开的。