iOS集成支付宝

简介: <p style="color:rgb(54,46,43); font-family:Arial; font-size:14px; line-height:26px"> <span style="font-family:Arial,宋体; line-height:30px; background-color:rgb(245,248,253)">使用支付宝进行一个完整的支付功能,大致有以下

使用支付宝进行一个完整的支付功能,大致有以下步骤:

1>先与支付宝签约,获得商户ID(partner)和账号ID(seller)(这个主要是公司的负责)
2>下载相应的公钥私钥文件(加密签名用)
3>下载支付宝SDK(登录网站:http://club.alipay.com/)里面提供了非常详细的文档、如何签约、如何获得公钥私钥、如何调用支付接口
4>生成订单信息
5>调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
6>支付完毕后返回支付结果给商户客户端和服务器。
SDK里有集成支付宝功能的一个Demo>集成支付功能的具体操作方式,可以参考Demo
如何创建订单 ( 订单根据自己公司看是什么样的)



要想集成支付功能,依赖以下文件夹的库文件(把这3个添加到你的客户端中)


调用支付接口可以参考AlixPayDemoViewController的下面方法

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

如何签名

如何调用支付接口

都在这个方法里面了

[objc]  view plain copy print ?
  1. //  
  2. //选中商品调用支付宝快捷支付  
  3. //  
  4. - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  
  5. {  
  6.     /* 
  7.      *点击获取prodcut实例并初始化订单信息 
  8.      */  
  9.     Product *product = [_products objectAtIndex:indexPath.row];  
  10.       
  11.     /* 
  12.      *商户的唯一的parnter和seller。 
  13.      *本demo将parnter和seller信息存于(AlixPayDemo-Info.plist)中,外部商户可以考虑存于服务端或本地其他地方。 
  14.      *签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。 
  15.      */  
  16.     //如果partner和seller数据存于其他位置,请改写下面两行代码  
  17.     NSString *partner = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Partner"];  
  18.     NSString *seller = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Seller"];  
  19.       
  20.     //partner和seller获取失败,提示  
  21.     if ([partner length] == 0 || [seller length] == 0)  
  22.     {  
  23.         UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"  
  24.                                                         message:@"缺少partner或者seller。"  
  25.                                                        delegate:self  
  26.                                               cancelButtonTitle:@"确定"  
  27.                                               otherButtonTitles:nil];  
  28.         [alert show];  
  29.         return;  
  30.     }  
  31.       
  32.     /* 
  33.      *生成订单信息及签名 
  34.      *由于demo的局限性,本demo中的公私钥存放在AlixPayDemo-Info.plist中,外部商户可以存放在服务端或本地其他地方。 
  35.      */  
  36.     //将商品信息赋予AlixPayOrder的成员变量  
  37.     AlixPayOrder *order = [[AlixPayOrder alloc] init];  
  38.     order.partner = partner;  
  39.     order.seller = seller;  
  40.     order.tradeNO = [self generateTradeNO]; //订单ID(由商家自行制定)  
  41.     order.productName = product.subject//商品标题  
  42.     order.productDescription = product.body//商品描述  
  43.     order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商品价格  
  44.     order.notifyURL =  @"http://www.xxx.com"; //回调URL  
  45.       
  46.     //应用注册scheme,在AlixPayDemo-Info.plist定义URL types,用于快捷支付成功后重新唤起商户应用  
  47.     NSString *appScheme = @"AlixPayDemo";  
  48.       
  49.     //将商品信息拼接成字符串  
  50.     NSString *orderSpec = [order description];  
  51.     NSLog(@"orderSpec = %@",orderSpec);  
  52.       
  53.     //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode  
  54.     id<DataSigner> signer = CreateRSADataSigner([[NSBundle mainBundle] objectForInfoDictionaryKey:@"RSA private key"]);  
  55.     NSString *signedString = [signer signString:orderSpec];  
  56.       
  57.     //将签名成功字符串格式化为订单字符串,请严格按照该格式  
  58.     NSString *orderString = nil;  
  59.     if (signedString != nil) {  
  60.         orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",  
  61.                        orderSpec, signedString, @"RSA"];  
  62.           
  63.         //获取快捷支付单例并调用快捷支付接口  
  64.         AlixPay * alixpay = [AlixPay shared];  
  65.         int ret = [alixpay pay:orderString applicationScheme:appScheme];  
  66.           
  67.         if (ret == kSPErrorAlipayClientNotInstalled) {  
  68.             UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示"  
  69.                                                                  message:@"您还没有安装支付宝快捷支付,请先安装。"  
  70.                                                                 delegate:self  
  71.                                                        cancelButtonTitle:@"确定"  
  72.                                                        otherButtonTitles:nil];  
  73.             [alertView setTag:123];  
  74.             [alertView show];  
  75.         }  
  76.         else if (ret == kSPErrorSignError) {  
  77.             NSLog(@"签名错误!");  
  78.         }  
  79.           
  80.     }  
  81.       
  82.     [tableView deselectRowAtIndexPath:indexPath animated:YES];  
  83. }  
  84. //主要集成的关键就是下面几步:  
  85. //1.封装订单模型  
  86. AlixPayOrder *order = [[AlixPayOrder alloc] init];  
  87. // 生成订单描述  
  88. NSString *orderSpec = [order description];  
  89.   
  90. //2.签名  
  91. id<DataSigner> signer = CreateRSADataSigner(@“私钥key”);  
  92. // 传入订单描述 进行 签名  
  93. NSString *signedString = [signer signString:orderSpec];  
  94.   
  95.   
  96. //3.生成订单字符串  
  97. NSString *orderString = [NSString stringWithFormat:@'%@&sign='%@'&sign_type='%@'',  
  98.                          orderSpec, signedString, @'RSA'];  
  99.   
  100. //4.调用支付接口  
  101. AlixPay * alixpay = [AlixPay shared];  
  102. // appScheme:商户自己的协议头  
  103. int ret = [alixpay pay:orderString applicationScheme:appScheme];  
目录
相关文章
|
9月前
|
开发工具 iOS开发
iOS 支付宝SDK比较隐秘的坑
iOS 支付宝SDK比较隐秘的坑
127 0
|
13天前
|
人工智能 数据安全/隐私保护 iOS开发
苹果在WWDC24上宣布的所有内容:Apple Intelligence、集成ChatGPT的Siri、iOS 18
苹果在WWDC24上宣布的所有内容:Apple Intelligence、集成ChatGPT的Siri、iOS 18
|
2天前
|
机器学习/深度学习 定位技术 开发工具
必知的技术知识:ios个推推送集成
必知的技术知识:ios个推推送集成
|
1月前
|
安全 Android开发 iOS开发
构建未来:安卓与iOS的无缝集成技术探索
【5月更文挑战第20天】随着智能设备的普及和技术的不断进步,安卓和iOS两大操作系统之间的界限正在逐渐模糊。本文将深入探讨如何通过最新的API、框架和工具实现安卓与iOS应用的无缝集成,以及这一趋势对开发者和用户的潜在影响。我们将从技术可行性、安全性挑战、用户体验优化等角度出发,分析当前的发展状况,并展望未来可能的技术融合路径。
|
1月前
|
存储 监控 安全
打造高效移动办公环境:Android与iOS平台的集成策略
【5月更文挑战第15天】 在数字化时代,移动办公不再是一种奢望,而是日常工作的必需。随着智能手机和平板电脑的性能提升,Android与iOS设备已成为职场人士的重要工具。本文深入探讨了如何通过技术整合,提高两大移动平台在企业环境中的协同工作能力,重点分析了各自平台上的系统集成策略、安全性考虑以及跨平台协作工具的应用。通过对现有技术的剖析与案例研究,旨在为读者提供一套实用的移动办公解决方案。
|
1月前
|
机器学习/深度学习 PyTorch TensorFlow
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
63 0
|
1月前
|
Java 开发工具
解决SpringBoot集成支付宝支付中文订单描述验签错误问题
解决SpringBoot集成支付宝支付中文订单描述验签错误问题
50 0
|
7月前
|
设计模式 Java Maven
淘东电商项目(60) -聚合支付(集成支付宝)
淘东电商项目(60) -聚合支付(集成支付宝)
51 0
|
9月前
|
iOS开发 开发者 Perl
使用mPaaS iOS通过Pod集成"mPaaS_TinyApp"时遇到了错误
使用mPaaS iOS通过Pod集成"mPaaS_TinyApp"时遇到了错误
102 2
|
9月前
|
小程序 JavaScript API
支付宝小程序集成mqtt兼容IOS和安卓
支付宝小程序集成mqtt兼容IOS和安卓
160 0

热门文章

最新文章