class Payments

Constants

BANK_CODES
HTTP_CREATED
HTTP_OK
PROVIDERS

Public Class Methods

new(username, apikey) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 36
def initialize username, apikey
        @username    = username
        @apikey      = apikey
end

Public Instance Methods

bankCheckoutCharge(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 144
def bankCheckoutCharge options
        validateParamsPresence? options, %w(bankAccount productName currencyCode amount narration metadata)
        parameters = {
                'username'    => @username,
                'productName' => options['productName'],
                'bankAccount'  => options['bankAccount'],
                'currencyCode' => options['currencyCode'],
                'amount' => options['amount'],
                'narration' => options['narration'],
                'metadata' => options['metadata']
        }
        url      = getBankChargeCheckoutUrl()
        response = sendJSONRequest(url, parameters)
        if (@response_code == HTTP_CREATED)
                resultObj = JSON.parse(response, :quirky_mode =>true)
                #
                return InitiateBankCheckoutResponse.new resultObj['status'], resultObj['transactionId'], resultObj['description']
        end
        raise AfricasTalkingException, response
end
bankCheckoutValidate(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 165
def bankCheckoutValidate options
        validateParamsPresence? options, %w(transactionId otp)
        parameters = {
                'username'    => @username,
                'transactionId' => options['transactionId'],
                'otp'  => options['otp']
        }
        #
        url      = getValidateBankCheckoutUrl()
        response = sendJSONRequest(url, parameters)
        if (@response_code == HTTP_CREATED)
                resultObj = JSON.parse(response, :quirky_mode =>true)
                return ValidateBankCheckoutResponse.new resultObj['status'], resultObj['description']
        end
        raise AfricasTalkingException, response
end
bankTransfer(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 182
def bankTransfer options
        validateParamsPresence? options, %w(productName recipients)
        parameters = {
                'username'    => @username,
                'productName' => options['productName'],
                'recipients'  => options['recipients']
        }
        url      = getBankTransferRequestUrl()
        response = sendJSONRequest(url, parameters)           
        if (@response_code == HTTP_CREATED)
                resultObj = JSON.parse(response, :quirky_mode =>true)

                if (resultObj['entries'].length > 0)
                        results = resultObj['entries'].collect{ |item|
                                BankTransferEntries.new item['accountNumber'], item['status'], item['transactionId'], item['transactionFee'], item['errorMessage']
                        }
                        

                        return BankTransferResponse.new results, resultObj['errorMessage']
                end

                raise AfricasTalkingException, resultObj['errorMessage']
        end
        raise AfricasTalkingException, response
        
end
cardCheckoutCharge(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 209
def cardCheckoutCharge options
        validateParamsPresence? options, %w(productName currencyCode amount narration metadata)
        parameters = {
                'username'    => @username,
                'productName' => options['productName'],
                'currencyCode' => options['currencyCode'],
                'amount' => options['amount'],
                'narration' => options['narration'],
                'metadata' => options['metadata']
        }
        if (options['checkoutToken'] == nil && options['paymentCard'] == nil)
                raise AfricasTalkingException, "Please make sure either the checkoutToken or paymentCard parameter is not empty"
        elsif (options['checkoutToken'] != nil && options['paymentCard'] != nil)
                raise AfricasTalkingException, "If you have a checkoutToken please make sure paymentCard parameter is empty"
        end
        if (options['checkoutToken'] != nil)
                parameters['checkoutToken'] = options['checkoutToken']
        end
        if (options['paymentCard'] != nil)
                if validateParamsPresence?(options['paymentCard'], ['number', 'cvvNumber', 'expiryMonth', 'expiryYear', 'countryCode', 'authToken'])
                        parameters['paymentCard'] = options['paymentCard']
                end
        end
        url      = getCardCheckoutChargeUrl()
        response = sendJSONRequest(url, parameters)
        if (@response_code == HTTP_CREATED)
                resultObj = JSON.parse(response, :quirky_mode =>true)
                #
                return InitiateCardCheckoutResponse.new resultObj['status'], resultObj['description'], resultObj['transactionId']
        end
        raise AfricasTalkingException, response

end
cardCheckoutValidate(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 243
def cardCheckoutValidate options
        validateParamsPresence? options, %w(transactionId otp)
        parameters = {
                'username'    => @username,
                'transactionId' => options['transactionId'],
                'otp'  => options['otp']
        }
        url      = getValidateCardCheckoutUrl()
        response = sendJSONRequest(url, parameters)
        if (@response_code == HTTP_CREATED)
                resultObj = JSON.parse(response, :quirky_mode =>true)
                return ValidateCardCheckoutResponse.new resultObj['status'], resultObj['description'], resultObj['checkoutToken']
                #
        end
        raise AfricasTalkingException, response
end
fetchProductTransactions(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 298
def fetchProductTransactions options
        validateParamsPresence? options, %w(productName filters)
        filters = options['filters']
        validateParamsPresence? filters, %w(pageNumber count)
        parameters = {
                'username'    => @username,
                'productName' => options['productName'],
                'pageNumber' => filters['pageNumber'],
                'count' => filters['count']
        }
        parameters['startDate'] = filters['startDate'] if !(filters['startDate'].nil? || filters['startDate'].empty?)
        parameters['endDate'] = filters['endDate'] if !(filters['endDate'].nil? || filters['endDate'].empty?)
        parameters['category'] = filters['category'] if !(filters['category'].nil? || filters['category'].empty?)
        parameters['status'] = filters['status'] if !(filters['status'].nil? || filters['status'].empty?)
        parameters['source'] = filters['source'] if !(filters['source'].nil? || filters['source'].empty?)
       parameters['destination'] = filters['destination'] if !(filters['destination'].nil? || filters['destination'].empty?)
        parameters['providerChannel'] = filters['providerChannel'] if !(filters['providerChannel'].nil? || filters['providerChannel'].empty?)
        url      = getFetchTransactionsUrl() 
        response = sendJSONRequest(url, parameters, true)
        if (@response_code == HTTP_OK)
                resultObj = JSON.parse(response, :quirky_mode =>true)
                results = []
                if (resultObj['responses'].length > 0)
                        results = resultObj['responses'].collect{ |item|
                                FetchTransactionsEntries.new item['sourceType'], item['source'], item['provider'], item['destinationType'], item['description'], item['providerChannel'], item['providerMetadata'],
                                item['status'], item['productName'], item['category'], item['destination'], item['value'], item['transactionId'], item['creationTime'], item['requestMetadata']  
                        }
                end
                return FetchTransactionsResponse.new resultObj['status'], resultObj['description'], results
        end
        raise AfricasTalkingException, response
end
fetchWalletBalance() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 384
def fetchWalletBalance
        parameters = { 'username' => @username }
        url        = getFetchWalletBalanceUrl()
        response = sendJSONRequest(url, parameters, true)
        if (@response_code == HTTP_OK)
                resultObj = JSON.parse(response, :quirky_mode =>true)
                
                return FetchWalletBalanceResponse.new resultObj['status'], resultObj['balance']
        end
        raise AfricasTalkingException, response
end
fetchWalletTransactions(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 331
def fetchWalletTransactions options
        validateParamsPresence? options, ['filters']
        filters = options['filters']
        validateParamsPresence? filters, %w(pageNumber count)
        parameters = {
                'username'    => @username,
                'pageNumber' => filters['pageNumber'],
                'count' => filters['count']
        }
        parameters['startDate'] = filters['startDate'] if !(filters['startDate'].nil? || filters['startDate'].empty?)
        parameters['endDate'] = filters['endDate'] if !(filters['endDate'].nil? || filters['endDate'].empty?)
        parameters['categories'] = filters['categories'] if !(filters['categories'].nil? || filters['categories'].empty?)
        url      = getFetchWalletUrl() 
        response = sendJSONRequest(url, parameters, true)
        if (@response_code == HTTP_OK)
                resultObj = JSON.parse(response, :quirky_mode =>true)
                results = []
                if (resultObj['responses'].length > 0)
                        results = resultObj['responses'].collect{ |item|
                                transactionData = TransactionData.new item['transactionData']['requestMetadata'], item['transactionData']['sourceType'],
                                item['transactionData']['source'], item['transactionData']['provider'], item['transactionData']['destinationType'],item['transactionData']['description'],
                                item['transactionData']['providerChannel'], item['transactionData']['providerRefId'], item['transactionData']['providerMetadata'],item['transactionData']['status'],
                                item['transactionData']['productName'], item['transactionData']['category'], item['transactionData']['transactionDate'], item['transactionData']['destination'],
                                item['transactionData']['value'], item['transactionData']['transactionId'], item['transactionData']['creationTime']
                                FetchWalletEntries.new item['description'], item['balance'], item['date'], item['category'], item['value'], item['transactionId'], transactionData 
                        }
                end
                return FetchWalletResponse.new resultObj['status'], resultObj['description'], results
        end
        raise AfricasTalkingException, response
end
findTransaction(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 363
def findTransaction options
        validateParamsPresence? options, ['transactionId']
        parameters = {
                'username'    => @username,
                'transactionId' => options['transactionId']
        }
        url      = getFindTransactionUrl() 
        response = sendJSONRequest(url, parameters, true)
        if (@response_code == HTTP_OK)
                resultObj = JSON.parse(response, :quirky_mode =>true)
                transactionData = nil
                if resultObj['status'] === 'Success'
                        transactionData = TransactionData.new resultObj['data']['requestMetadata'], resultObj['data']['sourceType'],resultObj['data']['source'], resultObj['data']['provider'], resultObj['data']['destinationType'],resultObj['data']['description'],
                                resultObj['data']['providerChannel'], resultObj['data']['providerRefId'], resultObj['data']['providerMetadata'],resultObj['data']['status'], resultObj['data']['productName'], resultObj['data']['category'], 
                                resultObj['data']['transactionDate'], resultObj['data']['destination'], resultObj['data']['value'], resultObj['data']['transactionId'], resultObj['data']['creationTime']
                end
                return FindTransactionResponse.new resultObj['status'], transactionData
        end
        raise AfricasTalkingException, response
end
mobileB2B(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 65
def mobileB2B options
        validateParamsPresence? options, %w(productName providerData currencyCode amount metadata)
        validateParamsPresence? options['providerData'], %w(provider destinationAccount destinationChannel transferType)
        parameters = {
                'username'           => @username,
                'productName'        => options['productName'],
                'provider'           => options['providerData']['provider'],
                'destinationChannel' => options['providerData']['destinationChannel'],
                'destinationAccount' => options['providerData']['destinationAccount'],
                'transferType'       => options['providerData']['transferType'],
                'currencyCode'       => options['currencyCode'],
                'amount'             => options['amount'],
                'metadata'           => options['metadata']
        }
        url = getMobilePaymentB2BUrl()
if options.key?('requester')
          parameters['requester'] = options['requester']
end
        response = sendJSONRequest(url, parameters)
        if (@response_code == HTTP_CREATED)
                resultObj = JSON.parse(response, :quirky_mode =>true)
                #
                return MobileB2BResponse.new resultObj['status'], resultObj['transactionId'], resultObj['transactionFee'], resultObj['providerChannel'], resultObj['errorMessage']
        end
        raise AfricasTalkingException, response
end
mobileB2C(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 93
def mobileB2C options
        validateParamsPresence? options, %w(recipients productName)
        parameters = {
                'username'    => @username,
                'productName' => options['productName'],
                'recipients'  => options['recipients']
        }
        url      = getMobilePaymentB2CUrl()
        response = sendJSONRequest(url, parameters)
        if (@response_code == HTTP_CREATED)
                resultObj = JSON.parse(response, :quirky_mode =>true)
                if (resultObj['entries'].length > 0)
                        results = resultObj['entries'].collect{ |subscriber|
                                MobileB2CResponse.new subscriber['provider'], subscriber['phoneNumber'], subscriber['providerChannel'], subscriber['transactionFee'], subscriber['status'], subscriber['value'], subscriber['transactionId'], subscriber['errorMessage']
                        }
                        #
                        return results
                end

                raise AfricasTalkingException, resultObj['errorMessage']
        end
        raise AfricasTalkingException, response
end
mobileCheckout(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 41
def mobileCheckout options
        validateParamsPresence? options, %w(productName phoneNumber currencyCode amount)
        parameters = {
                'username'     => @username,
                'productName'  => options['productName'],
                'phoneNumber'  => options['phoneNumber'],
                'currencyCode' => options['currencyCode'],
                'amount'       => options['amount']
        }
        parameters['providerChannel'] = options['providerChannel'] if !(options['providerChannel'].nil? || options['providerChannel'].empty?)
        parameters['metadata'] = options['metadata'] if !(options['metadata'].nil? || options['metadata'].empty?)
        url      = getMobilePaymentCheckoutUrl()
        response = sendJSONRequest(url, parameters)
        if @response_code == HTTP_CREATED
                resultObj = JSON.parse(response, :quirky_mode =>true)
                #
                if (resultObj['status'] == 'PendingConfirmation')
                        return MobileCheckoutResponse.new resultObj['status'], resultObj['description'], resultObj['transactionId'], resultObj['providerChannel']
                end
                raise AfricasTalkingException, resultObj['description']
        end
        raise AfricasTalkingException, response
end
mobileData(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 117
def mobileData options
            validateParamsPresence? options, %w(productName)
            recipients = options['recipients'].each{|item| 
                    validateParamsPresence? item, %w(phoneNumber quantity unit validity metadata)
            }
            parameters = {
                    'username'    => @username,
                    'productName' => options['productName'],
                    'recipients' => recipients,
            }
            url      = getMobileDataUrl()
            response = sendJSONRequest(url, parameters)
            if (@response_code == HTTP_CREATED)
                    resultObj = JSON.parse(response, :quirky_mode =>true)
                    if (resultObj['entries'].length > 0)
                            results = resultObj['entries'].collect{ |data|
                                    MobileDataResponse.new data['phoneNumber'], data['provider'], data['status'], data['transactionId'], data['value'], data['errorMessage']
                            }
                            #
                            return results
                    end

                    raise AfricasTalkingException, resultObj['errorMessage']
            end
            raise AfricasTalkingException, response
end
topupStash(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 280
def topupStash options
        validateParamsPresence? options, %w(productName currencyCode amount metadata)
        parameters = {
                'username'    => @username,
                'productName' => options['productName'],
                'currencyCode' => options['currencyCode'],
                'amount' => options['amount'],
                'metadata' => options['metadata'] 
        }
        url      = getTopupStashUrl() 
        response = sendJSONRequest(url, parameters)
        if (@response_code == HTTP_CREATED)
                resultObj = JSON.parse(response, :quirky_mode =>true)
                return TopupStashResponse.new resultObj['status'], resultObj['description'], resultObj['transactionId']
        end
        raise AfricasTalkingException, response
end
walletTransfer(options) click to toggle source
# File lib/AfricasTalking/Payments.rb, line 260
def walletTransfer options
        validateParamsPresence? options, %w(productName targetProductCode currencyCode amount metadata)
        parameters = {
                'username'    => @username,
                'productName' => options['productName'],
                'targetProductCode' => options['targetProductCode'],
                'currencyCode' => options['currencyCode'],
                'amount' => options['amount'],
                'metadata' => options['metadata'] 
        }
        url      = getWalletTransferUrl()
        response = sendJSONRequest(url, parameters)
        if (@response_code == HTTP_CREATED)
                resultObj = JSON.parse(response, :quirky_mode =>true)
                #
                return WalletTransferResponse.new resultObj['status'], resultObj['description'], resultObj['transactionId']
        end
        raise AfricasTalkingException, response
end

Private Instance Methods

getApiHost() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 466
def getApiHost()
        if(@username == "sandbox")
                return "https://api.sandbox.africastalking.com"
        else
                return "https://api.africastalking.com"
        end
end
getBankChargeCheckoutUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 422
def getBankChargeCheckoutUrl()
        return getPaymentHost() + "/bank/checkout/charge"
end
getBankTransferRequestUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 430
def getBankTransferRequestUrl()
        return getPaymentHost() + "/bank/transfer"
end
getCardCheckoutChargeUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 434
def getCardCheckoutChargeUrl()
        return getPaymentHost() + "/card/checkout/charge"
end
getFetchTransactionsUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 458
def getFetchTransactionsUrl()
        return getPaymentHost() + "/query/transaction/fetch"
end
getFetchWalletBalanceUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 454
def getFetchWalletBalanceUrl()
        return getPaymentHost() + "/query/wallet/balance"
end
getFetchWalletUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 450
def getFetchWalletUrl()
        return getPaymentHost() + "/query/wallet/fetch"
end
getFindTransactionUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 462
def getFindTransactionUrl()
        return getPaymentHost() + "/query/transaction/find"
end
getMobileDataUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 414
def getMobileDataUrl()
          return getPaymentHost() + "/mobile/data/request"
end
getMobilePaymentB2BUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 418
def getMobilePaymentB2BUrl()
        return getPaymentHost() + "/mobile/b2b/request"
end
getMobilePaymentB2CUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 410
def getMobilePaymentB2CUrl()
        return getPaymentHost() + "/mobile/b2c/request"
end
getMobilePaymentCheckoutUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 406
def getMobilePaymentCheckoutUrl()
        return getPaymentHost() + "/mobile/checkout/request"
end
getPaymentHost() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 398
def getPaymentHost()
        if(@username == "sandbox")
                return "https://payments.sandbox.africastalking.com"
        else
                return "https://payments.africastalking.com"
        end
end
getTopupStashUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 446
def getTopupStashUrl()
        return getPaymentHost() + "/topup/stash"
end
getValidateBankCheckoutUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 426
def getValidateBankCheckoutUrl()
        return getPaymentHost() + "/bank/checkout/validate"
end
getValidateCardCheckoutUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 438
def getValidateCardCheckoutUrl()
        return getPaymentHost() + "/card/checkout/validate"
end
getWalletTransferUrl() click to toggle source
# File lib/AfricasTalking/Payments.rb, line 442
def getWalletTransferUrl()
        return getPaymentHost() + "/transfer/wallet"
end