Browse Source

支付流程

Chris 6 years ago
parent
commit
baee3f999b

+ 6 - 6
RainbowPlanet/RainbowPlanet/Manager/PayManager/PayManagerView/CommonPayHeader.swift

@@ -12,6 +12,9 @@ import RxCocoa
 
 class CommonPayHeader: BaseView {
     
+    typealias DismissBlock = () -> Void
+    var dismissBlock : DismissBlock?
+    
     var payAmount: Int? {
         didSet {
             titleLabel.text = "支付金额¥\(payAmount ?? 0)"
@@ -40,12 +43,9 @@ class CommonPayHeader: BaseView {
         let dismissBtn = UIButton(type: UIButton.ButtonType.custom)
         dismissBtn.setImage(kImage(name: "common_order_close"), for: .normal)
         dismissBtn.rx.tap.subscribe(onNext: { [weak self] (data) in
-            
-            //            if let loginBlock = self?.loginBlock {
-            //                loginBlock((self?.phoneNumber)!,(self?.password)!)
-            //            }
-            print("点击了关闭支付弹窗")
-            
+            if let dismissBlock = self?.dismissBlock {
+                dismissBlock()
+            }
         }).disposed(by: disposeBag)
         return dismissBtn
     }()

+ 15 - 2
RainbowPlanet/RainbowPlanet/Manager/PayManager/PayManagerView/CommonPayView.swift

@@ -20,6 +20,12 @@ class CommonPayView: FWPopupView {
     
     let disposeBag = DisposeBag()
     
+    typealias DismissTransBlock = () -> Void
+    var disTransBlock : DismissTransBlock?
+    
+    typealias ConfirmPayBlock = (_ pType: PayType) -> Void
+    var confirmPayBlock : ConfirmPayBlock?
+    
     var curPayType : PayType = PayType.wechatPay
     
     override init(frame: CGRect) {
@@ -67,8 +73,9 @@ class CommonPayView: FWPopupView {
         confirmPayBtn.setTitleColor(kffffffColor, for: UIControl.State.normal)
         confirmPayBtn.titleLabel?.font = kScaleRegularFont16
         confirmPayBtn.rx.tap.subscribe(onNext: { [weak self] (data) in
-            
-            print("点击--确认支付")
+            if let confirmPayBlock = self?.confirmPayBlock {
+                confirmPayBlock(self!.curPayType)
+            }            
         }).disposed(by: disposeBag)
         return confirmPayBtn
     }()
@@ -133,6 +140,12 @@ extension CommonPayView : UITableViewDelegate, UITableViewDataSource {
     func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
         let headerView = CommonPayHeader(frame: CGRect(x: 0, y: 0, width: kScreenWidth, height: 50))
         headerView.payAmount = 155
+        headerView.dismissBlock = {
+            [weak self] in
+            if let disTransBlock = self?.disTransBlock {
+                disTransBlock()
+            }
+        }
         return headerView
     }
     

+ 15 - 5
RainbowPlanet/RainbowPlanet/Modules/ShoppingCartModule/ShoppingCartFinishPay/View/ShoppingCartFinishPayView.swift

@@ -17,6 +17,12 @@ class ShoppingCartFinishPayView: BaseView {
         }
     }
     
+    var payStatus: Bool? {
+        didSet {
+            self.tableView.reloadSections([0], with: UITableView.RowAnimation.none)
+        }
+    }
+    
     override func setupViews() {
         self.backgroundColor = kf7f8faColor
         addSubview(tableView)
@@ -58,11 +64,15 @@ extension ShoppingCartFinishPayView : UITableViewDelegate, UITableViewDataSource
     func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         switch indexPath.section {
         case 0:
-            // 支付成功
-            let cell = ShoppingCartPaySuccessCell.cellWith(tableView: tableView, indexPath: indexPath)
-            // 支付失败
-//            let cell = ShoppingCartPayFailureCell.cellWith(tableView: tableView, indexPath: indexPath)
-            return cell
+            if (payStatus == true) {
+                // 支付成功
+                let cell = ShoppingCartPaySuccessCell.cellWith(tableView: tableView, indexPath: indexPath)
+                return cell
+            } else {
+                // 支付失败
+                let cell = ShoppingCartPayFailureCell.cellWith(tableView: tableView, indexPath: indexPath)
+                return cell
+            }            
         case 1:
             // 超值热卖
             let hotSaleCell = ShoppingCartHotSaleTableViewCell.cellWith(tableView: tableView, indexPath: indexPath)

+ 3 - 0
RainbowPlanet/RainbowPlanet/Modules/ShoppingCartModule/ShoppingCartFinishPay/ViewController/ShoppingCartFinishPayController.swift

@@ -11,6 +11,8 @@ import RxSwift
 
 class ShoppingCartFinishPayController: BaseViewController {
     
+    var payStatus: Bool? = false
+    
     var productSearchModelArray = Array<ProductSearchModel>()
     
     override func viewDidLoad() {
@@ -51,6 +53,7 @@ class ShoppingCartFinishPayController: BaseViewController {
     
     private lazy var finishPayView: ShoppingCartFinishPayView = {
         let finishPayView = ShoppingCartFinishPayView()
+        finishPayView.payStatus = payStatus
         return finishPayView
     }()
     

+ 39 - 6
RainbowPlanet/RainbowPlanet/Modules/ShoppingCartModule/ShoppingCartPayOrder/ViewController/ShoppingCartPayOrderController.swift

@@ -74,7 +74,7 @@ class ShoppingCartPayOrderController: BaseViewController {
         orderPayView.totalProductPrice = self.totalProductPrice!
         orderPayView.commitOrderTransBlock = {
             [weak self] (paraMdl) in
-            self?.orderCreateApi(paraMdl: paraMdl)            
+            self?.orderCreateApi(paraMdl: paraMdl)
         }
         orderPayView.jumpNavBlock = {
             [weak self] (jumpType) in
@@ -116,12 +116,45 @@ class ShoppingCartPayOrderController: BaseViewController {
     
     // 创建订单
     func orderCreateApi(paraMdl: OrderCreateParameterModel) {
-        SwiftMoyaNetWorkServiceOrder.shared().orderCreateApi(paraMdl: paraMdl) { (data) -> (Void) in
+        SwiftMoyaNetWorkServiceOrder.shared().orderCreateApi(paraMdl: paraMdl) { (orderBackModel) -> (Void) in
+            // 弹出支付方式View
+            AlertSheetView.payAlertSheetView(cancelClosure: {
+                [weak self] in
+                let vc = ShoppingCartFinishPayController()
+                vc.payStatus = false
+                self?.navigationController?.pushViewController(vc, animated: true)
+            }, sureClosure: { [weak self] (payType) in
+                switch payType {
+                case .wechatPay:
+                    self?.payWeixinpayApi(orderPayModel: orderBackModel as! OrderCreateBackModel)
+                case .aliPay:
+                    self?.payAlipayApi(orderPayModel: orderBackModel as! OrderCreateBackModel)
+                }
+            })
             
-            // 支付弹窗调用
-            AlertSheetView.payAlertSheetView {
-                
-            }
+            self.payWeixinpayApi(orderPayModel: orderBackModel as! OrderCreateBackModel)
+        }
+    }
+    
+    // 微信支付
+    func payWeixinpayApi(orderPayModel: OrderCreateBackModel) {
+        SwiftMoyaNetWorkServicePay.shared().payWeixinpayApi(paraMdl: orderPayModel) { [weak self] (data) -> (Void) in
+            print(data)
+            
+            let vc = ShoppingCartFinishPayController()
+            vc.payStatus = true
+            self?.navigationController?.pushViewController(vc, animated: true)
+        }
+    }
+    
+    // 支付宝支付
+    func payAlipayApi(orderPayModel: OrderCreateBackModel) {
+        SwiftMoyaNetWorkServicePay.shared().payAlipayApi(paraMdl: orderPayModel) { [weak self] (data) -> (Void) in
+            print(data)
+            
+            let vc = ShoppingCartFinishPayController()
+            vc.payStatus = true
+            self?.navigationController?.pushViewController(vc, animated: true)
         }
     }
     

+ 12 - 4
RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceApi/SwiftMoyaServicePay/SwiftMoyaNetWorkServicePay.swift

@@ -27,9 +27,13 @@ public class SwiftMoyaNetWorkServicePay: NSObject {
     ///
     /// - Parameters:
     ///   - completion: 回调
-    func payAlipayApi(completion: @escaping apiCallBack) {
+    func payAlipayApi(paraMdl:OrderCreateBackModel, completion: @escaping apiCallBack) {
+        var parameters = Dictionary<String,Any>()
+        parameters.updateValue(paraMdl.patchNum ?? 0, forKey: "patch_num")
+        parameters.updateValue(paraMdl.patchNum ?? 0, forKey: "money")
+        
         SwiftProgressHUD.shared().showWait()
-        SwiftMoyaNetWorkManager.shared().request(target: MultiTarget(SwiftMoyaServicePayApi.alipay)) { (rootModel) in
+        SwiftMoyaNetWorkManager.shared().request(target: MultiTarget(SwiftMoyaServicePayApi.alipay(parameters: parameters))) { (rootModel) in
             let rootModel = rootModel as! RootModel
             if rootModel.code == 0 {
                 completion(rootModel.data as Any)
@@ -46,9 +50,13 @@ public class SwiftMoyaNetWorkServicePay: NSObject {
     ///
     /// - Parameters:
     ///   - completion: 回调
-    func payWeixinpayApi(completion: @escaping apiCallBack) {
+    func payWeixinpayApi(paraMdl:OrderCreateBackModel, completion: @escaping apiCallBack) {
+        var parameters = Dictionary<String,Any>()
+        parameters.updateValue(paraMdl.patchNum ?? 0, forKey: "patch_num")
+        parameters.updateValue(paraMdl.patchNum ?? 0, forKey: "money")
+        
         SwiftProgressHUD.shared().showWait()
-        SwiftMoyaNetWorkManager.shared().request(WeChatpayOrderModel.self,target: MultiTarget(SwiftMoyaServicePayApi.weixinpay)) { (weChatpayOrderModel) in
+        SwiftMoyaNetWorkManager.shared().request(WeChatpayOrderModel.self, target: MultiTarget(SwiftMoyaServicePayApi.weixinpay(parameters: parameters))) { (weChatpayOrderModel) in
             let weChatpayOrderModel = weChatpayOrderModel as! WeChatpayOrderModel
             completion(weChatpayOrderModel)
             SwiftProgressHUD.shared().hide()

+ 7 - 6
RainbowPlanet/RainbowPlanet/Service/SwiftMoyaService/SwiftMoyaServiceApi/SwiftMoyaServicePay/SwiftMoyaServicePayApi.swift

@@ -6,7 +6,6 @@
 //  Copyright © 2019 南鑫林. All rights reserved.
 //
 
-import Foundation
 import Foundation
 import Moya
 
@@ -21,8 +20,8 @@ public let kWeixinpayApi = "/pay/wxpay"
 ///
 /// - alipay: 支付宝支付
 public enum SwiftMoyaServicePayApi {
-    case alipay
-    case weixinpay
+    case alipay(parameters:Dictionary<String, Any>)
+    case weixinpay(parameters:Dictionary<String, Any>)
 }
 
 extension SwiftMoyaServicePayApi: TargetType {
@@ -57,10 +56,12 @@ extension SwiftMoyaServicePayApi: TargetType {
     // MARK: - 请求任务事件(这里附带上参数)
     public var task: Task {
         switch self {
-        case .alipay,
-             .weixinpay
+        case .alipay(var parameters),
+             .weixinpay(var parameters)
             :
-            return .requestPlain
+            let sign = SwiftSign.shared().sign(signType:.AccessToken, parameters: parameters)
+            parameters.updateValue(sign, forKey: "sign")
+            return .requestParameters(parameters: parameters, encoding: URLEncoding.default)
         }
     }
 

+ 10 - 8
RainbowPlanet/RainbowPlanet/Tools/AlertSheetView/AlertSheetView.swift

@@ -91,24 +91,26 @@ class AlertSheetView: NSObject {
     }
     
     /// 自定义支付View
-    class func payAlertSheetView(sureClosure:@escaping () -> Void) {
+    class func payAlertSheetView(cancelClosure:@escaping () -> Void, sureClosure:@escaping (_ pType: PayType) -> Void) {
         let payView = CommonPayView(frame: CGRect(x: 0, y: 0, width: UIScreen.main.bounds.width, height: kSafeTabBarHeight + 300))
         
         let vProperty = FWPopupViewProperty()
         vProperty.popupCustomAlignment = .bottomCenter
         vProperty.popupAnimationType = .frame
         vProperty.maskViewColor = UIColor(white: 0, alpha: 0.5)
-        vProperty.touchWildToHide = "1"
+        vProperty.touchWildToHide = "0"
         vProperty.popupViewEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 0)
         vProperty.animationDuration = 0.5
         payView.vProperty = vProperty
         payView.show()
-//        payView.sureClosure = {
-//            () in
-//            payView.hide(popupDidDisappearBlock: { (popupView) in
-//                sureClosure(province, city,area)
-//            })
-//        }
+        payView.disTransBlock = {
+            cancelClosure()
+            payView.hide()
+        }
+        payView.confirmPayBlock = { payType in
+            sureClosure(payType)
+            payView.hide()
+        }
     }
     
     /// 分享