iOS-支付宝支付

1、导入支付宝的SDK


iOS-支付宝支付_第1张图片
支付宝SDK.png

2、添加需要的framework

 libc++.tbd
 libz.tbd
 SystemConfiguration.framework
 CoreTelephony.framework
 QuartzCore.framework
 CoreText.framework
 CoreGraphics.framework
 UIKit.framework
 Foundation.framework
 CFNetwork.framework
 CoreMotion.framework
iOS-支付宝支付_第2张图片
支付宝依赖库.png

3、在info里面的URL Types的配置


iOS-支付宝支付_第3张图片
url scheme.png

4、在plist里面添加白名单

LSApplicationQueriesSchemes
    
        alipay
        alipayshare
    

5、注意事项,添加配置(我自己做支付宝遇到的问题)
(1)当值做了以上两步就运行程序的时候会报错


iOS-支付宝支付_第4张图片
支付宝问题1.png

解决办法是:在报错的文件添加 #import

(2) 这个错误,就是找不到支付宝文件夹里面的一些文件


iOS-支付宝支付_第5张图片
支付宝问题2.png

解决办法如下:


iOS-支付宝支付_第6张图片
支付宝注意2.png

6、在AppDelegate.m文件中添加的代码

#import 
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options
{
    //如果极简开发包不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给开发包
    if ([url.host isEqualToString:@"safepay"]) {
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
            NSLog(@"result = %@",resultDic);
        }];
    }
    if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode
        
        [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}
- (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) {
            //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
            NSLog(@"result = %@",resultDic);
        }];
    }
    if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回authCode
        
        [[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
            //【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效,请商户对standbyCallback返回的回调结果进行处理,就是在这个方法里面处理跟callback一样的逻辑】
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}

7、支付时需要的代码
//支付宝

#import "Order.h"
#import "APAuthV2Info.h"
#import "DataSigner.h"
#import 

- (void)alipay
{
    NSString *partner = ALIPAY_PARTNER;  //支付宝商户id-账号id
    NSString *seller = ALIPAY_SELLER;
    NSString *privateKey = ALIPAY_PRIVATEKEY;  //私钥
    /*
     *生成订单信息及签名
     */
    //将商品信息赋予AlixPayOrder的成员变量
    Order *order = [[Order alloc] init];
    order.partner = partner;
    order.seller = seller;
    order.tradeNO = [self generateTradeNO]; //订单ID(由商家自行制定)
    order.productName = @"支付宝测试"; //商品标题
    order.productDescription = @"支付宝支付给安良浩"; //商品描述
    order.amount = [NSString stringWithFormat:@"%.2f", 0.02]; //商品价格
    order.notifyURL =  @"http://www.xiaheng666.com"; //回调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 = @“AlipayProject";  //需要和URL Types统一
    
    //将商品信息拼接成字符串
    NSString *orderSpec = [order description];
    
    //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循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);
        }];
    }
}
#pragma mark   ==============产生随机订单号==============
- (NSString *)generateTradeNO
{
    static int kNumber = 15;
    
    NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    NSMutableString *resultStr = [[NSMutableString alloc] init];
    srand((unsigned)time(0));
    for (int i = 0; i < kNumber; i++)
    {
        unsigned index = rand() % [sourceStr length];
        NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];
        [resultStr appendString:oneStr];
    }
    return resultStr;
}

8、后台返回支付数据进行支付

- (void)alipay
{
    NSString *appScheme = @"xxxxxxxx";
    [[AlipaySDK defaultService] payOrder:_dataDict[@"data"] fromScheme:appScheme callback:^(NSDictionary *resultDic) {
        //【callback处理支付结果】
        NSLog(@"reslut = %@",resultDic);
        if ([resultDic[@"resultStatus"] isEqual:@"9000"]) {
             [self shareAlertControllerWithMessage:@"支付成功"];
        }
        else if ([resultDic[@"resultStatus"] isEqual:@"8000"]) {
            [self shareAlertControllerWithMessage:@"正在处理中"];
        }
        else if ([resultDic[@"resultStatus"] isEqual:@"4000"]) {
            [self shareAlertControllerWithMessage:@"订单支付失败"];
        }
        else if ([resultDic[@"resultStatus"] isEqual:@"6001"]) {
            [self shareAlertControllerWithMessage:@"您已中途取消支付"];
        }
        else if ([resultDic[@"resultStatus"] isEqual:@"6002"]) {
            [self shareAlertControllerWithMessage:@"您的网络连接出错"];
        }
        else {
            [self shareAlertControllerWithMessage:@"支付失败"];
        }
    }];
}
//弹出框
- (void)shareAlertControllerWithMessage:(NSString *)message
{
    NSString *title = [NSString stringWithFormat:@"提示:%@", message];
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:@"" preferredStyle:UIAlertControllerStyleAlert];
    
    UIAlertAction *action = [UIAlertAction actionWithTitle:@"好的" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
       
        [alert dismissViewControllerAnimated:YES completion:nil];
        
    }];
    [alert addAction:action];
    [self presentViewController:alert animated:NO completion:nil];
}

你可能感兴趣的:(iOS-支付宝支付)