(一)前言
- 使用支付宝进行一个完整的支付功能,大致有以下步骤:
- 向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller)和私钥(privateKey)
- 下载支付宝SDK
- 生成订单信息,签名加密
- 调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
- 支付完毕后,支付宝客户端会自动跳回到原来的应用程序
- 在原来的应用程序中显示支付结果给用户看
支付流程.png
新版本为App支付
老版本为移动支付
(二)与支付宝签约的条件
与支付宝签约的条件.png
条件.png
签约的目的:为了得到一个收款的ID,用户付款后,这个钱就会打到这个ID里面
![Uploading Paste_Image_407429.png . . .]
(三)史上最全集成步骤
- 1.登录蚂蚁金服
登录蚂蚁金服.png
-
2.点击管理中心
管理中心.png
3.创建应用
创建应用.png
4.点击修改(应用图标等等)
修改.png
5.找到App支付DEMO&SDK
101.50.gif
6.点击老版本移动支付文档
老版本移动支付文档.png
7.下载SDK和DEMO
下载SDK和Demo.png
8.点击快速接入
快速接入.png
9.商户签约审核
签约与审核.png
10.生成密钥
生成密钥.png
生成私钥和公钥.png
11.终端输入命令生成私钥和公钥(最好不要删除不是PKCS8格式的私钥,我这里做的有点问题)
101.51.gif
12.登录支付宝
登录支付宝.png
13.点击商家服务
商家服务.png
14.查询PID Key
查询PID Key.png
15.验证密码来查看PID Key
验证密码来查看PID Key.png
16.查看密钥(公钥)
点击查看密钥.png
17.复制公钥粘贴到支付宝的安全校验码(Key)中
复制公钥粘贴.png
18.创建Xcode项目,并在plist文件中增加App传输安全设置
HTTPS.png
19.按照这个文档进行导入代码。有选择性的导入哦,有的不需要,以下面的步骤为准
导入代码.png
20.导入Bundle和Framework
导入Bundle和Framework.png
21.在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:
增加依赖.png
22.编译Xcode,提示错误
AlipaySDK错误.png
解决办法:
删除AlipaySDK.png
23.粘贴商家ID,收款账号,私钥到xcode项目中
粘贴密钥到xcode.png
// 商家ID
NSString *partner = @"2088112967388821";
// 收款账号
NSString *seller = @"553828497@qq.com";
// 私钥
NSString *privateKey = @"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMAya+IS3WeeyHXRIMi76bJj0cURKCmY9JjA+Pe4M3kI3JoxbIg/1biHX0+XOKLPoGd2moSOOqU34Uehdu9i90DhZcC24KBu/jW4E9eiIt6CREGjP/fR+AvOw2iUBW6f3WX/jr0Yz1iitRqrcq7wXyekTnlwBMLXKhCW1PUGy+FAgMBAAECgYBbiihT/sQxDDFR3HXOj58xAyMYqZCeK2Gz3LEHoSnVJmmzni86zfiPexashj1bMRLOTU6v4on1QH7NOmJq7HZmM40EPj5IzDgU4In3utFjfHta6G0JxFjU85TyDRc+8h0lWG9L1mEJ79LoDNtJDaiFkiFHVhFEeK8iIxOBZL96gQJBAPMmi6fOZDZQMoCWGcClB+gOGPRvh3T/ukJs1pu/dgtRDz26xI3Xd54Lwu6yQklvJKnZ84AZ7r31l6nwVpE0vFUCQQDKWo05NS6cgnvYr5wlEn1FyDDPZ6ztBj8/aU6tpo3cDw7tuGWCHLCEzAgexTUUTcHQmy5jepZzVE9AsrtR0dZxAkAxAc7aFo46KDXVlus/2cNbMSQ0eBosKbLH2pnysEdBhqf0wCUHlasFTseORp13oZAZL9WVNyTYYpyb4tX/1Eo1AkBZEy1RfoCrMqEzzHHuu8nbWvlpg1jS6coTrtaMiGGv+gz3RhGhCeIGQw5cBTGNY4Eqw/TSo5bw468TatocdUNxAkEAotpgndS0snM4yKACyghzOJ9IylOzFjPv1J1BJN1DrfkVzJ8E111880iqaIOmh30on1cWhrah0S3wfIE9KtDJAw==";
24.导入Order类,并写上关于生成订单信息及签名的代码
生成订单信息.png
/*
*生成订单信息及签名
*/
//将商品信息赋予AlixPayOrder的成员变量
Order *order = [[Order alloc] init];
order.partner = partner;
order.sellerID = seller;
order.outTradeNO = @"XXYYZZ"; //订单ID(由商家自行制定)
order.subject = @"iPhone"; //商品标题
order.body = @"价格公道"; //商品描述
order.totalFee = @"3288"; //商品价格
// 自己的服务器的IP地址,问下后台就知道
order.notifyURL = @"http://www.jianshu.com"; //回调URL
// 接口名称
order.service = @"mobile.securitypay.pay";
// 支付类型.1代表购买商品
order.paymentType = @"1";
// 参数编码字符集
order.inputCharset = @"utf-8";
//未付款交易的超时时间
order.itBPay = @"30m";
order.showURL = @"m.alipay.com";
25.应用注册scheme,并添加:Info->URL Types->URL Schemes->点击+号->CoderZb
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types.支付完之后跳回到app中
NSString *appScheme = @"CoderZb";// Info->URL Types->点击+号->URL Schemes
101.52.gif
26.将商品信息拼接成字符串
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@"orderSpec = %@",orderSpec);
27.获取私钥并将商户信息签名
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id<DataSigner> signer = CreateRSADataSigner(privateKey);
NSString *signedString = [signer signString:orderSpec];
//将签名成功字符串格式化为订单字符串,请严格按照该格式
NSString *orderString = nil;
if (signedString != nil) {
orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
orderSpec, signedString, @"RSA"];
[[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
NSLog(@"reslut = %@",resultDic);
}];
}
- 错误提示
DataSigner.png
- 解决办法:导入Util文件
Unil.png
- 又出现了新的错误
NSObject.png
- 解决办法
Foundation.png
- 又出现了新的错误
type.png
- 解决办法:
Foundation1.png
- 又出现了新的错误
rsa.png
- 解决办法
openssl.png
-又出现了新的错误
openssl找不到.png
- 解决办法
- 首先搜索herader S
路径.png
- 然后再添加两个静态库
静态库.png
28.AppDelegate.m添加如下代码,能获取到失败的信息
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
NSString *urlStr = [url absoluteString];
NSString *result = [urlStr stringByRemovingPercentEncoding];// 去掉urlStr中的百分号
NSLog(@"%@",result);
return YES;
}
- 经典错误
Undefined symbols for architecture armv7:
"_OBJC_CLASS_$_UTDevice", referenced from:
objc-class-ref in AlipaySDK
symbol(s) not found for architecture armv7clang: error: linker command failed with exit code 1 (use -v to see invocation)
error.png
- 解决办法:下载的SDK&&Demo,文件夹中没有xcode项目但是有两个AlipaySDK千万不要导入到项目中。文件夹中有xcode项目,且还有两个AlipaySDK才能导入。
daoru.png
101.53.gif
(四)运行 [LS](https://pan.baidu.com/s/1boO2aS3 密码 fatu)
101.55.gif