RNUnionpay.m
3.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#import "RNUnionpay.h"
#import "UPPaymentControl.h"
@implementation RNUnionpay
- (instancetype)init
{
self = [super init];
if (self) {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleOpenURL:) name:@"RCTOpenURLNotification" object:nil];
}
self.schemeStr = nil;
NSArray *urlTypes = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleURLTypes"];
if (urlTypes != nil && urlTypes.count > 0) {
NSArray *urlSchemes = [urlTypes.firstObject objectForKey:@"CFBundleURLSchemes"];
if(urlSchemes.count > 0) {
self.schemeStr = [urlSchemes firstObject];
}
}
return self;
}
+ (BOOL)requiresMainQueueSetup{
return YES;
}
- (NSArray<NSString *> *)supportedEvents
{
return @[@"UnionPayResponse"];
}
- (BOOL)handleOpenURL:(NSNotification *)aNotification
{
NSString * aURLString = [aNotification userInfo][@"url"];
NSURL * aURL = [NSURL URLWithString:aURLString];
[[UPPaymentControl defaultControl] handlePaymentResult:aURL completeBlock:^(NSString *code, NSDictionary *data) {
NSString *sign;
NSMutableDictionary *body = [[NSMutableDictionary alloc]init];
[body setValue:code forKey:@"pay_result"];
//结果code为成功时,去商户后台查询一下确保交易是成功的再展示成功
if([code isEqualToString:@"success"]) {
[body setValue:@"支付成功!" forKey:@"msg"];
//判断签名数据是否存在
//如果没有签名数据,建议商户app后台查询交易结果
if(data == nil){
[body setValue:nil forKey:@"sign"];
} else {
//数据从NSDictionary转换为NSString
NSData *signData = [NSJSONSerialization dataWithJSONObject:data
options:0
error:nil];
sign = [[NSString alloc] initWithData:signData encoding:NSUTF8StringEncoding];
[body setValue:sign forKey:@"sign"];
}
}
else if([code isEqualToString:@"fail"]) { //交易失败
[body setValue:@"支付失败!" forKey:@"msg"];
}
else if([code isEqualToString:@"cancel"]) { //交易取消
[body setValue:@"用户取消了支付" forKey:@"msg"];
}
[self sendEventWithName:@"UnionPayResponse" body:body];
}];
return YES;
}
RCT_EXPORT_MODULE(UnionPayModule)
RCT_EXPORT_METHOD(startPay:(NSString*)tn :(NSString*)mode)
{
//当获得的tn不为空时,调用支付接口
if (tn != nil && tn.length > 0){
dispatch_async(dispatch_get_main_queue(), ^(void) {
UIWindow *window = [UIApplication sharedApplication].keyWindow;
UIViewController *rootViewController = window.rootViewController;
[[UPPaymentControl defaultControl] startPay:tn
fromScheme:self.schemeStr mode:mode
viewController:rootViewController];
});
}
}
/// 当判断用户手机上已安装银联App,商户客户端可以做相应个性化处理
/// @param resolve
/// @param reject
RCT_EXPORT_METHOD(isPaymentAppInstalled:(RCTPromiseResolveBlock)resolve :(RCTPromiseRejectBlock)reject)
{
if([[UPPaymentControl defaultControl] isPaymentAppInstalled]) {
resolve(@(YES));
} else {
resolve(@(NO));
}
}
@end