Skip to content

Customers API

Adnan edited this page Feb 2, 2023 · 1 revision

Monri iOS SDK - Customers API

Our customers API allows you to securely save customer data and payment methods. In order to associate customer's payment method for future payments you have to provide customer UUID in the transaction params, details below.

Your backend

In order to operate with our Customer API you have to obtain access token and forward to your mobile app.

Here is example how to create access token with your backend:

POST request on endpoint https://ipgtest.monri.com/v2/oauth Body:

{
  "client_id": "Authenticity token",
  "client_secret": "Merchant key",
  "scopes": ["customers", "payment-methods"],
  "grant_type": "client_credentials"
}

Response example:

{
  "access_token": "*********************",
  "token_type": "Bearer",
  "expires_in": 900,
  "status": "approved"
}

ViewController setup

Create MonriApi instance:

 let authenticityToken = "available on merchant's dashboard";
 lazy var monri: MonriApi = {
        [unowned self] in
        return MonriApi(self.navigationController!, options: MonriApiOptions(authenticityToken: authenticityToken, developmentMode: true));
    }()

Create a customer

In order to create a Customer you’ve to provide:

  • access token
  • CustomerData
//...
let accessToken = "Bearer *********************" //token from backend

let customerRequestBody = CustomerData(
                merchantCustomerUuid: "merchantUuid, optional if you want to use your own UUID",
                description: "description",
                email: "[email protected]",
                name: "Adnan",
                phone: "00387000111",
                metadata: ["a": "b", "c": "d"],
                zipCode: "71000",
                city: "Sarajevo",
                address: "Džemala Bijedića 2",
                country: "BA"
        )

let createCustomerParams = CreateCustomerParams(accessToken: accessToken, customerData: customerRequestBody)
            self.monri.customers().create(createCustomerParams) { (result: CustomerResult) in
                switch (result) {
                case .result(let customer):
                    //...
                case .error(let customerError):
                    //...
                }

            }
//...

Update a customer

In order to update a Customer you’ve to provide:

  • access token
  • UpdateCustomerParams
//...
let customerRequestBody = CustomerData(
                description: "new description",
                email: "[email protected]",
                name: "Adnan Update",
                phone: "00387000111"
        )
        
let customerUpdateRequest = UpdateCustomerParams(
                        customerData: customerRequestBody,
                        customerUuid: "customer uuid",
                        accessToken: "accessToken"
                )

self.monri.customers().update(customerUpdateRequest) { (result: CustomerResult) in
    switch (result) {
    case .result(let customerUpdateResponse):
        //...
    case .error(let customerUpdateError):
        //...
    }

}
//...

Delete a customer

In order to delete a Customer you’ve to provide:

  • access token
  • DeleteCustomerParams
//...
let customerDeleteRequest = DeleteCustomerParams(
                        customerUuid: "customer uuid",
                        accessToken: "accessToken"
                )
                
self.monri.customers().delete(customerDeleteRequest) { result in
    switch (result) {
    case .result(let customerDeleteResponse):
        //...
    case .error(let message):
        //...
    }
}
//...

Retrieve a customer

In order to retrieve a Customer you’ve to provide:

  • access token
  • RetrieveCustomerParams
//...
let customerRetrieveRequest = RetrieveCustomerParams(
                        customerUuid: "customer uuid",
                        accessToken: "accessToken"
                )

self.monri.customers().get(customerRetrieveRequest) { result in
    switch (result) {
    case .result(let customerResponse):
        //...
    case .error(let message):
        //...
    }
}
//...

Retrieve a customer via Merchant Uuid

In order to retrieve a Customer via Merchant UUID you’ve to provide:

  • access token
  • RetrieveCustomerViaMerchantCustomerUuidParams
//...
let customerRetrieveMerchantIdRequest = RetrieveCustomerViaMerchantCustomerUuidParams(
                        accessToken: "accessToken",
                        merchantCustomerUuid: "merchantCustomerUuid"
                )

self.monri.customers().getViaMerchantCustomerUuid(customerRetrieveMerchantIdRequest) { result in
    switch (result) {
    case .result(let customerResponse):
        //...
    case .error(let message):
        //...
    }
}
//...

Retrieve all customers

In order to get all customers you’ve to provide:

  • access token
//...
self.monri.customers().all("accessToken") { result in
    switch (result) {
    case .result(let customerAllResponse):
        //...
    case .error(let message):
        //...
    }
}
//...

Retrieve customer payment methods

In order to retrieve all customer payment methods you’ve to provide:

  • access token
  • CustomerPaymentMethodParams
//...
let request = CustomerPaymentMethodParams(
                   customerUuid: "customer UUID",
                   limit: 20,
                   offset: 0,
                   accessToken: "accessToken"
                )

self.monri.customers().paymentMethods(request) { result in
    switch (result) {
    case .result(let paymentMethodResponse):
        //...
    case .error(let message):
        //....
    }
}
//...

Confirm payment with customer UUID - save card for future payments

In order to associate customer's payment method for future payments, beside customer's data which is optional, you have to provide also:

let card = Card(number: "4111 1111 1111 1111", cvc: "123", expMonth: 10, expYear: 2031, tokenizePan: true).toPaymentMethodParams()

let customerParams = CustomerParams(
              customerUuid: "created customer uuid",
              email: "customer email",
              fullName: "customer name",
              address: "customer address",
              city: "customer city",
              zip: "customer zipCode",
              phone: "customer phone",
              country: "customer country"
      )

let confirmPaymentParams = ConfirmPaymentParams(paymentId: "clientSecret",
                    paymentMethod: card,
                    transaction: TransactionParams.create()
                            .set(customerParams: customerParams)
                            .set("order_info", "iOS SDK payment session")
            )


self.monri.confirmPayment(confirmPaymentParams) { result in
                switch (result) {
                case .result(let r):
                    //...
                case .error(let e):
                    //...
                case .declined(let d):
                    //...
                case .pending:
                    //...
                }
            }
);