美文网首页
集成银联云闪付SDK实践-2020-07-27

集成银联云闪付SDK实践-2020-07-27

作者: 勇往直前888 | 来源:发表于2020-07-29 14:10 被阅读0次

    SDK包内容

    image.png

    接入

    新建一个工程,将静态的.a文件和对应的.h文件导入工程

    image.png

    需要添加CFNetwork.framework 、 S ystemConfiguration.framework 、libz.tbd、libc++.tbd等系统库

    image.png

    白名单

    SDK中有检查是否安装银联APP的功能接口。而这个功能一般是采用canOpen这个API来实现的。所以需要添加协议白名单,使canOpen这个API有效。

    image.png

    URL Type

    支付结果以URL Scheme的方式回传,所以需要设定一个URL Type,让第三方唤起APP,同时回传支付结果。这里的协议是UPPayDemo,也可以是其他的自定义协议。以UPPayDemo为例,其他主体可以通过类似UPPayDemo://xxx.xxx.xxx/xxx?xxx=xx&xxx=xxx的方式唤起本身并回传结果。

    image.png

    开放http

    SDK分生产和测试两种模式。测试模式采用的是http,所以需要放开http的限制。

    image.png

    检查银联APP是否安装

    image.png
    // 检测
    - (IBAction)checkButtonTouched:(id)sender {
        if ([[UPPaymentControl defaultControl] isPaymentAppInstalled]) {
            [self showMessage:@"已安装银联支付 APP"];
        } else {
            [self showMessage:@"未安装银联支付 APP"];
        }
    }
    
    • 模拟器上没有安装银联APP,能检查出来
    image.png

    支付

    • tn由后台给,这里作为参数通过界面输入
    image.png
    • 参考代码
    // 支付
    - (IBAction)payButtonTouched:(id)sender {
        // 后台给的支付凭证
        NSString *tn = [self.tnTextView.text stringByReplacingOccurrencesOfString:@" " withString:@""];
        // 自定义Scheme协议,在URL Type中设置
        NSString *scheme = @"UPPayDemo";
        // 默认是生产模式00;开关打开,切换为测试模式01
        NSString *mode = @"00";
        if (self.modeSwitch.isOn) {
            mode = @"01";
        }
        
        // 支付
        BOOL result = [[UPPaymentControl defaultControl] startPay:tn fromScheme:scheme mode:mode viewController:self];
        
        if (!result) {
            [self showMessage:@"调起支付控件失败"];
        }
    }
    
    // 提示信息
    - (void)showMessage:(NSString *)message {
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示信息" message:message preferredStyle:UIAlertControllerStyleAlert];
        [alert addAction:[UIAlertAction actionWithTitle:@"知道了" style:UIAlertActionStyleDefault handler:nil]];
        [self presentViewController:alert animated:YES completion:nil];
    }
    
    • 调用支付接口之后,会拉起支付界面:
    image.png
    • 崩溃问题:

    tn随便给一个,在拉起支付界面的时候发生崩溃,原因暂时不清楚。

    image.png

    实际试了一下,如果手机上安装了银联APP,就不会崩溃。

    崩溃问题解决:在Build SettingOther Linker Flag添加-ObjC

    image.png

    网上有人遇到过相同的问题,比如这两篇文章所说
    银联支付--[__NSCFConstantString newSizeWithFont:forWidth:lineBreakMode:]: unrecognized selector sent to instance 0x1090d01f0'
    银联支付 错误码 [__NSCFConstantString newSizeWithFont:forWidth:lineBreakMode:]: unrecognized selector sent to instance 0x1006f91b0

    支付结果

    AppDelegate文件的application: openURL: options:方法中进行调用

    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
        // 判断协议,是自定义的私有协议才处理
        if ([url.scheme isEqualToString:@"UPPayDemo"]) {
            [[UPPaymentControl defaultControl] handlePaymentResult:url completeBlock:^(NSString *code, NSDictionary *data) {
                if ([code isEqualToString:@"success"]) {
                    [self showMessage:@"交易成功"];
                } else if ([code isEqualToString:@"fail"]) {
                    [self showMessage:@"交易失败"];
                } else if ([code isEqualToString:@"cancel"]) {
                    [self showMessage:@"交易取消"];
                } else {
                    [self showMessage:[NSString stringWithFormat:@"code:%@   data:%@", code, data]];
                }
            }];
        } else {
            [self showMessage:[NSString stringWithFormat:@"未知的协议url:%@", url.absoluteString]];
        }
        
        return YES;
    }
    
    #pragma mark - private
    // 提示信息
    - (void)showMessage:(NSString *)message {
        UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"提示信息" message:message preferredStyle:UIAlertControllerStyleAlert];
        [alert addAction:[UIAlertAction actionWithTitle:@"知道了" style:UIAlertActionStyleDefault handler:nil]];
        [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alert animated:YES completion:nil];
    }
    

    相关文章

      网友评论

          本文标题:集成银联云闪付SDK实践-2020-07-27

          本文链接:https://www.haomeiwen.com/subject/svazlktx.html