|
//
// 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()
}
}
|