node-payments
Version:
node-payments is a express based facade to multiple payment services.
330 lines (270 loc) • 7.42 kB
text/coffeescript
_ = require( "lodash" )
uuid = require( "uuid" )
config = require( "../../lib/config" )
module.exports = class BasePayment extends require( "../../lib/basic" )
type: "_base"
constructor: ( , data, options )->
super( options )
= {}
= config.get( "defaultcurrency" )
if data?.id?.length
else
return
set: ( _k, _v, _trigger = true )=>
_noSetKeys = [ "id" ]
if _.isObject( _k )
for _ok, _ov of _k
"changed",
else if _v? and _k not in _noSetKeys and not _.isFunction( _v )
[ _k ] = _v
"changed:#{ _k }", _v
if _trigger
"changed",
return @
get: ( _k )=>
return [ _k ]
valueOf: =>
toString: ( format = false )=>
if format
return JSON.stringify( , true, 4 )
else
return JSON.stringify( )
persist: ( cb )=>
.main.getStore ( err, store )=>
if err
cb( err )
return
store.set @, ( err )=>
if err
cb( err )
return
"PAYMENT Saved",
cb( null )
return
return
return
exec: ( cb )=>
if not
return
# init the authentication
( err, auth )=>
if err
cb( err )
return
# execute the payment
auth, ( err, id, link, transaction )=>
if err
cb( err )
return
if transaction?
cb( null, link )
return
return
return
_executePayment: ( token, cb )=>
if not
return
= "ACCEPTED"
# init the authentication
( err, auth )=>
if err
cb( err )
return
# execute the payment
token, auth, ( err, state )=>
if err
cb( err )
return
cb( null )
return
return
return
cancel: ( cb )=>
( err )=>
if err
cb( err )
return
cb( null, @ )
return
return
setAuthentication: ( cb )=>
return
requestProvider: ( auth, cb )=>
return
executeProvider: ( auth, cb )=>
return
getUrls: =>
redirprefix = config.get( "redirprefix" )
if redirprefix?.length
_pre = redirprefix.replace( /\/$/g, "" )
else
_secure = config.get( "serverSecure" )
_port = .main.redir.port
_host = .main.redir.host or "localhost"
_pre = if _secure then "https://" else "http://"
_pre += _host
if _port isnt 80
_pre += ":" + _port
return .main.getUrls( , _pre )
# (G/S)ETTER for `data`
_getData: =>
return
# (G/S)ETTER for `amount`
_getAmount: =>
return or 0
_setAmount: ( val )=>
return
# (G/S)ETTER for `currency`
_getCurrency: =>
return or config.get( "defaultcurrency" )
_setCurrency: ( val )=>
if not [ val ]?
return
return
# (G/S)ETTER for `desc`
_getDesc: =>
return or ""
_setDesc: ( val )=>
if not _.isString( val )
return
return
# (G/S)ETTER for `state`
_getState: =>
return or "NEW"
_setState: ( val )=>
_states = [ "NEW", "CREATED", "ACCEPTED", "CREATED", "APPROVED", "IN_PROGRESS", "COMPLETED", "CANCELD", "REFUNDED", "UNKONWN" ]
if val in _states and _states.indexOf( ) <= _states.indexOf( val )
return
else
"tried to set a invalid state: `#{val}`"
return
# (G/S)ETTER for `rawProviderState`
_getProviderState: =>
return or null
_setProviderState: ( val )=>
if val?.length
return
# (G/S)ETTER for `pay_id`
_getPayID: =>
return or null
_setPayID: ( val )=>
if val?.length
return
# (G/S)ETTER for `payer_id`
_getPayerID: =>
return or null
_setPayerID: ( val )=>
if val?.length
return
# (G/S)ETTER for `verified`
_getVerified: =>
return or false
_setVerified: ( val )=>
if val?
return
# (G/S)ETTER for `verified`
_getVerified: =>
return or false
_setVerified: ( val )=>
if val?
return
# (G/S)ETTER for `articlenumber`
_getArticleNumber: =>
return
_setArticleNumber: ( val )=>
if val?
return
# (G/S)ETTER for `quantity`
_getQuantity: =>
return
_setQuantity: ( val )=>
if val?
return
# (G/S)ETTER for `transaction`
_getTransaction: =>
return
_setTransaction: ( val )=>
if val?
return
validate: ( cb )=>
# check and fix the amount value
_atype = [ ]
_amount =
if _atype is "int"
= parseInt( , 10 )
else
= parseFloat( , 10 )
if isNaN( )
return false
else if <= 0
return false
if .length <= 0
return false
return true
ERRORS: =>
super,
"ENOTIMPLEMENTED": "The method `<%= method %>` has to be defined per provider."
"ECURRENCYREFUSE": "The currency `<%= currency %>` is not supported. Please use one of `<%= avail %>`"
"EDESCRIPTIONEMPTY": "The description is empty."
"EDESCRIPTIONINVALID": "The description has to be type of string."
"EAMOUNTEMPTY": "You tried to pay nothing. Please set the ammount`."
"EAMOUNTINVALID": "The amount has to be a of type <%= type %>"