一:准备工作
第一种方法:手动导入 (因为之前用的时候,没有找到支付宝第三方库,所以用的是手动导入)
1.导入支付宝API demo中的 AlipaySDK.bundle AlipaySDK.framework 这两个文件导入项目(不要用API下载的这两个文件,添加进去会报错)
第二种方法:pod 'AlipaySDK-2.0', '~> 15.0.2' #支付宝 (这种方法,免去了配置依赖)(后面的版本号最好是加上,如果不加,下载的是本地最新的,不一定是线上最新的,想要查找最新的,用pod search AlipaySDK-2.0命令查找)
二:开始写代码了
还是先截图吧,这样看着清晰
1.在delegate.m文件中导入
2.URL Schemes 是自己自定义的,为了支付完成之后,跳回到自己的app,最好是带着alipay 有益于和创建的其他URL Schemes区分
3.在使用支付宝的地方,调起支付,就可以了
在使用支付的界面,导入头文件
#import
我们公司实现的支付宝的逻辑是这样的:
然后,我拿这个code,传给另一个接口,后台给我返回来一串appId,sign等混合到一起的字符串,然后就可以将得到的字符串传入调起支付宝代码里面,回调之后,会返回数字,通过返回的数据,可以判断成功或者失败原因,然后做相应的自定义的操作了
做项目的时候,出现的错误,以及原因 :原因:后台返回sign为空,后台给返回sign就可以了
成功:
相应代码如下:(代码可复制)
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];
}
}];
}