iOS:使用集成的支付宝SDK的支付流程
1.先与支付宝签约,获得商户的ID(partner)和账号ID(seller),这一部分主要是又公司负责;
2.下载相应的公钥私钥文件,用来给签名进行加密;
3.下载支付宝集成的SDK,网址:https://club.alipay.com/
里面提供了非常详细的文档、如何签名、如何获取公钥私钥、如何调用支付接口等;
4.生成订单信息;
5.调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道;
6.支付宝支付完成后,返回支付结果给商户客户端和服务器。
SDK里有集成支付功能的一个Demo:
要想支付接口可以参考以下文件夹的库文件(把这三个添加到呢的客户端中)
演示实例:
调用支付接口可以参考AlixPayDemoViewController的下面方法
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
如何创建订单 ( 订单根据自己公司看是什么样的)
如何签名
如何调用支付接口
都在这个方法里面了
//
//选中商品调用支付宝快捷支付
//
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
/*
7 *点击获取prodcut实例并初始化订单信息
8 */
Product *product = [_products objectAtIndex:indexPath.row]; /*
12 *商户的唯一的parnter和seller。
13 *本demo将parnter和seller信息存于(AlixPayDemo-Info.plist)中,外部商户可以考虑存于服务端或本地其他地方。
14 *签约后,支付宝会为每个商户分配一个唯一的 parnter 和 seller。
15 */
//如果partner和seller数据存于其他位置,请改写下面两行代码
NSString *partner = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Partner"];
NSString *seller = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"Seller"]; //partner和seller获取失败,提示
if ([partner length] == || [seller length] == )
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"缺少partner或者seller。"
delegate:self
cancelButtonTitle:@"确定"
otherButtonTitles:nil];
[alert show];
[alert release];
return;
} /*
34 *生成订单信息及签名
35 *由于demo的局限性,本demo中的公私钥存放在AlixPayDemo-Info.plist中,外部商户可以存放在服务端或本地其他地方。
36 */
//将商品信息赋予AlixPayOrder的成员变量
AlixPayOrder *order = [[AlixPayOrder alloc] init];
order.partner = partner;
order.seller = seller;
order.tradeNO = [self generateTradeNO]; //订单ID(由商家自行制定)
order.productName = product.subject; //商品标题
order.productDescription = product.body; //商品描述
order.amount = [NSString stringWithFormat:@"%.2f",product.price]; //商品价格
order.notifyURL = @"http://www.xxx.com"; //回调URL //应用注册scheme,在AlixPayDemo-Info.plist定义URL types,用于快捷支付成功后重新唤起商户应用
NSString *appScheme = @"AlixPayDemo"; //将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@"orderSpec = %@",orderSpec); //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer = CreateRSADataSigner([[NSBundle mainBundle] objectForInfoDictionaryKey:@"RSA private key"]);
NSString *signedString = [signer signString:orderSpec]; //将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"]; //获取快捷支付单例并调用快捷支付接口
AlixPay * alixpay = [AlixPay shared];
int ret = [alixpay pay:orderString applicationScheme:appScheme]; if (ret == kSPErrorAlipayClientNotInstalled) {
UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"提示"
message:@"您还没有安装支付宝快捷支付,请先安装。"
delegate:self
cancelButtonTitle:@"确定"
otherButtonTitles:nil];
[alertView setTag:];
[alertView show];
[alertView release];
}
else if (ret == kSPErrorSignError) {
NSLog(@"签名错误!");
} } [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
只要集成的关键就是下面这几步:
//.封装订单模型
AlixPayOrder *order = [[AlixPayOrder alloc] init];
// 生成订单描述
NSString *orderSpec = [order description]; //2.签名
id<DataSigner> signer = CreateRSADataSigner(@“私钥key”);
// 传入订单描述 进行 签名
NSString *signedString = [signer signString:orderSpec]; //3.生成订单字符串
NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"]; //4.调用支付接口
AlixPay * alixpay = [AlixPay shared];
// appScheme:商户自己的协议头
int ret = [alixpay pay:orderString applicationScheme:appScheme];
iOS:使用集成的支付宝SDK的支付流程的更多相关文章
- 从支付宝SDK的支付流程理解什么是公钥和私钥,什么是加密和数字签名
------------------- 这是自己总结: 支付宝SDK支付用到的公钥与私钥整理如下: 1.商户应用公钥 2.商户应用私钥 3.支付宝公钥 4.支付宝私钥 商户应用的公钥与私钥生 ...
- cocos2d-x C++ iOS工程集成第三方支付宝支付功能
一.在支付宝开放平台下载支付宝SDK(https://doc.open.alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.WWgVz8&tr ...
- 支付宝手机网站支付流程(Node实现)
前言 公司M站要接入支付宝,借机研究了一下支付宝的支付流程.毕竟,只有公司才能拿到支付接口权限. 主要参考文档: https://doc.open.alipay.com/doc2/detail?tre ...
- iOS:App上架流程和支付宝支付流程
App上架大致流程: 1.花99美元在苹果开发中心注册一个开发者账号: 2.登陆开发者账号,进入member Center,即开发者成员中心: 3.选取证书标示符(certificates Ident ...
- Android接入支付宝和微信支付
然后把下载下来的aar包,放到项目目录下面的libs目录下,通过下面的gradle依赖进来 // 支付宝 SDK AAR 包所需的配置compile(name: 'alipaySdk-15.6.0-2 ...
- iOS:集成支付宝支付
一.介绍 支付宝的集成还是比较简单的,按照文档来一步步操作,基本上很顺利.不过,仍然有两个地方会是坑.这里我集成成功了,在此整理一下.说先说一下我遇到的坑如下: 第一个坑:下载的SDK文件AliPay ...
- 李洪强iOS开发支付集成之支付宝支付
iOS开发支付集成之支付宝支付 下载支付宝SDK 首先是开发包下载,还是比较难发现的,网上以前文章中的链接都打不开,我找了好久才找到的.最新的地址在这里(注意的是下载出来的SDK包里面并没有传说中的开 ...
- 简聊iOS支付集成(支付宝和微信支付)
一.支付集成是什么 1.现在大部分app都有快捷支付功能,支付集成将第三方支付平台集成到自己的项目中,能够完成自己项目中的支付功能, 二.支付集成的使用 <1>.支付宝: 下载SDK和De ...
- iOS开发支付集成之支付宝支付
项目中要用到支付功能,需要支付宝,微信,银联三大支付,所以打算总结一下,写两篇文章,方便以后的查阅, 大家在做的时候也能稍微参考下,用到的地方避免再次被坑.这是第二篇支付宝集成,第一篇银联支付在这里. ...
随机推荐
- HDU1018 (斯特林公式)
Big Number Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- request threaded-only IRQs with IRQF_ONESHOT【转】
转自:http://blog.csdn.net/bdc995/article/details/8697374 Gitweb: http://git.kernel.org/linus/;a=co ...
- canvas的用法
包括: 介绍. 基础入门.(兼容性.获取canvas上下文.绘制直线/描边,填充内容.绘制表格.) canvas是基于状态的绘图. 绘制矩形. 绘制圆形. 绘制文本. 绘制图片. 阴影. 渐变. 绘制 ...
- 使用AutoMapper 处理DTO数据对象的转换
using AutoMapper;using System; namespace DTOtEST{ class Program { static void Main(string[] args) { ...
- mysql管理和基本操作
进去mysql:mysql –uroot –p 重启数据库:[root@nanaLinux ~]# /etc/init.d/mysqld restart 1.Mysql忘记root密码 // 查看my ...
- Redis-4.0.8 readme.md
This README is just a fast *quick start* document. You can find more detailed documentation at [redi ...
- 架构妄想:AJAX + REST
William Vambenepe的最新文章,AJAX + REST是最新的架构妄想,让我们回想起了一个具有15年历史的架构,它曾被寄期望对Web产生革命性的影响. 在该架构里,Web服务器将返回包含 ...
- 【hdoj_1049】Climbing Worm
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1049 以 上升-下降 一次为一个周期,一个周期时间为2分钟,每个周期上升距离为(u-d).先只考虑上升,再 ...
- JAVA集合操作的利器:CollectionUtils
使用 CollectionUtils 中四个方法之一执行集合操作.这四种分别是 union(),intersection();disjunction(); subtract(); 下列例子就是演示了如 ...
- mysql数据库设计之物理设计
一.存储引擎 推荐使用Innodb,这也是mysql默认使用的存储引擎,支持事务 二.属性的选择 字符选择: 1.char,存定长,速度快,存在空间浪费的可能,会处理尾部空格,上限255字节.(utf ...