更新UI
This commit is contained in:
33
keyBoard/Class/Pay/VM/PayVM.h
Normal file
33
keyBoard/Class/Pay/VM/PayVM.h
Normal file
@@ -0,0 +1,33 @@
|
||||
//
|
||||
// PayVM.h
|
||||
// 支付相关 VM:封装 Apple IAP 验签请求
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/// 统一的支付回调:sta 为状态码(0 成功,非 0 失败),msg 为后端返回的消息
|
||||
typedef void(^KBPayCompletion)(NSInteger sta, NSString * _Nullable msg);
|
||||
|
||||
/// 统一状态码(与原 Swift 代码的 succCode / errorCode 语义一致)
|
||||
#ifndef KB_PAY_SUCC_CODE
|
||||
#define KB_PAY_SUCC_CODE 0
|
||||
#endif
|
||||
#ifndef KB_PAY_ERROR_CODE
|
||||
#define KB_PAY_ERROR_CODE 1
|
||||
#endif
|
||||
|
||||
@interface PayVM : NSObject
|
||||
|
||||
/// Apple 内购验签
|
||||
/// params 形如:@{ @"payment": @{ @"receipt": receipt, @"type": @(type) } }
|
||||
/// needShow:是否显示加载 HUD
|
||||
- (void)applePayReqWithParams:(NSDictionary *)params
|
||||
needShow:(BOOL)needShow
|
||||
completion:(KBPayCompletion)completion;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
65
keyBoard/Class/Pay/VM/PayVM.m
Normal file
65
keyBoard/Class/Pay/VM/PayVM.m
Normal file
@@ -0,0 +1,65 @@
|
||||
//
|
||||
// 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(KB_PAY_ERROR_CODE, error.localizedDescription ?: @"网络错误");
|
||||
return;
|
||||
}
|
||||
|
||||
NSInteger sta = [self.class extractStatusFromResponseObject:jsonOrData response:response];
|
||||
NSString *msg = [self.class extractMessageFromResponseObject:jsonOrData] ?: (sta == KB_PAY_SUCC_CODE ? @"OK" : @"失败");
|
||||
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 ? KB_PAY_SUCC_CODE : KB_PAY_ERROR_CODE;
|
||||
}
|
||||
if ([code isKindOfClass:NSString.class]) {
|
||||
// 常见:"0" 视为成功
|
||||
return [((NSString *)code) integerValue] == 0 ? KB_PAY_SUCC_CODE : KB_PAY_ERROR_CODE;
|
||||
}
|
||||
id success = d[@"success"] ?: d[@"ok"];
|
||||
if ([success respondsToSelector:@selector(boolValue)]) {
|
||||
return [success boolValue] ? KB_PAY_SUCC_CODE : KB_PAY_ERROR_CODE;
|
||||
}
|
||||
}
|
||||
// 无明显字段,按 HTTP 2xx 视为成功
|
||||
NSInteger http = 0;
|
||||
if ([resp isKindOfClass:NSHTTPURLResponse.class]) { http = ((NSHTTPURLResponse *)resp).statusCode; }
|
||||
return (http >= 200 && http < 300) ? KB_PAY_SUCC_CODE : KB_PAY_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
|
||||
|
||||
Reference in New Issue
Block a user