iOS支付宝app端开发的简单介绍

支付宝

支付宝开发步骤:

  1. 创建应用
  2. 配置应用
  3. 设计
  4. 开发
  5. 调试
  6. 上线

创建应用

接入App支付能力,需要在开放平台创建一个应用,通过该应用来接入各种能力。

配置应用

配置应用一般分为三个部分

  • 第一部分:给应用添加相应的功能
  • 第二部分:签约
  • 第三部分:配置秘钥

这些一般都是TeamLeader和运营总监来做

设计

设计一般分为:

  • 架构设计
    架构设计一般采用支付宝推荐设计架构,附上一张图片吧
    支付宝基本设计架构
  • 安全设计
  • 采用HTTPS协议传输交易数据,防止数据被截获,解密。
  • 采用RSA非对称秘钥,明确交易双方的身份,保证交易主体的正确性和唯一性

开发

开发就先上图了,让大家了解一下支付的基本流程:

支付宝基本支付流程

了解基本流程后就要开始进行服务端和客户端的开发集成了.
后台的开发任务相比客户端相对来说繁琐一些,因为后台要做订单的订单信息的拼接和签名,将签好名的订单串给客户端,这样做是因为原则上不允许将签名放在客户端进行,不安全.
客户端的任务是调起支付宝并监听回调结果,并展示给用户支付结果.
具体的支付状态一定要以服务端的回调为准.

ios客户端配置
  • 导入支付宝SDK和bundle文件
AlipaySDK.bundle
AlipaySDK.framework
  • 集成第三方的第一个步骤导入依赖库

支付宝依赖库

  • 配置info.plist
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

<key>CFBundleURLTypes</key>
	<array>
             <!-- 支付宝 用来应用之间跳转的 -->
		<dict>
			<key>CFBundleTypeRole</key>
			<string>Editor</string>
			<key>CFBundleURLName</key>
			<string>alipay</string>
			<key>CFBundleURLSchemes</key>
			<array>
				<string>DovAlipayDemo</string>
			</array>
		</dict>
	</array>

Show me the code!
导入头文件
	
#import <AlipaySDK/AlipaySDK.h>

/**
发起支付,调起支付宝应用
orderString 从后天获取的拼接好的签过名的订单串
schemes 用来进行应用跳转的schemes,支付成功或者失败跳回应用
callback 支付回调(但是我并没有发现有什么软用) 原因:【由于在跳转支付宝客户端支付的过程中,商户app在后台很可能被系统kill了,所以pay接口的callback就会失效】
*/
[[AlipaySDK defaultService] payOrder:orderString
                          fromScheme:@"DovAlipayDemo" //这个一定要和info.plist里面配置的一样,并确保唯一性
                            callback:^(NSDictionary *resultDic) {
        
        NSLog(@"alipay resultDic = %@",resultDic);
        
 }];

//支付接口的回调是不管用了,我们一下面的方式进行回调结果的监听

//ios 9.0 以下使用此方法进行回调监听
- (BOOL) application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    //支付宝
    if ([url.host isEqualToString:@"safepay"]) {
       [self alipayCallbackWithUrl:url];
    }
    return YES;
}

//ios 9.0 以上使用此方法进行回调监听
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
    //支付宝
    if ([url.host isEqualToString:@"safepay"]) {
       [self alipayCallbackWithUrl:url];
    }
    return YES;
    
}

- (void)alipayCallbackWithUrl:(NSURL *)url {

        //跳转支付宝钱包进行支付,处理支付结果
        [[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
            
            if ([[resultDic objectForKey:@"resultStatus"] integerValue] == 9000) {
               //代表你支付成功了 
            }
            else {
                //失败了
            }
            
        }];
        
    }

调试

支付宝推出了一个沙盒测试,我们开发的时候基本没有使用,因为测试的时候使用的小金额测试.

上线

商户本身应用上线时候,也要把支付宝开放平台的应用上线.

扩展介绍

订单信息签名过程模拟(这个一定要放在服务端来做)

    //================== 生成支付订单信息 =================//
    /*
     *生成订单信息及签名
     */
    //将商品信息赋予AlixPayOrder的成员变量
    Order *order = [[Order alloc] init];
    order.partner = alipayParterID;  //合作商ID (支付宝开发平台里面)
    order.sellerID = alipaySellerID; //商家ID
    order.outTradeNO = @"78797348634858734673899"; //订单ID(由商家自行制定)
    order.subject = @"篮球"; //商品标题
    order.body = @"室内室外两用"; //商品描述
    order.totalFee = [NSString stringWithFormat:@"%.2f",100.5]; //商品价格
    order.notifyURL =  @"http://www.baidu.com"; //回调URL

    //这些值是固定值不用修改
    order.service = @"mobile.securitypay.pay";
    order.paymentType = @"1";
    order.inputCharset = @"utf-8";
    order.itBPay = @"30m";
    order.showURL = @"m.alipay.com";


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

    //================== 签名 =================//
    //获取私钥并将商户信息签名,外部商户可以根据情况存放私钥和签名,只需要遵循RSA签名规范,并将签名字符串base64编码和UrlEncode
    id<DataSigner> signer = CreateRSADataSigner(@"私钥");
    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:self.scheme callback:^(NSDictionary *resultDic) {
            NSLog(@"reslut = %@",resultDic);
        }];
    }

注意事项

  • 支付宝的签名过程一定要在服务端完成
  • 支付宝的回调以服务端的为准,客户端的只是做参考
  • 支付宝的发起支付的回调是在没有安装APP的时候使用网页支付的回调,记得处理
  • 如果是Xcode 7.0之后的版本,需要添加libc++.tbd、libz.tbd;如果是Xcode7.0之前的版本,需要添加libc++.dylib、libz.dylib

参考文献

支付宝文档中心

原文地址:https://www.cnblogs.com/coderYDW/p/6292215.html