iOS开发基础58-支付宝集成指南

iOS 支付宝集成指南

支付宝作为第三方支付平台,广泛应用于各类移动应用程序中,提供了一种便捷的支付方式。本文将详细介绍如何在 iOS 应用中集成支付宝,以及集成过程中需要注意的事项和底层逻辑分析。

一、什么是支付宝?

支付宝是一个第三方支付平台,类似于应用内购(IAP)。不同的是:

  • 内购:用户将钱付款给苹果,苹果再将部分费用结算给商户。
  • 支付宝:用户将钱付款给支付宝,支付宝再将款项结算到我们的商户账户。

使用支付宝的前提

应用内的购买物品必须是与应用程序无关的物品。例如:食品、衣服、电子产品等。与应用程序相关的购买(例如会员、游戏道具)必须使用内购,不允许使用第三方支付平台。

二、集成支付宝

集成支付宝到应用中,需要按照以下步骤进行:

  1. 向支付宝申请:与支付宝签约,获得商户ID(partner)、账号ID(seller)和私钥(privateKey)。
  2. 下载支付宝SDK
  3. 生成订单信息,并进行签名加密
  4. 调用支付宝客户端:由支付宝客户端与支付宝服务器交互。
  5. 返回支付结果:支付宝客户端支付完毕后,会跳回原应用程序显示支付结果。

三、集成SDK注意事项

集成支付宝 SDK 时,有几点需要注意:

  1. SDK 下载:支付宝 SDK 需要从官网下载。路径:我是商户用户 -> 如何集成 -> 移动开发。
  2. 查看Demo:集成前查看官方提供的 Demo,确保理解集成流程。
  3. 所需库:确保集成时,所需的库文件已经包含在项目中。

集成后的常见问题

  1. 找不到 openssl/asn1.h 文件

    解决方案:在 Build Settings --> Search Paths --> Header Search paths 中添加路径:$(SRCROOT)/支付宝集成/Classes/Alipay

  2. 找不到 SystemConfiguration.framework

    解决方案:在项目中添加 SystemConfiguration.framework 库。

四、具体代码实现

以下是一个将产品展示在 tableView 上,并实现支付宝购买功能的示例:

Product 模型

假设有一个商品模型类:

@interface Product : NSObject
@property (nonatomic, strong) NSString *title;
@property (nonatomic, strong) NSString *detail;
@property (nonatomic, assign) float price;
@end

支付流程代码

tableView 的点击事件中触发购买:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    Product *product = self.products[indexPath.row];
    [self buyProduct:product];
}

- (void)buyProduct:(Product *)product {
    NSString *partner = @"Your_Partner_ID";
    NSString *seller = @"Your_Seller_ID";
    NSString *privateKey = @"Your_Private_Key";
    
    // 生成订单信息
    Order *order = [[Order alloc] init];
    order.partner = partner;
    order.seller = seller;
    order.tradeNO = [self generateTradeNO];
    order.productName = product.title;
    order.productDescription = product.detail;
    order.amount = [NSString stringWithFormat:@"%.2f", product.price];
    order.service = @"mobile.securitypay.pay";
    order.paymentType = @"1";
    order.inputCharset = @"utf-8";
    order.itBPay = @"30m";
    order.showUrl = @"m.alipay.com";
    order.notifyURL =  @"http://www.xxx.com";
    
    NSString *orderSpec = [order description];
    
    // 签名加密
    id<DataSigner> signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:orderSpec];
    NSString *orderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"", orderSpec, signedString, @"RSA"];
    
    // 调用支付宝客户端进行支付
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:@"yourAppScheme" callback:^(NSDictionary *resultDic) {
        // 处理支付结果
        NSLog(@"result = %@", resultDic);
    }];
}

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

AppDelegate.m

AppDelegate 中处理支付宝客户端的回调:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
    [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
        NSLog(@"result = %@", resultDic);
    }];
    return YES;
}

五、分析

  1. 生成订单信息:生成订单信息包括商户ID、账号ID、订单号、产品信息等。订单信息必须签名加密,再传给支付宝客户端。

  2. 签名加密:使用 RSA 算法对订单信息进行签名,保障信息的完整性和安全性。

  3. 调用支付宝客户端:通过支付宝 SDK 调用支付宝客户端完成支付。支付宝客户端与支付宝服务器进行通信,处理支付请求。

  4. 处理回调:支付宝客户端完成支付后,返回结果给应用程序。应用程序通过 AlipaySDK 提供的接口,处理支付结果并显示给用户。

  5. 订单号生成:订单号的生成需要保证唯一性。可以使用随机数结合时间戳或者其他唯一标识符。

结语

本文详细介绍了在 iOS 应用中集成支付宝的方法及注意事项。通过以上步骤,开发者可以在应用中轻松实现支付宝支付功能,提升用户支付体验。在实际开发中,还需要根据具体业务场景进行相应的调整和优化。

posted @ 2015-09-29 20:15  Mr.陳  阅读(2763)  评论(0编辑  收藏  举报