前段时间有人问过我支付宝中的回调怎么用,所以这里简单说明下。在集成支付宝支付的时候,会有两个回调,一个在AppDelegate中,一个在支付代码中,都是支付成功的回调,区别是,在AppDelegate中的回调是调用客户端支付成功后的回调(成功和失败),在支付处的回调是通过web支付成功的回调。代码如下:
//独立客户端回调函数
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
//如果极简 SDK 不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给 SDK
if ([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编码和UrlEncode
id<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中,当点击这个按钮后的回调就没有了,那如何监听这个按钮呢,可以查看这篇博客:点击前往