客戶方APP嵌入拉卡拉提供的webview或者LKLWebObject方法類(lèi)

拉卡拉2.0 7個(gè)月前 ( 11-09 ) 441

本文介紹客戶方APP嵌入拉卡拉提供的webview或者LKLWebObject方法類(lèi):

示例代碼

#pragma mark - WKScriptMessageHandler
/// 通過(guò)接收J(rèn)S傳出消息的name進(jìn)行捕捉的回調(diào)方法
- (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"]) {//跳轉(zhuǎn)支付寶
           NSString *url = bodyInfo[@"url"];
   [self jumpToAlipayWithUrl: url];
}

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

else if ([methodName isEqualToString:@"closeWindow"]) {
   //做相關(guān)業(yè)務(wù)操作  例如:跳轉(zhuǎn)或返回到指定頁(yè)面
}
   }
}

/*
跳轉(zhuǎn)支付寶
注意:必須在info.plist中增加alipayqr白名單(LSApplicationQueriesSchemes下增加)
*/
-(void)jumpToAlipayWithUrl:(NSString *)url {
   if (![[UIApplication sharedApplication]canOpenURL: [NSURL URLWithString:url]]) {//未安裝
       [self.view makeToast:@"請(qǐng)先下載“支付寶”客戶端"];
   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]];
}
}
//跳轉(zhuǎn)微信小程序
/*
dic中需要包含的數(shù)據(jù)
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];
}
//跳轉(zhuǎn)小程序Wechat_Applet
-(void)jumpWxApplet:(NSString *)userName programPath:(NSString *)path universalLink:(NSString *)universalLink programType:(int)programType {
if ([WXApi isWXAppInstalled]) {
       //微信注冊(cè)
       /*
        * @param appid 微信開(kāi)發(fā)者ID
        * @param universalLink 微信開(kāi)發(fā)者Universal Link
        */
       if ([WXApi registerApp: APP_ID universalLink:universalLink]) {
           WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object];
//拉起的小程序的username
           launchMiniProgramReq.userName = userName;
           launchMiniProgramReq.path = path;
           //拉起小程序的類(lèi)型
           launchMiniProgramReq.miniProgramType = programType;
           return [WXApi sendReq: launchMiniProgramReq completion:^(BOOL success) {
               NSLog(@"sendReq result %d",success);
}];
       }

else {
}
   }

else {
[self.view makeToast: @"請(qǐng)下載“微信”完成注冊(cè)"];
}
}

復(fù)制


closeWindoe方法觸發(fā)條件:

closeWindow方法觸發(fā)條件:

  1. 收銀臺(tái)模板配置支付完成頁(yè)標(biāo)識(shí)直接跳至客戶上送的地址,且收銀臺(tái)下單接口不上送callback_url;收銀臺(tái)H5查詢到訂單狀態(tài)為終態(tài)時(shí)觸發(fā);

    1. 訂單終態(tài):付款成功、已過(guò)期、支付失敗等

注意:訂單支付狀態(tài)APP應(yīng)以自行查詢后臺(tái)接口為準(zhǔn)

收銀臺(tái)下單

  • webview打開(kāi)收銀臺(tái)H5頁(yè)面

  • 收銀臺(tái)H5獲取商戶支付權(quán)限

  • 選擇支付寶支付

    • 收銀臺(tái)H5預(yù)下單

    • 收銀臺(tái)H5調(diào)用webview提供的jumpAlipay方法打開(kāi)支付寶付款(scheme方式)

  • 選擇微信支付

    • 收銀臺(tái)H5調(diào)用webview提供的jumpWxApplet方法打開(kāi)拉卡拉收款寶小程序 微信官方文檔

    • 收款寶小程序做預(yù)下單付款

代碼下載



銀聯(lián)統(tǒng)一收銀臺(tái)

使用銀聯(lián)統(tǒng)一收銀臺(tái)下單支付方式(銀聯(lián)支付, 手機(jī)Pay) 需接入如下SDK:

工程配置

  1. 在工程 info.plist 設(shè)置中添加一個(gè) URL Types 回調(diào)協(xié)議,用于在支付完成后返回商戶客戶端。請(qǐng)注意 URL Schemes 需要是唯一的,與app對(duì)應(yīng)。

fc06029992e643935d73a792305cb5a7_1693997651599225.png

也可在TARGETSinfo->URL Types進(jìn)行配置

6b187d06a2fc6f1d74f4741cc9d3868b_1693997651103626.png

SDK使用

  1. 引入支付sdk,cocoapods引入pod 'LKLPaymentSdk'

  2. 在需要調(diào)用支付控件接口的代碼文件內(nèi)引用頭文件 import<LKLPaymentSdk/UPPaymentControl.h>

    注意:(注意:如果工程的 compile source as 選項(xiàng)的值不是 Objective–C++,則引用此頭文件的文件類(lèi)型都要改為.mm)
    webview注冊(cè)協(xié)議,初始化LKLUnionCashier

4ccbd8818397859a7d23736bae6191df_1693997651186709.png

在代理方法中監(jiān)聽(tīng)對(duì)應(yīng)方法:

  • startPay開(kāi)始支付;

  • startSEPay手機(jī)支付(iOS目前Apple pay不支持);

  • tn為銀聯(lián)生成返回的參數(shù);

  • serverMode 01為銀聯(lián)測(cè)試環(huán)境,00為銀聯(lián)生產(chǎn)環(huán)境;

  • mobileBrand 獲取手機(jī)品牌;

cac012bf0fc293f28602f387fe2ac2c2_1693997651644207.png

支付回調(diào)會(huì)在Appdelegate中的openURL方法中返回,可通過(guò)通知或代理等方法將支付結(jié)果回傳到支付頁(yè)面,然后回傳給js(這里用的是通知)

支付結(jié)果以收銀臺(tái)系統(tǒng)后臺(tái)回調(diào)結(jié)果為準(zhǔn)

AppdelegateopenURL將支付結(jié)果url(如果之前有其他平臺(tái),要區(qū)分開(kāi)),傳給LKLUnionCashier

c7be06325cdb82bb9deb80526bdaede3_1693997651312984.png


The End