iOS—支付宝流程(备忘)
支付宝终于更新了SDK,减少了许多让人无语的错误。由于以后经常会用到,所以记录一下自己的集成流程。
一,导入SDK
文章图片
DE6B141F-B0F7-463C-955D-70E9F62F742F.png
在客户端组装请求信息需要导入这些,如果在服务器完成就只用导入.bundle和.framework。(虽然在支付宝加签有风险,但服务器不做也只能自己搞)
二,添加依赖库
文章图片
775BF4F6-ACF4-4639-B191-10C9D44FF1AD.png 三,运行注意
1 , "Cannot find interface declaration for 'NSObject', superclass of 'Base64'"类似这种错误。在报错文件添加Foundation头文件。(现在不会报这个错了)
2."openssl not found "需要设置路径。在target>build setting>header Search Paths中添加路径。方法:点击openssl文件showinfinder ,command+i在简介里查看文件路径。
$(SRCROOT)/加文件路径
3.Allow Arbitrary Loads
4.添加 URL Schemes
点击项目名称,点击“Info”选项卡,在“URL Types”选项中,点击“+”,在“URL Schemes”中输入“alisdkdemo”。“alisdkdemo”来自于文件“APViewController.m”的NSString *appScheme = @“alisdkdemo”; 。名字随便起,但不要与其他的重复
四,代码导入
1.appDelegate.m中
支付回调,在使用支付宝客户端是在这里回调,使用h5支付时在支付文件里回调
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options
{
// 当用户通过支付宝客户端进行支付时,会回调该block:standbyCallback
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"result = %@",resultDic);
NSLog(@"---%@",[resultDic objectForKey:@"memo"]);
if ([[resultDic objectForKey:@"resultStatus"]isEqualToString:@"9000"]) {
//支付成功操作
}
else
{
//支付失败操作
}
self.alipayNav = nil;
}];
return YES;
}
【iOS—支付宝流程(备忘)】2,支付文件中
不支持在客户端配置,如果你的后台愿意给的话。。。。。。。order是旧版本的,不过现在仍然可以用。新的版本可去官网下载。
NSString *partner = @"Your partnerID";
NSString *seller = @"Your sellerID";
//NSString *privateKey = @"4grcwb2et493dr0p0qhaoksgvvijdsus";
NSString *privateKey = @"YourprivateKey";
Order *order = [[Order alloc] init];
order.partner = partner;
order.sellerID = seller;
order.outTradeNO = ???;
//订单ID(由商家?自?行制定)
order.subject = ???;
//商品标题
order.body = ???;
//商品描述
order.totalFee = [NSString stringWithFormat:@"%.2f",[price floatValue]];
//商品价格
order.notifyURL = ???;
//回调URL
order.service = @"mobile.securitypay.pay";
order.paymentType = @"1";
order.inputCharset = @"utf-8";
order.itBPay = @"30m";
//时间
order.showURL = @"m.alipay.com";
//应用注册scheme,在AlixPayDemo-Info.plist定义URL types
NSString *appScheme = @"alipay";
//将商品信息拼接成字符串
NSString *orderSpec = [order description];
NSLog(@"orderSpec = %@",orderSpec);
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
id 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) {
//【callback处理支付结果】
NSLog(@"reslut = %@",resultDic);
}];
}
推荐阅读
- 急于表达——往往欲速则不达
- 慢慢的美丽
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量
- 2019-02-13——今天谈梦想()
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- Ⅴ爱阅读,亲子互动——打卡第178天
- 低头思故乡——只是因为睡不着
- 取名——兰
- 2020-04-07vue中Axios的封装和API接口的管理
- 每日一话(49)——一位清华教授在朋友圈给大学生的9条建议