Sin Descripción

PhotoPurchaseRemoteAPI.swift 4.6KB

    // // PhotoPurchaseRemoteAPI.swift // PaiaiDataKit // // Created by FFIB on 2019/4/1. // Copyright © 2019 FFIB. All rights reserved. // import Foundation import RxSwift import ObjectMapper struct PurchaseModel { var wxpay_params: [String: AnyObject] = [:] var appid: String = "" var noncestr: String = "" var package: String = "" var sign: String = "" var partnerid: String = "" var timestamp: Int = 0 var order_id: String = "" var prepay_id: String = "" init(_ json: JSON) { self.init(map: Map(mappingType: .fromJSON, JSON: json)) } } extension PurchaseModel: Mappable { init(map: Map) { mapping(map: map) } mutating func mapping(map: Map) { wxpay_params <- map["wxpay_params"] order_id <- map["order_id"] prepay_id <- map["prepay_id"] let params = Map(mappingType: .fromJSON, JSON: wxpay_params) appid <- params["appid"] noncestr <- params["noncestr"] package <- params["package"] sign <- params["sign"] partnerid <- params["partnerid"] timestamp <- params["timestamp"] } } struct PhotoPurchaseRemoteAPI { private var item: PhotoItem private var disposeBag = DisposeBag() init(item: PhotoItem) { self.item = item } func parse(json: JSON) -> Int? { guard let data = json["data"] as? [String: AnyObject], let price = data["price"] as? Int else { return nil } return price } func parseOrder(json: JSON) -> PurchaseModel? { guard let data = json["data"] as? [String: AnyObject] else { return nil } return PurchaseModel(data) } func parseOrderDetail(json: JSON) -> PhotoItem? { guard let data = json["data"] as? [String: AnyObject], let order = data["order"] as? [String: AnyObject], let photoInfo = order["group_photo_info"] as? [String: AnyObject] else { return nil } return PhotoItem(json: photoInfo) } func getPrice() -> Single<Int> { let contentResource = ContentResource(path: .picPrice, parameter: ["user_id": ShareUserId, "photo_id": item.photo_id, "photo_type": "nomark"], parseJSON: parse) return contentResource.loadContent() } mutating func purchase() -> Single<String> { let resource = ContentResource(path: .wxorderCreat, parameter: ["user_id": ShareUserId, "body": "获取去水印照片", "total_fee": item.nomark / 100, "trade_type": "APP", "group_id": item.group_id, "photo_id": item.photo_id, "photo_type": "nomark"], parseJSON: parseOrder) return resource.loadContent().do(onSuccess: { model in #if !((arch(i386) || arch(x86_64))) guard WXApi.isWXAppInstalled() else { Toast.show(message: "尚未安装微信") return } WXApi.registerApp(model.appid) let payRequest = PayReq() payRequest.openID = model.appid payRequest.partnerId = model.partnerid payRequest.prepayId = model.prepay_id payRequest.package = model.package payRequest.nonceStr = model.noncestr payRequest.timeStamp = UInt32(model.timestamp) WXApi.send(payRequest) #endif }).map { $0.order_id } } func getOrderStatus(orderId: String) -> Completable { let resource = StatusResource(path: .orderDetail, parameter: ["user_id": ShareUserId]) return resource.getStatus() } func getOrderDetail(orderId: String) -> Single<PhotoItem> { let resource = ContentResource(path: .orderDetail, parameter: ["order_id": orderId, "user_id": ShareUserId], parseJSON: parseOrderDetail) return resource.loadContent() } }