前段时间有人问过我支付宝中的回调怎么用,所以这里简单说明下。在集成支付宝支付的时候,会有两个回调,一个在AppDelegate中,一个在支付代码中,都是支付成功的回调,区别是,在AppDelegate中的回调是调用客户端支付成功后的回调(成功和失败),在支付处的回调是通过web支付成功的回调。代码如下:
//独立客户端回调函数
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{//如果极简 SDK 不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给 SDKif ([url.host isEqualToString:@"safepay"]) {[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {if ([[resultDic objectForKey:@"resultStatus"] isEqualToString:@"9000"]) {[[NSNotificationCenter defaultCenter] postNotificationName:@"paySucceed" object:nil];}}];}if ([url.host isEqualToString:@"platformapi"]){//支付宝钱包快登授权返回 authCode[[AlipaySDK defaultService] processAuthResult:url standbyCallback:^(NSDictionary *resultDic) {
// NSLog(@"result = %@",resultDic);}];}// [UMSocialSnsService handleOpenURL:url];return YES;
}
//获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncodeid<DataSigner> 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) {if ([[resultDic objectForKey:@"resultStatus"] isEqualToString:@"9000"]) {[[NSNotificationCenter defaultCenter] postNotificationName:@"paySucceed" object:nil];//支付成功后进行的操作PaySuccessViewController *paySuccessVC=[[PaySuccessViewController alloc]init];[self.navigationController pushViewController:paySuccessVC animated:YES];}else{//支付失败后进行的操作PayErrorViewController *payErrorVC=[[PayErrorViewController alloc]init];[self.navigationController pushViewController:payErrorVC animated:YES];}}];}
这就是存在于支付宝中的两处回调。
还需要注意的是,支付成功怎么返回到自己的应用中,这里需要设置一个东西:
//支付宝支付代码部分的代码,确保支付成功或者失败可以回到自己的应用中NSString *appScheme = @"XXXXXXX";
同事需要设置应用中另一个地方,在工程中选中target
写上appScheme的值,确保代码和此处的是一摸一样的,才能成功回到应用中。
补充:在iOS10的系统中,因为增加了左上角自带的返回按钮可以返回到之前的app中,当点击这个按钮后的回调就没有了,那如何监听这个按钮呢,可以查看这篇博客:点击前往