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<NSString *,id> *)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;
}

2,支付文件中
不支持在客户端配置,如果你的后台愿意给的话。。。。。。。order是旧版本的,不过现在仍然可以用。新的版本可去官网下载。

NSString *partner = @"Your partnerID";
            NSString *seller = @"Your sellerID";
            //    NSString *privateKey = @"4grcwb2et493dr0p0qhaoksgvvijdsus";
            NSString *privateKey = @"Your  privateKey";
            
            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<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) {
                    //【callback处理支付结果】
                    NSLog(@"reslut = %@",resultDic);
                }];
                
            }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 实现支付宝支付的准备工作: 1.向支付宝签约,成为支付宝的商户 签约完成后,支付宝会提供一些必要的数据给我们 商户...
    Anson杨春安阅读 8,263评论 0 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,992评论 19 139
  • 自己总结的微信支付宝支付流程和注意点: 准备工作: 需要公司的营业执照,税务信息,等老板的身份证信息等,我记得,用...
    Www刘阅读 18,590评论 2 50
  • 支付宝集成过程详解——运行DEMO 前言,梦想是需要坚持的,在路上,一路前行。加油。 这两天软件需要集成支付宝了,...
    改昵称已被占用阅读 19,128评论 2 39
  • 不知你们会不会有这种感觉。 突然的发现高中的时间过得好快,像做梦一样,不知不觉中我们已经度过了一个...
    若雨可岚阅读 676评论 15 13