APWebViewController.m 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. //
  2. // APWebViewController.m
  3. // AliSDKDemo
  4. //
  5. // Created by 亦澄 on 16-1-5.
  6. // Copyright (c) 2016年 Alipay. All rights reserved.
  7. //
  8. #import "APWebViewController.h"
  9. #import <AlipaySDK/AlipaySDK.h>
  10. @interface APWebViewController ()
  11. @property (nonatomic, strong)UIView* maskView;
  12. @property (nonatomic, strong)UIView* urlInputView;
  13. @property (nonatomic, strong)UITextField* urlInput;
  14. @end
  15. @implementation APWebViewController
  16. - (void)dealloc
  17. {
  18. [[NSNotificationCenter defaultCenter] removeObserver:self];
  19. self.webView.delegate = nil;
  20. }
  21. - (void)viewDidLoad
  22. {
  23. [super viewDidLoad];
  24. self.view.backgroundColor = [UIColor whiteColor];
  25. self.webView.delegate = self;
  26. // 加载已经配置的url
  27. NSString* webUrl = [[NSUserDefaults standardUserDefaults]objectForKey:@"alipayweburl"];
  28. if (webUrl.length > 0) {
  29. [self loadWithUrlStr:webUrl];
  30. }
  31. }
  32. #pragma mark ============== webview相关 回调及加载 ==============
  33. - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
  34. {
  35. // NSString* orderInfo = [[AlipaySDK defaultService]fetchOrderInfoFromH5PayUrl:[request.URL absoluteString]];
  36. // if (orderInfo.length > 0) {
  37. // [self payWithUrlOrder:orderInfo];
  38. // return NO;
  39. // }
  40. // return YES;
  41. //新版本的H5拦截支付对老版本的获取订单串和订单支付接口进行合并,推荐使用该接口
  42. __weak APWebViewController* wself = self;
  43. BOOL isIntercepted = [[AlipaySDK defaultService] payInterceptorWithUrl:[request.URL absoluteString] fromScheme:@"alisdkdemo" callback:^(NSDictionary *result) {
  44. // 处理支付结果
  45. NSLog(@"%@", result);
  46. // isProcessUrlPay 代表 支付宝已经处理该URL
  47. if ([result[@"isProcessUrlPay"] boolValue]) {
  48. // returnUrl 代表 第三方App需要跳转的成功页URL
  49. NSString* urlStr = result[@"returnUrl"];
  50. [wself loadWithUrlStr:urlStr];
  51. }
  52. }];
  53. if (isIntercepted) {
  54. return NO;
  55. }
  56. return YES;
  57. }
  58. - (void)loadWithUrlStr:(NSString*)urlStr
  59. {
  60. if (urlStr.length > 0) {
  61. NSURLRequest *webRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]
  62. cachePolicy:NSURLRequestReturnCacheDataElseLoad
  63. timeoutInterval:30];
  64. [self.webView loadRequest:webRequest];
  65. }
  66. }
  67. #pragma mark -
  68. #pragma mark ============== URL pay 开始支付 ==============
  69. //- (void)payWithUrlOrder:(NSString*)urlOrder
  70. //{
  71. // if (urlOrder.length > 0) {
  72. // __weak APWebViewController* wself = self;
  73. // [[AlipaySDK defaultService]payUrlOrder:urlOrder fromScheme:@"alisdkdemo" callback:^(NSDictionary* result) {
  74. // // 处理支付结果
  75. // //NSLog(@"%@", result);
  76. // // isProcessUrlPay 代表 支付宝已经处理该URL
  77. // if ([result[@"isProcessUrlPay"] boolValue]) {
  78. // // returnUrl 代表 第三方App需要跳转的成功页URL
  79. // NSString* urlStr = result[@"returnUrl"];
  80. // [wself loadWithUrlStr:urlStr];
  81. // }
  82. // }];
  83. // }
  84. //}
  85. #pragma mark -
  86. #pragma mark ============== url 输入界面及响应==============
  87. - (IBAction)onOpenUrlInput:(id)sender
  88. {
  89. if (self.maskView == nil) {
  90. self.maskView = [[UIView alloc]initWithFrame:[UIScreen mainScreen].bounds];
  91. self.maskView.backgroundColor = [UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.75];
  92. }
  93. if (self.urlInputView == nil) {
  94. self.urlInputView = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 300, 105)];
  95. self.urlInputView.backgroundColor = [UIColor lightGrayColor];
  96. self.urlInputView.layer.cornerRadius = 8.0f;
  97. self.urlInputView.layer.masksToBounds = YES;
  98. self.urlInput = [[UITextField alloc]initWithFrame:CGRectMake(10, 15, 280, 30)];
  99. self.urlInput.autocapitalizationType = UITextAutocapitalizationTypeNone;
  100. self.urlInput.autocorrectionType = UITextAutocorrectionTypeNo;
  101. self.urlInput.clearButtonMode = UITextFieldViewModeWhileEditing;
  102. self.urlInput.backgroundColor = [UIColor whiteColor];
  103. self.urlInput.layer.cornerRadius = 4.0f;
  104. self.urlInput.layer.masksToBounds = YES;
  105. [self.urlInputView addSubview:self.urlInput];
  106. UIButton* btn = [[UIButton alloc]initWithFrame:CGRectMake(230, 60, 60, 30)];
  107. btn.backgroundColor = [UIColor grayColor];
  108. btn.layer.cornerRadius = 4.0f;
  109. btn.layer.masksToBounds = YES;
  110. btn.layer.borderColor = [UIColor blueColor].CGColor;
  111. btn.layer.borderWidth = 2.0f;
  112. [btn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
  113. [btn setTitle:@"Go" forState:UIControlStateNormal];
  114. [btn addTarget:self action:@selector(onOpenInputedUrl:) forControlEvents:UIControlEventTouchUpInside];
  115. [self.urlInputView addSubview:btn];
  116. }
  117. NSString* webUrl = [[NSUserDefaults standardUserDefaults]objectForKey:@"alipayweburl"];
  118. self.urlInput.text = webUrl;
  119. UIWindow* keyWnd = [UIApplication sharedApplication].keyWindow;
  120. if (keyWnd) {
  121. if (self.maskView.superview) {
  122. [self.maskView removeFromSuperview];
  123. }
  124. [keyWnd addSubview:self.maskView];
  125. if (self.urlInputView.superview) {
  126. [self.urlInputView removeFromSuperview];
  127. }
  128. [keyWnd addSubview:self.urlInputView];
  129. self.urlInputView.center = keyWnd.center;
  130. CGRect frame = self.urlInputView.frame;
  131. frame.origin.y = 84;
  132. self.urlInputView.frame = frame;
  133. }
  134. }
  135. - (IBAction)onOpenInputedUrl:(id)sender
  136. {
  137. if (self.urlInputView.superview) {
  138. [self.urlInputView removeFromSuperview];
  139. }
  140. if (self.maskView.superview) {
  141. [self.maskView removeFromSuperview];
  142. }
  143. NSString* urlStr = self.urlInput.text;
  144. if (urlStr.length > 0) {
  145. if (![urlStr hasPrefix:@"http"]) {
  146. urlStr = [NSString stringWithFormat:@"http://%@", urlStr];
  147. }
  148. [[NSUserDefaults standardUserDefaults] setObject:urlStr forKey:@"alipayweburl"];
  149. [self loadWithUrlStr:urlStr];
  150. }
  151. }
  152. @end