POST | /sales/paymentprofile/import | Import a Payment Method (using ProfileToken) | After a Payment Method is created in the Vault API (www.clubreadygateway.com), the information has to be imported into the ClubReady system. The Vault API will return a ProfileToken and AcctToken. This endpoint will import a ProfileToken as a separate step. If the ProfileToken is sent to any other endpoints, those endpoints will import the ProfileToken and this endpoint is not needed. ### ProfileToken * JSON Web Token (JWT) * Length is variable, but generally around 1,000 to 4,000 characters * Contains non-PCI information about the Payment Method * Signed by the Vault API, preventing modification * Must be sent to ClubReady API within 5 minutes of creation * Can only be used once (though retrying is allowed) * You can parse and read the JWT, but the format is subject to change without notice * You cannot validate the signature in the JWT as the public key is not available ### AcctToken * A short string that is used to reference the Payment Method in the ClubReady system * Usually around 60 to 80 characters * Should not be stored for long-term use as it can change |
---|
namespace ClubReady.Payments
open System
open System.Collections
open System.Collections.Generic
open System.Runtime.Serialization
open ServiceStack
open ServiceStack.DataAnnotations
[<AllowNullLiteral>]
type PaymentProfileImportRequest() =
member val ProfileToken:String = null with get,set
member val DoNotUpdatePaymentTypePreference:Boolean = new Boolean() with get,set
member val NewOwnerId:Nullable<Int32> = new Nullable<Int32>() with get,set
[<ApiResponse(Description="", ResponseType=typeof<PaymentProfileImportResponse>, StatusCode=200)>]
[<AllowNullLiteral>]
type PaymentProfileImportEndpoint() =
inherit PaymentProfileImportRequest()
///<summary>
///IP address of the end user
///</summary>
[<ApiMember(Description="IP address of the end user", Name="X-Forwarded-For", ParameterType="header")>]
member val XForwardedFor:String = null with get,set
///<summary>
///API Authentication Key
///</summary>
[<ApiMember(Description="API Authentication Key", IsRequired=true, ParameterType="query")>]
member val ApiKey:String = null with get,set
///<summary>
///The ProfileToken JWT to import (see description above)
///</summary>
[<ApiMember(Description="The ProfileToken JWT to import (see description above)", IsRequired=true)>]
member val ProfileToken:String = null with get,set
///<summary>
///When adding a PaymentMethod that is 'on-file' (`IsTemp == true`), the default behavior is toset this PaymentMethod as the preferred method. If you do not wish this to be the preferredmethod, you can set `DoNotUpdatePaymentTypePreference` to `true`. Otherwise, this can beomitted or `false`.For non 'on-file' PaymentMethods, this setting is ignored.
///</summary>
[<ApiMember(Description="When adding a PaymentMethod that is 'on-file' (`IsTemp == true`), the default behavior is to\r\nset this PaymentMethod as the preferred method. If you do not wish this to be the preferred\r\nmethod, you can set `DoNotUpdatePaymentTypePreference` to `true`. Otherwise, this can be\r\nomitted or `false`.\r\n\r\nFor non 'on-file' PaymentMethods, this setting is ignored.")>]
member val DoNotUpdatePaymentTypePreference:Boolean = new Boolean() with get,set
///<summary>
///**Conditionally Required** When importing a ProfileToken with an OwnerType of `TempStUser`, the ownership will be changed toOwnerType of `User` with the userId of the supplied `NewOwnerId`.This is needed when a PaymentMethod is created for a User that has not been selected or created, yet.
///</summary>
[<ApiMember(Description="**Conditionally Required** \r\n\r\nWhen importing a ProfileToken with an OwnerType of `TempStUser`, the ownership will be changed to\r\nOwnerType of `User` with the userId of the supplied `NewOwnerId`.\r\n\r\nThis is needed when a PaymentMethod is created for a User that has not been selected or created, yet.")>]
member val NewOwnerId:Nullable<Int32> = new Nullable<Int32>() with get,set
[<AllowNullLiteral>]
type PaymentProfile() =
member val PaymentProfileId:Int32 = new Int32() with get,set
member val AcctToken:String = null with get,set
member val OwnerId:Int32 = new Int32() with get,set
member val OwnerTypeId:Int16 = new Int16() with get,set
member val AcctTypeId:Int16 = new Int16() with get,set
member val AcctClassId:Int16 = new Int16() with get,set
member val PrefixName:String = null with get,set
member val FirstName:String = null with get,set
member val MiddleName:String = null with get,set
member val LastName:String = null with get,set
member val SuffixName:String = null with get,set
member val Address1:String = null with get,set
member val Address2:String = null with get,set
member val Urbanization:String = null with get,set
member val City:String = null with get,set
member val State:String = null with get,set
member val PostalCode:String = null with get,set
member val CountryCode:String = null with get,set
member val Last4:String = null with get,set
member val CcExpMonth:Nullable<Byte> = new Nullable<Byte>() with get,set
member val CcExpYear:Nullable<Byte> = new Nullable<Byte>() with get,set
member val IsTemp:Boolean = new Boolean() with get,set
member val IsDisabled:Boolean = new Boolean() with get,set
member val OnHoldUtc:Nullable<DateTime> = new Nullable<DateTime>() with get,set
member val OnHoldReasonCode:Nullable<Byte> = new Nullable<Byte>() with get,set
member val OnHoldReasonDetail:String = null with get,set
member val AcctUpdaterFlagUtc:Nullable<DateTime> = new Nullable<DateTime>() with get,set
member val CreatedBy:Int32 = new Int32() with get,set
member val CreatedUtc:DateTime = new DateTime() with get,set
member val ModifiedBy:Int32 = new Int32() with get,set
member val ModifiedUtc:DateTime = new DateTime() with get,set
member val AcctUpdaterFlag:Boolean = new Boolean() with get,set
member val EntryModeId:Int16 = new Int16() with get,set
member val ExcludeFromAcctUpdater:Boolean = new Boolean() with get,set
[<AllowNullLiteral>]
type PaymentProfileImportResponse() =
member val Success:Boolean = new Boolean() with get,set
member val Message:String = null with get,set
member val PaymentProfile:PaymentProfile = null with get,set
F# PaymentProfileImportEndpoint DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /sales/paymentprofile/import HTTP/1.1
Host: clubready.com
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
XForwardedFor: String,
ApiKey: String,
ProfileToken: String,
DoNotUpdatePaymentTypePreference: False,
NewOwnerId: 0
}
HTTP/1.1 200 OK Content-Type: text/jsv Content-Length: length { Success: False, Message: String, PaymentProfile: { PaymentProfileId: 0, AcctToken: String, OwnerId: 0, OwnerTypeId: 0, AcctTypeId: 0, AcctClassId: 0, PrefixName: String, FirstName: String, MiddleName: String, LastName: String, SuffixName: String, Address1: String, Address2: String, Urbanization: String, City: String, State: String, PostalCode: String, CountryCode: String, Last4: String, CcExpMonth: 0, CcExpYear: 0, IsTemp: False, IsDisabled: False, OnHoldUtc: 0001-01-01, OnHoldReasonCode: 0, OnHoldReasonDetail: String, AcctUpdaterFlagUtc: 0001-01-01, CreatedBy: 0, CreatedUtc: 0001-01-01, ModifiedBy: 0, ModifiedUtc: 0001-01-01, AcctUpdaterFlag: False, EntryModeId: 0, ExcludeFromAcctUpdater: False } }