TicketUserServices

<back to all web services

OwnerCardsUpgradeRequest

Requires Authentication
Requires any of the roles:Admin, TeamAdminRequires the permission:ReadData
The following routes are available for this service:
POST/OrderOwnerCards/upgradeCharge the delta, issue the target card (PricePaid = delta), revoke the source card, re-link future tickets — one transaction, idempotent
import Foundation
import ServiceStack

public class OwnerCardsUpgradeRequest : Codable
{
    public var buyerPhone:String?
    public var sourceOwnerCardId:Int?
    public var targetOwnerCardTypeId:Int?
    public var idempotencyKey:String?
    public var paymentMethodId:String?
    public var borgun3DFinalInfo:Borgun3DFinalRequest?
    public var tenders:[OrderTender] = []
    public var holderName:String?
    public var holderEmail:String?
    public var deviceId:String?
    public var returnCards:Bool?

    required public init(){}
}

public class Borgun3DFinalRequest : Codable
{
    public var transactionType:String?
    public var amount:Int?
    public var currency:String?
    public var transactionDate:Date?
    public var orderId:String?
    public var paymentMethod:Borgun3DFinalPaymentMethodInfo?
    public var threeDSecure:Borgun3DFinal3DSecureInfo?

    required public init(){}
}

public class Borgun3DFinalPaymentMethodInfo : Codable
{
    public var paymentType:String?
    public var token:String?
    public var virtualNumber:String?
    public var expYear:String?
    public var expMonth:String?
    public var panLastFour:String?

    required public init(){}
}

public class Borgun3DFinal3DSecureInfo : Codable
{
    public var dataType:String?
    public var mpiToken:String?

    required public init(){}
}

public class OrderTender : Codable
{
    public var kind:String?
    public var code:String?
    public var amountMinor:Int?
    public var idempotencyKey:String?
    public var holdId:Int?
    public var appliedMinor:Int?

    required public init(){}
}

public class OwnerCardsUpgradeResult : OwnerCardsOrderResult
{
    public var sourceOwnerCardId:Int?
    public var sourceOwnerCardTypeId:Int?
    public var sourceTypeName:String?
    public var newOwnerCardId:Int?
    public var targetOwnerCardTypeId:Int?
    public var targetTypeName:String?
    public var relinkedTickets:Int?
    public var paymentReference:String?
    public var refundPending:Bool?

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case sourceOwnerCardId
        case sourceOwnerCardTypeId
        case sourceTypeName
        case newOwnerCardId
        case targetOwnerCardTypeId
        case targetTypeName
        case relinkedTickets
        case paymentReference
        case refundPending
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        sourceOwnerCardId = try container.decodeIfPresent(Int.self, forKey: .sourceOwnerCardId)
        sourceOwnerCardTypeId = try container.decodeIfPresent(Int.self, forKey: .sourceOwnerCardTypeId)
        sourceTypeName = try container.decodeIfPresent(String.self, forKey: .sourceTypeName)
        newOwnerCardId = try container.decodeIfPresent(Int.self, forKey: .newOwnerCardId)
        targetOwnerCardTypeId = try container.decodeIfPresent(Int.self, forKey: .targetOwnerCardTypeId)
        targetTypeName = try container.decodeIfPresent(String.self, forKey: .targetTypeName)
        relinkedTickets = try container.decodeIfPresent(Int.self, forKey: .relinkedTickets)
        paymentReference = try container.decodeIfPresent(String.self, forKey: .paymentReference)
        refundPending = try container.decodeIfPresent(Bool.self, forKey: .refundPending)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if sourceOwnerCardId != nil { try container.encode(sourceOwnerCardId, forKey: .sourceOwnerCardId) }
        if sourceOwnerCardTypeId != nil { try container.encode(sourceOwnerCardTypeId, forKey: .sourceOwnerCardTypeId) }
        if sourceTypeName != nil { try container.encode(sourceTypeName, forKey: .sourceTypeName) }
        if newOwnerCardId != nil { try container.encode(newOwnerCardId, forKey: .newOwnerCardId) }
        if targetOwnerCardTypeId != nil { try container.encode(targetOwnerCardTypeId, forKey: .targetOwnerCardTypeId) }
        if targetTypeName != nil { try container.encode(targetTypeName, forKey: .targetTypeName) }
        if relinkedTickets != nil { try container.encode(relinkedTickets, forKey: .relinkedTickets) }
        if paymentReference != nil { try container.encode(paymentReference, forKey: .paymentReference) }
        if refundPending != nil { try container.encode(refundPending, forKey: .refundPending) }
    }
}

public class OwnerCardsOrderResult : GeneralOrderResponse
{
    public var cards:[OwnerCards] = []
    public var orderReference:String?
    public var isSubscription:Bool?
    public var monthlyPrice:Double?
    public var transactionFee:Double?
    public var months:Int?
    public var paymentTokenId:String?
    public var subscriptionTokenMissing:Bool?
    public var priceTotal:Int?
    public var discountAmount:Int?
    public var giftCardAmount:Int?
    public var donationAmount:Int?
    public var chargedAmount:Int?
    public var reason:String?

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case cards
        case orderReference
        case isSubscription
        case monthlyPrice
        case transactionFee
        case months
        case paymentTokenId
        case subscriptionTokenMissing
        case priceTotal
        case discountAmount
        case giftCardAmount
        case donationAmount
        case chargedAmount
        case reason
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        cards = try container.decodeIfPresent([OwnerCards].self, forKey: .cards) ?? []
        orderReference = try container.decodeIfPresent(String.self, forKey: .orderReference)
        isSubscription = try container.decodeIfPresent(Bool.self, forKey: .isSubscription)
        monthlyPrice = try container.decodeIfPresent(Double.self, forKey: .monthlyPrice)
        transactionFee = try container.decodeIfPresent(Double.self, forKey: .transactionFee)
        months = try container.decodeIfPresent(Int.self, forKey: .months)
        paymentTokenId = try container.decodeIfPresent(String.self, forKey: .paymentTokenId)
        subscriptionTokenMissing = try container.decodeIfPresent(Bool.self, forKey: .subscriptionTokenMissing)
        priceTotal = try container.decodeIfPresent(Int.self, forKey: .priceTotal)
        discountAmount = try container.decodeIfPresent(Int.self, forKey: .discountAmount)
        giftCardAmount = try container.decodeIfPresent(Int.self, forKey: .giftCardAmount)
        donationAmount = try container.decodeIfPresent(Int.self, forKey: .donationAmount)
        chargedAmount = try container.decodeIfPresent(Int.self, forKey: .chargedAmount)
        reason = try container.decodeIfPresent(String.self, forKey: .reason)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        if cards.count > 0 { try container.encode(cards, forKey: .cards) }
        if orderReference != nil { try container.encode(orderReference, forKey: .orderReference) }
        if isSubscription != nil { try container.encode(isSubscription, forKey: .isSubscription) }
        if monthlyPrice != nil { try container.encode(monthlyPrice, forKey: .monthlyPrice) }
        if transactionFee != nil { try container.encode(transactionFee, forKey: .transactionFee) }
        if months != nil { try container.encode(months, forKey: .months) }
        if paymentTokenId != nil { try container.encode(paymentTokenId, forKey: .paymentTokenId) }
        if subscriptionTokenMissing != nil { try container.encode(subscriptionTokenMissing, forKey: .subscriptionTokenMissing) }
        if priceTotal != nil { try container.encode(priceTotal, forKey: .priceTotal) }
        if discountAmount != nil { try container.encode(discountAmount, forKey: .discountAmount) }
        if giftCardAmount != nil { try container.encode(giftCardAmount, forKey: .giftCardAmount) }
        if donationAmount != nil { try container.encode(donationAmount, forKey: .donationAmount) }
        if chargedAmount != nil { try container.encode(chargedAmount, forKey: .chargedAmount) }
        if reason != nil { try container.encode(reason, forKey: .reason) }
    }
}

public class GeneralOrderResponse : Codable
{
    public var statusCode:Int?
    public var message:String?
    public var success:Bool?
    public var paymentIsPending:Bool?
    public var orderTokenId:String?

    required public init(){}
}

public class OwnerCards : Codable
{
    public var id:Int?
    public var ownerId:Int?
    public var ownerCardTypeId:Int?
    public var phoneVerificationId:Int?
    public var initialMaxTickets:Int?
    public var currentAvailableTickets:Int?
    public var timeStampCreatedUTC:Date?
    public var timeStampLastChangedUTC:Date?
    public var timeStampBoughtUTC:Date?
    public var timeStampOrderedUTC:Date?
    public var cardValidFromUTC:Date?
    public var cardValidToUTC:Date?
    public var hasStoreCredit:Bool?
    public var cardPrice:Double?
    public var pricePaid:Double?
    public var initialStoreCredit:Double?
    public var currentStoreCredit:Double?
    public var phoneFullVerificationNumber:String?
    public var holderId:String?
    public var holderName:String?
    public var holderEmail:String?
    public var cardPriceCurrency:String?
    public var pricePaidCurrency:String?
    public var deviceId:String?
    public var paymentMethodId:String?
    public var paymentReference:String?
    public var phoneVerificationNumber:String?
    public var paymentPhoneNumber:String?
    public var paymentId:String?
    public var paymentStatus:String?
    public var paymentTokenId:String?
    public var maxTicketsPerEvent:Int?
    public var multiplePaymentsId:String?
    public var imageUrl:String?
    public var backgroundImageUrl:String?
    public var orderReference:String?
    public var upgradedFromOwnerCardId:Int?

    required public init(){}
}


Swift OwnerCardsUpgradeRequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml

HTTP + XML

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /OrderOwnerCards/upgrade HTTP/1.1 
Host: stubbur-app.azurewebsites.net 
Accept: application/xml
Content-Type: application/xml
Content-Length: length

<OwnerCardsUpgradeRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/TicketUserServices.ServiceModel">
  <Borgun3DFinalInfo xmlns:d2p1="http://schemas.datacontract.org/2004/07/BorgunRPGData">
    <d2p1:Amount>0</d2p1:Amount>
    <d2p1:Currency>String</d2p1:Currency>
    <d2p1:OrderId>String</d2p1:OrderId>
    <d2p1:PaymentMethod>
      <d2p1:ExpMonth>String</d2p1:ExpMonth>
      <d2p1:ExpYear>String</d2p1:ExpYear>
      <d2p1:PanLastFour>String</d2p1:PanLastFour>
      <d2p1:PaymentType>String</d2p1:PaymentType>
      <d2p1:Token>String</d2p1:Token>
      <d2p1:VirtualNumber>String</d2p1:VirtualNumber>
    </d2p1:PaymentMethod>
    <d2p1:ThreeDSecure>
      <d2p1:DataType>String</d2p1:DataType>
      <d2p1:MpiToken>String</d2p1:MpiToken>
    </d2p1:ThreeDSecure>
    <d2p1:TransactionDate>0001-01-01T00:00:00</d2p1:TransactionDate>
    <d2p1:TransactionType>String</d2p1:TransactionType>
  </Borgun3DFinalInfo>
  <BuyerPhone>String</BuyerPhone>
  <DeviceId>String</DeviceId>
  <HolderEmail>String</HolderEmail>
  <HolderName>String</HolderName>
  <IdempotencyKey>String</IdempotencyKey>
  <PaymentMethodId>String</PaymentMethodId>
  <ReturnCards>false</ReturnCards>
  <SourceOwnerCardId>0</SourceOwnerCardId>
  <TargetOwnerCardTypeId>0</TargetOwnerCardTypeId>
  <Tenders>
    <OrderTender>
      <AmountMinor>0</AmountMinor>
      <AppliedMinor>0</AppliedMinor>
      <Code>String</Code>
      <HoldId>0</HoldId>
      <IdempotencyKey>String</IdempotencyKey>
      <Kind>String</Kind>
    </OrderTender>
  </Tenders>
</OwnerCardsUpgradeRequest>
HTTP/1.1 200 OK
Content-Type: application/xml
Content-Length: length

<OwnerCardsUpgradeResult xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/TicketUserServices.ServiceModel">
  <Message>String</Message>
  <OrderTokenId>String</OrderTokenId>
  <PaymentIsPending>false</PaymentIsPending>
  <StatusCode>0</StatusCode>
  <Success>false</Success>
  <Cards xmlns:d2p1="http://schemas.datacontract.org/2004/07/TicketUserServices.ServiceModel.Types">
    <d2p1:OwnerCards>
      <d2p1:BackgroundImageUrl>String</d2p1:BackgroundImageUrl>
      <d2p1:CardPrice>0</d2p1:CardPrice>
      <d2p1:CardPriceCurrency>String</d2p1:CardPriceCurrency>
      <d2p1:CardValidFromUTC>0001-01-01T00:00:00</d2p1:CardValidFromUTC>
      <d2p1:CardValidToUTC>0001-01-01T00:00:00</d2p1:CardValidToUTC>
      <d2p1:CurrentAvailableTickets>0</d2p1:CurrentAvailableTickets>
      <d2p1:CurrentStoreCredit>0</d2p1:CurrentStoreCredit>
      <d2p1:DeviceId>String</d2p1:DeviceId>
      <d2p1:HasStoreCredit>false</d2p1:HasStoreCredit>
      <d2p1:HolderEmail>String</d2p1:HolderEmail>
      <d2p1:HolderId>String</d2p1:HolderId>
      <d2p1:HolderName>String</d2p1:HolderName>
      <d2p1:ID>0</d2p1:ID>
      <d2p1:ImageUrl>String</d2p1:ImageUrl>
      <d2p1:InitialMaxTickets>0</d2p1:InitialMaxTickets>
      <d2p1:InitialStoreCredit>0</d2p1:InitialStoreCredit>
      <d2p1:MaxTicketsPerEvent>0</d2p1:MaxTicketsPerEvent>
      <d2p1:MultiplePaymentsId>String</d2p1:MultiplePaymentsId>
      <d2p1:OrderReference>String</d2p1:OrderReference>
      <d2p1:OwnerCardTypeId>0</d2p1:OwnerCardTypeId>
      <d2p1:OwnerId>0</d2p1:OwnerId>
      <d2p1:PaymentId>String</d2p1:PaymentId>
      <d2p1:PaymentMethodId>String</d2p1:PaymentMethodId>
      <d2p1:PaymentPhoneNumber>String</d2p1:PaymentPhoneNumber>
      <d2p1:PaymentReference>String</d2p1:PaymentReference>
      <d2p1:PaymentStatus>String</d2p1:PaymentStatus>
      <d2p1:PaymentTokenId>String</d2p1:PaymentTokenId>
      <d2p1:PhoneFullVerificationNumber>String</d2p1:PhoneFullVerificationNumber>
      <d2p1:PhoneVerificationId>0</d2p1:PhoneVerificationId>
      <d2p1:PhoneVerificationNumber>String</d2p1:PhoneVerificationNumber>
      <d2p1:PricePaid>0</d2p1:PricePaid>
      <d2p1:PricePaidCurrency>String</d2p1:PricePaidCurrency>
      <d2p1:TimeStampBoughtUTC>0001-01-01T00:00:00</d2p1:TimeStampBoughtUTC>
      <d2p1:TimeStampCreatedUTC>0001-01-01T00:00:00</d2p1:TimeStampCreatedUTC>
      <d2p1:TimeStampLastChangedUTC>0001-01-01T00:00:00</d2p1:TimeStampLastChangedUTC>
      <d2p1:TimeStampOrderedUTC>0001-01-01T00:00:00</d2p1:TimeStampOrderedUTC>
      <d2p1:UpgradedFromOwnerCardId>0</d2p1:UpgradedFromOwnerCardId>
    </d2p1:OwnerCards>
  </Cards>
  <ChargedAmount>0</ChargedAmount>
  <DiscountAmount>0</DiscountAmount>
  <DonationAmount>0</DonationAmount>
  <GiftCardAmount>0</GiftCardAmount>
  <IsSubscription>false</IsSubscription>
  <MonthlyPrice>0</MonthlyPrice>
  <Months>0</Months>
  <OrderReference>String</OrderReference>
  <PaymentTokenId>String</PaymentTokenId>
  <PriceTotal>0</PriceTotal>
  <Reason>String</Reason>
  <SubscriptionTokenMissing>false</SubscriptionTokenMissing>
  <TransactionFee>0</TransactionFee>
  <NewOwnerCardId>0</NewOwnerCardId>
  <PaymentReference>String</PaymentReference>
  <RefundPending>false</RefundPending>
  <RelinkedTickets>0</RelinkedTickets>
  <SourceOwnerCardId>0</SourceOwnerCardId>
  <SourceOwnerCardTypeId>0</SourceOwnerCardTypeId>
  <SourceTypeName>String</SourceTypeName>
  <TargetOwnerCardTypeId>0</TargetOwnerCardTypeId>
  <TargetTypeName>String</TargetTypeName>
</OwnerCardsUpgradeResult>