我试图从我的应用程序更新Square订单,但它不工作.我创建了订单,最初,一切看起来都很好——它给了我一个成功的响应,并在我调用API时显示出来.然而,当我try 更新订单时,例如,将名称从'John'更改为'Jan',并按下更新按钮,Square收到的响应指示成功,但值保持不变;名称仍然是'John'而不是'Jan'.

@IBAction func ordersSaveBtn(_ sender: UIButton) {
    let numberOfRows = selectedItemTableView.numberOfRows(inSection: 0)
    if numberOfRows == 0 {
        CommonMethods.showAlert(title: "Error", message: "Please Add Items", view: self)
    } else if resultSearchController.isActive == true {
        self.searchActive = true
        self.dismiss(animated: true, completion: nil)
    }
    
    if (searchActive == true) || ((searchActive == false) && (dateLabelBtn.titleLabel?.text != "Date")) {
        
        if isCharge {
            
            //Checking to see if the order is being edited if isCharge == true then it is being edited
            
            let currentDate = Date()
            let dateString = "\(date)"
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "MMMM dd yyyy h:mm a"
            dateFormatter.locale = Locale(identifier: "en_US_POSIX")
            if let date = dateFormatter.date(from: dateString) {
                let isoDateFormatter = ISO8601DateFormatter()
                isoDateFormatter.formatOptions = [.withInternetDateTime]
                let pickupAt = isoDateFormatter.string(from: date)
                let displayName = "\(nameTextField.text ?? "")"
                let phoneNumber = "\(phoneTextField.text ?? "")"
                let email = "\(emailTextField.text ?? "")"
                let priceString = selectedItems.first?.price?.replacingOccurrences(of: "$", with: "").trimmingCharacters(in: .whitespaces)
                    let priceS = priceString?.replacingOccurrences(of: ".", with: "")
                    let price: Int? = Int(priceS ?? "")
                    
                    print("order Id \(orderId)")
                    editSquareOrder(orderId: orderId, updatedOrder: [
                        "order": [
                            "line_items": selectedItems.map { [self] selectedItem in
                                var itemData: [String: Any] = [
                                    "quantity": "\(selectedItem.quantity ?? "")" ,
                                    "base_price_money": [
                                        "amount": price ?? 0,
                                        "currency": "USD"
                                    ],
                                    "modifiers": [
                                        [
                                            "base_price_money": [
                                                "amount": price ?? 0,
                                                "currency": "USD"
                                            ],
                                            "name": selectedItem.variationName ?? "",
                                        ]
                                    ],
                                    "name": selectedItem.itemName ?? "",
                                    "variation_name": selectedItem.variationName ?? "",
                                    "item_type": "ITEM",
                                    ]
                                    if let sku = selectedItem.sku {
                                        itemData["metadata"] = ["sku": sku]
                                    }
                                
                                for i in selectedItems {
                                    print("selectedItems.isDone: ",i.isDone)
                                    itemData["metadata"] = ["isDone": i.isDone]
                                    
                                }
                                return itemData
                            },
                            "location_id": "M58BD678K1HDZ",
                            "customer_id": "0HR44FFEGH7DV8VHQK0NFPN3TG",
                            "state": "OPEN",
                            "fulfillments": [
                                [
                                    "type": "PICKUP",
                                    "state": "PROPOSED",
                                    "placed_at": dateFormatter.string(from: currentDate),
                                    "pickup_details": [
                                        "pickup_at": pickupAt,
                                        "recipient": [
                                            "display_name": displayName,
                                            "phone_number": phoneNumber,
                                            "email_address": email
                                        ]
                                    ]
                                ]
                            ],
                            "taxes": [
                                [
                                    "uid": "ad24399a-3ef6-42fd-b73f-7e8f1555c045",
                                    "name": "PA Sales Tax",
                                    "percentage": "6.0",
                                    "type": "ADDITIVE",
                                    "applied_money": [
                                        "amount": 0,
                                        "currency": "USD"
                                    ],
                                    "scope": "LINE_ITEM"
                                ],
                            ],
                            "pricing_options": [
                                "auto_apply_discounts": true,
                                "auto_apply_taxes": true
                            ]
                        ]
                    ]){ error in
                        if let error = error {
                            print("Error deleting order: \(error)")
                        } else {
                        }
                    }
            } else {
                print("invalid date")
            }
        } else {
            //If the order is not being edited it creates a new order
            self.createSquareOrder()
            
        }
    } else {
        CommonMethods.showAlert(title: "Error", message: "Please fill Add PickUp Date", view: self)
    }
}


func editSquareOrder(orderId: String, updatedOrder: [String: Any], completion: @escaping (Error?) -> Void) {
    let accessToken = "EAAAFOSqneaOJbzXjGTEaJ1G6MqvWGVlVmPdKSWwj_2yEiDZBhxeyUjfypfn01kT"
    let orderAPIURL = "https://connect.squareup.com/v2/orders/\(orderId)"
    let headers: HTTPHeaders = [
        "Authorization": "Bearer \(accessToken)",
        "Content-Type": "application/json"
    ]

    Alamofire.request(orderAPIURL, method: .get, headers: headers).responseJSON { response in
        switch response.result {
        case .success(let value):
            if let jsonResponse = value as? [String: Any], let order = jsonResponse["order"] as? [String: Any], let version = order["version"] as? Int {
                print("OrginalVersion: ",version)
                var updatedOrderWithVersion = updatedOrder
                updatedOrderWithVersion["version"] = version
                print("versone: \(version)")
                // Update the order with the new data
                Alamofire.request(orderAPIURL, method: .put, parameters: ["order": updatedOrderWithVersion], encoding: JSONEncoding.default, headers: headers).responseJSON { response in
                    switch response.result {
                    case .success(let value):

                        print("Update Order API Response: \(value)")
                        // Handle success, call completion handler with nil error
                        completion(nil)
                        self.dismiss(animated: true, completion: nil)
                    case .failure(let error):
                        if let data = response.data {
                            let errorResponse = try? JSONSerialization.jsonObject(with: data, options: [])
                            print("Error updating order: \(error), Response: \(errorResponse ?? "N/A")")
                        } else {
                            print("Error updating order: \(error)")
                        }
                        // Call completion handler with error
                        completion(error)
                    }
                }
            } else {
                let error = NSError(domain: "SquareAPI", code: 0, userInfo: [NSLocalizedDescriptionKey: "Failed to parse order details or missing version"])
                completion(error)
            }
        case .failure(let error):
            print("Error fetching order details: \(error)")
            completion(error)
        }
    }
}

什么可能是这个问题的原因?

推荐答案

当你打电话的时候,你试过获取最新的api版本吗?

 // Filter orders based on the recipient's name
         func filterOrdersByRecipientName(_ searchText: String) {
           if searchText.isEmpty {
               // If search text is empty, show all orders
               orderDisplayTableV.reloadData()
           } else {
               // Filter orders by recipient's name containing the search text
               let filteredOrders = orders.filter { $0.fulfillments?.first?.pickupDetails?.recipient?.displayName?.localizedCaseInsensitiveContains(searchText) ?? false }
               // Update orders array with filtered orders
               orders = filteredOrders
               // Reload table view with filtered orders
               orderDisplayTableV.reloadData()
           }
       }
       

Swift相关问答推荐

如何使用swift宏生成一个带有关联值的枚举?

音频播放器无法播放URL音频(操作系统状态错误2003334207.)

如何将图像插入到矩形中

像WebSocket一样接收实时更新,但通过异步/等待或组合

为什么 XUIView 中的 Binding 看不到更新后的值?

如何使用 Swift 在非本地函数中切换()一个 Bool?

允许为 self 分配新的 struct 值的理由是什么?

如何在闭包中使用构造 await sync

Swift-如何接受多个(联合)类型作为参数

Swift初始化具有可变ID的重复值数组

如何让不同的组件拥有不同的动画?

Swift 读写图片占用大量内存

如何将使用\u{ea12}创建的 Swift 字符串转换回其十六进制值/字符串ea12?

如何在不阻塞 UI 更新的情况下使用 Swift Concurrency 在后台执行 CPU 密集型任务?

iOS Swift - 如何更改表格视图的背景 colored颜色 ?

FirebaseStorage:如何删除目录

Swift:创建 UIImage 数组

如何在 Swift 中重写 setter

Swift UITableView reloadData 在一个闭包中

Swift performSegueWithIdentifier 不起作用