Swift5 iOS 集成支付宝支付

本文基于支付宝老版移动支付,不适用于新版App支付

本文未使用服务端签名,建议签名由服务端实现

导入AlipaySdk

本demo使用CocoaPods导入支付宝SDK,创建Brdging-Header.h文件(点击查看参考

CocoaPods导入AlipaySdk
platform :ios, '10.0'
target 'AlipayDemo-mobile' do
  source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
  pod 'AlipaySDK-iOS'
end
导入图中所示文件(移除两个 .a 后缀的库)
导入上面移除的两个库文件
把alipay路径加入Header Search Paths
添加URL Types

调用支付宝

    var ALIPAY_NOTIFY_URL  = "http://ape.ren/notify.html"   //商户后台回调地址
    var PARTNER = "2088xxxxxxx"  //商户号
    var SELLER = "xxxx@xxxx.com"    //商户账号
    var RSA_PRIVATE = "私匙"
     func aliPay(){
        let orderId = "test43241123"
        let price = 0.01
        let body = "body43241123"
        let subject = "subject43241123"
        
        let aliOrder = AlipayOrder(partner: PARTNER, seller: SELLER, tradeNO: orderId, productName: subject, productDescription: body, amount: price, notifyURL: ALIPAY_NOTIFY_URL, service: "mobile.securitypay.pay", paymentType: "1", inputCharset: "utf-8", itBPay: "3d", showUrl: "m.alipay.com", rsaDate: nil, appID: nil)
        
        
        let orderSpec = aliOrder.description
        
        let signer = RSADataSigner(privateKey: RSA_PRIVATE)
        let signedString = signer?.sign(orderSpec)
        
        let orderString = "\(orderSpec)&sign=\"\(signedString!)\"&sign_type=\"RSA\""
        
        AlipaySDK.defaultService().payOrder(orderString, fromScheme: "alipay-test", callback: nil)
        //alipay-test替换为自己设置的URL Types
    }

AppDelegate中添加回调状态监听

internal func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
        //支付宝支付回调
        if String(url.host!) == "safepay" {
            AlipaySDK.defaultService().processOrder(withPaymentResult: url,standbyCallback: {
                (value) in
                let code = value!
                let resultStatus = code["resultStatus"] as!String
                var content = ""
                switch resultStatus {
                case "9000":
                    content = "支付成功"
                case "8000":
                    content = "订单正在处理中"
                case "4000":
                    content = "支付失败"
                case "5000":
                    content = "重复请求"
                case "6001":
                    content = "中途取消"
                case "6002":
                    content = "网络连接出错"
                case "6004":
                    content = "支付结果未知"
                default:
                    content = "支付失败"
                    break
                }
                print(content)
            })
        }
        
        return true
    }

Demo下载

发表评论