美文网首页学无止境
最新版支付宝集成(支付宝SDK更新时间:2016/08/19 )

最新版支付宝集成(支付宝SDK更新时间:2016/08/19 )

作者: y夜无眠 | 来源:发表于2016-11-04 14:30 被阅读0次

    支付宝开放平台里App支付iOS集成流程文档:https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.nWMATK&treeId=193&articleId=105295&docType=1 注意看文档,看文档,看文档! 重要的事情说三遍...

    把SDK里需要的文件全放入新建的文件夹里,一起拖进来!


    Paste_Image.png Paste_Image.png

    在下图中要添加 RSA 签名

    Paste_Image.png

    我把支付宝的订单信息单独封装在一个类的方法里面

    - (void)alipayWithDictionary:(NSMutableDictionary *)payDict
    {
        NSString *partner = @"";
        NSString *seller = @"";
    
        NSString * privateKey = @"";
        
        //将商品信息赋予AlixPayOrder的成员变量
        Order* order = [Order new];
        
        // NOTE: app_id设置
        order.app_id = partner;
        
        // NOTE: 支付接口名称
        order.method = @"alipay.trade.app.pay";
        
        // NOTE: 参数编码格式
        order.charset = @"utf-8";
        
        // NOTE: 当前时间点
        NSDateFormatter* formatter = [NSDateFormatter new];
        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        order.timestamp = [formatter stringFromDate:[NSDate date]];
        
        // NOTE: 支付版本
        order.version = @"1.0";
        order.notify_url = [NSString stringWithFormat:@"%@apl.php",LinkName];
        // NOTE: sign_type设置
        order.sign_type = @"RSA";
        
        // NOTE: 商品数据
        order.biz_content = [BizContent new];
        order.biz_content.body = [NSString stringWithFormat:@"%@",payDict[@"body"]];
        order.biz_content.subject = [NSString stringWithFormat:@"%@",payDict[@"productName"]];
        order.biz_content.out_trade_no = [NSString stringWithFormat:@"%@",payDict[@"tradeNO"]]; //订单ID(由商家自行制定)
        order.biz_content.timeout_express = @"30m"; //超时时间设置
        order.biz_content.total_amount = [NSString stringWithFormat:@"%@",payDict[@"rmb_fee"]]; //商品价格
    //    order.biz_content.total_amount = @"0.01";
        order.biz_content.seller_id = seller;
        
        //将商品信息拼接成字符串
        NSString *orderInfo = [order orderInfoEncoded:NO];
        NSString *orderInfoEncoded = [order orderInfoEncoded:YES];
        NSLog(@"orderSpec = %@",orderInfo);
        
        // NOTE: 获取私钥并将商户信息签名,外部商户的加签过程请务必放在服务端,防止公私钥数据泄露;
        //       需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
        id<DataSigner> signer = CreateRSADataSigner(privateKey);
        
        NSString *signedString = [signer signString:orderInfo];
        
        // NOTE: 如果加签成功,则继续执行支付
        if (signedString != nil) {
    //           应用注册scheme,在AliSDKDemo-Info.plist定义URL types
            NSString *appScheme = @"";
    //             NOTE: 将签名成功字符串格式化为订单字符串,请严格按照该格式
            NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@",orderInfoEncoded, signedString];
            
    //                支付宝网页版调用的问题
            NSArray * array = [UIApplication sharedApplication].windows;
            UIWindow * window = [array firstObject];
            [window setHidden:NO];
            
    //             NOTE: 调用支付结果开始支付
            [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
                NSLog(@"页面返回的结果 = %@",resultDic);
                            //判断
                NSString * resultStatus = resultDic[@"resultStatus"];
                NSLog(@"状态码:%@",resultStatus);
                
    //          支付宝网页版调用的问题
                NSArray * array = [UIApplication sharedApplication].windows;
                UIWindow * window = [array firstObject];
                [window setHidden:YES];
                
                [[NSNotificationCenter defaultCenter] postNotificationName:@"alipayStatue" object:nil userInfo:@{@"resultStatus":resultStatus}];
    
        }];
        }
    }
    

    在AppDelegate里处理回调

    #pragma mark --9.0以下版本支付宝的回调方法
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
        
        if ([url.host isEqualToString:@"safepay"]){
        //跳转支付宝钱包进行支付,处理支付结果
            [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
                
    //                      支付宝网页版调用时,window没有隐藏,要在这里隐藏才行
                NSArray * array = [UIApplication sharedApplication].windows;
                UIWindow * window = [array firstObject];
                [window setHidden:YES];
                
                [[NSNotificationCenter defaultCenter] postNotificationName:@"alipayStatue" object:nil userInfo:@{@"resultStatus":resultDic[@"resultStatus"]}];
            }];
        }
        return YES;
    }
    
    #pragma mark --9.0以上版本支付宝的回调方法
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options{
        NSLog(@"url:%@",url);
    
        if ([url.host isEqualToString:@"safepay"]){
            [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
                
    //                      支付宝网页版调用时,window没有隐藏,要在这里隐藏才行
                NSArray * array = [UIApplication sharedApplication].windows;
                UIWindow * window = [array firstObject];
                [window setHidden:YES];
                
                [[NSNotificationCenter defaultCenter] postNotificationName:@"alipayStatue" object:nil userInfo:@{@"resultStatus":resultDic[@"resultStatus"]}];
            }];
        }
        return YES;
    }
    

    还有一些小问题就懒的截图贴上去了,基本上感觉文档看懂了,支付宝集成就那么回事...

    相关文章

      网友评论

        本文标题:最新版支付宝集成(支付宝SDK更新时间:2016/08/19 )

        本文链接:https://www.haomeiwen.com/subject/lpxwuttx.html