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 |
---|
Imports System
Imports System.Collections
Imports System.Collections.Generic
Imports System.Runtime.Serialization
Imports ServiceStack
Imports ServiceStack.DataAnnotations
Imports ClubReady.Web.Api.Sales
Imports ClubReady.Payments
Imports ClubReady.Payments.PaymentsDb
Namespace Global
Namespace ClubReady.Payments
Public Partial Class PaymentProfileImportRequest
Public Overridable Property ProfileToken As String
Public Overridable Property DoNotUpdatePaymentTypePreference As Boolean
Public Overridable Property NewOwnerId As Nullable(Of Integer)
End Class
Public Partial Class PaymentProfileImportResponse
Public Overridable Property Success As Boolean
Public Overridable Property Message As String
Public Overridable Property PaymentProfile As PaymentProfile
End Class
End Namespace
Namespace ClubReady.Payments.PaymentsDb
Public Partial Class PaymentProfile
Implements IFullNameContainer
Public Overridable Property PaymentProfileId As Integer
Public Overridable Property AcctToken As String
Public Overridable Property OwnerId As Integer
Public Overridable Property OwnerTypeId As Short
Public Overridable Property AcctTypeId As Short
Public Overridable Property AcctClassId As Short
Public Overridable Property PrefixName As String
Public Overridable Property FirstName As String
Public Overridable Property MiddleName As String
Public Overridable Property LastName As String
Public Overridable Property SuffixName As String
Public Overridable Property Address1 As String
Public Overridable Property Address2 As String
Public Overridable Property Urbanization As String
Public Overridable Property City As String
Public Overridable Property State As String
Public Overridable Property PostalCode As String
Public Overridable Property CountryCode As String
Public Overridable Property Last4 As String
Public Overridable Property CcExpMonth As Nullable(Of Byte)
Public Overridable Property CcExpYear As Nullable(Of Byte)
Public Overridable Property IsTemp As Boolean
Public Overridable Property IsDisabled As Boolean
Public Overridable Property OnHoldUtc As Nullable(Of Date)
Public Overridable Property OnHoldReasonCode As Nullable(Of Byte)
Public Overridable Property OnHoldReasonDetail As String
Public Overridable Property AcctUpdaterFlagUtc As Nullable(Of Date)
Public Overridable Property CreatedBy As Integer
Public Overridable Property CreatedUtc As Date
Public Overridable Property ModifiedBy As Integer
Public Overridable Property ModifiedUtc As Date
Public Overridable Property AcctUpdaterFlag As Boolean
Public Overridable Property EntryModeId As Short
Public Overridable Property ExcludeFromAcctUpdater As Boolean
End Class
End Namespace
Namespace ClubReady.Web.Api.Sales
<ApiResponse(Description:="", ResponseType:=GetType(PaymentProfileImportResponse), StatusCode:=200)>
Public Partial Class PaymentProfileImportEndpoint
Inherits PaymentProfileImportRequest
Implements IApiKeyEndpoint
'''<Summary>
'''IP address of the end user
'''</Summary>
<ApiMember(Description:="IP address of the end user", Name:="X-Forwarded-For", ParameterType:="header")>
Public Overridable Property XForwardedFor As String
'''<Summary>
'''API Authentication Key
'''</Summary>
<ApiMember(Description:="API Authentication Key", IsRequired:=true, ParameterType:="query")>
Public Overridable Property ApiKey As String
'''<Summary>
'''The ProfileToken JWT to import (see description above)
'''</Summary>
<ApiMember(Description:="The ProfileToken JWT to import (see description above)", IsRequired:=true)>
Public Overridable Property ProfileToken As String
'''<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
set this PaymentMethod as the preferred method. If you do not wish this to be the preferred
method, you can set `DoNotUpdatePaymentTypePreference` to `true`. Otherwise, this can be
omitted or `false`.
For non 'on-file' PaymentMethods, this setting is ignored.")>
Public Overridable Property DoNotUpdatePaymentTypePreference As Boolean
'''<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**
When importing a ProfileToken with an OwnerType of `TempStUser`, the ownership will be changed to
OwnerType 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.")>
Public Overridable Property NewOwnerId As Nullable(Of Integer)
End Class
End Namespace
End Namespace
VB.NET PaymentProfileImportEndpoint DTOs
To override the Content-type in your clients, use the HTTP Accept Header, append the .xml suffix or ?format=xml
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: www.clubready.com
Accept: application/xml
Content-Type: application/xml
Content-Length: length
<PaymentProfileImportEndpoint xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/ClubReady.Web.Api.Sales">
<DoNotUpdatePaymentTypePreference xmlns="http://schemas.datacontract.org/2004/07/ClubReady.Payments">false</DoNotUpdatePaymentTypePreference>
<NewOwnerId xmlns="http://schemas.datacontract.org/2004/07/ClubReady.Payments">0</NewOwnerId>
<ProfileToken xmlns="http://schemas.datacontract.org/2004/07/ClubReady.Payments">String</ProfileToken>
<ApiKey>String</ApiKey>
<XForwardedFor>String</XForwardedFor>
</PaymentProfileImportEndpoint>
HTTP/1.1 200 OK Content-Type: application/xml Content-Length: length <PaymentProfileImportResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/ClubReady.Payments"> <Message>String</Message> <PaymentProfile xmlns:d2p1="http://schemas.datacontract.org/2004/07/ClubReady.Payments.PaymentsDb"> <d2p1:AcctClassId>0</d2p1:AcctClassId> <d2p1:AcctToken>String</d2p1:AcctToken> <d2p1:AcctTypeId>0</d2p1:AcctTypeId> <d2p1:AcctUpdaterFlag>false</d2p1:AcctUpdaterFlag> <d2p1:AcctUpdaterFlagUtc>0001-01-01T00:00:00</d2p1:AcctUpdaterFlagUtc> <d2p1:Address1>String</d2p1:Address1> <d2p1:Address2>String</d2p1:Address2> <d2p1:CcExpMonth>0</d2p1:CcExpMonth> <d2p1:CcExpYear>0</d2p1:CcExpYear> <d2p1:City>String</d2p1:City> <d2p1:CountryCode>String</d2p1:CountryCode> <d2p1:CreatedBy>0</d2p1:CreatedBy> <d2p1:CreatedUtc>0001-01-01T00:00:00</d2p1:CreatedUtc> <d2p1:EntryModeId>0</d2p1:EntryModeId> <d2p1:ExcludeFromAcctUpdater>false</d2p1:ExcludeFromAcctUpdater> <d2p1:FirstName>String</d2p1:FirstName> <d2p1:IsDisabled>false</d2p1:IsDisabled> <d2p1:IsTemp>false</d2p1:IsTemp> <d2p1:Last4>String</d2p1:Last4> <d2p1:LastName>String</d2p1:LastName> <d2p1:MiddleName>String</d2p1:MiddleName> <d2p1:ModifiedBy>0</d2p1:ModifiedBy> <d2p1:ModifiedUtc>0001-01-01T00:00:00</d2p1:ModifiedUtc> <d2p1:OnHoldReasonCode>0</d2p1:OnHoldReasonCode> <d2p1:OnHoldReasonDetail>String</d2p1:OnHoldReasonDetail> <d2p1:OnHoldUtc>0001-01-01T00:00:00</d2p1:OnHoldUtc> <d2p1:OwnerId>0</d2p1:OwnerId> <d2p1:OwnerTypeId>0</d2p1:OwnerTypeId> <d2p1:PaymentProfileId>0</d2p1:PaymentProfileId> <d2p1:PostalCode>String</d2p1:PostalCode> <d2p1:PrefixName>String</d2p1:PrefixName> <d2p1:State>String</d2p1:State> <d2p1:SuffixName>String</d2p1:SuffixName> <d2p1:Urbanization>String</d2p1:Urbanization> </PaymentProfile> <Success>false</Success> </PaymentProfileImportResponse>