iOS支付宝支付成功后不跳回App的实现方法
一、整体流程
首先,我们需要了解整个支付宝支付成功后不跳回App的流程。下面是一张简单的表格,展示了整个流程的步骤:
步骤 | 功能 |
---|---|
1. App发起支付宝支付请求 | App向支付宝发起支付请求,传递支付相关的参数。 |
2. 用户在支付宝App中支付 | 用户在支付宝App中完成支付操作并成功支付。 |
3. 支付宝向App发送回调 | 支付宝将支付结果以回调的方式发送给App。 |
4. App处理支付结果 | App接收到支付宝的回调后,处理支付结果,可以进行本地逻辑处理或跳转到指定页面。 |
二、具体实现步骤
下面将详细介绍每一步需要做什么,并给出相应的代码示例。
1. App发起支付宝支付请求
首先,我们需要在App中发起支付宝支付请求。这需要使用AlipaySDK提供的接口来完成。
// 引入AlipaySDK头文件
#import <AlipaySDK/AlipaySDK.h>
// 构建支付宝支付请求数据
NSString *orderString = @"<支付宝订单信息>";
// 调用支付宝SDK发起支付请求
[[AlipaySDK defaultService] payOrder:orderString fromScheme:@"<你的AppScheme>" callback:^(NSDictionary *resultDic) {
// 支付结果回调处理
[self handleAlipayResult:resultDic];
}];
其中,orderString
是支付宝订单信息,可以由服务器生成并传递给App。<你的AppScheme>
是你在Info.plist中设定的URL Scheme,用于支付宝支付完成后跳回App。
2. 用户在支付宝App中支付
用户会在支付宝App中完成支付操作,这部分由支付宝App内部处理,我们无需干预。
3. 支付宝向App发送回调
支付宝支付完成后,会以回调的方式将支付结果发送给App。我们需要在AppDelegate中实现相关的回调方法。
// AppDelegate.m
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
// 处理支付宝回调URL
if ([url.host isEqualToString:@"safepay"]) {
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
// 支付结果回调处理
[self handleAlipayResult:resultDic];
}];
}
return YES;
}
在AppDelegate
的application:openURL:options:
方法中,我们判断URL的host是否为safepay
,如果是,则调用支付宝SDK的processOrderWithPaymentResult:standbyCallback:
方法处理支付结果。
4. App处理支付结果
在上一步中,我们已经将支付结果传递给了handleAlipayResult:
方法,现在我们需要根据支付结果进行相应的处理。可以根据实际需求进行自定义操作,比如显示支付结果页面、刷新订单列表等。
- (void)handleAlipayResult:(NSDictionary *)resultDic {
NSInteger resultStatus = [resultDic[@"resultStatus"] integerValue];
if (resultStatus == 9000) {
// 支付成功
// 进行相应的处理逻辑,比如跳转到支付成功页面
// [self showPaymentSuccessViewController];
} else {
// 支付失败
// 进行相应的处理逻辑,比如显示支付失败提示
// [self showPaymentFailureAlert];
}
}
在handleAlipayResult:
方法中,我们可以根据resultDic
中的resultStatus
字段判断支付结果,9000
表示支付成功,其他状态码表示支付失败。根据实际情况进行相应的处理逻辑即可。
三、类图
下面是支付宝支付成功后不跳回App的类图,使用mermaid语法绘制:
classDiagram
class App {
- orderString : String
+ pay()
+ handleAlipayResult(resultDic: NSDictionary)
}
class AppDelegate {
+ application(application: UIApplication, openURL url