JXShareManage.m 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508
  1. //
  2. // JXShareManage.m
  3. // shiku_im
  4. //
  5. // Created by p on 2018/11/1.
  6. // Copyright © 2018年 Reese. All rights reserved.
  7. //
  8. #import "JXShareManage.h"
  9. #import "JXRelayVC.h"
  10. #ifdef Meeting_Version
  11. #import "JXAVCallViewController.h"
  12. #endif
  13. #import "JXSkPayVC.h"
  14. #import "JXVerifyPayVC.h"
  15. #import "JXPayPasswordVC.h"
  16. #import "JXWebLoginVC.h"
  17. @interface JXShareManage ()<JXSkPayVCDelegate>
  18. @property (nonatomic, assign) BOOL isAuth;
  19. @property (nonatomic, assign) BOOL isShare;
  20. @property (nonatomic, assign) BOOL isMeet;
  21. @property (nonatomic, assign) BOOL isSkPay;
  22. @property (nonatomic, assign) BOOL isSkShare;
  23. @property (nonatomic, assign) BOOL isWebLogin;
  24. @property (nonatomic, copy) NSString *urlStr;
  25. @property (nonatomic, strong) JXAuthViewController *authVC;
  26. @property (nonatomic, strong) JXRelayVC *relayVC;
  27. @property (nonatomic, strong) JXWebLoginVC *webLoginVC;
  28. @property (nonatomic, assign) BOOL isWebAuth;
  29. @property (nonatomic, strong) NSDictionary *orderDic;
  30. @property (nonatomic, strong) JXVerifyPayVC * verVC;
  31. @property (nonatomic, strong) NSDictionary *skPayDic;
  32. @property (nonatomic, strong) NSDictionary *skShareDic;
  33. @end
  34. @implementation JXShareManage
  35. +(instancetype)sharedManager {
  36. static dispatch_once_t onceToken;
  37. static JXShareManage *instance;
  38. dispatch_once(&onceToken, ^{
  39. instance = [[JXShareManage alloc] init];
  40. });
  41. return instance;
  42. }
  43. - (instancetype)init {
  44. if ([super init]) {
  45. [g_notify addObserver:self selector:@selector(systemLoginNotif:) name:kSystemLoginNotifaction object:nil];
  46. [g_notify addObserver:self selector:@selector(onXmppLoginChanged:) name:kXmppLoginNotifaction object:nil];
  47. }
  48. return self;
  49. }
  50. - (void)systemLoginNotif:(NSNotification *)notif {
  51. if (self.isAuth) {
  52. self.isAuth = NO;
  53. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  54. NSString *urlSchemes = [self subString:self.urlStr withString:@"urlSchemes"];
  55. NSString *appId = [self subString:self.urlStr withString:@"appId"];
  56. NSString *appSecret = [self subString:self.urlStr withString:@"appSecret"];
  57. NSString *callbackUrl = [self subString:self.urlStr withString:@"callbackUrl"];
  58. callbackUrl = [callbackUrl stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  59. self.authVC = [[JXAuthViewController alloc] init];
  60. self.authVC.urlSchemes = urlSchemes;
  61. self.authVC.appId = appId;
  62. self.authVC.isWebAuth = self.isWebAuth;
  63. self.authVC.callbackUrl = callbackUrl;
  64. self.authVC.appSecret = appSecret;
  65. UIViewController *lastVC = (UIViewController *)g_navigation.subViews.lastObject;
  66. [lastVC presentViewController:self.authVC animated:YES completion:nil];
  67. });
  68. }else if (self.isShare){
  69. [g_server openOpenAuthInterfaceWithUserId:g_myself.userId appId:[self subString:self.urlStr withString:@"appId"] appSecret:[self subString:self.urlStr withString:@"appSecret"] type:2 toView:self];
  70. }
  71. if (self.isSkPay) {
  72. [g_server payGetOrderInfoWithAppId:[self.orderDic objectForKey:@"appId"] prepayId:[self.orderDic objectForKey:@"prepayId"] toView:self];
  73. }
  74. if (self.isWebLogin) {
  75. self.webLoginVC = [[JXWebLoginVC alloc] init];
  76. NSString *callbackUrl = [self subString:self.urlStr withString:@"callbackUrl"];
  77. self.webLoginVC.callbackUrl = callbackUrl;
  78. UIViewController *lastVC = (UIViewController *)g_navigation.subViews.lastObject;
  79. [lastVC presentViewController:self.webLoginVC animated:YES completion:nil];
  80. }
  81. }
  82. -(void)onXmppLoginChanged:(NSNumber*)isLogin{
  83. if([JXXMPP sharedInstance].isLogined == login_status_yes){
  84. if (self.isShare) {
  85. self.isShare = NO;
  86. JXMessageObject *msg = [[JXMessageObject alloc] init];
  87. msg.type = [NSNumber numberWithInt:kWCMessageTypeShare];
  88. msg.content = Localized(@"JX_[Link]");
  89. NSDictionary *dict = @{
  90. @"url" : [self subString:self.urlStr withString:@"url"],
  91. @"downloadUrl" : [self subString:self.urlStr withString:@"downloadUrl"],
  92. @"title" : [self subString:self.urlStr withString:@"title"],
  93. @"subTitle" : [self subString:self.urlStr withString:@"subTitle"],
  94. @"imageUrl" : [self subString:self.urlStr withString:@"imageUrl"],
  95. @"appName" : [self subString:self.urlStr withString:@"appName"],
  96. @"appIcon" : [self subString:self.urlStr withString:@"appIcon"],
  97. @"urlSchemes" : [self subString:self.urlStr withString:@"urlSchemes"]
  98. };
  99. SBJsonWriter * OderJsonwriter = [SBJsonWriter new];
  100. NSString * jsonString = [OderJsonwriter stringWithObject:dict];
  101. msg.objectId = jsonString;
  102. self.relayVC = [[JXRelayVC alloc] init];
  103. self.relayVC.isShare = YES;
  104. self.relayVC.shareSchemes = [self subString:self.urlStr withString:@"urlSchemes"];
  105. NSMutableArray *array = [NSMutableArray arrayWithObject:msg];
  106. self.relayVC.relayMsgArray = array;
  107. UIViewController *lastVC = (UIViewController *)g_navigation.subViews.lastObject;
  108. [lastVC presentViewController:self.relayVC animated:YES completion:nil];
  109. }
  110. // 网页拉起音视频会议
  111. if (self.isMeet) {
  112. self.isMeet = NO;
  113. NSString *type = [self subString:self.urlStr withString:@"type"];
  114. NSString *room = [self subString:self.urlStr withString:@"room"];
  115. BOOL isAudio = ![type isEqualToString:@"video"];
  116. [self startMeetWithIsAudio:isAudio roomNum:room];
  117. }
  118. // 网页分享
  119. if (self.isSkShare) {
  120. [self skShareAction];
  121. }
  122. }
  123. }
  124. - (void)startMeetWithIsAudio:(BOOL)isAudio roomNum:(NSString *)roomNum {
  125. #ifdef Meeting_Version
  126. JXAVCallViewController *avVC = [[JXAVCallViewController alloc] init];
  127. avVC.roomNum = roomNum;
  128. avVC.isAudio = isAudio;
  129. avVC.isGroup = YES;
  130. // avVC.toUserName = MY_USER_NAME;
  131. avVC.view.frame = [UIScreen mainScreen].bounds;
  132. [g_window addSubview:avVC.view];
  133. #endif
  134. }
  135. // 第三方APP 跳转回调
  136. -(BOOL) handleOpenURL:(NSURL *) url delegate:(id) delegate {
  137. [self.authVC dismissViewControllerAnimated:YES completion:nil];
  138. [self.relayVC dismissViewControllerAnimated:YES completion:nil];
  139. NSRange range = [[url absoluteString] rangeOfString:@"www.shikuios.com"];
  140. if (range.location != NSNotFound && range.length > 0) {
  141. self.urlStr = [url absoluteString];
  142. }else {
  143. NSString *urlStr = [url absoluteString];
  144. urlStr = [urlStr stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  145. self.urlStr = urlStr;
  146. }
  147. NSString *type = [self subString:self.urlStr withString:@"type"];
  148. // 网页拉起音视频会议
  149. NSRange meetRange = [self.urlStr rangeOfString:@"meet.youjob.co"];
  150. if (meetRange.location != NSNotFound && meetRange.length > 0) {
  151. if ([JXXMPP sharedInstance].isLogined == login_status_yes) {
  152. self.isMeet = NO;
  153. NSString *room = [self subString:self.urlStr withString:@"room"];
  154. BOOL isAudio = ![type isEqualToString:@"video"];
  155. [self startMeetWithIsAudio:isAudio roomNum:room];
  156. return YES;
  157. }else {
  158. self.isMeet = YES;
  159. return NO;
  160. }
  161. }
  162. // 网页支付
  163. NSRange skPayRange = [self.urlStr rangeOfString:@"skPay"];
  164. if (skPayRange.location != NSNotFound && skPayRange.length > 0) {
  165. self.orderDic = @{
  166. @"appId" : [self subString:self.urlStr withString:@"appId"],
  167. @"prepayId" : [self subString:self.urlStr withString:@"prepayId"],
  168. @"sign" : [self subString:self.urlStr withString:@"sign"]
  169. };
  170. if (!g_server.isLogin) {
  171. self.isSkPay = YES;
  172. return NO;
  173. }else {
  174. [g_server payGetOrderInfoWithAppId:[self.orderDic objectForKey:@"appId"] prepayId:[self.orderDic objectForKey:@"prepayId"] toView:self];
  175. return YES;
  176. }
  177. }
  178. // 网页分享
  179. NSRange skShareRange = [self.urlStr rangeOfString:@"skShare"];
  180. if (skShareRange.location != NSNotFound && skShareRange.length > 0) {
  181. self.skShareDic = @{
  182. @"appId" : [self subString:self.urlStr withString:@"appId"],
  183. @"appName" : [self subString:self.urlStr withString:@"appName"],
  184. @"appIcon" : [self subString:self.urlStr withString:@"appIcon"],
  185. @"title" : [self subString:self.urlStr withString:@"title"],
  186. @"subTitle" : [self subString:self.urlStr withString:@"subTitle"],
  187. @"url" : [self subString:self.urlStr withString:@"url"],
  188. @"downloadUrl" : [self subString:self.urlStr withString:@"downloadUrl"],
  189. @"imageUrl" : [self subString:self.urlStr withString:@"imageUrl"]
  190. };
  191. if (g_xmpp.isLogined != login_status_yes) {
  192. self.isSkShare = YES;
  193. return NO;
  194. }else {
  195. [self skShareAction];
  196. return YES;
  197. }
  198. }
  199. // h5一键登录
  200. NSRange h5Range = [self.urlStr rangeOfString:@"H5login"];
  201. if (h5Range.location != NSNotFound && h5Range.length > 0) {
  202. if (g_server.isLogin) {
  203. self.webLoginVC = [[JXWebLoginVC alloc] init];
  204. NSString *callback = [self subString:self.urlStr withString:@"callback"];
  205. SBJsonParser *resultParser = [[SBJsonParser alloc] init] ;
  206. NSDictionary *resultObject = [resultParser objectWithString:callback];
  207. self.webLoginVC.callbackUrl = [resultObject objectForKey:@"callbackUrl"];
  208. UIViewController *lastVC = (UIViewController *)g_navigation.subViews.lastObject;
  209. [lastVC presentViewController:self.webLoginVC animated:YES completion:nil];
  210. }else {
  211. self.isWebLogin = YES;
  212. }
  213. return YES;
  214. }
  215. // 网页第三方认证
  216. range = [self.urlStr rangeOfString:@"www.shikuios.com"];
  217. if (range.location != NSNotFound && range.length > 0) {
  218. self.isWebAuth = YES;
  219. type = @"Auth";
  220. }else {
  221. self.isWebAuth = NO;
  222. }
  223. if (!type) {
  224. return NO;
  225. }
  226. if ([type isEqualToString:@"Auth"]) {
  227. if (!g_server.isLogin) {
  228. self.isAuth = YES;
  229. }
  230. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  231. if (!g_server.isLogin) {
  232. self.isAuth = YES;
  233. }else {
  234. NSString *urlSchemes = [self subString:self.urlStr withString:@"urlSchemes"];
  235. NSString *appId = [self subString:self.urlStr withString:@"appId"];
  236. NSString *appSecret = [self subString:self.urlStr withString:@"appSecret"];
  237. NSString *callbackUrl = [self subString:self.urlStr withString:@"callbackUrl"];
  238. callbackUrl = [callbackUrl stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  239. self.authVC = [[JXAuthViewController alloc] init];
  240. self.authVC.urlSchemes = urlSchemes;
  241. self.authVC.appId = appId;
  242. self.authVC.isWebAuth = self.isWebAuth;
  243. self.authVC.callbackUrl = callbackUrl;
  244. self.authVC.appSecret = appSecret;
  245. UIViewController *lastVC = (UIViewController *)g_navigation.subViews.lastObject;
  246. [lastVC presentViewController:self.authVC animated:YES completion:nil];
  247. }
  248. });
  249. }else {
  250. if (g_server.isLogin) {
  251. [g_server openOpenAuthInterfaceWithUserId:g_myself.userId appId:[self subString:self.urlStr withString:@"appId"] appSecret:[self subString:self.urlStr withString:@"appSecret"] type:2 toView:self];
  252. }else {
  253. self.isShare = YES;
  254. }
  255. }
  256. return YES;
  257. }
  258. - (void)skShareAction {
  259. JXMessageObject *msg = [[JXMessageObject alloc] init];
  260. msg.type = [NSNumber numberWithInt:kWCMessageTypeShare];
  261. msg.content = Localized(@"JX_[Link]");
  262. SBJsonWriter * OderJsonwriter = [SBJsonWriter new];
  263. NSString * jsonString = [OderJsonwriter stringWithObject:self.skShareDic];
  264. msg.objectId = jsonString;
  265. self.relayVC = [[JXRelayVC alloc] init];
  266. self.relayVC.isShare = YES;
  267. self.relayVC.shareSchemes = nil;
  268. NSMutableArray *array = [NSMutableArray arrayWithObject:msg];
  269. self.relayVC.relayMsgArray = array;
  270. UIViewController *lastVC = (UIViewController *)g_navigation.subViews.lastObject;
  271. [lastVC presentViewController:self.relayVC animated:YES completion:nil];
  272. }
  273. - (NSString *)subString:(NSString *)url withString:(NSString *)str {
  274. NSString *urlStr = [url copy];
  275. NSRange range = [urlStr rangeOfString:@"//"];
  276. urlStr = [urlStr substringFromIndex:range.location + range.length];
  277. range = [urlStr rangeOfString:[NSString stringWithFormat:@"%@=",str]];
  278. if (range.location == NSNotFound) {
  279. return nil;
  280. }
  281. urlStr = [urlStr substringFromIndex:range.location + range.length];
  282. range = [urlStr rangeOfString:@","];
  283. if (range.location != NSNotFound) {
  284. urlStr = [urlStr substringToIndex:range.location];
  285. }else {
  286. range = [urlStr rangeOfString:@"&"];
  287. if (range.location != NSNotFound) {
  288. urlStr = [urlStr substringToIndex:range.location];
  289. }
  290. }
  291. return urlStr;
  292. }
  293. - (void)skPayVC:(JXSkPayVC *)skPayVC payBtnAction:(NSDictionary *)payDic {
  294. if ([g_server.myself.isPayPassword boolValue]) {
  295. self.verVC = [JXVerifyPayVC alloc];
  296. self.verVC.type = JXVerifyTypeSkPay;
  297. self.verVC.RMB = [payDic objectForKey:@"money"];
  298. self.verVC.titleStr = [payDic objectForKey:@"desc"];
  299. self.verVC.delegate = self;
  300. self.verVC.didDismissVC = @selector(dismissVerifyPayVC);
  301. self.verVC.didVerifyPay = @selector(didVerifyPay:);
  302. self.verVC = [self.verVC init];
  303. UIViewController *lastVC = (UIViewController *)g_navigation.subViews.lastObject;
  304. [lastVC.view addSubview:self.verVC.view];
  305. } else {
  306. JXPayPasswordVC *payPswVC = [JXPayPasswordVC alloc];
  307. payPswVC.type = JXPayTypeSetupPassword;
  308. payPswVC.enterType = JXVerifyTypeSkPay;
  309. payPswVC = [payPswVC init];
  310. [g_navigation pushViewController:payPswVC animated:YES];
  311. }
  312. }
  313. - (void)didVerifyPay:(NSString *)sender {
  314. long time = (long)[[NSDate date] timeIntervalSince1970];
  315. time = (time *1000 + g_server.timeDifference)/1000;
  316. NSString *appId = [self.orderDic objectForKey:@"appId"];
  317. NSString *prepayId = [self.orderDic objectForKey:@"prepayId"];
  318. NSString *sign = [self.orderDic objectForKey:@"sign"];
  319. NSString *secret = [self getSecretWithPassword:sender time:time];
  320. // 参数顺序不能变,先放key再放value
  321. NSMutableArray *arr = [NSMutableArray arrayWithObjects:@"appId",appId,@"prepayId",prepayId,@"sign",sign,@"money",self.skPayDic[@"money"], nil];
  322. [g_payServer payServerWithAction:act_PayPasswordPaymentV1 param:arr payPassword:sender time:time toView:self];
  323. // [g_server payPasswordPaymentWithAppId:appId prepayId:prepayId sign:sign time:[NSString stringWithFormat:@"%ld",time] secret:secret toView:self];
  324. }
  325. - (NSString *)getSecretWithPassword:(NSString *)password time:(long)time {
  326. NSMutableString *str1 = [NSMutableString string];
  327. [str1 appendString:g_myself.userId];
  328. [str1 appendString:g_server.access_token];
  329. NSMutableString *str2 = [NSMutableString string];
  330. [str2 appendString:APIKEY];
  331. [str2 appendString:[NSString stringWithFormat:@"%ld",time]];
  332. [str2 appendString:[g_server getMD5String:password]];
  333. str2 = [[g_server getMD5String:str2] mutableCopy];
  334. [str1 appendString:str2];
  335. str1 = [[g_server getMD5String:str1] mutableCopy];
  336. return [str1 copy];
  337. }
  338. - (void)dismissVerifyPayVC {
  339. [self.verVC.view removeFromSuperview];
  340. }
  341. -(void) didServerResultSucces:(JXConnection*)aDownload dict:(NSDictionary*)dict array:(NSArray*)array1{
  342. if([aDownload.action isEqualToString:act_OpenAuthInterface]){
  343. JXMessageObject *msg = [[JXMessageObject alloc] init];
  344. msg.type = [NSNumber numberWithInt:kWCMessageTypeShare];
  345. msg.content = Localized(@"JX_[Link]");
  346. NSDictionary *dict = @{
  347. @"url" : [self subString:self.urlStr withString:@"url"],
  348. @"downloadUrl" : [self subString:self.urlStr withString:@"downloadUrl"],
  349. @"title" : [self subString:self.urlStr withString:@"title"],
  350. @"subTitle" : [self subString:self.urlStr withString:@"subTitle"],
  351. @"imageUrl" : [self subString:self.urlStr withString:@"imageUrl"],
  352. @"appName" : [self subString:self.urlStr withString:@"appName"],
  353. @"appIcon" : [self subString:self.urlStr withString:@"appIcon"],
  354. @"urlSchemes" : [self subString:self.urlStr withString:@"urlSchemes"]
  355. };
  356. SBJsonWriter * OderJsonwriter = [SBJsonWriter new];
  357. NSString * jsonString = [OderJsonwriter stringWithObject:dict];
  358. msg.objectId = jsonString;
  359. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  360. if (g_xmpp.isLogined != login_status_yes) {
  361. self.isShare = YES;
  362. }else {
  363. self.relayVC = [[JXRelayVC alloc] init];
  364. self.relayVC.isShare = YES;
  365. self.relayVC.shareSchemes = [self subString:self.urlStr withString:@"urlSchemes"];
  366. NSMutableArray *array = [NSMutableArray arrayWithObject:msg];
  367. self.relayVC.relayMsgArray = array;
  368. UIViewController *lastVC = (UIViewController *)g_navigation.subViews.lastObject;
  369. [lastVC presentViewController:self.relayVC animated:YES completion:nil];
  370. }
  371. });
  372. }
  373. if ([aDownload.action isEqualToString:act_PayGetOrderInfo]) {
  374. self.skPayDic = [dict copy];
  375. // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  376. JXSkPayVC *vc = [[JXSkPayVC alloc] init];
  377. vc.payDic = [dict copy];
  378. vc.delegate = self;
  379. UIViewController *lastVC = (UIViewController *)g_navigation.subViews.lastObject;
  380. [lastVC presentViewController:vc animated:YES completion:nil];
  381. // });
  382. }
  383. if ([aDownload.action isEqualToString:act_PayPasswordPayment] || [aDownload.action isEqualToString:act_PayPasswordPaymentV1]) {
  384. [self dismissVerifyPayVC];
  385. [g_server showMsg:Localized(@"JXMoney_PaySuccess") delay:.5];
  386. }
  387. }
  388. -(int) didServerResultFailed:(JXConnection*)aDownload dict:(NSDictionary*)dict{
  389. return show_error;
  390. }
  391. -(int) didServerConnectError:(JXConnection*)aDownload error:(NSError *)error{//error为空时,代表超时
  392. return show_error;
  393. }
  394. -(void) didServerConnectStart:(JXConnection*)aDownload{
  395. }
  396. @end