iOS项目集成支付宝功能

2016-08-01  本文已影响58人  07212a79db66

一. 介绍

1 概述:

2 集成支付宝的步骤:

3 支付流程过程:

二.步骤:

1 下载官方DEMO
2 将demo里面的SDK及Order.h和.m全部拷贝出来,然后导入需要的框架,如下图.


3 编译一下,可能会包错误:


这个错误,解决方案如下


4 集成支付代码:这里模拟点击cell进行商品的购买

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

支付功能实现核心

- (void)buyProduct:(Products *)product {
    
    // 1.签约后获取到的商户ID和账号ID和私钥
    NSString *partner = @"";
    NSString *sellerID = @"";
    NSString *privateKey = @"";
    
    // 2.生成订单
    // 2.1.创建订单对象
    Order *order = [[Order alloc] init];
    // 2.2.设置商户ID和账号ID
    order.partner = partner;
    order.sellerID = sellerID;
    
    // 2.3.设置订单号(公司自己的算法决定)
    order.outTradeNO = nil; //订单ID(由商家自行制定)
    // 2.4.设置商品相关的信息
    order.subject = product.subject; //商品标题
    order.body = product.body; //商品描述
    
    order.totalFee = [NSString stringWithFormat:@"%.2f",product.price]; //商品价格
    // 2.5.设置支付宝服务器回调我们服务器的URL
    order.notifyURL =  @"http://www.xxx.com"; //回调URL
    // 2.6.规定写法
    order.service = @"mobile.securitypay.pay";
    order.paymentType = @"1";
    order.inputCharset = @"utf-8";
    order.itBPay = @"10m";
    order.showURL = @"m.alipay.com";
    
    // 3.添加应用程序的URL Scheme
    NSString *urlScheme = @"huodadaAlipayDemo";
    
    // 4.将定义信息拼接成一个字符串
    NSString *orderString = [order description];
    
    // 5.对订单进行签名加密
    id<DataSigner> signer = CreateRSADataSigner(privateKey);
    NSString *signedString = [signer signString:orderString];
    
    // 6.将前面后的字符串格式化为固定格式的订单字符串
    NSString *signedOrderString = [NSString stringWithFormat:@"%@&sign=\"%@\"&sign_type=\"%@\"",
                                   orderString, signedString, @"RSA"];
    
    // 7.调用支付宝客户端,让用户进行支付
    // 7.1.如果没有安装支付宝客户端,则会弹出webView让用户输入支付宝的账号和密码进行支付.如果是该情况,则会回调下面的block
    // 7.2.如果用户有安装支付宝客户端,则会跳转支付宝客户端进行支付
    [[AlipaySDK defaultService] payOrder:signedOrderString fromScheme:urlScheme callback:^(NSDictionary *resultDic) {
        NSLog(@"reslut = %@",resultDic);
    }];
    
}

然后再AppDelegate添加下面的代码即可

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation {
    //由于在跳转支付宝客户端支付的过程中,商户 app 在后台很可能被系统 kill 了,所以 pay 接口的 callback 就会失效,请商户对 standbyCallback 返回的回调结果进行处理,就是在这个方 法里面处理跟 callback 一样的逻辑
    
    if ([url.host isEqualToString:@"safepay"]) {
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}

// 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    if ([url.host isEqualToString:@"safepay"]) {
        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            NSLog(@"result = %@",resultDic);
        }];
    }
    return YES;
}

上一篇下一篇

猜你喜欢

热点阅读