客户方APP嵌入拉卡拉提供的webview或者LKLWebObject方法类

拉卡拉2.0 1周前 ( 11-09 18:00 ) 60

本文介绍客户方APP嵌入拉卡拉提供的webview或者LKLWebObject方法类:

示例代码

#pragma mark - WKScriptMessageHandler
/// 通过接收JS传出消息的name进行捕捉的回调方法
- (void)userContentController:(WKUserContentController *)userContentController didReceiveScriptMessage:(WKScriptMessage *)message {
   if ([message.name isEqualToString: @"LKLWebObject"]) {
       NSDictionary *bodyInfo = message.body;
   NSString *methodName = bodyInfo[@"method"]?bodyInfo[@"method"]: @"";
   if ([methodName isEqualToString: @"jumpAlipay"]) {//跳转支付宝
           NSString *url = bodyInfo[@"url"];
   [self jumpToAlipayWithUrl: url];
}

else if ([methodName isEqualToString:@"jumpWxApplet"]) {
   [self jumpToWechatMiniPrograme: bodyInfo];
}

else if ([methodName isEqualToString:@"closeWindow"]) {
   //做相关业务操作  例如:跳转或返回到指定页面
}
   }
}

/*
跳转支付宝
注意:必须在info.plist中增加alipayqr白名单(LSApplicationQueriesSchemes下增加)
*/
-(void)jumpToAlipayWithUrl:(NSString *)url {
   if (![[UIApplication sharedApplication]canOpenURL: [NSURL URLWithString:url]]) {//未安装
       [self.view makeToast:@"请先下载“支付宝”客户端"];
   return;
}

if (@available(iOS 10.0, *)) {
   [[UIApplication sharedApplication] openURL: [NSURL URLWithString:url] options:@{
}

completionHandler:nil];
}

else {
// Fallback on earlier versions
       [[UIApplication sharedApplication]openURL: [NSURL URLWithString:url]];
}
}
//跳转微信小程序
/*
dic中需要包含的数据
username
path
wxAppid
universalLink
programType
*/
-(void)jumpToWechatMiniPrograme:(NSDictionary *)dic {
NSString *userName = dic[@"userName"];
   NSString *path = dic[@"path"];
   NSString *universalLink = dic[@"universalLink"];
   int programType = [NSString stringWithFormat: @"%@",dic[@"programType"]].intValue;
[self jumpWxApplet: userName programPath:path universalLink:universalLink programType:programType];
}
//跳转小程序Wechat_Applet
-(void)jumpWxApplet:(NSString *)userName programPath:(NSString *)path universalLink:(NSString *)universalLink programType:(int)programType {
if ([WXApi isWXAppInstalled]) {
       //微信注册
       /*
        * @param appid 微信开发者ID
        * @param universalLink 微信开发者Universal Link
        */
       if ([WXApi registerApp: APP_ID universalLink:universalLink]) {
           WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object];
//拉起的小程序的username
           launchMiniProgramReq.userName = userName;
           launchMiniProgramReq.path = path;
           //拉起小程序的类型
           launchMiniProgramReq.miniProgramType = programType;
           return [WXApi sendReq: launchMiniProgramReq completion:^(BOOL success) {
               NSLog(@"sendReq result %d",success);
}];
       }

else {
}
   }

else {
[self.view makeToast: @"请下载“微信”完成注册"];
}
}

复制


closeWindoe方法触发条件:

closeWindow方法触发条件:

  1. 收银台模板配置支付完成页标识直接跳至客户上送的地址,且收银台下单接口不上送callback_url;收银台H5查询到订单状态为终态时触发;

    1. 订单终态:付款成功、已过期、支付失败等

注意:订单支付状态APP应以自行查询后台接口为准

收银台下单

  • webview打开收银台H5页面

  • 收银台H5获取商户支付权限

  • 选择支付宝支付

    • 收银台H5预下单

    • 收银台H5调用webview提供的jumpAlipay方法打开支付宝付款(scheme方式)

  • 选择微信支付

    • 收银台H5调用webview提供的jumpWxApplet方法打开拉卡拉收款宝小程序 微信官方文档

    • 收款宝小程序做预下单付款

代码下载



银联统一收银台

使用银联统一收银台下单支付方式(银联支付, 手机Pay) 需接入如下SDK:

工程配置

  1. 在工程 info.plist 设置中添加一个 URL Types 回调协议,用于在支付完成后返回商户客户端。请注意 URL Schemes 需要是唯一的,与app对应。

fc06029992e643935d73a792305cb5a7_1693997651599225.png

也可在TARGETSinfo->URL Types进行配置

6b187d06a2fc6f1d74f4741cc9d3868b_1693997651103626.png

SDK使用

  1. 引入支付sdkcocoapods引入pod 'LKLPaymentSdk'

  2. 在需要调用支付控件接口的代码文件内引用头文件 import<LKLPaymentSdk/UPPaymentControl.h>

    注意:(注意:如果工程的 compile source as 选项的值不是 Objective–C++,则引用此头文件的文件类型都要改为.mm)
    webview注册协议,初始化LKLUnionCashier

4ccbd8818397859a7d23736bae6191df_1693997651186709.png

在代理方法中监听对应方法:

  • startPay开始支付;

  • startSEPay手机支付(iOS目前Apple pay不支持);

  • tn为银联生成返回的参数;

  • serverMode 01为银联测试环境,00为银联生产环境;

  • mobileBrand 获取手机品牌;

cac012bf0fc293f28602f387fe2ac2c2_1693997651644207.png

支付回调会在Appdelegate中的openURL方法中返回,可通过通知或代理等方法将支付结果回传到支付页面,然后回传给js(这里用的是通知)

支付结果以收银台系统后台回调结果为准

AppdelegateopenURL将支付结果url(如果之前有其他平台,要区分开),传给LKLUnionCashier

c7be06325cdb82bb9deb80526bdaede3_1693997651312984.png


The End