iOS支付宝集成

首先要向支付宝申请, 与支付宝签约,获得appID(partner)和私钥(privateKey),这个一般都是公司做,直接找公司要。
然后,下载支付宝SDK,下载地址
下载好后,找到里面的AlipaySDK.bundle和AlipaySDK.framework拷贝到你的工程里面,

254F72E5-D8FF-4557-982F-79DA11EE5A1D.png

最好是创建一个文件夹单独放支付宝拷贝的文件。
再找到AliSDKDemo文件夹里面的libcrypto.a和libssl.a两个拷贝到工程

4DDE4C76-5AF5-4C51-8315-BEA16EFE6016.png

再找到AliSDKDemo文件夹里面的AliSDKDemo文件夹里面的Order.h和Order.m文件,Util和openssl文件也拷贝到工程里面你创建的文件夹。

7F332F70-3C5B-4405-8974-A5E47480ED3F.png

打开你的viewController,先导入#import "Order.h"和#import<AlipaySDK/AlipaySDK.h>两个头文件,
在viewDidLoad方法里面,添加下面代码

 //重要说明
    //这里只是为了方便直接向商户展示支付宝的整个支付流程;所以Demo中加签过程直接放在客户端完成;
    //真实App里,privateKey等数据严禁放在客户端,加签过程务必要放在服务端完成;
    //防止商户私密数据泄露,造成不必要的资金损失,及面临各种安全风险;
    /*============================================================================*/
    /*=======================需要填写商户app申请的===================================*/
    /*============================================================================*/
    NSString *appID = @"";
    
    // 如下私钥,rsa2PrivateKey 或者 rsaPrivateKey 只需要填入一个
    // 如果商户两个都设置了,优先使用 rsa2PrivateKey
    // rsa2PrivateKey 可以保证商户交易在更加安全的环境下进行,建议使用 rsa2PrivateKey
    // 获取 rsa2PrivateKey,建议使用支付宝提供的公私钥生成工具生成,
    // 工具地址:https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=106097&docType=1
    NSString *rsa2PrivateKey = @"";
    NSString *rsaPrivateKey = @"";
    /*============================================================================*/
    /*============================================================================*/
    /*============================================================================*/

    
    /*
     *生成订单信息及签名
     */
    //将商品信息赋予AlixPayOrder的成员变量
    Order* order = [Order new];
    
    // NOTE: app_id设置
    order.app_id = appID;
    
    // NOTE: 支付接口名称
    order.method = @"alipay.trade.app.pay";
    
    // NOTE: 参数编码格式
    order.charset = @"utf-8";
    
    // NOTE: 当前时间点
    NSDateFormatter* formatter = [NSDateFormatter new];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    order.timestamp = [formatter stringFromDate:[NSDate date]];
    
    // NOTE: 支付版本
    order.version = @"1.0";
    
    // NOTE: sign_type 根据商户设置的私钥来决定
    order.sign_type = (rsa2PrivateKey.length > 1)?@"RSA2":@"RSA";
    
    // NOTE: 商品数据
    order.biz_content = [BizContent new];
    order.biz_content.body = @"";//商品标题
    order.biz_content.subject = @"";//商品描述
    order.biz_content.out_trade_no = @""; //订单ID(由商家自行制定)
    order.biz_content.timeout_express = @"30m"; //超时时间设置
    order.biz_content.total_amount = [NSString stringWithFormat:@"%.2f", 0.01]; //商品价格
    
    //将商品信息拼接成字符串
    NSString *orderInfo = [order orderInfoEncoded:NO];
    NSString *orderInfoEncoded = [order orderInfoEncoded:YES];
    NSLog(@"orderSpec = %@",orderInfo);

编译一下,你会发现报了很多的错


C0278202-8313-4535-A1EE-AE3B3B4F7641.png

不要怕,点开这个错误,进入到报错的地方,就是Base64.h里面加上一个#import <Foundation/Foundation.h>,


B06D0B5B-C670-4BC0-AE78-A9E9DEDDBAA9.png

再次编译会发现还有错误,
6DB55E4B-C11C-40E0-831E-0C7CDA6F3B21.png

再次点开这个错误,进入到openssl_wrapper.h里面,加入一个#import <Foundation/Foundation.h>


F8725335-C1F1-4218-92FE-E8872A326DD8.png

如果你的项目里面有PCH文件,直接在PCH文件里面导入#import <Foundation/Foundation.h>就行了。
再吃编译,就只剩下一个错误了
34901DF9-28D9-4671-A837-E0A173F0E910.png

这个错误的解决方法就是找到Targets -> Build Settings 下的 Header Search Paths
9DB86266-D5E5-400A-B5C2-B64CDD8F5A71.png

找到 Header Search Paths后双击后面的空白框弹出一个方框
E205B362-E208-4750-A2A3-56CF5C10DBE1.png

点击+号就会出来一个输入框,在输入框里面输入$(SRCROOT)/你项目的名字/文件的绝对地址(就是放拷贝的支付宝文件的文件夹名)
编译一下会报很多错误,这是没有添加依赖库,要添加下列依赖库
其中,需要注意的是:
如果是Xcode 7.0之后的版本,需要添加libc++.tbd、libz.tbd;
如果是Xcode 7.0之前的版本,需要添加libc++.dylib、libz.dylib

libz.tbd

libc++.tbd

QuartzCore.framework

CoreText.framework

CoreGraphics.framework

UIKit.framework

Foundation.framework

CoreMotion.Framework

CFNetwork.framework

CoreTelephony.framework

SystemConfiguration.framework

284C1133-A3CA-482E-A8B8-4DCB5D59F0F6.png

回到ViewController里面添加头文件#import "RSADataSigner.h",再在viewDidLoad里面添加下面代码

 // NOTE: 获取私钥并将商户信息签名,外部商户的加签过程请务必放在服务端,防止公私钥数据泄露;
    //       需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
    NSString *signedString = nil;
    RSADataSigner* signer = [[RSADataSigner alloc] initWithPrivateKey:((rsa2PrivateKey.length > 1)?rsa2PrivateKey:rsaPrivateKey)];
    if ((rsa2PrivateKey.length > 1)) {
        signedString = [signer signString:orderInfo withRSA2:YES];
    } else {
        signedString = [signer signString:orderInfo withRSA2:NO];
    }
    
    // NOTE: 如果加签成功,则继续执行支付
    if (signedString != nil) {
        //应用注册scheme,在AliSDKDemo-Info.plist定义URL types
        NSString *appScheme = @"Alipay2";
        
        // NOTE: 将签名成功字符串格式化为订单字符串,请严格按照该格式
        NSString *orderString = [NSString stringWithFormat:@"%@&sign=%@",
                                 orderInfoEncoded, signedString];
        
        // NOTE: 调用支付结果开始支付
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
        }];
    }

其中 NSString *appScheme = @"Alipay2";这个是你项目自己的名字,并且为了能够从支付宝跳转回自己的应用还要在Info.plist定义URL types

296718E5-7BD2-4C24-92C9-4AFA4F5AB1DE.png

点击➕号,将你的项目名字填进去进行了
最后,进入AppDelegate.m里面导入#import <AlipaySDK/AlipaySDK.h>再添加下面代码

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    
    if ([url.host isEqualToString:@"safepay"]) {
        // 支付跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
        
        // 授权跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
            // 解析 auth code
            NSString *result = resultDic[@"result"];
            NSString *authCode = nil;
            if (result.length>0) {
                NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                for (NSString *subResult in resultArr) {
                    if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                        authCode = [subResult substringFromIndex:10];
                        break;
                    }
                }
            }
            NSLog(@"授权结果 authCode = %@", authCode?:@"");
        }];
    }
    return YES;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • 1、下载支付宝SDK 2、进入支付平台注册应用 3、获取支付相关的 '私钥' 和 '密钥' 下载macOSX版本 ...
    MdWhat阅读 1,542评论 2 6
  • 本文Demo地址 1.下载支付宝SDK以及Demohttps://doc.open.alipay.com/doc2...
    Lonely__M阅读 5,233评论 2 41
  • 首先我们需要在官网上面去下载demo,和sdk。注意不要找错地方了。下面是下载地址 https://b.alipa...
    FengxinLi阅读 1,430评论 3 5
  • 前言 前段时间公司App要集成支付宝支付与微信支付,在网上看各种关于支付集成的分享,最后总算是完成了任务,不得不吐...
    MarkLee阅读 827评论 3 10
  • 39/16000,34/35 1今天各种乐捐一元。 2今天给秦皇岛流浪小动物协会月捐30元。 3今天分享了我财富种...
    南戴河西谜会馆慧慧阅读 110评论 0 0