Geen omschrijving

PhotoPurchaseRemoteAPI.swift 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. //
  2. // PhotoPurchaseRemoteAPI.swift
  3. // PaiaiDataKit
  4. //
  5. // Created by ffib on 2019/4/1.
  6. // Copyright © 2019 yb. All rights reserved.
  7. //
  8. import Foundation
  9. import RxSwift
  10. import ObjectMapper
  11. struct PurchaseModel {
  12. var wxpay_params: [String: AnyObject] = [:]
  13. var appid: String = ""
  14. var noncestr: String = ""
  15. var package: String = ""
  16. var sign: String = ""
  17. var partnerid: String = ""
  18. var timestamp: Int = 0
  19. var order_id: String = ""
  20. var prepay_id: String = ""
  21. init(_ json: JSON) {
  22. self.init(map: Map(mappingType: .fromJSON, JSON: json))
  23. }
  24. }
  25. extension PurchaseModel: Mappable {
  26. init(map: Map) {
  27. mapping(map: map)
  28. }
  29. mutating func mapping(map: Map) {
  30. wxpay_params <- map["wxpay_params"]
  31. order_id <- map["order_id"]
  32. prepay_id <- map["prepay_id"]
  33. let params = Map(mappingType: .fromJSON, JSON: wxpay_params)
  34. appid <- params["appid"]
  35. noncestr <- params["noncestr"]
  36. package <- params["package"]
  37. sign <- params["sign"]
  38. partnerid <- params["partnerid"]
  39. timestamp <- params["timestamp"]
  40. }
  41. }
  42. struct PhotoPurchaseRemoteAPI {
  43. private var item: PhotoItem
  44. private var disposeBag = DisposeBag()
  45. init(item: PhotoItem) {
  46. self.item = item
  47. }
  48. func parse(json: JSON) -> Int? {
  49. guard let data = json["data"] as? [String: AnyObject],
  50. let price = data["price"] as? Int else { return nil }
  51. return price
  52. }
  53. func parseOrder(json: JSON) -> PurchaseModel? {
  54. guard let data = json["data"] as? [String: AnyObject] else { return nil }
  55. return PurchaseModel(data)
  56. }
  57. func parseOrderDetail(json: JSON) -> PhotoItem? {
  58. guard let data = json["data"] as? [String: AnyObject],
  59. let order = data["order"] as? [String: AnyObject],
  60. let photoInfo = order["group_photo_info"] as? [String: AnyObject] else { return nil }
  61. return PhotoItem(json: photoInfo)
  62. }
  63. func getPrice() -> Single<Int> {
  64. let contentResource = ContentResource(path: .picPrice,
  65. parameter: ["user_id": ShareUserId,
  66. "photo_id": item.photo_id, "photo_type": "nomark"],
  67. parseJSON: parse)
  68. return contentResource.loadContent()
  69. }
  70. mutating func purchase() -> Single<String> {
  71. let resource = ContentResource(path: .wxorderCreat, parameter: ["user_id": ShareUserId,
  72. "body": "获取去水印照片",
  73. "total_fee": item.nomark / 100,
  74. "trade_type": "APP",
  75. "group_id": item.group_id,
  76. "photo_id": item.photo_id,
  77. "photo_type": "nomark"],
  78. parseJSON: parseOrder)
  79. return resource.loadContent().do(onSuccess: { model in
  80. #if !((arch(i386) || arch(x86_64)))
  81. guard WXApi.isWXAppInstalled() else {
  82. Toast.show(message: "尚未安装微信")
  83. return
  84. }
  85. WXApi.registerApp(model.appid)
  86. let payRequest = PayReq()
  87. payRequest.openID = model.appid
  88. payRequest.partnerId = model.partnerid
  89. payRequest.prepayId = model.prepay_id
  90. payRequest.package = model.package
  91. payRequest.nonceStr = model.noncestr
  92. payRequest.timeStamp = UInt32(model.timestamp)
  93. WXApi.send(payRequest)
  94. #endif
  95. }).map { $0.order_id }
  96. }
  97. func getOrderStatus(orderId: String) -> Completable {
  98. let resource = StatusResource(path: .orderDetail, parameter: ["user_id": ShareUserId])
  99. return resource.getStatus()
  100. }
  101. func getOrderDetail(orderId: String) -> Single<PhotoItem> {
  102. let resource = ContentResource(path: .orderDetail, parameter: ["order_id": orderId,
  103. "user_id": ShareUserId],
  104. parseJSON: parseOrderDetail)
  105. return resource.loadContent()
  106. }
  107. }