支付集成

支付宝支付

进行支付宝的集成如果导入的 SDK 是带 Demo 的版本,那么在后续 SDK 更新的时候,去下载 SDK 进行导入一旦报错,解决方案就是重新下载带 Demo 的包文件去导入 SDK。
进行支付宝支付的时候需要传入 Scheme ,我们需要提前去 info 中注册一个 URL Schemes , 不然的话不能进行支付过后的回调。
调起支付的方法如下

            let order = AlipaySDK()                                 
            //s.requestArgument = [] 服务器返回来的参数
            sessionManager.executeRequest(withSession: s) { [weak self](S) in
                if S.isSucess {
                    let orderStr = (S.responseObject["RETURN_DATA"] as! Dictionary)["orderStr"] ?? ""
                    order.payOrder(orderStr, fromScheme: AliPayscheme, callback: { (result) in                        
                    })
                }
            }

在支付完成过后需要在 AppDelegate 中进行支付结果的回调,在这里加入一个扩展类,然后再对应的位置去做响应的处理。

class AliSdkManager: NSObject {
    public static var aliSdkManager:AliSdkManager!
    
    public static func sharedManager () -> AliSdkManager{
        AliSdkManager.aliSdkManager = AliSdkManager.init()
        return AliSdkManager.aliSdkManager
    }
    internal func showResult(result:NSDictionary){
        //        9000  订单支付成功
        //        8000  正在处理中
        //        4000  订单支付失败
        //        6001  用户中途取消
        //        6002  网络连接出错
        let returnCode:String = result["resultStatus"] as! String
        switch  returnCode{
        case "6001":
            break
        case "8000":
            break
        case "4000":
            break
        case "9000":
            break
        default:
            break
        }
    }
}

使用这个扩展类要先在 AppDelegate 中注册

_ = AliSdkManager.sharedManager()

然后进行支付回调

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        if url.host == "safepay" {
            AlipaySDK.defaultService().processOrder(withPaymentResult: url as URL!, standbyCallback: {
                    (resultDic) -> Void in
                    //调起支付结果处理
                AliSdkManager.aliSdkManager.showResult(result: resultDic! as NSDictionary);
                })
            }
        //        return true;
        return WXApi.handleOpen(url, delegate: self)
    }
微信支付

导入 SDK

pod 'WechatOpenSDK'

我们需要去 info 中注册一个 URL Schemes,内容就填写在微信开放平台注册的 AppID,不然不能在支付成功以后回到程序完成回调
注册 SDK

WXApi.registerApp(wxAppKey, enableMTA: true) //wxAppKey 在微信开放平台注册的 AppID

调用微信支付的方法

            let s = getMYSession(self)
            s.requestId = "" // 自己服务器的接口
            s.requestArgument = [] // 接口的参数
            sessionManager.executeRequest(withSession: s) { [weak self](S) in
                if S.isSucess {
                    let request = PayReq.init()
                    request.prepayId = (S.responseObject["RETURN_DATA"] as! Dictionary)["prepay_id"]
                    request.partnerId = (S.responseObject["RETURN_DATA"] as! Dictionary)["partnerid"]
                    request.package = (S.responseObject["RETURN_DATA"] as! Dictionary)["package"]
                    request.nonceStr = (S.responseObject["RETURN_DATA"] as! Dictionary)["nonstr"]
                    let time = (S.responseObject["RETURN_DATA"] as! Dictionary)["timestamp"] //as! Int
//                    let timeInt = Int(time!)
                    let timestamp : UInt32 = UInt32.init(exactly: Double(Int(time!)!))!
                    request.timeStamp = timestamp
                    request.sign = (S.responseObject["RETURN_DATA"] as! Dictionary)["paysign"]
//                    WXBackShowMessage = "支付"
                    WXApi.send(request)
                }
            }

进行支付回调

    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        if url.host == "safepay" {
            AlipaySDK.defaultService().processOrder(withPaymentResult: url as URL!, standbyCallback: {
                    (resultDic) -> Void in
                    //调起支付结果处理
                AliSdkManager.aliSdkManager.showResult(result: resultDic! as NSDictionary);
                })
            }
        //        return true;
        return WXApi.handleOpen(url, delegate: self)
    }
    func application(_ application: UIApplication, handleOpen url: URL) -> Bool {
        return WXApi.handleOpen(url, delegate: self)
    }
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        return WXApi.handleOpen(url, delegate: self)
    }
    func onResp(_ resp: BaseResp!) {
        if resp .isKind(of: PayResp.self) {
            switch resp.errCode {
            case 0:
                print("成功")
            default:
                print("失败")               
                break
            }
        }
    }

微信授权 https://www.jianshu.com/p/098088242f45

你可能感兴趣的:(支付集成)