POST | /payment/payson/v2/checkout | Create an checkout for Booking. Note if existing checkouts already exists, i will invalidate those. | Create payson checkout (requires settings for Payson Checkout 2.0) |
---|
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
class Payson2CheckoutStatus(str, Enum):
NONE = 'None'
CREATED = 'Created'
FORMS_FILLED = 'FormsFilled'
READY_TO_PAY = 'ReadyToPay'
PROCESSING_PAYMENT = 'ProcessingPayment'
READY_TO_SHIP = 'ReadyToShip'
SHIPPED = 'Shipped'
PAID_TO_ACCOUNT = 'PaidToAccount'
CANCELED = 'Canceled'
CREDITED = 'Credited'
EXPIRED = 'Expired'
DENIED = 'Denied'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaysonCheckoutV2Response:
# @ApiMember(Description="The checkout id")
id: Optional[str] = None
"""
The checkout id
"""
# @ApiMember(Description="The code snippet to for checkout module")
snippet: Optional[str] = None
"""
The code snippet to for checkout module
"""
# @ApiMember(Description="The checkout status")
status: Optional[Payson2CheckoutStatus] = None
"""
The checkout status
"""
class PaymentOrigin(str, Enum):
HOME_PAGE = 'HomePage'
EMBEDDED = 'Embedded'
ADMIN = 'Admin'
APPS = 'Apps'
HOME_PAGE_NEW = 'HomePageNew'
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class PaysonV2CreateCheckout(ICompany):
# @ApiMember(Description="The company id.", IsRequired=true)
company_id: Optional[str] = None
"""
The company id.
"""
# @ApiMember(Description="The reference id. (Could be booking, could be rebate code etc.)")
booking_id: Optional[str] = None
"""
The reference id. (Could be booking, could be rebate code etc.)
"""
# @ApiMember(Description="The reference id. (Could be booking, could be rebate code etc.)", IsRequired=true)
internal_reference_id: Optional[str] = None
"""
The reference id. (Could be booking, could be rebate code etc.)
"""
# @ApiMember(Description="Optional to set the checkout url. This url will be redirected to if payment is interupted for some reason.")
checkout_url: Optional[str] = None
"""
Optional to set the checkout url. This url will be redirected to if payment is interupted for some reason.
"""
# @ApiMember(Description="Optional to set your own confirmation url after payment completed.")
confirmation_url: Optional[str] = None
"""
Optional to set your own confirmation url after payment completed.
"""
# @ApiMember(Description="The payment origin id. HomePage = 0, Embedded = 1, Admin = 2, Apps = 3", IsRequired=true)
payment_origin: Optional[PaymentOrigin] = None
"""
The payment origin id. HomePage = 0, Embedded = 1, Admin = 2, Apps = 3
"""
# @ApiMember(Description="If you want to have another language (sv, fi, dk, no, en) than the default language in system settings, specify it here. Leave empty if default language should be used.", IsRequired=true)
language: Optional[str] = None
"""
If you want to have another language (sv, fi, dk, no, en) than the default language in system settings, specify it here. Leave empty if default language should be used.
"""
# @ApiMember(Description="Country code for checkout", IsRequired=true)
country_code: Optional[str] = None
"""
Country code for checkout
"""
# @ApiMember(Description="Determins if it's a test call")
test_mode: bool = False
"""
Determins if it's a test call
"""
# @ApiMember(Description="Articles (Could be Service, rebate code types, etc..", IsRequired=true)
articles: Optional[List[ArticleToCreate]] = None
"""
Articles (Could be Service, rebate code types, etc..
"""
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@dataclass
class ArticleToCreate:
article_id: int = 0
article_type_id: int = 0
quantity: int = 0
Python PaysonV2CreateCheckout 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 /payment/payson/v2/checkout HTTP/1.1
Host: testapi.bokamera.se
Accept: application/xml
Content-Type: application/xml
Content-Length: length
<PaysonV2CreateCheckout xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/BokaMera.API.ServiceModel.Dtos">
<Articles>
<ArticleToCreate>
<ArticleId>0</ArticleId>
<ArticleTypeId>0</ArticleTypeId>
<Quantity>0</Quantity>
</ArticleToCreate>
</Articles>
<BookingId>String</BookingId>
<CheckoutUrl i:nil="true" />
<CompanyId>00000000-0000-0000-0000-000000000000</CompanyId>
<ConfirmationUrl i:nil="true" />
<CountryCode>String</CountryCode>
<InternalReferenceId>String</InternalReferenceId>
<Language>String</Language>
<PaymentOrigin>HomePage</PaymentOrigin>
<TestMode>false</TestMode>
</PaysonV2CreateCheckout>
HTTP/1.1 200 OK Content-Type: application/xml Content-Length: length <PaysonCheckoutV2Response xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/BokaMera.API.ServiceModel.Dtos"> <Id>00000000-0000-0000-0000-000000000000</Id> <Snippet>String</Snippet> <Status>None</Status> </PaysonCheckoutV2Response>