POST | /sales/paymentprofile/import | Import a Payment Profile (using ProfileToken) | After a Payment Profile is created in the ClubReadyGateway API (aka Vault API), the information has to be imported into the ClubReady system. The AcctToken and ProfileToken are created by the ClubReadyGateway API. |
---|
import datetime
import decimal
from marshmallow.fields import *
from servicestack import *
from typing import *
from dataclasses import dataclass, field
from dataclasses_json import dataclass_json, LetterCase, Undefined, config
from enum import Enum, IntEnum
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentProfileImportRequest:
acct_token: Optional[str] = None
profile_token: Optional[str] = None
do_not_update_payment_type_preference: bool = False
new_owner: Optional[ValueTuple[int, OwnerType]] = None
# @ApiResponse(Description="", ResponseType=typeof(PaymentProfileImportResponse), StatusCode=200)
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentProfileImportEndpoint(PaymentProfileImportRequest, IApiKeyEndpoint):
# @ApiMember(Description="Api Authentication Key", IsRequired=true, ParameterType="query")
api_key: Optional[str] = None
"""
Api Authentication Key
"""
# @ApiMember(Description="\r\nEncoded data uniquely identifying the payment profile. \r\nLong term storage of AcctToken is not recommended, as the token may change over time (for example, by processes like Account Updater). \r\nThe length is usually 80 characters.", IsRequired=true)
acct_token: Optional[str] = None
"""
Encoded data uniquely identifying the payment profile. Long term storage of AcctToken is not recommended, as the token may change over time (for example, by processes like Account Updater). The length is usually 80 characters.
"""
# @ApiMember(Description="\r\nEncoded data containing non-PCI information about the Payment Profile. \r\n\r\nProfileTokens contain a timestamp. If the ClubReady API does not process the token within 5 minutes,\r\nit cannot be accepted and a new profile will have to be created with a new AcctToken. The time\r\nvalidation is to prevent old tokens from be re-played at a later time. \r\n\r\nThe length is variable, but generally around 1,000 characters.", IsRequired=true)
profile_token: Optional[str] = None
"""
Encoded data containing non-PCI information about the Payment Profile. ProfileTokens contain a timestamp. If the ClubReady API does not process the token within 5 minutes,it cannot be accepted and a new profile will have to be created with a new AcctToken. The timevalidation is to prevent old tokens from be re-played at a later time. The length is variable, but generally around 1,000 characters.
"""
# @ApiMember(Description="\r\nWhen adding a Payment Profile that is 'on-file', the default behavior is to update the user's Payment Type\r\nPreference to the AcctClass of the new profile. If you wish to not update the preference, you can set\r\n`DoNotUpdatePaymentTypePreference` to `true`. Otherwise, this can be omitted or `false`. \r\n\r\nFor `IsTemp == true` profiles, `DoNotUpdatePaymentTypePreference` is ignored.")
do_not_update_payment_type_preference: bool = False
"""
When adding a Payment Profile that is 'on-file', the default behavior is to update the user's Payment TypePreference to the AcctClass of the new profile. If you wish to not update the preference, you can set`DoNotUpdatePaymentTypePreference` to `true`. Otherwise, this can be omitted or `false`. For `IsTemp == true` profiles, `DoNotUpdatePaymentTypePreference` is ignored.
"""
# @ApiMember(Description="\r\n**Conditionally Required** \r\n\r\nWhen adding a Payment Profile that has an OwnerType of `TempStUser`, the ownership will be changed to OwnerType of `User`\r\nwith the `UserId` of the supplied `NewOwnerId`.")
new_owner_id: Optional[int] = None
"""
**Conditionally Required** When adding a Payment Profile that has an OwnerType of `TempStUser`, the ownership will be changed to OwnerType of `User`with the `UserId` of the supplied `NewOwnerId`.
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentProfile:
payment_profile_id: int = 0
acct_token: Optional[str] = None
owner_id: int = 0
owner_type_id: int = 0
acct_type_id: int = 0
acct_class_id: int = 0
prefix_name: Optional[str] = None
first_name: Optional[str] = None
middle_name: Optional[str] = None
last_name: Optional[str] = None
suffix_name: Optional[str] = None
address1: Optional[str] = None
address2: Optional[str] = None
urbanization: Optional[str] = None
city: Optional[str] = None
state: Optional[str] = None
postal_code: Optional[str] = None
country_code: Optional[str] = None
last4: Optional[str] = None
cc_exp_month: Optional[int] = None
cc_exp_year: Optional[int] = None
is_temp: bool = False
is_disabled: bool = False
on_hold_utc: Optional[datetime.datetime] = None
on_hold_reason_code: Optional[int] = None
on_hold_reason_detail: Optional[str] = None
acct_updater_flag_utc: Optional[datetime.datetime] = None
created_by: int = 0
created_utc: datetime.datetime = datetime.datetime(1, 1, 1)
modified_by: int = 0
modified_utc: datetime.datetime = datetime.datetime(1, 1, 1)
acct_updater_flag: bool = False
entry_mode_id: int = 0
exclude_from_acct_updater: bool = False
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaymentProfileImportResponse:
success: bool = False
message: Optional[str] = None
payment_profile: Optional[PaymentProfile] = None
Python PaymentProfileImportEndpoint 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 /sales/paymentprofile/import HTTP/1.1
Host: clubready.com
Accept: application/json
Content-Type: application/json
Content-Length: length
{"ApiKey":"String","AcctToken":"String","ProfileToken":"String","DoNotUpdatePaymentTypePreference":false,"NewOwnerId":0,"NewOwner":"(0, Unknown)"}
HTTP/1.1 200 OK Content-Type: application/json 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-01T00:00:00.0000000","OnHoldReasonCode":0,"OnHoldReasonDetail":"String","AcctUpdaterFlagUtc":"0001-01-01T00:00:00.0000000","CreatedBy":0,"CreatedUtc":"0001-01-01T00:00:00.0000000","ModifiedBy":0,"ModifiedUtc":"0001-01-01T00:00:00.0000000","AcctUpdaterFlag":false,"EntryModeId":0,"ExcludeFromAcctUpdater":false}}