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