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 ApiClientHeader:
client_id: Optional[int] = None
referrer: Optional[str] = None
ip_address: Optional[str] = None
logged_in_user_id: Optional[int] = None
group_id: Optional[int] = None
task: Optional[str] = None
machine: Optional[str] = None
location: Optional[str] = None
created_by: Optional[int] = None
campaign_id: Optional[int] = None
re_captcha_score: Optional[Decimal] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SubscriberFormField:
name: Optional[str] = None
value: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class SubscriptionParameters:
form_template_i_d: Optional[int] = None
subscription_invoice_i_d: Optional[int] = None
client_subscriber_id: Optional[str] = None
signup_type_i_d: Optional[int] = None
frequency_i_d: Optional[int] = None
auto_renew: Optional[bool] = None
company_i_d: Optional[int] = None
user_i_d: Optional[int] = None
chap_mem_pay_i_d: Optional[int] = None
member_subscription_inv_i_d: Optional[int] = None
fields: Optional[List[SubscriberFormField]] = None
created_by: Optional[int] = None
updated_by: Optional[int] = None
aptify_update_type: Optional[int] = None
renewed_member_subscription_inv_i_d: Optional[int] = None
chap_id: Optional[int] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class CampaignInformation:
campaign_id: Optional[int] = None
campaign_name: Optional[str] = None
amount: Optional[Decimal] = None
chap_pay_i_d: Optional[str] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BillMeLaterSubscription:
header: Optional[ApiClientHeader] = None
subscription_info: Optional[SubscriptionParameters] = None
campaign_info: Optional[List[CampaignInformation]] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BillMeCloudServiceResponse:
is_duplicate: Optional[bool] = None
is_successful: Optional[bool] = None
error_code: Optional[str] = None
message: Optional[str] = None
is_error: Optional[bool] = None
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class BillMePaymentResult(BillMeCloudServiceResponse):
transaction_record_i_d: Optional[int] = None
Python BillMeLaterSubscription 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 /jsv/reply/BillMeLaterSubscription HTTP/1.1
Host: devapi.billhighway.com
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
Header:
{
ClientId: 0,
Referrer: String,
IpAddress: String,
LoggedInUserId: 0,
GroupId: 0,
Task: String,
Machine: String,
Location: String,
CreatedBy: 0,
CampaignId: 0,
ReCaptchaScore: 0
},
SubscriptionInfo:
{
FormTemplateID: 0,
SubscriptionInvoiceID: 0,
ClientSubscriberId: String,
SignupTypeID: 0,
FrequencyID: 0,
AutoRenew: False,
CompanyID: 0,
UserID: 0,
ChapMemPayID: 0,
MemberSubscriptionInvID: 0,
Fields:
[
{
Name: String,
Value: String
}
],
CreatedBy: 0,
UpdatedBy: 0,
AptifyUpdateType: 0,
RenewedMemberSubscriptionInvID: 0,
ChapId: 0
},
CampaignInfo:
[
{
CampaignId: 0,
CampaignName: String,
Amount: 0,
ChapPayID: String
}
]
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length
{
TransactionRecordID: 0,
IsDuplicate: False,
IsSuccessful: False,
ErrorCode: String,
Message: String,
IsError: False
}