集成支付宝


(一)前言

  • 使用支付宝进行一个完整的支付功能,大致有以下步骤:
    • 向支付宝申请, 与支付宝签约,获得商户ID(partner)和账号ID(seller)和私钥(privateKey)
    • 下载支付宝SDK
    • 生成订单信息,签名加密
    • 调用支付宝客户端,由支付宝客户端跟支付宝安全服务器打交道
    • 支付完毕后,支付宝客户端会自动跳回到原来的应用程序
    • 在原来的应用程序中显示支付结果给用户看
集成支付宝_第1张图片
支付流程.png

新版本为App支付
老版本为移动支付

(二)与支付宝签约的条件

集成支付宝_第2张图片
与支付宝签约的条件.png
集成支付宝_第3张图片
条件.png

签约的目的:为了得到一个收款的ID,用户付款后,这个钱就会打到这个ID里面

![Uploading Paste_Image_407429.png . . .]



(三)史上最全集成步骤

  • 1.登录蚂蚁金服
登录蚂蚁金服.png
  • 2.点击管理中心


    管理中心.png

    3.创建应用

集成支付宝_第4张图片
创建应用.png

4.点击修改(应用图标等等)

集成支付宝_第5张图片
修改.png

5.找到App支付DEMO&SDK

101.50.gif

6.点击 老版本移动支付文档

集成支付宝_第6张图片
老版本移动支付文档.png

7.下载SDK和DEMO


集成支付宝_第7张图片
下载SDK和Demo.png

8.点击快速接入

集成支付宝_第8张图片
快速接入.png

9.商户签约审核

集成支付宝_第9张图片
签约与审核.png

10.生成密钥

集成支付宝_第10张图片
生成密钥.png
集成支付宝_第11张图片
生成私钥和公钥.png

11.终端输入命令生成私钥和公钥(最好不要删除不是PKCS8格式的私钥,我这里做的有点问题)

集成支付宝_第12张图片
101.51.gif

12.登录支付宝

登录支付宝.png

13.点击商家服务

商家服务.png

14.查询PID Key

集成支付宝_第13张图片
查询PID Key.png

15.验证密码来查看PID Key

集成支付宝_第14张图片
验证密码来查看PID Key.png

16.查看密钥(公钥)

集成支付宝_第15张图片
点击查看密钥.png

17.复制公钥粘贴到 支付宝的安全校验码(Key)中

集成支付宝_第16张图片
复制公钥粘贴.png

18.创建Xcode项目,并在plist文件中增加App传输安全设置


集成支付宝_第17张图片
HTTPS.png

19.按照这个文档进行导入代码。有选择性的导入哦,有的不需要,以下面的步骤为准

集成支付宝_第18张图片
导入代码.png

20.导入Bundle和Framework

集成支付宝_第19张图片
导入Bundle和Framework.png

21.在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:

集成支付宝_第20张图片
增加依赖.png

22.编译Xcode,提示错误

集成支付宝_第21张图片
AlipaySDK错误.png

解决办法:

集成支付宝_第22张图片
删除AlipaySDK.png

23.粘贴商家ID,收款账号,私钥到xcode项目中

粘贴密钥到xcode.png

    // 商家ID
    NSString *partner = @"2088112967388821";
    // 收款账号
    NSString *seller = @"[email protected]";
    // 私钥
    NSString *privateKey = @"MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAMAya+IS3WeeyHXRIMi76bJj0cURKCmY9JjA+Pe4M3kI3JoxbIg/1biHX0+XOKLPoGd2moSOOqU34Uehdu9i90DhZcC24KBu/jW4E9eiIt6CREGjP/fR+AvOw2iUBW6f3WX/jr0Yz1iitRqrcq7wXyekTnlwBMLXKhCW1PUGy+FAgMBAAECgYBbiihT/sQxDDFR3HXOj58xAyMYqZCeK2Gz3LEHoSnVJmmzni86zfiPexashj1bMRLOTU6v4on1QH7NOmJq7HZmM40EPj5IzDgU4In3utFjfHta6G0JxFjU85TyDRc+8h0lWG9L1mEJ79LoDNtJDaiFkiFHVhFEeK8iIxOBZL96gQJBAPMmi6fOZDZQMoCWGcClB+gOGPRvh3T/ukJs1pu/dgtRDz26xI3Xd54Lwu6yQklvJKnZ84AZ7r31l6nwVpE0vFUCQQDKWo05NS6cgnvYr5wlEn1FyDDPZ6ztBj8/aU6tpo3cDw7tuGWCHLCEzAgexTUUTcHQmy5jepZzVE9AsrtR0dZxAkAxAc7aFo46KDXVlus/2cNbMSQ0eBosKbLH2pnysEdBhqf0wCUHlasFTseORp13oZAZL9WVNyTYYpyb4tX/1Eo1AkBZEy1RfoCrMqEzzHHuu8nbWvlpg1jS6coTrtaMiGGv+gz3RhGhCeIGQw5cBTGNY4Eqw/TSo5bw468TatocdUNxAkEAotpgndS0snM4yKACyghzOJ9IylOzFjPv1J1BJN1DrfkVzJ8E111880iqaIOmh30on1cWhrah0S3wfIE9KtDJAw==";

24.导入Order类,并写上关于生成订单信息及签名的代码

生成订单信息.png

   /*
     *生成订单信息及签名
     */
    //将商品信息赋予AlixPayOrder的成员变量
    Order *order = [[Order alloc] init];
    order.partner = partner;
    order.sellerID = seller;
    order.outTradeNO = @"XXYYZZ"; //订单ID(由商家自行制定)
    order.subject = @"iPhone"; //商品标题
    order.body = @"价格公道"; //商品描述
    order.totalFee = @"3288"; //商品价格
    // 自己的服务器的IP地址,问下后台就知道
    order.notifyURL =  @"http://www.jianshu.com"; //回调URL
    // 接口名称
    order.service = @"mobile.securitypay.pay";
    // 支付类型.1代表购买商品
    order.paymentType = @"1";
    // 参数编码字符集
    order.inputCharset = @"utf-8";
    //未付款交易的超时时间
    order.itBPay = @"30m";
    
    order.showURL = @"m.alipay.com";

25.应用注册scheme,并添加:Info->URL Types->URL Schemes->点击+号->CoderZb

    //应用注册scheme,在AlixPayDemo-Info.plist定义URL types.支付完之后跳回到app中
    NSString *appScheme = @"CoderZb";// Info->URL Types->点击+号->URL Schemes
101.52.gif

26.将商品信息拼接成字符串

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

27.获取私钥并将商户信息签名

    //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
    id signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:orderSpec];
   //将签名成功字符串格式化为订单字符串,请严格按照该格式
    NSString *orderString = nil;
    if (signedString != nil) {
        orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
                       orderSpec, signedString, @"RSA"];
        
        [[AlipaySDK defaultService] payOrder:orderString fromScheme:appScheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
        }];
    }
  • 错误提示
DataSigner.png
  • 解决办法:导入Util文件
集成支付宝_第23张图片
Unil.png
  • 又出现了新的错误
集成支付宝_第24张图片
NSObject.png
  • 解决办法
集成支付宝_第25张图片
Foundation.png
  • 又出现了新的错误
集成支付宝_第26张图片
type.png
  • 解决办法:
集成支付宝_第27张图片
Foundation1.png
  • 又出现了新的错误
集成支付宝_第28张图片
rsa.png
  • 解决办法
集成支付宝_第29张图片
openssl.png

-又出现了新的错误

集成支付宝_第30张图片
openssl找不到.png
  • 解决办法
    • 首先搜索herader S
集成支付宝_第31张图片
路径.png
  • 然后再添加两个静态库
集成支付宝_第32张图片
静态库.png

28.AppDelegate.m添加如下代码,能获取到失败的信息


-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    NSString *urlStr = [url absoluteString];
    NSString *result = [urlStr stringByRemovingPercentEncoding];// 去掉urlStr中的百分号
    NSLog(@"%@",result);
    return YES;
}

  • 经典错误
Undefined symbols for architecture armv7: 
 "_OBJC_CLASS_$_UTDevice", referenced from: 
  objc-class-ref in AlipaySDK
 symbol(s) not found for architecture armv7clang: error: linker command failed with exit code 1 (use -v to see invocation)

集成支付宝_第33张图片
error.png
  • 解决办法:下载的SDK&&Demo,文件夹中没有xcode项目但是有两个AlipaySDK千万不要导入到项目中。文件夹中有xcode项目,且还有两个AlipaySDK才能导入。
集成支付宝_第34张图片
daoru.png
101.53.gif

(四)运行 [LS](https://pan.baidu.com/s/1boO2aS3 密码 fatu)

101.55.gif

你可能感兴趣的:(集成支付宝)