class UnitPay

Public Class Methods

new(secretKey) click to toggle source
# File lib/unitpay.rb, line 7
def initialize(secretKey)
        @formUrl = 'https://unitpay.ru/pay/'
        @secretKey = secretKey

        @supportedUnitpayMethods = ['initPayment', 'getPayment']
        @requiredUnitpayMethodsParams = {
                'initPayment'        =>     ['desc', 'account', 'sum', 'paymentType', 'projectId'],
                'getPayment' =>      ['paymentId']
        }
        @supportedPartnerMethods = ['check', 'pay', 'error']
        @supportedUnitpayIp = [
                '31.186.100.49',
        '178.132.203.105',
        '52.29.152.23',
        '52.19.56.234',
        '127.0.0.1' # for debug
        ]
        @apiUrl = 'https://unitpay.ru/api'
end

Public Instance Methods

api( method, params = {} ) click to toggle source
# File lib/unitpay.rb, line 55
def api( method, params = {} )

        if !@supportedUnitpayMethods.include?(method)
                raise 'Method is not supported'
        end

        if !@requiredUnitpayMethodsParams[method].nil?
                @requiredUnitpayMethodsParams[method].each do |item|
                        if params[item].nil?
                                raise "param " + item + " is null"
                        end
                end
        end

        params['secretKey'] = @secretKey

        querystring = params.map{|k,v| "params[#{CGI.escape(k)}]=#{CGI.escape(v)}"}.join("&")
        requestUrl = @apiUrl + '?method=' + method + '&' + querystring

        puts(requestUrl)
        data = Net::HTTP.get_response(URI.parse(requestUrl)).body
        json = JSON.parse(data)

        return json

end
checkHandlerRequest(method, params, ip) click to toggle source
# File lib/unitpay.rb, line 82
def checkHandlerRequest(method, params, ip)
        if !@supportedPartnerMethods.include?(method)
                raise 'method is not supported'
        end
        signature = getSignature(params, method)
        if params['signature'] != signature
                raise 'wrong signature'
        end
        if !@supportedUnitpayIp.include?(ip)
                raise 'IP address error'
        end
        return true
end
form(publicKey, sum, account, desc, currency = 'RUB', locale = 'ru') click to toggle source
# File lib/unitpay.rb, line 26
def form(publicKey, sum, account, desc, currency = 'RUB', locale = 'ru')

        params = {
    'account' => account,
    'currency' => currency,
    'desc' => desc,
    'sum' => sum,
}
if  (defined? @secretKey)
        params['signature'] = getSignature(params, "check")
end
params['locale'] = locale

querystring = params.map{|k,v| "#{CGI.escape(k)}=#{CGI.escape(v)}"}.join("&")
return @formUrl + publicKey + '?' + querystring
end
getErrorHandlerResponse( message ) click to toggle source
# File lib/unitpay.rb, line 99
def getErrorHandlerResponse( message )
        return JSON.generate({'error'=>{'message'=>message}})
end
getSignature( params, method = nil ) click to toggle source
# File lib/unitpay.rb, line 42
def getSignature( params, method = nil )
        params.delete('sign')
        params.delete('signature')
        mas = params.sort
        mas.push(["1", @secretKey])
        if (!method.nil?)
                mas.unshift(["method",method])
        end
        params = Hash[mas]
        str = params.map{|k,v| "#{v}"}.join('{up}')
        h = Digest::SHA256.hexdigest str
        return h
end
getSuccessHandlerResponse( message ) click to toggle source
# File lib/unitpay.rb, line 96
def getSuccessHandlerResponse( message )
        return JSON.generate({'result'=>{'message'=>message}})
end