历史接口版本

iOS接入要点说明(旧)

以下项目开发环境以Xcode9.2,运行环境为IOS8.0为例,说明其开发中需要的操作。

项目设置Scheme

在Xcode中打开项目,设置项目属性中的URL Schemes为商户的scheme(需与安卓设置的scheme保持一致),如下图标红位置所示。

在info.plist中增加LSApplicationQueriesSchemes白名单配置,值为cmbmobilebank,如下图标红位置所示。

iosaccess.png


调起请求

根据业务功能接口生成请求数据(如根据一网通支付的订单接口生成订单数据),以下是发起请求的关键代码:

    CMBRequest *reqObj = [[CMBRequest alloc] init];    
   reqObj.requestData= requestData;//业务功能请求数据,格式由业务功能定义,必填    
   reqObj.method = method;//由业务功能自己定义,必填    
   reqObj.h5Url = h5Url;//业务功能相应的weburl, h5Url与CMBJumpUrl均需要赋值    
   reqObj.CMBJumpUrl = CMBJumpUrl;//业务功能在招行内部对应的JumpUrl,h5Url与CMBJumpUrl均需要赋值    
   [CMBApi sendRequest:reqObj appid:appid viewController:self delegate:[CMBApiManager sharedManager]];

请求结果URL传递

当这笔请求(如支付)完成后招商银行APP会提示用户“返回”。此时需要在商户的APAppDelegate.m的中拦截返回结果的url

//ios9之前使用如下两个接口拦截,并传递给招商银行SDK

    - (BOOL)application:(UIApplication *)application        
   handleOpenURL:(NSURL *)url {        
   return  [CMBApi handleOpenURL:url delegate:[ CMBApiManager sharedManager]];    
   }    
   - (BOOL)application:(UIApplication *)application            
   openURL:(NSURL *)url        
   sourceApplication:(NSString *)sourceApplication            
   annotation:(id)annotation {            
   return [CMBApi handleOpenURL:url delegate:[ CMBApiManager sharedManager]];    
   }

//ios9之后使用此接口,并传递给招商银行SDK

    - (BOOL)application:(UIApplication *)app            
   openURL:(NSURL *)url            
   options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {            
   return [CMBApi handleOpenURL:url delegate:[ CMBApiManager sharedManager]];    
   }

请求结果回调

参照招商银行SDK Sample,在类实现onResp函数,请求完成(如支付)后,招商银行APP会返回到商户APP并回调onResp函数,开发者需要在该函数中接收通知,判断返回错误码,如果请求(如支付)处理成功则去后台查询请求结果再展示用户实际结果。注意:一定不能以客户端的回调结果作为展示给用户的结果,应以服务器端的接收的请求(如支付)处理通知或查询API返回的结果为准。代码示例如下:

   - (void)onResp:(CMBResponse *)resp {        
      if (resp.errCode == CMBSuccess) {            
        NSLog(@"Success!");//以后台结果为准        
      } else if (resp.errCode == CMBRespUnknown) {            
        NSLog(@"Unknow!");//以后台结果为准        
      }  else {            
          NSLog(@"Fail!");//以后台结果为准        
      }    
  }