POST | /api/SubmitPOSTransaction |
---|
import Foundation
import ServiceStack
/**
* In development, not yet for public use.
*/
// @DataContract
public class SubmitPOSTransactionRequest : BaseSecureRequest
{
// @DataMember
public var acct:Int?
// @DataMember
public var locId:Int?
// @DataMember
public var taxId:Int?
// @DataMember
public var items:[PosLineItem] = []
/**
* Can be CARD, CARD_DEVICE, CASH, CHARGE, SUSPEND, ONFILE, or OTHER
*/
// @DataMember
// @ApiMember(DataType="string", Description="Can be CARD, CARD_DEVICE, CASH, CHARGE, SUSPEND, ONFILE, or OTHER", Name="TenderType", ParameterType="query")
public var tenderType:String
/**
* Only applicable for Tender Type of OTHER. Send the Payment Category #
*/
// @DataMember
// @ApiMember(DataType="string", Description="Only applicable for Tender Type of OTHER. Send the Payment Category #", Name="OtherTenderCategory", ParameterType="query")
public var otherTenderCategory:Int?
// @DataMember
public var cardToken:String
// @DataMember
public var cardExpiration:String
// @DataMember
public var tokenPk:Int?
// @DataMember
public var saveCard:Bool
// @DataMember
public var poNumber:String
/**
* Can be INVOICE, PROPOSAL, APPROVAL, ORDER, or LOANER. Defaults to INVOICE is not sent.
*/
// @DataMember
// @ApiMember(DataType="string", Description="Can be INVOICE, PROPOSAL, APPROVAL, ORDER, or LOANER. Defaults to INVOICE is not sent.", Name="TransactionMode", ParameterType="query")
public var transactionMode:String
/**
* Only valid for Approvals and Orders.
*/
// @DataMember
// @ApiMember(DataType="decimal", Description="Only valid for Approvals and Orders.", Name="Deposit", ParameterType="query")
public var deposit:Double
// @DataMember
public var notes:String
/**
* Do Not Send This Parameter
*/
// @DataMember
// @ApiMember(Description="Do Not Send This Parameter", Name="OnlineContractRef", ParameterType="query")
public var onlineContractRef:String
// @DataMember
public var shipId:Int?
// @DataMember
public var cardTerminalId:String
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case acct
case locId
case taxId
case items
case tenderType
case otherTenderCategory
case cardToken
case cardExpiration
case tokenPk
case saveCard
case poNumber
case transactionMode
case deposit
case notes
case onlineContractRef
case shipId
case cardTerminalId
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
acct = try container.decodeIfPresent(Int.self, forKey: .acct)
locId = try container.decodeIfPresent(Int.self, forKey: .locId)
taxId = try container.decodeIfPresent(Int.self, forKey: .taxId)
items = try container.decodeIfPresent([PosLineItem].self, forKey: .items) ?? []
tenderType = try container.decodeIfPresent(String.self, forKey: .tenderType)
otherTenderCategory = try container.decodeIfPresent(Int.self, forKey: .otherTenderCategory)
cardToken = try container.decodeIfPresent(String.self, forKey: .cardToken)
cardExpiration = try container.decodeIfPresent(String.self, forKey: .cardExpiration)
tokenPk = try container.decodeIfPresent(Int.self, forKey: .tokenPk)
saveCard = try container.decodeIfPresent(Bool.self, forKey: .saveCard)
poNumber = try container.decodeIfPresent(String.self, forKey: .poNumber)
transactionMode = try container.decodeIfPresent(String.self, forKey: .transactionMode)
deposit = try container.decodeIfPresent(Double.self, forKey: .deposit)
notes = try container.decodeIfPresent(String.self, forKey: .notes)
onlineContractRef = try container.decodeIfPresent(String.self, forKey: .onlineContractRef)
shipId = try container.decodeIfPresent(Int.self, forKey: .shipId)
cardTerminalId = try container.decodeIfPresent(String.self, forKey: .cardTerminalId)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if acct != nil { try container.encode(acct, forKey: .acct) }
if locId != nil { try container.encode(locId, forKey: .locId) }
if taxId != nil { try container.encode(taxId, forKey: .taxId) }
if items.count > 0 { try container.encode(items, forKey: .items) }
if tenderType != nil { try container.encode(tenderType, forKey: .tenderType) }
if otherTenderCategory != nil { try container.encode(otherTenderCategory, forKey: .otherTenderCategory) }
if cardToken != nil { try container.encode(cardToken, forKey: .cardToken) }
if cardExpiration != nil { try container.encode(cardExpiration, forKey: .cardExpiration) }
if tokenPk != nil { try container.encode(tokenPk, forKey: .tokenPk) }
if saveCard != nil { try container.encode(saveCard, forKey: .saveCard) }
if poNumber != nil { try container.encode(poNumber, forKey: .poNumber) }
if transactionMode != nil { try container.encode(transactionMode, forKey: .transactionMode) }
if deposit != nil { try container.encode(deposit, forKey: .deposit) }
if notes != nil { try container.encode(notes, forKey: .notes) }
if onlineContractRef != nil { try container.encode(onlineContractRef, forKey: .onlineContractRef) }
if shipId != nil { try container.encode(shipId, forKey: .shipId) }
if cardTerminalId != nil { try container.encode(cardTerminalId, forKey: .cardTerminalId) }
}
}
// @DataContract
public class BaseSecureRequest : BaseRequest
{
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", Name="Token", ParameterType="Header")
public var token:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", Name="DeviceId", ParameterType="Header")
public var deviceId:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", IsRequired=true, Name="AppId", ParameterType="Header")
public var appId:String
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case token
case deviceId
case appId
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
token = try container.decodeIfPresent(String.self, forKey: .token)
deviceId = try container.decodeIfPresent(String.self, forKey: .deviceId)
appId = try container.decodeIfPresent(String.self, forKey: .appId)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if token != nil { try container.encode(token, forKey: .token) }
if deviceId != nil { try container.encode(deviceId, forKey: .deviceId) }
if appId != nil { try container.encode(appId, forKey: .appId) }
}
}
// @DataContract
public class BaseRequest : Codable
{
/**
* This is your AIM API Key provided by Tri-Tech
*/
// @DataMember
// @ApiMember(DataType="string", Description="This is your AIM API Key provided by Tri-Tech", IsRequired=true, Name="ApiKey", ParameterType="header")
public var apiKey:String
// @DataMember
// @ApiMember(DataType="string", Name="OAuthToken", ParameterType="header")
public var oAuthToken:String
required public init(){}
}
// @DataContract
public class PosLineItem : IScanItem, Codable
{
// @DataMember
public var skuPk:Int?
// @DataMember
public var sasPk:Int?
// @DataMember
public var sku:String
// @DataMember
public var serial:String
// @DataMember
public var quantity:Double
// @DataMember
public var exceptionInfo:ExceptionInfo
// @DataMember
public var discount:Double?
// @DataMember
public var nicsCat:Int?
// @DataMember
public var nicsSub:Int?
// @DataMember
public var priceOverride:Double?
// @DataMember
public var allowPriceOverrideToIgnoreMinPrice:Bool
// @DataMember
public var notes:String
required public init(){}
}
// @DataContract
public class ExceptionInfo : Codable
{
// @DataMember
public var barcode:String
// @DataMember
public var Description:String
// @DataMember
public var base64Image:String
// @DataMember
public var category:Int
// @DataMember
public var subCategory:Int?
required public init(){}
}
// @DataContract
public class SubmitPOSTransactionResponse : BaseResponse
{
// @DataMember
public var refNumber:String
// @DataMember
public var errorItems:[PosResponseItem] = []
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case refNumber
case errorItems
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
refNumber = try container.decodeIfPresent(String.self, forKey: .refNumber)
errorItems = try container.decodeIfPresent([PosResponseItem].self, forKey: .errorItems) ?? []
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if refNumber != nil { try container.encode(refNumber, forKey: .refNumber) }
if errorItems.count > 0 { try container.encode(errorItems, forKey: .errorItems) }
}
}
// @DataContract
public class BaseResponse : Codable
{
/**
*
*/
// @DataMember
// @ApiMember(DataType="BaseResponseResult", Description="", Name="Status", ParameterType="body")
public var status:BaseResponseResult
required public init(){}
}
// @DataContract
public class BaseResponseResult : Codable
{
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", Name="StatusCode", ParameterType="body")
public var statusCode:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", Name="Login", ParameterType="body")
public var login:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", Name="ErrorCode", ParameterType="body")
public var errorCode:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", Name="ErrorDisplayText", ParameterType="body")
public var errorDisplayText:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", Name="ErrorMessage", ParameterType="body")
public var errorMessage:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", ExcludeInSchema=true, Name="DomainName", ParameterType="body")
public var domainName:String
/**
*
*/
// @DataMember
// @ApiMember(DataType="string", Description="", ExcludeInSchema=true, Name="IPAddress", ParameterType="body")
public var ipAddress:String
required public init(){}
}
// @DataContract
public class PosResponseItem : PosLineItem
{
// @DataMember
public var priceEach:Double
// @DataMember
public var price:Double
// @DataMember
public var discountable:Bool
// @DataMember
public var errorMessage:String
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case priceEach
case price
case discountable
case errorMessage
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
priceEach = try container.decodeIfPresent(Double.self, forKey: .priceEach)
price = try container.decodeIfPresent(Double.self, forKey: .price)
discountable = try container.decodeIfPresent(Bool.self, forKey: .discountable)
errorMessage = try container.decodeIfPresent(String.self, forKey: .errorMessage)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if priceEach != nil { try container.encode(priceEach, forKey: .priceEach) }
if price != nil { try container.encode(price, forKey: .price) }
if discountable != nil { try container.encode(discountable, forKey: .discountable) }
if errorMessage != nil { try container.encode(errorMessage, forKey: .errorMessage) }
}
}
Swift SubmitPOSTransactionRequest DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .json suffix or ?format=json
To embed the response in a jsonp callback, append ?callback=myCallback
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /api/SubmitPOSTransaction HTTP/1.1
Host: active-ewebservice.biz
Accept: application/json
Content-Type: application/json
Content-Length: length
{"Acct":0,"LocId":0,"TaxId":0,"Items":[{"SkuPk":0,"SasPk":0,"Sku":"String","Serial":"String","Quantity":0,"ExceptionInfo":{"Barcode":"String","Description":"String","Base64Image":"String","Category":0,"SubCategory":0},"Discount":0,"NicsCat":0,"NicsSub":0,"PriceOverride":0,"AllowPriceOverrideToIgnoreMinPrice":false,"Notes":"String"}],"TenderType":"String","OtherTenderCategory":0,"CardToken":"String","CardExpiration":"String","TokenPk":0,"SaveCard":false,"PONumber":"String","TransactionMode":"String","Deposit":0,"Notes":"String","OnlineContractRef":"String","ShipId":0,"CardTerminalId":"String","Token":"String","DeviceId":"String","AppId":"String","ApiKey":"String","OAuthToken":"String"}
HTTP/1.1 200 OK Content-Type: application/json Content-Length: length {"RefNumber":"String","ErrorItems":[{"PriceEach":0,"Price":0,"Discountable":false,"ErrorMessage":"String","SkuPk":0,"SasPk":0,"Sku":"String","Serial":"String","Quantity":0,"ExceptionInfo":{"Barcode":"String","Description":"String","Base64Image":"String","Category":0,"SubCategory":0},"Discount":0,"NicsCat":0,"NicsSub":0,"PriceOverride":0,"AllowPriceOverrideToIgnoreMinPrice":false,"Notes":"String"}],"Status":{"StatusCode":"String","Login":"String","ErrorCode":"String","ErrorDisplayText":"String","ErrorMessage":"String","DomainName":"String","IpAddress":"String"}}