zoukankan      html  css  js  c++  java
  • 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

    参考文献

    支付宝文档中心

  • 相关阅读:
    介绍欧美同学会建言献策委员会||Center of China & Globalization
    snappy的性能测定 42qu.com
    清华大学信息检索组微博寻人闺蜜搜索
    第二届penny校园西瓜节总结
    包邮韩国SGP复古三星i9220手机皮套n7000手机壳Galaxy note保护套tmall.com天猫
    Lustre I/O性能特点与最佳实践 刘爱贵的专栏 博客频道 CSDN.NET
    请问广告这行入门都有哪些经典paper可以学习?
    tbgo: 金山软件稳健增长 $金山软件(03888)$ 金山的中报1个月... 雪球
    京东商城招聘java工程师
    统筹学_百度百科
  • 原文地址:https://www.cnblogs.com/coderYDW/p/6292215.html
Copyright © 2011-2022 走看看