免密支付

iOS接口

主要接口

1. 请求发起接口

/*! @brief 发送请求到招商银行APP,支持用户没安装招商银行APP,等待招商银行APP返回onResp
   *
   * 函数调用后,会切换到招商银行APP的界面。第三方应用程序等待招商银行APP返回onResp。招商银行APP在异步处理完成后一定会调用onResp。
   * @param request 具体的发送请求,在调用函数后,请自己释放,具体内容参考CMBRequest参数说明。
   * @param appid 商户在招商银行相应的业务功能商户系统中的appid,即:4位分行号+6位商户号。
   * @param viewController 当前界面对象。
   * @param delegate 对象,用来接收招商银行APP触发的消息。
   * @return 成功返回YES,失败返回NO。
*/
   +(BOOL)sendRequest:(CMBRequest *)request
   appid:(NSString *)appid
   viewController:(UIViewController*)viewController
   delegate:(id<CMBApiDelegate>)delegate;  

1.1 CMBRequest参数说明

@interface CMBRequest: NSObject
/** 支付、协议、领券等业务功能等请求参数,具体内容由业务功能给出具体内容,SDK透传,会将该字段信息Post给对应功能页面 **/
@property (nonatomic, strong) NSString *requestData;
/** 业务功能类型,SDK透传 **/
@property (nonatomic, strong) NSString *method;
/** h5Url与CMBJumpUrl至少有一个赋值,app没有安装时在商户APP打开H5页面 **/
@property (nonatomic, strong) NSString *h5Url;
/** h5Url与CMBJumpUrl至少有一个赋值,app已经安装时要跳转到的招商银行APP具体功能的url **/
@property (nonatomic, strong) NSString *CMBJumpUrl;
@end      

注意:

1)h5Url与CMBJumpUrl至少有一个赋值。

2)若只赋值h5Url则SDK只打开h5页面不跳转招商银行APP。

3)若只赋值CMBJumpUrl则只跳转招商银行APP。如果用户没有安装招商银行APP,方法返回false。

4)若h5Url和CMBJumpUrl均赋值,则SDK先检查用户手机设备有没有安装招商银行APP,已安装则跳转招商银行APP,未安装则打开H5业务功能页面。

1.2 appid参数说明

商户在招商银行相应的业务功能商户系统中的appid,即:4位分行号+6位商户号。

1.3 viewController参数说明

商户业务功能界面的ViewController,用于用户没安装招商银行APP时SDK弹出的ViewController展示H5界面。

1.4 delegate参数说明

商户用来接收招商银行APP或H5处理的回调结果,可参考招行提供的Demo实现。

1.5 method参数说明

默认上送pay

1.6 h5Url与CMBJumpUrl参数说明

/**测试环境与生产环境地址不同**/

测试环境: 
h5Url: http://121.15.180.66:801/netpayment/BaseHttp.dll?H5NPSignJsonSDK
CMBJumpUrl: cmbmobilebank://CMBLS/FunctionJump?action=gofuncid&funcid=0027016&requesttype=post&cmb_app_trans_parms_start=here 
生产环境 
h5Url: https://netpay.cmbchina.com/netpayment/BaseHttp.dll?H5NPSignJsonSDK
CMBJumpUrl: cmbmobilebank://CMBLS/FunctionJump?action=gofuncid&funcid=0027016&requesttype=post&cmb_app_trans_parms_start=here

2. 招行手机银行APP回调第三方APP结果回传接口

招商银行APP处理完成后跳回商户APP时,商户需支持此接口将手机银行APP的结果url信息传递到SDK进一步处理。

 /*! @brief 处理招商银行APP通过URL启动商户App时传递的数据
*
* 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。
* @param url 招商银行APP启动第三方应用时传递过来的URL
* @param delegate  CMBApiDelegate对象,用来接收招商银行APP触发的消息。
* @return 成功返回YES,失败返回NO。
*/
  +(BOOL)handleOpenURL:(NSURL *) url delegate:(id<CMBApiDelegate>) delegate;

3. SDK回调接口

该接口由SDK声明protocol,商户APP实现delegate

@protocol CMBApiDelegate <NSObject>
@optional

/*! @brief 发送sendReq后,收到的执行结果回应
*
* 业务执行结果响应,如跳转至招商银行应用执行则在handleOpenURL执行后触发。
* @param resp具体的回应内容,是自动释放的,具体内容参考CMBResponse参数说明
*/
-(void)onResp:(CMBResponse*)resp;
@end  

3.1 CMBResponse参数说明

@interface CMBResponse: NSObject

/** 应答码 */
@property (nonatomic, assign) int respCode;

/** 应答信息 */
@property (nonatomic, retain) NSString *respMessage;

@end           
respCode定义
返回值描述返回值描述返回值
描述
0
支付成功-1支付失败-3
支付状态未知
1签约成功2签约失败3签约状态未知
-2参数不正确8用户取消9网络异常


辅助接口

1. 检查用户是否安装招商银行APP

/*! @brief 检查招商银行APP是否已被用户安装,涉及跳转招商银行APP的业务功能须先
*用此接口检查是否已安装招商银行APP
*
* @return 招商银行APP已安装返回YES,未安装返回NO。
*/
+(BOOL)isCMBAppInstalled;

2. 跳转下载招商银行APP

/*! @brief 跳转到AppStore的招商银行APP下载更新页面
*
* @return 跳转成功返回YES,失败返回NO。
*/
+(BOOL)jumpToAppStore;

3. 获取当前SDK版本号

/*! @brief 获取当前招商银行SDK的版本号
*
* @return 返回当前招商银行SDK的版本号
*/
+(NSString *) getApiVersion;

4. 获取招行浏览器控件

/*! @brief 获取招行浏览器控件。
*
* 函数调用后,会根据请求信息生成招行浏览器并打开H5页面,可通过浏览器获取响应结果。注:仅在商户需要自定义实现导航栏时调用。
* @param request 具体的发送请求,在调用函数后,请自己释放,具体内容参考CMBRequest参数说明。
* @param appid 商户在招商银行商户系统中的appid。
* @param delegate 对象,用来接收请求执行回调和标题变更的消息。
* @return 返回浏览器控件,参数非法则返回nil。
*/
+(CMBWebview *) initCMBWebview: (CMBRequest *)request
appid:(NSString *)appid
delegate:(id<CMBWebviewDelegate>)delegate;

4.1 CMBWebview参数说明

@interface CMBWebview: UIView

/** 响应数据,H5未返回明确结果前,默认为用户主动取消(8);由于响应数据会发生变更,非关闭场景请勿获取该信息,避免对业务处理产生干扰。 */
@property (nonatomic, strong) CMBResponse *response;

@end

4.2 delegate参数说明

商户用来接收招行浏览器控件的业务回调及标题变更事件。该接口由SDK声明protocol,商户APP实现delegate。

@protocol CMBWebviewDelegate<NSObject>
@optional

/*! @brief 收到页面关闭响应
*
* 用户主动关闭/取消页面请求、或收到业务响应结果
* @param resp 具体的回应内容,是自动释放的
*/
-(void)onClosed:(CMBResponse*)resp;

/*! @brief 收到页面标题变更通知
*
* H5页面设置的标题内容
* @param title 变更后的标题
*/
-(void)titleChanged:(NSString *)title;
@end