支付宝和内购的区别以及集成方法

一、支付宝和内购的区别


第三方支付平台

和内购非常相似
内购是用户将钱付款给苹果,之后苹果分成给商户
支付宝是用户将钱付款给支付宝,之后支付宝将钱转入我们的账户

使用支付宝前提
购买的物品必须是和应用程序无关的.比如:团购卷/衣服/电子产品
如果和应用程序有关,必须采用内购(否则不允许上架).比如:会员/游戏道具

二、集成支付宝


现在不少app内都集成了支付宝功能

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

三、集成SDK注意事项


* 支付宝的SDK下载和百度、讯飞语言等SDK不一样,直接搜支付宝进入官网下载
* 支付宝下载(选择我是商户用户—>如何集成—>移动开发)
* 集成前查看demo
* 集成时需要用到的库

技术分享

* 集成之后可能遇到的问题

1)集成SDK编译时找不到 openssl/asn1.h 文件

技术分享
解决方案:Build Settings --> Search Paths --> Header Search paths : $(SRCROOT)/支付宝集成/Classes/Alipay

技术分享

2)链接时:找不到 SystemConfiguration.framework 这个库  
技术分享

解决方案:
技术分享

四、具体代码


比如现在将产品展示在tableView上,选中时即购买此商品,集成支付宝的核心代码如下:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    // 1.取出模型对象
    Product *product = self.products[indexPath.row];
    
    // 2.购买商品
    [self buyProduct:product];
}

- (void)buyProduct:(Product *)product
{
    // 1.添加写partner/seller/privateKey,签约后获得
    NSString *partner = @"";
    NSString *seller = @"";
    NSString *privateKey = @"";
    
    
    // 2.生成订单
    // 2.1.创建订单
    Order *order = [[Order alloc] init];
    
    // 2.2.设置商户ID/账号ID
    order.partner = partner;
    order.seller = seller;
    
    // 2.3.设置订单号
    order.tradeNO = nil;
    
    // 2.4.设置产品相关的信息
    order.productName = product.title;
    order.productDescription = product.detail;
    order.amount = [NSString stringWithFormat:@"%.2f", product.price];
    
    // 2.5.设置订单常量
    order.service = @"mobile.securitypay.pay";
    order.paymentType = @"1";
    order.inputCharset = @"utf-8";
    order.itBPay = @"30m";
    order.showUrl = @"m.alipay.com";
    
    // 2.6.回调URL(异步通知服务器的地址)
    order.notifyURL =  @"http://www.xxx.com"; //回调URL
    
    // 2.7.将订单信息拼接成字符串
    NSString *orderSpec = [order description];
    
    // 3.对订单进行签名加密
    // 3.1.对订单进行加密
    id<DataSigner> signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:orderSpec];
    
    // 3.2.将签名成功字符串格式化为订单字符串,请严格按照该格式
    NSString *orderString = [NSString stringWithFormat:@"%@&sign="%@"&sign_type="%@"", orderSpec, signedString, @"RSA"];
    
    // 4.打开支付宝客户端进行支付(用户没有安装支付宝客户端,直接在应用程序中添加一个WebView,通过网页让用户进行支付)
    // 注意:如果是通过网页支付完成,那么会回调该block:callback
    [[AlipaySDK defaultService] payOrder:orderString fromScheme:@"jingdong" callback:^(NSDictionary *resultDic) {
        
    }];
}

AppDelegate.m

// 当通过别的应用程序,将该应用程序打开时,会调用该方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{
    // 当用户通过支付宝客户端进行支付时,会回调该block:standbyCallback
    [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
        NSLog(@"result = %@",resultDic);
    }];
    
    return YES;
}
原文地址:https://www.cnblogs.com/jiayongqiang/p/5344546.html