Class: MerbMerchant::Billing::PlugnpayGateway

Inherits:
Gateway
  • Object
show all
Defined in:
lib/merb_merchant/billing/gateways/plugnpay.rb

Defined Under Namespace

Classes: PlugnpayPostData

Constant Summary collapse

URL =
'https://pay1.plugnpay.com/payment/pnpremote.cgi'
CARD_CODE_MESSAGES =
{
  "M" => "Card verification number matched",
  "N" => "Card verification number didn't match",
  "P" => "Card verification number was not processed",
  "S" => "Card verification number should be on card but was not indicated",
  "U" => "Issuer was not certified for card verification"
}
CARD_CODE_ERRORS =
%w( N S )
AVS_MESSAGES =
{
  "A" => "Street address matches billing information, zip/postal code does not",
  "B" => "Address information not provided for address verification check",
  "E" => "Address verification service error",
  "G" => "Non-U.S. card-issuing bank",
  "N" => "Neither street address nor zip/postal match billing information",
  "P" => "Address verification not applicable for this transaction",
  "R" => "Payment gateway was unavailable or timed out",
  "S" => "Address verification service not supported by issuer",
  "U" => "Address information is unavailable",
  "W" => "9-digit zip/postal code matches billing information, street address does not",
  "X" => "Street address and 9-digit zip/postal code matches billing information",
  "Y" => "Street address and 5-digit zip/postal code matches billing information",
  "Z" => "5-digit zip/postal code matches billing information, street address does not",
}
AVS_ERRORS =
%w( A E N R W Z )
PAYMENT_GATEWAY_RESPONSES =
{
  "P01" => "AVS Mismatch Failure",
  "P02" => "CVV2 Mismatch Failure",
  "P21" => "Transaction may not be marked",
  "P30" => "Test Tran. Bad Card",
  "P35" => "Test Tran. Problem",
  "P40" => "Username already exists",
  "P41" => "Username is blank",
  "P50" => "Fraud Screen Failure",
  "P51" => "Missing PIN Code",
  "P52" => "Invalid Bank Acct. No.",
  "P53" => "Invalid Bank Routing No.",
  "P54" => "Invalid/Missing Check No.",
  "P55" => "Invalid Credit Card No.",
  "P56" => "Invalid CVV2/CVC2 No.",
  "P57" => "Expired. CC Exp. Date",
  "P58" => "Missing Data",
  "P59" => "Missing Email Address",
  "P60" => "Zip Code does not match Billing State.",
  "P61" => "Invalid Billing Zip Code",
  "P62" => "Zip Code does not match Shipping State.",
  "P63" => "Invalid Shipping Zip Code",
  "P64" => "Invalid Credit Card CVV2/CVC2 Format.",
  "P65" => "Maximum number of attempts has been exceeded.",
  "P66" => "Credit Card number has been flagged and can not be used to access this service.",
  "P67" => "IP Address is on Blocked List.",
  "P68" => "Billing country does not match ipaddress country.",
  "P69" => "US based ipaddresses are currently blocked.",
  "P70" => "Credit Cards issued from this bank are currently not being accepted.",
  "P71" => "Credit Cards issued from this bank are currently not being accepted.",
  "P72" => "Daily volume exceeded.",
  "P73" => "Too many transactions within allotted time.",
  "P91" => "Missing/incorrect password",
  "P92" => "Account not configured for mobil administration",
  "P93" => "IP Not registered to username.",
  "P94" => "Mode not permitted for this account.",
  "P95" => "Currently Blank",
  "P96" => "Currently Blank",
  "P97" => "Processor not responding",
  "P98" => "Missing merchant/publisher name",
  "P99" => "Currently Blank"
}
TRANSACTIONS =
{
  :authorization => 'auth',
  :purchase => 'auth',
  :capture => 'mark',
  :void => 'void',
  :refund => 'return',
  :credit => 'newreturn'
}
SUCCESS_CODES =
[ 'pending', 'success' ]
FAILURE_CODES =
[ 'badcard', 'fraud' ]

Constants inherited from Gateway

Gateway::DEBIT_CARDS

Constants included from PostsData

PostsData::MAX_RETRIES, PostsData::OPEN_TIMEOUT, PostsData::READ_TIMEOUT

Instance Attribute Summary

Attributes inherited from Gateway

#options

Instance Method Summary collapse

Methods inherited from Gateway

#card_brand, card_brand, inherited, supports?, #test?

Methods included from Utils

generate_unique_id

Methods included from CreditCardFormatting

#format

Methods included from RequiresParameters

#requires!

Methods included from PostsData

included, #ssl_get, #ssl_post

Constructor Details

#initialize(options = {}) ⇒ PlugnpayGateway

Returns a new instance of PlugnpayGateway.



102
103
104
105
106
# File 'lib/merb_merchant/billing/gateways/plugnpay.rb', line 102

def initialize(options = {})
  requires!(options, :login, :password)
  @options = options
  super
end

Instance Method Details

#authorize(money, creditcard, options = {}) ⇒ Object



121
122
123
124
125
126
127
128
129
130
131
132
# File 'lib/merb_merchant/billing/gateways/plugnpay.rb', line 121

def authorize(money, creditcard, options = {})
  post = PlugnpayPostData.new
  
  add_amount(post, money, options)
  add_creditcard(post, creditcard)        
  add_addresses(post, options)
  add_invoice_data(post, options)        
  add_customer_data(post, options)
  
  post[:authtype] = 'authonly'
  commit(:authorization, post)
end

#capture(money, authorization, options = {}) ⇒ Object



134
135
136
137
138
139
140
141
142
143
# File 'lib/merb_merchant/billing/gateways/plugnpay.rb', line 134

def capture(money, authorization, options = {})
  post = PlugnpayPostData.new
  
  post[:orderID] = authorization
  
  add_amount(post, money, options)
  add_customer_data(post, options)
   
  commit(:capture, post)
end

#credit(money, identification_or_creditcard, options = {}) ⇒ Object



154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
# File 'lib/merb_merchant/billing/gateways/plugnpay.rb', line 154

def credit(money, identification_or_creditcard, options = {})
  post = PlugnpayPostData.new
  add_amount(post, money, options)
 
  if identification_or_creditcard.is_a?(String)
    post[:orderID] = identification_or_creditcard
    
    commit(:refund, post)
  else
    add_creditcard(post, identification_or_creditcard)        
    add_addresses(post, options)   
    add_customer_data(post, options) 
    
    commit(:credit, post)
  end
end

#purchase(money, creditcard, options = {}) ⇒ Object



108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/merb_merchant/billing/gateways/plugnpay.rb', line 108

def purchase(money, creditcard, options = {})
  post = PlugnpayPostData.new
  
  add_amount(post, money, options)
  add_creditcard(post, creditcard)
  add_addresses(post, options)
  add_invoice_data(post, options)
  add_customer_data(post, options)
   
  post[:authtype] = 'authpostauth'
  commit(:authorization, post)
end

#void(authorization, options = {}) ⇒ Object



145
146
147
148
149
150
151
152
# File 'lib/merb_merchant/billing/gateways/plugnpay.rb', line 145

def void(authorization, options = {})
  post = PlugnpayPostData.new
  
  post[:orderID] = authorization
  post[:txn_type] = 'auth'
  
  commit(:void, post)
end