现在不少app内都集成了支付宝功能
使用支付宝进行一个完整的支付功能,大致有以下步骤:
1>先与支付宝签约,获得商户ID(partner)和账号ID(seller)
(这个主要是公司的负责)
2>下载相应的公钥私钥文件(加密签名用)
里面提供了非常详细的文档、如何签约、如何获得公钥私钥、如何调用支付接口。
4>生成订单信息
5>调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
6>支付完毕后返回支付结果给商户客户端和服务器
SDK里有集成支付宝功能的一个Demo> 集成支付功能的具体操作方式,可以参考Demo
错误原因很简单,就是项目的部署版本设置太低了,从3.0改为4.3即可
要想集成支付功能,依赖以下文件夹的库文件(把这3个添加到你的客户端中)
调用支付接口可以参考AlixPayDemoViewController的下面方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
如何创建订单 ( 订单根据自己公司看是什么样的)
如何签名
如何调用支付接口
都在这个方法里面了
04 | - ( void )tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath |
09 | Product *product = [_products objectAtIndex:indexPath.row]; |
17 | NSString *partner = [[NSBundle mainBundle] objectForInfoDictionaryKey:@ "Partner" ]; |
18 | NSString *seller = [[NSBundle mainBundle] objectForInfoDictionaryKey:@ "Seller" ]; |
21 | if ([partner length] == 0 || [seller length] == 0) |
23 | UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@ "提示" |
24 | message:@ "缺少partner或者seller。" |
26 | cancelButtonTitle:@ "确定" |
27 | otherButtonTitles:nil]; |
38 | AlixPayOrder *order = [[AlixPayOrder alloc] init]; |
39 | order.partner = partner; |
40 | order.seller = seller; |
41 | order.tradeNO = [self generateTradeNO]; |
42 | order.productName = product.subject; |
43 | order.productDescription = product.body; |
44 | order.amount = [NSString stringWithFormat:@ "%.2f" ,product.price]; |
48 | NSString *appScheme = @ "AlixPayDemo" ; |
51 | NSString *orderSpec = [order description]; |
52 | NSLog(@ "orderSpec = %@" ,orderSpec); |
55 | id<DataSigner> signer = CreateRSADataSigner([[NSBundle mainBundle] objectForInfoDictionaryKey:@ "RSA private key" ]); |
56 | NSString *signedString = [signer signString:orderSpec]; |
59 | NSString *orderString = nil; |
60 | if (signedString != nil) { |
61 | orderString = [NSString stringWithFormat:@ "%@&sign=\"%@\"&sign_type=\"%@\"" , |
62 | orderSpec, signedString, @ "RSA" ]; |
65 | AlixPay * alixpay = [AlixPay shared]; |
66 | int ret = [alixpay pay:orderString applicationScheme:appScheme]; |
68 | if (ret == kSPErrorAlipayClientNotInstalled) { |
69 | UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@ "提示" |
70 | message:@ "您还没有安装支付宝快捷支付,请先安装。" |
72 | cancelButtonTitle:@ "确定" |
73 | otherButtonTitles:nil]; |
74 | [alertView setTag:123]; |
78 | else if (ret == kSPErrorSignError) { |
84 | [tableView deselectRowAtIndexPath:indexPath animated:YES]; |
主要集成的关键就是下面几步:
02 | AlixPayOrder *order = [[AlixPayOrder alloc] init]; |
04 | NSString *orderSpec = [order description]; |
07 | id<DataSigner> signer = CreateRSADataSigner(@“私钥key”); |
09 | NSString *signedString = [signer signString:orderSpec]; |
13 | NSString *orderString = [NSString stringWithFormat:@ "%@&sign=\"%@\"&sign_type=\"%@\"" , |
14 | orderSpec, signedString, @ "RSA" ]; |
17 | AlixPay * alixpay = [AlixPay shared]; |
19 | int ret = [alixpay pay:orderString applicationScheme:appScheme]; |