ClubReady Api

<back to all web services

PaymentProfileImportEndpoint

The following routes are available for this service:
POST/sales/paymentprofile/importImport 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
import 'package:servicestack/servicestack.dart';

class PaymentProfileImportRequest implements IConvertible
{
    String? ProfileToken;
    bool? DoNotUpdatePaymentTypePreference;
    int? NewOwnerId;

    PaymentProfileImportRequest({this.ProfileToken,this.DoNotUpdatePaymentTypePreference,this.NewOwnerId});
    PaymentProfileImportRequest.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        ProfileToken = json['ProfileToken'];
        DoNotUpdatePaymentTypePreference = json['DoNotUpdatePaymentTypePreference'];
        NewOwnerId = json['NewOwnerId'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'ProfileToken': ProfileToken,
        'DoNotUpdatePaymentTypePreference': DoNotUpdatePaymentTypePreference,
        'NewOwnerId': NewOwnerId
    };

    getTypeName() => "PaymentProfileImportRequest";
    TypeContext? context = _ctx;
}

// @ApiResponse(Description="", ResponseType=typeof(PaymentProfileImportResponse), StatusCode=200)
class PaymentProfileImportEndpoint extends PaymentProfileImportRequest implements IApiKeyEndpoint, IConvertible
{
    /**
    * IP address of the end user
    */
    // @ApiMember(Description="IP address of the end user", Name="X-Forwarded-For", ParameterType="header")
    String? XForwardedFor;

    /**
    * API Authentication Key
    */
    // @ApiMember(Description="API Authentication Key", IsRequired=true, ParameterType="query")
    String? ApiKey;

    /**
    * The ProfileToken JWT to import (see description above)
    */
    // @ApiMember(Description="The ProfileToken JWT to import (see description above)", IsRequired=true)
    String? ProfileToken;

    /**
    * 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.
    */
    // @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.")
    bool? DoNotUpdatePaymentTypePreference;

    /**
    * **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.
    */
    // @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.")
    int? NewOwnerId;

    PaymentProfileImportEndpoint({this.XForwardedFor,this.ApiKey,this.ProfileToken,this.DoNotUpdatePaymentTypePreference,this.NewOwnerId});
    PaymentProfileImportEndpoint.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        super.fromMap(json);
        XForwardedFor = json['XForwardedFor'];
        ApiKey = json['ApiKey'];
        ProfileToken = json['ProfileToken'];
        DoNotUpdatePaymentTypePreference = json['DoNotUpdatePaymentTypePreference'];
        NewOwnerId = json['NewOwnerId'];
        return this;
    }

    Map<String, dynamic> toJson() => super.toJson()..addAll({
        'XForwardedFor': XForwardedFor,
        'ApiKey': ApiKey,
        'ProfileToken': ProfileToken,
        'DoNotUpdatePaymentTypePreference': DoNotUpdatePaymentTypePreference,
        'NewOwnerId': NewOwnerId
    });

    getTypeName() => "PaymentProfileImportEndpoint";
    TypeContext? context = _ctx;
}

class PaymentProfile implements IFullNameContainer, IConvertible
{
    int? PaymentProfileId;
    String? AcctToken;
    int? OwnerId;
    int? OwnerTypeId;
    int? AcctTypeId;
    int? AcctClassId;
    String? 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;
    int? CcExpMonth;
    int? CcExpYear;
    bool? IsTemp;
    bool? IsDisabled;
    DateTime? OnHoldUtc;
    int? OnHoldReasonCode;
    String? OnHoldReasonDetail;
    DateTime? AcctUpdaterFlagUtc;
    int? CreatedBy;
    DateTime? CreatedUtc;
    int? ModifiedBy;
    DateTime? ModifiedUtc;
    bool? AcctUpdaterFlag;
    int? EntryModeId;
    bool? ExcludeFromAcctUpdater;

    PaymentProfile({this.PaymentProfileId,this.AcctToken,this.OwnerId,this.OwnerTypeId,this.AcctTypeId,this.AcctClassId,this.PrefixName,this.FirstName,this.MiddleName,this.LastName,this.SuffixName,this.Address1,this.Address2,this.Urbanization,this.City,this.State,this.PostalCode,this.CountryCode,this.Last4,this.CcExpMonth,this.CcExpYear,this.IsTemp,this.IsDisabled,this.OnHoldUtc,this.OnHoldReasonCode,this.OnHoldReasonDetail,this.AcctUpdaterFlagUtc,this.CreatedBy,this.CreatedUtc,this.ModifiedBy,this.ModifiedUtc,this.AcctUpdaterFlag,this.EntryModeId,this.ExcludeFromAcctUpdater});
    PaymentProfile.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        PaymentProfileId = json['PaymentProfileId'];
        AcctToken = json['AcctToken'];
        OwnerId = json['OwnerId'];
        OwnerTypeId = json['OwnerTypeId'];
        AcctTypeId = json['AcctTypeId'];
        AcctClassId = json['AcctClassId'];
        PrefixName = json['PrefixName'];
        FirstName = json['FirstName'];
        MiddleName = json['MiddleName'];
        LastName = json['LastName'];
        SuffixName = json['SuffixName'];
        Address1 = json['Address1'];
        Address2 = json['Address2'];
        Urbanization = json['Urbanization'];
        City = json['City'];
        State = json['State'];
        PostalCode = json['PostalCode'];
        CountryCode = json['CountryCode'];
        Last4 = json['Last4'];
        CcExpMonth = json['CcExpMonth'];
        CcExpYear = json['CcExpYear'];
        IsTemp = json['IsTemp'];
        IsDisabled = json['IsDisabled'];
        OnHoldUtc = JsonConverters.fromJson(json['OnHoldUtc'],'DateTime',context!);
        OnHoldReasonCode = json['OnHoldReasonCode'];
        OnHoldReasonDetail = json['OnHoldReasonDetail'];
        AcctUpdaterFlagUtc = JsonConverters.fromJson(json['AcctUpdaterFlagUtc'],'DateTime',context!);
        CreatedBy = json['CreatedBy'];
        CreatedUtc = JsonConverters.fromJson(json['CreatedUtc'],'DateTime',context!);
        ModifiedBy = json['ModifiedBy'];
        ModifiedUtc = JsonConverters.fromJson(json['ModifiedUtc'],'DateTime',context!);
        AcctUpdaterFlag = json['AcctUpdaterFlag'];
        EntryModeId = json['EntryModeId'];
        ExcludeFromAcctUpdater = json['ExcludeFromAcctUpdater'];
        return this;
    }

    Map<String, dynamic> toJson() => {
        'PaymentProfileId': PaymentProfileId,
        'AcctToken': AcctToken,
        'OwnerId': OwnerId,
        'OwnerTypeId': OwnerTypeId,
        'AcctTypeId': AcctTypeId,
        'AcctClassId': AcctClassId,
        'PrefixName': PrefixName,
        'FirstName': FirstName,
        'MiddleName': MiddleName,
        'LastName': LastName,
        'SuffixName': SuffixName,
        'Address1': Address1,
        'Address2': Address2,
        'Urbanization': Urbanization,
        'City': City,
        'State': State,
        'PostalCode': PostalCode,
        'CountryCode': CountryCode,
        'Last4': Last4,
        'CcExpMonth': CcExpMonth,
        'CcExpYear': CcExpYear,
        'IsTemp': IsTemp,
        'IsDisabled': IsDisabled,
        'OnHoldUtc': JsonConverters.toJson(OnHoldUtc,'DateTime',context!),
        'OnHoldReasonCode': OnHoldReasonCode,
        'OnHoldReasonDetail': OnHoldReasonDetail,
        'AcctUpdaterFlagUtc': JsonConverters.toJson(AcctUpdaterFlagUtc,'DateTime',context!),
        'CreatedBy': CreatedBy,
        'CreatedUtc': JsonConverters.toJson(CreatedUtc,'DateTime',context!),
        'ModifiedBy': ModifiedBy,
        'ModifiedUtc': JsonConverters.toJson(ModifiedUtc,'DateTime',context!),
        'AcctUpdaterFlag': AcctUpdaterFlag,
        'EntryModeId': EntryModeId,
        'ExcludeFromAcctUpdater': ExcludeFromAcctUpdater
    };

    getTypeName() => "PaymentProfile";
    TypeContext? context = _ctx;
}

class PaymentProfileImportResponse implements IConvertible
{
    bool? Success;
    String? Message;
    PaymentProfile? PaymentProfile;

    PaymentProfileImportResponse({this.Success,this.Message,this.PaymentProfile});
    PaymentProfileImportResponse.fromJson(Map<String, dynamic> json) { fromMap(json); }

    fromMap(Map<String, dynamic> json) {
        Success = json['Success'];
        Message = json['Message'];
        PaymentProfile = JsonConverters.fromJson(json['PaymentProfile'],'PaymentProfile',context!);
        return this;
    }

    Map<String, dynamic> toJson() => {
        'Success': Success,
        'Message': Message,
        'PaymentProfile': JsonConverters.toJson(PaymentProfile,'PaymentProfile',context!)
    };

    getTypeName() => "PaymentProfileImportResponse";
    TypeContext? context = _ctx;
}

TypeContext _ctx = TypeContext(library: 'clubready.com', types: <String, TypeInfo> {
    'PaymentProfileImportRequest': TypeInfo(TypeOf.Class, create:() => PaymentProfileImportRequest()),
    'PaymentProfileImportEndpoint': TypeInfo(TypeOf.Class, create:() => PaymentProfileImportEndpoint()),
    'PaymentProfile': TypeInfo(TypeOf.Class, create:() => PaymentProfile()),
    'PaymentProfileImportResponse': TypeInfo(TypeOf.Class, create:() => PaymentProfileImportResponse()),
});

Dart 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

HTTP + JSON

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

{"XForwardedFor":"String","ApiKey":"String","ProfileToken":"String","DoNotUpdatePaymentTypePreference":false,"NewOwnerId":0}
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}}