iOS快速集成支付宝

2016 - 06 - 13

Posted by TianBai

前期准备

  1. 接入前期准备工作包括商户签约和密钥配置,已完成商户可略过。
  2. 下载支付宝SDK支付宝SDK下载地址

SDK集成流程

  1. 将支付宝SDK中以下文件拷贝到项目文件夹下,并导入开发环境中。

AlipaySDK.bundle
AlipaySDK.framework
libcrypto.a
libssl.a
AliSDKDemoUtil 及下面所有文件
AliSDKDemoopenssl 及下面所有文件
Order.h 和 Order.m

  1. 导入系统依赖库

在link Binary With Libraries 里面添加
CoreMotion.framework
CFNetwork.framework
SystemConfiguration.framework
QuartzCore.framework
CoreText.framework
CoreTelephony.framework
CoreGraphics.framework
libc++.tbd
libz.tbd

加上之前导入的3个

AlipaySDK.framework
libcrypto.a
libssl.a

共计12个

  1. 在需要使用SDK的文件中,增加头文件引用。
    #import <alipaysdk alipaysdk.h="">  
    #import "Order.h"  
    #import "DataSigner.h"  
    #import <alipaysdk alipaysdk.h="">  

但是会出现错误:

这是为什么呢,原因是项目没有找到之前导入的AliSDKDemoUtil 及下面所有文件,AliSDKDemoopenssl 及下面所有文件头文件,解决方法 在项目文件夹中找到Util和openssl文件夹 ,在Header Search Paths中添加路径

到这一步,SDK集成已经完毕

配置代码

  • 配置alipay支付
    #pragma mark   ==============配置alipay支付==============  
    - (void)payAction  
    {  
        /*  
         *生成订单信息及签名  
         */  
        //将商品信息赋予AlixPayOrder的成员变量  
        Order *order = [[Order alloc] init];  
        order.partner = @"";//商户在支付宝签约时,支付宝为商户分配的唯一标识号(以2088开头的16位纯数字)。  
        order.sellerID = @"";////卖家支付宝账号对应的支付宝唯一用户号(以2088开头的16位纯数字),订单支付金额将打入该账户,一个partner可以对应多个seller_id。  
        order.outTradeNO = [self generateTradeNO]; //订单ID(由商家自行制定)  
        order.subject = @"测试商品"; //商品的标题/交易标题/订单标题/订单关键字等。  
        order.body = @"runbey商品描述"; //对一笔交易的具体描述信息。如果是多种商品,请将商品描述字符串累加传给body。  
        order.totalFee = @"0.01"; //该笔订单的资金总额,单位为RMB(Yuan)。取值范围为[0.01,100000000.00],精确到小数点后两位。  
        order.notifyURL =  @"http://*****"; //支付宝服务器主动通知商户网站里指定的页面http路径。  

        //实际项目开发中 订单信息应该由服务器返回  

        order.service = @"mobile.securitypay.pay";  
        order.paymentType = @"1";  
        order.inputCharset = @"utf-8";  
        order.itBPay = @"30m";  
        order.showURL = @"m.alipay.com";  

        //应用注册scheme 便于支付结束后重新打开客户端  
        NSString *appScheme = @"";  

        //将商品信息拼接成字符串  
        NSString *orderSpec = [order description];  
        NSLog(@"orderSpec = %@",orderSpec);  

        //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode  

        NSString * privateKey = @"";//商户私钥  

        id<datasigner> signer = CreateRSADataSigner(privateKey);  
        NSString *signedString = [signer signString:orderSpec];  

        //将签名成功字符串格式化为订单字符串,请严格按照该格式  
        NSString *orderString = nil;  
        if (signedString != nil) {  
            orderString = [NSString stringWithFormat:@"%@&amp;sign=\"%@\"&amp;sign_type=\"%@\"",  
                           orderSpec, signedString, @"RSA"];  

            NSLog(@"签名字符串:%@",orderString);  

            [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {  
                NSLog(@"支付结果reslut = %@",resultDic);  
            }];  
        }  
    }  

    #pragma mark   ==============产生随机订单号==============  

    - (NSString *)generateTradeNO  
    {  
        static int kNumber = 15;  

        NSString *sourceStr = @"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";  
        NSMutableString *resultStr = [[NSMutableString alloc] init];  
        srand((unsigned)time(0));  
        for (int i = 0; i &lt; kNumber; i++)  
        {  
            unsigned index = rand() % [sourceStr length];  
            NSString *oneStr = [sourceStr substringWithRange:NSMakeRange(index, 1)];  
            [resultStr appendString:oneStr];  
        }  
        return resultStr;  
    }  

此时运行,这2个文件:

base64.h openssl_wrapper.h

会出现:

Cannot find interface declaration for 'NSObject', superclass of 'Base64'  

那么需要打开的文件base64.h openssl_wrapper.h,顶部添加头:

#import <foundation foundation.h="">  
  • 配置返回处理代码
    在 AppDelegate.m 文件中,增加引用代码:
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {  
        //如果极简 SDK 不可用,会跳转支付宝钱包进行支付,需要将支付宝钱包的支付结果回传给 SDK  
        if ([url.host isEqualToString:@"safepay"])  
        {  
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {  
            NSLog(@"result = %@",resultDic);  
        }];  
        }  
        return YES;  
    }  
  • 添加URL Schemes
    点击项目名称,点击”Info”选项卡,在”URL Types”选项中,点击”+”, 在”URL Schemes”中输入项目的bundleid。”bundleid”来自于 NSString *appScheme = @”****”(一般为项目的bundleid)

至此,完成了支付宝iOS客户端的配置

微信支付撰写中。。。。

后记:

有朋友反馈,运行时在 rsa.h中,会出现:

解决方法:

在在项目文件夹中找到找到和项目同名的文件夹 ,在Header Search Paths中添加路径

一样把文件夹拖进去!

Table of Contents