支付宝支付

一:准备工作

第一种方法:手动导入  (因为之前用的时候,没有找到支付宝第三方库,所以用的是手动导入)

1.导入支付宝API demo中的  AlipaySDK.bundle  AlipaySDK.framework  这两个文件导入项目(不要用API下载的这两个文件,添加进去会报错)

2.添加依赖:支付宝支付_第1张图片

第二种方法:pod 'AlipaySDK-2.0', '~> 15.0.2'   #支付宝  (这种方法,免去了配置依赖)(后面的版本号最好是加上,如果不加,下载的是本地最新的,不一定是线上最新的,想要查找最新的,用pod search AlipaySDK-2.0命令查找)

二:开始写代码了

还是先截图吧,这样看着清晰

1.在delegate.m文件中导入


支付宝支付_第2张图片

2.URL Schemes 是自己自定义的,为了支付完成之后,跳回到自己的app,最好是带着alipay 有益于和创建的其他URL Schemes区分

支付宝支付_第3张图片


3.在使用支付宝的地方,调起支付,就可以了

在使用支付的界面,导入头文件

#import //支付宝

我们公司实现的支付宝的逻辑是这样的:

支付宝支付_第4张图片

确认支付的时候,我先下一个单子,后台给我一个code

然后,我拿这个code,传给另一个接口,后台给我返回来一串appId,sign等混合到一起的字符串,然后就可以将得到的字符串传入调起支付宝代码里面,回调之后,会返回数字,通过返回的数据,可以判断成功或者失败原因,然后做相应的自定义的操作了

支付宝支付_第5张图片

做项目的时候,出现的错误,以及原因   :原因:后台返回sign为空,后台给返回sign就可以了

支付宝支付_第6张图片

成功:

支付宝支付_第7张图片

相应代码如下:(代码可复制)

1.在delegate.m文件中导入

#import "AppDelegate.h"

#import //导入支付宝

#pragma mark---支付宝

- (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) {

            NSLog(@"result = %@",resultDic);

        }];

    }

    return YES;

}


// NOTE: 9.0以后使用新API接口

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options

{

    if ([url.host isEqualToString:@"safepay"]) {

        //跳转支付宝钱包进行支付,处理支付结果

        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {

            NSLog(@"result = %@",resultDic);

        }];

    }

    return YES;

}


#pragma mark---支付宝支付请求的接口

- (void)requestZhiFuBaoDate:(NSString *)payCode

{

    NSMutableDictionary * dict_parameter=[[NSMutableDictionary alloc] init];

    [dict_parameter setValue:@"alipay" forKey:@"payment_type"];

    [dict_parameter setValue:[userDefault valueForKey:@"depotId"] forKey:@"depot_id"];

    [dict_parameter setValue:[userDefault valueForKey:@"custId"] forKey:@"cust_id"];

    [dict_parameter setValue:[userDefault valueForKey:@"custType"] forKey:@"cust_type"];

    [dict_parameter setValue:payCode forKey:@"order_code"];

    [MyHttpRequest post:zhifubaoPayDateUrl andParam:dict_parameter finish:^(NSData *data, NSDictionary *obj, NSError *error) {

        if ([[NSString stringWithFormat:@"%@",obj[@"status"]] isEqualToString:@"1"]) {

            // NOTE: 调用支付结果开始支付

            [[AlipaySDK defaultService] payOrder:obj[@"info"] fromScheme:@"alipayZhicangda" callback:^(NSDictionary *resultDic) {

                NSLog(@"reslut444 = %@",resultDic);

                NSInteger returnResult =0;

                returnResult = [resultDic[@"resultStatus"] integerValue];

                [singleTon shareSingleTon].successDict=@{@"name":_detailDataDictionary[@"cust_info"][@"contact"],@"phone":_detailDataDictionary[@"cust_info"][@"telephone"],@"address":[NSString stringWithFormat:@"%@%@%@%@",_detailDataDictionary[@"cust_info"][@"province"],_detailDataDictionary[@"cust_info"][@"city"],_detailDataDictionary[@"cust_info"][@"district"],_detailDataDictionary[@"cust_info"][@"address"]],@"payMoney":[NSString stringWithFormat:@"¥%.2f",[_detailDataDictionary[@"cart_list"][@"total_price"] doubleValue]]};

                if (returnResult == 9000) {//支付成功

                    PaySuccessdCtrl * payCtrl=[[PaySuccessdCtrl alloc] init];

                    [self.navigationController pushViewController:payCtrl animated:NO];

                }else{//支付失败

                    [singleTon shareSingleTon].failDict=@{@"payOrder":obj[@"info"],@"order_code":payCode,@"shopName":_detailDataDictionary[@"cust_info"][@"cust_name"],@"payMoney":[NSString stringWithFormat:@"%.2f",[_detailDataDictionary[@"cart_list"][@"total_price"] doubleValue]]};

                    NSString * orderFailInfo=@"";

                    switch (returnResult) {

                        case 8000:

                            orderFailInfo=@"订单正在处理中...";

                            break;

                        case 4000:

                            orderFailInfo=@"订单支付失败";

                            break;

                        case 5000:

                            orderFailInfo=@"订单重复请求";

                            break;

                        case 6001:

                            orderFailInfo=@"订单取消";

                            break;

                        case 6002:

                            orderFailInfo=@"网络连接出错";

                            break;

                        case 6004:

                            orderFailInfo=@"支付结果未知,请查看账单";

                            break;

                        default:

                            break;

                    }

                    PayFailCtrl * payFailCtrl=[[PayFailCtrl alloc] init];

                    payFailCtrl.failInfo=orderFailInfo;

                    [self.navigationController pushViewController:payFailCtrl animated:NO];

                }

            }];

        }else{

            UIAlertController *noHaveCameraAlertVC = [UIAlertController alertControllerWithTitle:@"提示" message:obj[@"info"] preferredStyle:UIAlertControllerStyleAlert];

            UIAlertAction * okAction1 = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {

            }];

            [noHaveCameraAlertVC addAction:okAction1];

            [self presentViewController:noHaveCameraAlertVC animated:YES completion:nil];

        }

    }];

}




你可能感兴趣的:(ios支付)