All Projects → moltin → ios-sdk

moltin / ios-sdk

Licence: MIT license
Swift SDK for the Moltin eCommerce API

Programming Languages

swift
15916 projects
ruby
36898 projects - #4 most used programming language

Projects that are alternatives of or similar to ios-sdk

Example Storefront
Example Storefront is Reaction Commerce’s headless ecommerce storefront - Next.js, GraphQL, React. Built using Apollo Client and the commerce-focused React UI components provided in the Storefront Component Library (reactioncommerce/reaction-component-library). It connects with Reaction backend with the GraphQL API.
Stars: ✭ 471 (+1245.71%)
Mutual labels:  ecommerce, commerce, headless
Saleor
A modular, high performance, headless e-commerce platform built with Python, GraphQL, Django, and React.
Stars: ✭ 14,720 (+41957.14%)
Mutual labels:  ecommerce, commerce, headless
Ever
Ever® - Open-Source Commerce Platform for On-Demand Economy and Digital Marketplaces
Stars: ✭ 980 (+2700%)
Mutual labels:  ecommerce, commerce, headless
saleor
A modular, high performance, headless e-commerce platform built with Python, GraphQL, Django, and React.
Stars: ✭ 15,824 (+45111.43%)
Mutual labels:  ecommerce, commerce, headless
Reaction
Mailchimp Open Commerce is an API-first, headless commerce platform built using Node.js, React, GraphQL. Deployed via Docker and Kubernetes.
Stars: ✭ 11,588 (+33008.57%)
Mutual labels:  ecommerce, commerce, headless
React Storefront
Build and deploy e-commerce progressive web apps (PWAs) in record time.
Stars: ✭ 275 (+685.71%)
Mutual labels:  ecommerce, commerce, headless
Commerce.js
Open source, JS eCommerce SDK for building headless, Jamstack applications. Build custom storefronts, carts, and checkouts in any frontend framework, platform, or device. Integrates with Stripe, Square, PayPal, Paymill and Razorpay with support for 135+ currencies.
Stars: ✭ 112 (+220%)
Mutual labels:  ecommerce, commerce, headless
React Storefront
React Storefront - PWA for eCommerce. 100% offline, platform agnostic, headless, Magento 2 supported. Always Open Source, Apache-2.0 license. Join us as contributor ([email protected]).
Stars: ✭ 292 (+734.29%)
Mutual labels:  ecommerce, commerce, headless
Commercejs Nextjs Demo Store
Commerce demo store built for the Jamstack. Built with Commerce.js, Next.js, and can be one-click deployed to Netlify. Includes product catalog, categories, variants, cart, checkout, payments (Stripe) order confirmation, and printable receipts.
Stars: ✭ 737 (+2005.71%)
Mutual labels:  ecommerce, commerce, headless
Vue Storefront
The open-source frontend for any eCommerce. Built with a PWA and headless approach, using a modern JS stack. We have custom integrations with Magento, commercetools, Shopware and Shopify and total coverage is just a matter of time. The API approach also allows you to merge VSF with any third-party tool like CMS, payment gateways or analytics. Ne…
Stars: ✭ 9,111 (+25931.43%)
Mutual labels:  ecommerce, headless
Laravel Ecommerce
AvoRed an Open Source Laravel Shopping Cart
Stars: ✭ 1,151 (+3188.57%)
Mutual labels:  ecommerce, commerce
Gocommerce
A headless e-commerce for JAMstack sites
Stars: ✭ 1,178 (+3265.71%)
Mutual labels:  ecommerce, headless
Geekshop
极客商城 ~ 一个面向开发者的、基于Spring+GraphQL+Angular的、无前端(headless)电商框架
Stars: ✭ 52 (+48.57%)
Mutual labels:  ecommerce, headless
Jet
Jet is an e-commerce framework for Amber / Crystal
Stars: ✭ 18 (-48.57%)
Mutual labels:  ecommerce, commerce
Angularspree
angular e-commerce framework for online store
Stars: ✭ 1,576 (+4402.86%)
Mutual labels:  ecommerce, commerce
Vc Storefront
VirtoCommerce Storefront for ASP.NET Core 3.1 repository
Stars: ✭ 122 (+248.57%)
Mutual labels:  ecommerce, commerce
Grandnode
Open source, headless, multi-tenant eCommerce platform built with .NET Core, MongoDB, AWS DocumentDB, Azure CosmosDB, Vue.js.
Stars: ✭ 1,768 (+4951.43%)
Mutual labels:  ecommerce, commerce
Vc Platform
VirtoCommerce Platform repository
Stars: ✭ 828 (+2265.71%)
Mutual labels:  ecommerce, commerce
Orocommerce
Main OroCommerce package with core functionality.
Stars: ✭ 148 (+322.86%)
Mutual labels:  ecommerce, commerce
Ymple Ecommerce
Node js E-commerce Framework powered with Sails.js & Node.js as an Ecommerce Platform Shop Solution
Stars: ✭ 152 (+334.29%)
Mutual labels:  ecommerce, commerce

Elastic Path Commerce Cloud iOS Swift SDK

CocoaPods Compatible Carthage Compatible follow on Twitter

A simple to use iOS/tvOS/watchOS SDK to help get you off the ground quickly and efficiently with your Elastic Path Commerce Cloud written in Swift.

📚 API reference📚 Elastic Path Commerce Cloud

Requirements

  • iOS 10.0+ / tvOS 10.0+ / watchOS 3.0+
  • Swift 4.0+

Installation

Cocoapods

Add the following to your Podfile:

pod 'Moltin', '~> 3.1.2'

Or, quickly try out our examples:

pod try Moltin

Carthage

Add the following to your Cartfile:

github "Moltin/ios-sdk" ~> 3.1.2

Swift Package Manager

Add the following to your dependencies value in Package.swift:

dependencies: [
    .package(url: "https://github.com/moltin/ios-sdk.git", from: "3.1.2")
]

Usage

Making a request

let moltin = Moltin(withClientID: "<your client ID>")

moltin.product.all { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

moltin.product.get("<product ID>") { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

moltin.product.tree { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Checking out & Payment

Paying for a cart is a two step process in Moltin.

First, check out your cart, which will return you an order:

self.moltin.cart.checkout(
    cart: ...,
    withCustomer: ...,
    withBillingAddress: ...,
    withShippingAddress: ...) { (result) in
    switch result {
        case .success(let order):
            ...
        default: break
    }
}

Now that you have an order, you can pay for your order. Moltin providers several gateways for you to use:

  • Stripe
  • BrainTree
  • Adyen
  • Manual

Once you've chosen your payment gateway, you can fulfil one of Moltin's PaymentMethod's:

let paymentMethod = StripeToken(withStripeToken: ...)

You can then use this payment method to pay for an order:

self.moltin.cart.pay(
    forOrderID: order.id,
    withPaymentMethod: paymentMethod) { (result) in
    ...
}

Config

The basic way to set up the Moltin SDK is to create an instance of the Moltin class with your client ID and optionally the locale of the application. However, if you'd like to change additional details of the SDK, such as the URL of your Moltin instance, you can do so by passing in MoltinConfig.

let moltin = Moltin(withClientID: ...) // Takes Locale.current
let moltin = Moltin(withClientID: ..., withLocale: ...)
let config = MoltinConfig(
    clientID: ...,
    scheme: ...,
    host: ...,
    version: ...,
    locale: ...)

let moltin = Moltin(withConfiguration: config)

Or:

let config = MoltinConfig.default(
    withClientID: ...,
    withLocale: ...)

let moltin = Moltin(withConfiguration: config)

Available Resources

  • Brands
  • Carts
  • Categories
  • Collections
  • Currencies
  • Files
  • Flows
  • Fields
  • Entries
  • Products

Authentication

Authentication is handled silently for you as part of the SDK. The SDK will cache credentials to ensure that it is not making unnecessary requests.

The iOS SDK only supports Implicit authentication currently.

Filtering

Operations

  • Filter
  • Sort
  • Offset / Limit
  • Include

Filter

moltin.product.filter(operator: .eq, key: "name", value: "ProductName").all {
   ...
}

Sort

moltin.product.sort("order").all {
   ...
}
moltin.product.sort("-order").all {
   ...
}

Offset / Limit

moltin.product.limit(10).offset(20).all {
    ...
}

Include

moltin.product.include([.mainImage, .files]).all {
    ...
}

Combining Operations

moltin.product.sort("-name").include([.mainImage]).limit(20).all {
   ...
}

Flows

If you've implemented a custom field on a resource by using flows, you can cast this to a type of your choice by type-hinting your result, so long as this type conforms to Codable:

moltin.product.all { (result: Result<PaginatedResponse<[MyCustomProduct]>>) in
    switch result {
        case .success(let response):
            print(response.data) // [MyCustomProduct]
        case .failure(_):
            break
    }
}
moltin.product.get(forID: "<your ID>") { (result: Result<MyCustomProduct>) in
    switch result {
    case .success(let response):
        print(response) // MyCustomProduct
    case .failure(_):
        break
    }

We recommend ensuring that your types extend from our base types for safety, then you implement the required init(from decoder: Decoder):

class MyCustomProduct: moltin.Product {
    let author: Author

    enum ProductCodingKeys : String, CodingKey {
        case author
    }

    required init(from decoder: Decoder) throws {
        let container = try decoder.container(keyedBy: ProductCodingKeys.self)
        self.author = try container.decode(Author.self, forKey: .author)
        try super.init(from: decoder)
    }
}

This will allow you to add additional types as you need, but ensures the base type, such as product, is still parsed correctly.

Examples

The Swift SDK is a community-supported software development kit for Elastic Path Commerce Cloud (formerly Moltin). The following examples show you how to use the SDK to make requests to the Commerce Cloud APIs.

For details about the endpoints, objects, and responses, see the Elastic Path Commerce API Reference.

Basics

Includes

Examples of using include with resources. For more information, see Includes.

Include category products

let moltin = Moltin(withClientID: "<your client ID>")
let id = "XXXX"
moltin.category.include([.products]).get(forID: id) { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Include product main_image

let moltin = Moltin(withClientID: "<your client ID>")
let id = "XXXX"
moltin.product.include([.main_image]).all { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Multiple includes

let moltin = Moltin(withClientID: "<your client ID>")
let id = "XXXX"
moltin.product.include([.main_image, .category]).all { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Pagination

Examples of using pagination with resources. For more information, see Pagination.

Get all categories, two per page

let moltin = Moltin(withClientID: "<your client ID>")
moltin.product.limit(2).all {
  // Do something
}

Get products 21-30

let moltin = Moltin(withClientID: "<your client ID>")
moltin.product.limit(10).offset(20).all {
  // Do something
}

Filtering

Examples of using different filter operators. For more information, see Filtering.

The eq operator

let moltin = Moltin(withClientID: "<your client ID>")
moltin.product.filter(operator: .eq, key: "commodity_type", value: "digital").all {
  // Do something
}

The like operator - A string begins with a specified value

let moltin = Moltin(withClientID: "<your client ID>")
moltin.product.filter(operator: .like, key: "sku", value: "SHOE_DECK_*").all {
  // Do something
}

The like operator - A string contains a specified value

let moltin = Moltin(withClientID: "<your client ID>")
moltin.product.filter(operator: .like, key: "sku", value: "*_DECK_*").all {
  // Do something
}

The like operator - A string ends with a specified value

let moltin = Moltin(withClientID: "<your client ID>")
moltin.product.filter(operator: .like, key: "sku", value: "*_RED").all {
  // Do something
}

Chaining multiple operators

Caution: This feature is currently in Beta and you should expect it to change.

let moltin = Moltin(withClientID: "<your client ID>")
moltin.product
  .filter(operator: .eq, key: "commodity_type", value: "physical")
  .sort("created_at")
  .all {
  // Do something
}

Sorting

Examples of using sort with resources. For more information, see Sorting.

Sort products by created_at in ascending order

let moltin = Moltin(withClientID: "<your client ID>")
moltin.product.sort("created_at").all {
  // Do something
}

Sort products by created_at in descending order

let moltin = Moltin(withClientID: "<your client ID>")
moltin.product.sort("-created_at").all {
  // Do something
}

Tokens

Get an implicit access token

An implicit token can be thought of as a Read only token.

let moltin = Moltin(withClientID: "<your client ID>")

Currency

Get a currency

let moltin = Moltin(withClientID: "<your client ID>")
let id = "XXXX"
moltin.currency.get(forID: id) { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Get all currencies

let moltin = Moltin(withClientID: "<your client ID>")
moltin.currency.all { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Products

Get all products

let moltin = Moltin(withClientID: "<your client ID>")
self.moltin.product.include([.mainImage]).all { (result: Result<PaginatedResponse<[moltin.Product]>>) in
   switch result {
       case .success(let response):
            DispatchQueue.main.async {
                self.products = response.data ?? []
            }
        case .failure(let error):
            print("Products error", error)
        }
    }
}

Get all products that belong to a category

let moltin = Moltin(withClientID: "<your client ID>")
moltin.product.filter(operator: .eq, key: "category.id", value: "xxxx").all {
response in
// Do something
}

Get a product

let moltin = Moltin(withClientID: "<your client ID>")
let id = "XXXX"
moltin.product.get(forID: id) { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Brands

Get all brands

let moltin = Moltin(withClientID: "<your client ID>")
moltin.brand.all { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Get a brand

let moltin = Moltin(withClientID: "<your client ID>")
let id = "XXXX"
moltin.brand.get(forID: id) { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Categories

Get all categories

let moltin = Moltin(withClientID: "<your client ID>")
moltin.category.all { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Get a category

let moltin = Moltin(withClientID: "<your client ID>")
let id = "XXXX"
moltin.category.get(forID: id) { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Get the categories tree

let moltin = Moltin(withClientID: "<your client ID>")
moltin.category.tree { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Collections

Get all collections

let moltin = Moltin(withClientID: "<your client ID>")
moltin.collection.all { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Get a collection

let moltin = Moltin(withClientID: "<your client ID>")
let id = "XXXX"
moltin.collection.get(forID: id) { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Carts

Get a cart

let moltin = Moltin(withClientID: "<your client ID>")
self.moltin.cart.get(forID: AppDelegate.cartID, completionHandler: { (result) in
    switch result {
        case .success(let result):
            DispatchQueue.main.async {
                print("Cart:", result)
                }
            case .failure(let error):
                print("Cart error:", error)
            }
    })

Get cart items

let moltin = Moltin(withClientID: "<your client ID>")
let referenceId = 'XXXX'
self.moltin.cart.items(forCartID: referenceId) { (result) in
    switch result {
        case .success(let result):
            DispatchQueue.main.async {
                 print("Cart items:", result.data)
            }
            case .failure(let error):
                print("Cart error:", error)
            }
        }
    }

Add a product to a cart

let moltin = Moltin(withClientID: "<your client ID>")
let referenceId = 'XXXX'
let productId = 'XXXX'
let productQty = 'XXXX'
self.moltin.cart.addProduct(withID: productId , ofQuantity: productQty, toCart: referenceId, completionHandler: { (_) in
})

Add a promotion to a cart

let moltin = Moltin(withClientID: "<your client ID>")
let referenceId = 'XXXX'
self.moltin.cart.addPromotion(code, toCart: referenceId) { (result) in
    switch result {
        case .success(let status):
            DispatchQueue.main.async {
                print("Promotion: (status)")
            }
            default: break
            }
        }
}

Check out a cart

let moltin = Moltin(withClientID: "<your client ID>")
moltin.cart.checkout(
    cart: ...,
    withCustomer: ...,
    withBillingAddress: ...,
    withShippingAddress: ...) { (result) in
    switch result {
        case .success(let order):
            ...
        default: break
    }
}

Delete a cart

let moltin = Moltin(withClientID: "<your client ID>")
let referenceId = 'XXXX'
self.moltin.cart.deleteCart(referenceId, completionHandler: { (result)    in
    switch result {
        case .success(let result):
            print("Cart error:", result)
        case .failure(let error):
            print("Cart error:", error)
        }
})

Customers

Get a customer

let moltin = Moltin(withClientID: "<your client ID>")
let id = "XXXX"
moltin.customer.get(forID: id) { result in
    switch result {
        case .success(let response):
            print(response)
        case .failure(let error):
            print(error)
    }
}

Payments

Create a Stripe payment

let moltin = Moltin(withClientID: "<your client ID>")
let paymentMethod = StripeToken(withStripeToken: ...)
moltin.cart.pay(
    forOrderID: order.id,
    withPaymentMethod: paymentMethod) { (result) in
    ...
}

Create a manually authorize payment

let moltin = Moltin(withClientID: "<your client ID>")
let id = "XXXX"
let paymentMethod = ManuallyAuthorizePayment()
moltin.cart.pay(forOrderID: order.id, withPaymentMethod: paymentMethod) { (result) in
    switch result {
        case .success:
            print("Success")
        case .failure(let error):
            print(error)
    }
}

Further Documentation

Find more general documentation on the API docs.

Communication

  • If you need help with the SDK or the platform, get in touch on the forum
  • If you found a bug with the SDK, open an issue on GitHub
  • If you have a feature request for the SDK, open an issue.
  • If you want to contribute to the SDK, submit a pull request.

License

Moltin is available under the MIT license. See the LICENSE file for more info.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].