29 May 2020
Composable Commerce
HTTP API
Enhancement
GraphQLPayments

Payments and MyPayments can now be created, updated, and deleted using the GraphQL API.

  • [GraphQL API] Added the following types to the GraphQL schema: AddMyPaymentTransaction, AddPaymentInterfaceInteraction, AddPaymentTransaction, ChangePaymentAmountPlanned, ChangePaymentTransactionInteractionId, ChangePaymentTransactionState, ChangePaymentTransactionTimestamp, MyPayment, MyPaymentDraft, MyPaymentQueryResult, MyPaymentUpdateAction, MyTransactionDraft, PaymentDraft, PaymentMethodInfoInput, PaymentStatusInput, PaymentUpdateAction, SetPaymentAmountPaid, SetPaymentAmountRefunded, SetPaymentAnonymousId, SetPaymentAuthorization, SetPaymentCustomField, SetPaymentCustomType, SetPaymentCustomer, SetPaymentExternalId, SetPaymentInterfaceId, SetPaymentKey, SetPaymentMethodInfoInterface, SetPaymentMethodInfoMethod, SetPaymentMethodInfoName, SetPaymentStatusInterfaceCode, SetPaymentStatusInterfaceText, SetStoreSupplyChannels, TransactionDraft, TransitionPaymentState.
  • [GraphQL API] Changed the Me type:
    • Added the payments field to the Me type.
    • Added the payment field to the Me type.
  • [GraphQL API] Changed the StoreUpdateAction type:
    • Input field setSupplyChannels was added to StoreUpdateAction type
  • [GraphQL API] Changed the CreateStore type:
    • Input field supplyChannels was added to CreateStore type
  • [GraphQL API] Changed the Mutation type:
    • Added the createPayment field to the Mutation type.
    • Added the createMyPayment field to the Mutation type.
    • Added the updatePayment field to the Mutation type.
    • Added the updateMyPayment field to the Mutation type.
    • Added the deletePayment field to the Mutation type.
    • Added the deleteMyPayment field to the Mutation type.

Introduced the following changes to the GraphQL schema (in SDL format):

extend type Me {
  payment(id: String!): MyPayment
  payments(where: String, sort: [String!], limit: Int, offset: Int): MyPaymentQueryResult!
}

extend type Mutation {
  createMyPayment(draft: MyPaymentDraft!): MyPayment
  createPayment(draft: PaymentDraft!): Payment
  deleteMyPayment(id: String!, version: Long!): MyPayment
  deletePayment(version: Long!, personalDataErasure: Boolean = false,

    "Queries with specified ID"
    id: String,

    "Queries with specified key"
    key: String): Payment
  updateMyPayment(id: String!, version: Long!, actions: [MyPaymentUpdateAction!]!): MyPayment
  updatePayment(version: Long!, actions: [PaymentUpdateAction!]!,

    "Queries with specified ID"
    id: String,

    "Queries with specified key"
    key: String): Payment
}

input AddMyPaymentTransaction {
  transaction: MyTransactionDraft!
}

input AddPaymentInterfaceInteraction {
  fields: [CustomFieldInput!]
  type: ResourceIdentifierInput
  typeKey: String
  typeId: String
}

input AddPaymentTransaction {
  transaction: TransactionDraft!
}

input ChangePaymentAmountPlanned {
  amount: MoneyInput!
}

input ChangePaymentTransactionInteractionId {
  transactionId: String!
  interactionId: String!
}

input ChangePaymentTransactionState {
  transactionId: String!
  state: TransactionState!
}

input ChangePaymentTransactionTimestamp {
  transactionId: String!
  timestamp: DateTime!
}

"""
My Payments endpoint provides access to payments scoped to a specific user.
[documentation](https://docs.commercetools.com/http-api-projects-me-payments#mypayment)
"""
type MyPayment {
  id: String!
  version: Long!
  customerRef: Reference
  customer: Customer
  anonymousId: String
  paymentMethodInfo: PaymentMethodInfo!
  amountPlanned: Money!
  transactions: [Transaction!]!
  custom: CustomFieldsType
}

input MyPaymentDraft {
  amountPlanned: MoneyInput!
  paymentMethodInfo: PaymentMethodInfoInput
  custom: CustomFieldsDraft
  transaction: MyTransactionDraft
}

type MyPaymentQueryResult {
  offset: Int!
  count: Int!
  total: Long!
  results: [MyPayment!]!
}

input MyPaymentUpdateAction {
  addTransaction: AddMyPaymentTransaction
  changeAmountPlanned: ChangePaymentAmountPlanned
  setCustomField: SetPaymentCustomField
  setMethodInfoInterface: SetPaymentMethodInfoInterface
  setMethodInfoMethod: SetPaymentMethodInfoMethod
  setMethodInfoName: SetPaymentMethodInfoName
}

input MyTransactionDraft {
  timestamp: DateTime
  type: TransactionType!
  amount: MoneyInput!
  interactionId: String
}

input PaymentDraft {
  amountPlanned: MoneyInput!
  paymentMethodInfo: PaymentMethodInfoInput
  custom: CustomFieldsDraft
  key: String
  customer: ResourceIdentifierInput
  anonymousId: String
  interfaceId: String
  paymentStatus: PaymentStatusInput
  transactions: [TransactionDraft!]
  interfaceInteractions: [CustomFieldsDraft!]
}

input PaymentMethodInfoInput {
  paymentInterface: String
  method: String
  name: [LocalizedStringItemInputType!]
}

input PaymentStatusInput {
  interfaceCode: String
  interfaceText: String
  state: ReferenceInput
}

input PaymentUpdateAction {
  addInterfaceInteraction: AddPaymentInterfaceInteraction
  addTransaction: AddPaymentTransaction
  changeAmountPlanned: ChangePaymentAmountPlanned
  changeTransactionInteractionId: ChangePaymentTransactionInteractionId
  changeTransactionState: ChangePaymentTransactionState
  changeTransactionTimestamp: ChangePaymentTransactionTimestamp
  setAmountPaid: SetPaymentAmountPaid
  setAmountRefunded: SetPaymentAmountRefunded
  setAnonymousId: SetPaymentAnonymousId
  setAuthorization: SetPaymentAuthorization
  setCustomField: SetPaymentCustomField
  setCustomType: SetPaymentCustomType
  setCustomer: SetPaymentCustomer
  setExternalId: SetPaymentExternalId
  setInterfaceId: SetPaymentInterfaceId
  setKey: SetPaymentKey
  setMethodInfoInterface: SetPaymentMethodInfoInterface
  setMethodInfoMethod: SetPaymentMethodInfoMethod
  setMethodInfoName: SetPaymentMethodInfoName
  setStatusInterfaceCode: SetPaymentStatusInterfaceCode
  setStatusInterfaceText: SetPaymentStatusInterfaceText
  transitionState: TransitionPaymentState
}

input SetPaymentAmountPaid {
  amount: MoneyInput
}

input SetPaymentAmountRefunded {
  amount: MoneyInput
}

input SetPaymentAnonymousId {
  anonymousId: String
}

input SetPaymentAuthorization {
  amount: MoneyInput
  until: DateTime
}

input SetPaymentCustomField {
  name: String!
  value: String
}

input SetPaymentCustomType {
  fields: [CustomFieldInput!]
  type: ResourceIdentifierInput
  typeKey: String
  typeId: String
}

input SetPaymentCustomer {
  customer: ReferenceInput
}

input SetPaymentExternalId {
  externalId: String
}

input SetPaymentInterfaceId {
  interfaceId: String
}

input SetPaymentKey {
  key: String
}

input SetPaymentMethodInfoInterface {
  interface: String!
}

input SetPaymentMethodInfoMethod {
  method: String
}

input SetPaymentMethodInfoName {
  name: [LocalizedStringItemInputType!]
}

input SetPaymentStatusInterfaceCode {
  interfaceCode: String
}

input SetPaymentStatusInterfaceText {
  interfaceText: String
}

input SetStoreSupplyChannels {
  supplyChannels: [ResourceIdentifierInput!]
}

input TransactionDraft {
  timestamp: DateTime
  type: TransactionType!
  amount: MoneyInput!
  interactionId: String
  state: TransactionState
}

input TransitionPaymentState {
  state: ResourceIdentifierInput!
  force: Boolean = false
}