客户方APP嵌入拉卡拉提供的webview或者LKLWebObject方法类
本文介绍客户方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方法触发条件:
收银台模板配置支付完成页标识为直接跳至客户上送的地址,且收银台下单接口不上送callback_url;收银台H5查询到订单状态为终态时触发;
订单终态:付款成功、已过期、支付失败等
注意:订单支付状态APP应以自行查询后台接口为准
收银台下单
webview打开收银台H5页面
收银台H5获取商户支付权限
选择支付宝支付
收银台H5预下单
收银台H5调用webview提供的jumpAlipay方法打开支付宝付款(scheme方式)
选择微信支付
收银台H5调用webview提供的jumpWxApplet方法打开拉卡拉收款宝小程序 微信官方文档
收款宝小程序做预下单付款
代码下载
银联统一收银台
使用银联统一收银台下单支付方式(银联支付, 手机Pay) 需接入如下SDK:
工程配置
在工程
info.plist设置中添加一个URL Types回调协议,用于在支付完成后返回商户客户端。请注意URL Schemes需要是唯一的,与app对应。
也可在TARGETS的info->URL Types进行配置
SDK使用
引入支付
sdk,cocoapods引入pod 'LKLPaymentSdk'在需要调用支付控件接口的代码文件内引用头文件
import<LKLPaymentSdk/UPPaymentControl.h>注意:(注意:如果工程的 compile source as 选项的值不是 Objective–C++,则引用此头文件的文件类型都要改为.mm)
webview注册协议,初始化LKLUnionCashier
在代理方法中监听对应方法:
startPay开始支付;startSEPay手机支付(iOS目前Apple pay不支持);tn为银联生成返回的参数;serverMode01为银联测试环境,00为银联生产环境;mobileBrand获取手机品牌;
支付回调会在Appdelegate中的openURL方法中返回,可通过通知或代理等方法将支付结果回传到支付页面,然后回传给js(这里用的是通知)
支付结果以收银台系统后台回调结果为准
Appdelegate的openURL将支付结果url(如果之前有其他平台,要区分开),传给LKLUnionCashier





