美文网首页
集成银联云闪付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