iOS集成支付宝和遇到的坑

作者: 喊我超哥啊 | 来源:发表于2016-09-23 12:00 被阅读0次

    首先导入支付宝SDK 和依赖库


    98B035F7-6F66-4770-A8BB-F7E04CFFF4F1.png

    libc++.tbd
    libz.tbd
    CoreMotion.framework
    CFNetwork.framework
    Foundation.framework
    UIKit.framework
    CoreGraphics.framework
    CoreText.framework
    QuartzCore.framework
    CoreTelephony.framework
    SystemConfiguration.framework

    导入之后编译会报错openssl/asn1.h


    6F957E50-107D-4D54-A3A0-8E92A62CF0C9.png

    这是一个神奇的大坑,好多人卡在这里
    解决方法:Targets -> Build Settings 下的 Header Search Paths。添加如下目录 "$(SRCROOT)/项目名称/支付宝sdk所在文件夹的绝对地址"

    当使用xcode7的时候可能会报错


    41AB3AB2-8921-4478-A575-63C96557D1D4.png

    linker command failed with exit code 1 (use -v to see invocation)

    这时我们找到Bitcode改为NO xcode默认为YES


    259F6798-19BE-400D-8EF1-599FF154AC4D.png

    然后再编译,ok没报错。 已经成功了一大半。

    填上支付宝的信息,以及订单信息。


    EF77CD74-F77C-4003-99F9-E40850270F76.png
    /*
         *点击获取product实例并初始化订单信息
         */
        /*
         *商户唯一的partner 和seller
         签约后会给商户分配唯一的partner 和seller
         */
        //填写用户申请的
        NSString *partner=@"";
        NSString *seller=@"";
        NSString *privateKey=@"";//下载的公匙私匙文件
        
        //partner 和seller获取失败
        if([partner length]==0||[seller length]==0||[privateKey length]==0)
        {
            UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"提示" message:@"缺少partner或者seller" delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles: nil];
            [alert show];
            return;
        }
        //生成订单信息及签名
        //将商品信息赋予ALixpayOrder的成员变量
        UserModel *Model=[[UserModel alloc]init];
        Order *order=[[Order alloc]init];
        order.partner=partner;
        order.seller=seller;
        //    order.tradeNO=Model.oderNumber;//订单号
        //    order.productName=Model.orderName;//商品名称
        //    order.productDescription=Model.orderDescri;//商品描述
        //    order.amount=Model.orderPrice;//商品价格
        order.tradeNO=@"12398998d66522416565";
        order.productName=@"ipone6s玫瑰金";
        order.productDescription=@"但是";
        order.amount=@"0.01";
        order.notifyURL=@"http://www.xxx.com";//回调url
        //下面这些参数都是固定的
        order.service=@"mobile.securitypay.pay";
        order.paymentType=@"1";
        order.inputCharset=@"utf-8";
        order.itBPay=@"30m";
        order.showUrl=@"m.alipay.com";
        
        //用户注册scheme,在info.plist 定义URL types 用于快捷支付成功后重新唤起商户应用
        NSString *appSheme=@"chaoge";
        
        //将商品信息拼接成字符串
        NSString *orderFormat=[order description];
        
        //获取私匙并将商户信息签名,外部商户可以根据情况存放私匙和签名,只要遵循RSA签名规范将签名字符串base64编码和UrlEncode
        id<DataSigner>signer=CreateRSADataSigner(privateKey);
        
        NSString *signString=[signer signString:orderFormat];
        
        //将签名成功字符格式化为订单字符串,请严格按照格式
        NSString *orderString=nil;
        
        if(signString!=nil)
        {
            orderString=[NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",orderFormat,signString,@"RSA"];
            NSLog(@"%@",orderString);
            [[AlipaySDK defaultService]payOrder:orderString fromScheme:appSheme callback:^(NSDictionary *resultDic) {
                NSLog(@"------%@",resultDic);
                NSString *msg=[resultDic objectForKey:@"result"];
                if(msg.length==0)
                {
                    msg=@"支付失败";
                }else{
                    msg=@"支付成功";
                }
                UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"提示" message:msg delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles:nil];
                [alert show];
            }];
        }
    

    第二个大坑来了

    A024ADC6-503F-481C-A40E-A085B9E8EF97.png
    Undefined symbols for architecture arm64:
    "_CreateRSADataSigner", referenced from:
    -[ViewController payment:] in ViewController.o
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)报错。
    C++混编。
    这时候我们只需要把写对应支付宝操作地方的类文件后缀.m改为.mm就行了
    F6F93805-EBB8-4FD8-839E-E55E14424716.png 。
    然后运行。完美。
    Demo地址:https://github.com/ZhichaoZhan/AlipayDemo

    相关文章

      网友评论

        本文标题:iOS集成支付宝和遇到的坑

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