支付宝支付集成步骤和流程(Swift2.2)

支付宝支付集成步骤和流程

1 简述

  • 简单说就三个步骤:

      1.生成订单(可以在客户端生成,也可以在服务器端生成)
      2.调用支付宝支付接口,发送订单
      3.处理支付宝返回的支付结果
    

2.关于签名校验

  • 按理说,这些步骤完全够了,但是有一个安全性问题,你肯定不希望你接收的支付结果被截获修改,所以,这就需要在生成订单和处理支付结果的时候做一个安全性校验
  • 生成订单时对数据签名,收到支付结果时对数据进行签名校验,以校验数据是否被篡改过
  • 支付宝目前只支持RSA加密方式做签名校验,RSA加密算法,除了可加解密之外,还可以做签名校验,简单地说,RSA会生成一个私钥和一个公钥,私钥你应该独自保管,公钥你可以分发出去。做签名验证时,你可以用私钥对需要传输的数据做签名加密,生成一个签名值,之后分发数据,接收方通过公钥对签名值做校验,如果一致则认为数据无篡改
  • 具体到支付宝使用RSA做签名验证,就是在生产订单时,需要使用私钥生成签名值;在处理返回的支付结果时,需要使用公钥验证返回结果是否被篡改了

3.配置工程

3.1 导入SDK到工程中

3.2 添加系统静态依赖库

    SystemConfiguration.framework
    CoreTelephony.framework
    QuartzCore.framework
    CoreText.framework
    CoreGraphics.framework
    UIKit.framework
    Foundation.framework
    CFNetwork.framework
    CoreMotion.framework
    libc++.tbd
    libz.tbd

3.3 修改SDK的路径

target-build setting-Header Search Paths 

3.4 创建桥接文件

  • 预编译头文件

      #import 
    
  • 支付宝头文件

      支付宝头文件
      #import "RSADataSigner.h"
      #import 
      #import "Order.h"
    

3.5 iOS9网络适配

NSAppTransportSecurity
        
        NSAllowsArbitraryLoads
    

3.6 设置应用Scheme

  • 设置Scheme,方便支付宝客户端能够将支付结果返回,尽量保证Scheme唯一

3.7 支付的实现

ViewController.swift

  • 实现支付需要用到的参数
支付参数 既定变量
商户ID partner
账户ID sellerID
资金总额 totalFee
交易说明 subject
商品的具体描述 body
  • 创建订单
// 创建订单
let order = Order()
// 商户id: 商户在支付宝签约时,支付宝为商户分配的唯一标识号(以2088开头的16位纯数字),订单支付金额将打入该账户,一个partner可以对应多个seller_id。
order.sellerID = seller
//订单号:商户网站商品对应的唯一订单号,是随机的(公司后台生成的)
order.outTradeNO = "20160923XXXX"
//资金总额:该笔订单的资金总额,单位为RMB(Yuan)。取值范围为[0.01,100000000.00],精确到小数点后两位
order.totalFee = "0.01"
//交易说明:
order.subject = "交易说明"
//商品的具体描述
order.body = "买的一部诺基亚手机"
  • 验证
// 获取商品的所有属性
let orderDes = order.description
 //使用私钥进行签名验证
let signer = CreateRSADataSigner(privateKey)       
//打包签名信息,参数是商品描述
let singerStr = signer.signString(orderDes)


//拼接商品信息
/*
1.商品描述
2.签名信息
3.签名方式:RSA
*/
let orderStr = String(format: "%@&sign=\"%@\"&sign_type=\"%@\"", orderDes,singerStr,"RSA")
  • 发起支付
参数 含义
参数1 商品拼接信息
参数2 url scheme(回调的唯一标示)
参数3 支付完成之后的回调
if singerStr != nil {
    AlipaySDK.defaultService().payOrder(orderStr, fromScheme: "AliPayDemo", callback: { (result) in
        print("支付结果:\(result)")
    })
}

  • 支付完成后的结果

      1.支付成功
      2.支付失败 
          余额不足
          网络问题
          用户取消支付
    

在实际项目中,支付宝支付会跟公司自己的服务器交互
支付宝支付有客户端支付和h5支付两种方式。会自动判断当前设备上是否安装有支付宝客户端


AppDelegate.swift

  • 处理客户端的回调
func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    AlipaySDK.defaultService().processOrderWithPaymentResult(url) { (result) in
        print("回调结果:\(result)")
    }
    return true
}

你可能感兴趣的:(支付宝支付集成步骤和流程(Swift2.2))