iOS—支付宝流程(备忘)

支付宝终于更新了SDK,减少了许多让人无语的错误。由于以后经常会用到,所以记录一下自己的集成流程。
一,导入SDK

iOS—支付宝流程(备忘)
文章图片
DE6B141F-B0F7-463C-955D-70E9F62F742F.png
在客户端组装请求信息需要导入这些,如果在服务器完成就只用导入.bundle和.framework。(虽然在支付宝加签有风险,但服务器不做也只能自己搞)
二,添加依赖库

iOS—支付宝流程(备忘)
文章图片
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); }]; }

    推荐阅读