.支付宝支付
我学习的方法是:1.下载SDK 和Demo 然后运行一遍
2.运用在自己实际的项目中
学习结果: 1.在需要用到支付宝进行支付功能的地方写:
1) (我不需要处理订单信息,因为我们公司会让我们调用接口获得处理后的订单信息,所以下面的payOrder是调用接口获取到的)
2) 下面的KURLscheme 就是支付宝 要返回能找到你的APP的重要信息。他就是 你APP的bundle ID
注意的是要添加一个东西,就是要在target-》info -》URL Types 里面增加 URLScheme:就是你的bundleID 那个identify:alipay
增加完你就会发现 info.plist里面也有了
[[ [[AlipaySDK defaultService] payOrder:payOrder fromScheme:kURLscheme callback:^(NSDictionary *resultDic)
{
NSLog(@"reslut = %@",resultDic);
NSNumber *resultStatus = [resultDic objectForKey:@"resultStatus"];
if([resultStatus intValue] == 9000){
NSLog(@"支付宝支付------------");
[self alipaysuccess];
}else{
[SVProgressHUD showErrorWithStatus:@"交易失败"];
}
}];
重要提醒: 如果你的手机没有装支付宝客户端,那么就会用网页支付,然后返回回来就是调用callback里面的方法
如果你的手机装了支付宝客户端,就是下面我会写的
3.你如果调用了上面的方法,而且信息正确的话就可以跳转到支付宝客户端或者支付宝的网页进行支付
4.支付完,返回到你的APP,如果你是支付宝客户端返回回来,那么你要在你的AppDelegate.m文件里面增加相关的方法
1)handleOpenURL
-
(AlixPayResult )handleOpenURL:(NSURL )url {
AlixPayResult * result = nil;
if (url != nil && [[url host] compare:@"safepay"] == 0) {
result = [self resultFromURL:url];
}
return result;
}
2)resultFromURL
(AlixPayResult )resultFromURL:(NSURL )url {
NSString * query = [[url query] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
return [[AlixPayResult alloc] initWithString:query];
}
3)// NOTE: 9.0以后使用新API接口 openURL (微信支付返回也会进入这个方法,所以要做个判断)
- (BOOL)application:(UIApplication )app openURL:(NSURL )url options:(NSDictionary<NSString, id> )options
{
NSString op=options[@"UIApplicationOpenURLOptionsSourceApplicationKey"];
if([op isEqualToString:@"com.tencent.xin"]) //如果是微信的
{
return [WXApi handleOpenURL:url delegate:self];
}
else{
if ([url.host isEqualToString:@"safepay"])
{ //跳转支付宝钱包进行支付 处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary resultDic)
{
NSLog(@"result = %@",resultDic);
}];
[self parse:url application:app];
}
}
return YES;
}
4) application
-
(void)parse:(NSURL )url application:(UIApplication )application {
[SVProgressHUD dismiss];
//结果处理 AlixPayResult* result = [self handleOpenURL:url];
if (result) {
if (result.statusCode == 9000) { //交易成功 [[NSNotificationCenter defaultCenter] postNotificationName:@"paySuccess" object:nil]; [[NSNotificationCenter defaultCenter] postNotificationName:@"alipaysuccess" object:nil]; } else { //交易失败 [[NSNotificationCenter defaultCenter] postNotificationName:@"alipayError" object:nil]; }
} else { //失败 [[NSNotificationCenter defaultCenter] postNotificationName:@"alipayError" object:nil]; }
}
就是上面几个方法要写,最后处理结果的时候,用到了订阅者和发布者模式,所以要在你的调用支付功能的页面加上,(写在viewDidLoad方法里面) -
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(alipaysuccess) name:@"alipaysuccess" object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(alipayError) name:@"alipayError" object:nil];
并且要写上这两个方法
#pragma mark 支付结果
-(void)alipaysuccess{
// NSLog(@"支付成功");
[SVProgressHUD showSuccessWithStatus:@"支付成功"];
[self.navigationController popViewControllerAnimated:YES];
}
-(void)alipayError{
// NSLog(@"支付失败");
[SVProgressHUD showErrorWithStatus:@"支付失败"];
}