65 lines
2.4 KiB
Objective-C
65 lines
2.4 KiB
Objective-C
//
|
|
// PayVM.m
|
|
//
|
|
|
|
#import "PayVM.h"
|
|
#import "KBNetworkManager.h"
|
|
#import "KBAPI.h"
|
|
#import "KBHUD.h"
|
|
|
|
@implementation PayVM
|
|
|
|
- (void)applePayReqWithParams:(NSDictionary *)params
|
|
needShow:(BOOL)needShow
|
|
completion:(KBPayCompletion)completion {
|
|
if (needShow) { [KBHUD show]; }
|
|
|
|
[[KBNetworkManager shared] POST:KB_API_IAP_VERIFY jsonBody:params headers:nil completion:^(id _Nullable jsonOrData, NSURLResponse * _Nullable response, NSError * _Nullable error) {
|
|
if (needShow) { [KBHUD dismiss]; }
|
|
|
|
if (error) {
|
|
if (completion) completion(ERROR_CODE, error.localizedDescription ?: KBLocalized(@"Network error"));
|
|
return;
|
|
}
|
|
|
|
NSInteger sta = [self.class extractStatusFromResponseObject:jsonOrData response:response];
|
|
NSString *msg = [self.class extractMessageFromResponseObject:jsonOrData] ?: (sta == SUCCESS_CODE ? @"OK" : KBLocalized(@"Failed"));
|
|
if (completion) completion(sta, msg);
|
|
}];
|
|
}
|
|
|
|
#pragma mark - Helpers
|
|
|
|
+ (NSInteger)extractStatusFromResponseObject:(id)obj response:(NSURLResponse *)resp {
|
|
// 优先从 JSON 提取 code/status/success
|
|
if ([obj isKindOfClass:NSDictionary.class]) {
|
|
NSDictionary *d = (NSDictionary *)obj;
|
|
id code = d[@"code"] ?: d[@"status"] ?: d[@"retcode"];
|
|
if ([code isKindOfClass:NSNumber.class]) {
|
|
return [((NSNumber *)code) integerValue] == 0 ? SUCCESS_CODE : ERROR_CODE;
|
|
}
|
|
if ([code isKindOfClass:NSString.class]) {
|
|
// 常见:"0" 视为成功
|
|
return [((NSString *)code) integerValue] == 0 ? SUCCESS_CODE : ERROR_CODE;
|
|
}
|
|
id success = d[@"success"] ?: d[@"ok"];
|
|
if ([success respondsToSelector:@selector(boolValue)]) {
|
|
return [success boolValue] ? SUCCESS_CODE : ERROR_CODE;
|
|
}
|
|
}
|
|
// 无明显字段,按 HTTP 2xx 视为成功
|
|
NSInteger http = 0;
|
|
if ([resp isKindOfClass:NSHTTPURLResponse.class]) { http = ((NSHTTPURLResponse *)resp).statusCode; }
|
|
return (http >= 200 && http < 300) ? SUCCESS_CODE : ERROR_CODE;
|
|
}
|
|
|
|
+ (NSString *)extractMessageFromResponseObject:(id)obj {
|
|
if (![obj isKindOfClass:NSDictionary.class]) return nil;
|
|
NSDictionary *d = (NSDictionary *)obj;
|
|
NSString *msg = d[@"message"] ?: d[@"msg"] ?: d[@"error"];
|
|
if (![msg isKindOfClass:NSString.class]) msg = nil;
|
|
return msg;
|
|
}
|
|
|
|
@end
|