(一)前言
- 使用支付宝进行一个完整的支付功能,大致有以下步骤:
- 向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller)和私钥(privateKey)
- 下载支付宝SDK
- 生成订单信息,签名加密
- 调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
- 支付完毕后,支付宝客户端会自动跳回到原来的应用程序
- 在原来的应用程序中显示支付结果给用户看
新版本为App支付
老版本为移动支付
(二)与支付宝签约的条件
签约的目的:为了得到一个收款的ID,用户付款后,这个钱就会打到这个ID里面
![Uploading Paste_Image_407429.png . . .]
(三)史上最全集成步骤
- 1.登录蚂蚁金服
-
2.点击管理中心
3.创建应用
4.点击修改(应用图标等等)
5.找到App支付DEMO&SDK
6.点击老版本移动支付文档
7.下载SDK和DEMO
8.点击快速接入
9.商户签约审核
10.生成密钥
11.终端输入命令生成私钥和公钥(最好不要删除不是PKCS8格式的私钥,我这里做的有点问题)
12.登录支付宝
13.点击商家服务
14.查询PID Key
15.验证密码来查看PID Key
16.查看密钥(公钥)
17.复制公钥粘贴到支付宝的安全校验码(Key)中
18.创建Xcode项目,并在plist文件中增加App传输安全设置
19.按照这个文档进行导入代码。有选择性的导入哦,有的不需要,以下面的步骤为准
20.导入Bundle和Framework
21.在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:
22.编译Xcode,提示错误
解决办法:
23.粘贴商家ID,收款账号,私钥到xcode项目中
// 商家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类,并写上关于生成订单信息及签名的代码
/*
*生成订单信息及签名
*/
//将商品信息赋予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
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);
}];
}
- 错误提示
- 解决办法:导入Util文件
- 又出现了新的错误
- 解决办法
- 又出现了新的错误
- 解决办法:
- 又出现了新的错误
- 解决办法
-又出现了新的错误
- 解决办法
- 首先搜索herader S
- 然后再添加两个静态库
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)
- 解决办法:下载的SDK&&Demo,文件夹中没有xcode项目但是有两个AlipaySDK千万不要导入到项目中。文件夹中有xcode项目,且还有两个AlipaySDK才能导入。