iOS 集成支付宝 ---- swift

1. 准备工作

签约与审核
PID 和 密钥管理
  • 1 登录支付宝官方网站b.alipay.com 点击导航栏中“商家服务,即可查询 PID
  • 2 生成公钥和私钥
  • 3 RSA加密

2. SDK 下载

首先从支付宝开放平台下载SDK. 解压后的目录下包含「服务端demo」和「客户端demo」。「客户端demo」包含了集成支付宝所需要的所有文件。

3. 交易流程

  • 1 首先是用户在App上面下订单,同时App请求服务端API,服务端接收到POST请求后生成相应的订单,记录到DB,然后将订单信息返回到。
  • 2 App接收到返回订单信息后,在客户端生成符合支付宝API要求 的数据请求。其中就包括notify URL,这个URL必须是外网可以访问的,目的是用来接收支付宝支付成功后的反馈。
  • 3 App调用支付宝支付API。
  • 4 支付成功或失败后返回App,并根据返回结果给用户相应反馈信息。
  • 5 如果支付成功后,支付宝服务器会调用第2步提到的 notify URL. 这个notify URL需要在你自己的服务器端实现相应功能,用来接受支付宝服务器发送的支付成功的通知,并将相应订单标记为已经支付。
  • 流程图如下:

4. 关联库

  • 1 启动IDE(如Xcode),把iOS包中的压缩文件中以下文件拷贝到项目文件夹下,并导入到项目工程中。

    (1)AlipaySDK.bundle

    (2)AlipaySDK.framework

    (3)在Build Phases选项卡的Link Binary With Libraries中,增加以下依赖:


  • 2 新建一个Bridging-Header.h文件,并把该文件的路径添加到 Build Settings => Objective-C Bridging Header。然后在该文件中添加下面两行.

<pre><code>

import < AlipaySDK/AlipaySDK.h>

import "RSADataSigner.h"

</code></pre>

5. code

  • 1 配置请求信息
    <pre><code>
    let aliOrder = AlipayOrder(partner: AlipayPartner, seller: AlipaySeller, tradeNO: order.id, productName: order.title, productDescription: order.content, amount: order.price, notifyURL: AlipayNotifyURL, service: "mobile.securitypay.pay", paymentType: "1", inputCharset: "utf-8", itBPay: "30m", showUrl: "m.alipay.com", rsaDate: nil, appID: nil)
    let orderSpec = aliOrder.description //orderA.description
    
    let signer = RSADataSigner(privateKey: AlipayPrivateKey)
    let signedString = signer.signString(orderSpec)
    
    let orderString = "\(orderSpec)&sign=\"\(signedString)\"&sign_type=\"RSA\""
    
    print(orderString)
            AlipaySDK.defaultService().payOrder(orderString, fromScheme: AppScheme, callback: {[weak self] resultDic in
        if let strongSelf = self {
            print("Alipay result = \(resultDic as Dictionary)")
            let resultDic = resultDic as Dictionary
            if let resultStatus = resultDic["resultStatus"] as? String {
                if resultStatus == "9000" {
                    strongSelf.delegate?.paymentSuccess(paymentType: .Alipay)
                    let msg = "支付成功!"
                    let alert = UIAlertView(title: nil, message: msg, delegate: nil, cancelButtonTitle: "好的")
                    alert.show()
                    //strongSelf.navigationController?.popViewControllerAnimated(true)
                } else {
                    strongSelf.delegate?.paymentFail(paymentType: .Alipay)
                    let alert = UIAlertView(title: nil, message: "支付失败,请您重新支付!", delegate: nil, cancelButtonTitle: "好的")
                    alert.show()
                }
            }
        }
        })

</code></pre>

  • 2 配置支付宝客户端返回url处理方法
    <pre><code>
    //跳转支付宝钱包进行支付,处理支付结果
    AlipaySDK.defaultService().processOrderWithPaymentResult(url, standbyCallback: { (resultDict:[NSObject : AnyObject]!) -> Void in
    print("openURL result: (resultDict)")
    })
    </code></pre>

通知服务器支付成功

如果支付成功后,支付宝服务器会向你的服务器 notify URL 发起支付成功的请求。这样就可以在服务端实现一些相关的业务逻辑,比如标记订单为已支付,发短信给用户等.

参考 :

推荐阅读更多精彩内容