eballance / gopay_api

Ruby gem enabling communication with GoPay (Czech payment integrator)
7 stars 8 forks source link

Tutorial #2

Open ghost opened 12 years ago

ghost commented 12 years ago

Dobry den, bylo by mozne pripravit nejaky kratsi tutorial? Pokusil jsem se to rozjet na GoPay-API-Example. To se mi podarilo po par upravach rozjet, nicmene jsem se zasekl na: undefined method `payment_session_id' for false:FalseClass ( http://cl.ly/2L1O3H1r3D0n1x3b2z2l ) Predpokladam ze je to zpusobeno tim, ze data nejsou odesilany na testovaci branu, proto mi to nevraci payment_session_id, mozna take ne. Diky za odpoved

papricek commented 12 years ago

Zdravím,

podrobněji se na to podívám někdy v týdnu, nicméně tuším, že problém není v neodeslání dat - problém je v tom, že platba nebyla správně ověřena.

Také se asi tedy podívám na GoPay-API-Example, nedávno jsem jej sám využíval jako šablonu a je možné, že jsem něco v šabloně neopravil a v ostré aplikaci ano.

ghost commented 12 years ago

Diky, ona bude nejpravdepodobneji chyba u me, nejak se do toho nemohu dostat.

papricek commented 12 years ago

Zkuste tohle, to je aktuální verze funkčního modelu Order

class Order < ActiveRecord::Base

  validates :client_name, :presence => true
  validates :email,
            :presence => true,
            :format => {:with => /^[-a-z0-9_+\.]+\@([-a-z0-9]+\.)+[a-z0-9]{2,4}$/i}

  include AASM

  aasm_column :state
  aasm_initial_state :new
  aasm_state :new
  aasm_state :waiting
  aasm_state :payment_done
  aasm_state :timeouted
  aasm_state :canceled

  aasm_event :submit do
    transitions :to => :waiting, :from => [:new]
  end

  aasm_event :cancel do
    transitions :to => :canceled, :from => [:waiting]
  end

  aasm_event :timeout do
    transitions :to => :timeouted, :from => [:waiting]
  end

  aasm_event :pay do
    transitions :to => :payment_done, :from => [:waiting]
  end

  def name
    "Pernamentka pro 6 vstupů"
  end

  def price
    490000
  end

  def save_on_gopay
    vs = "gopay_#{'test_' if configatron.environment != :production }#{GoPay.configuration.goid}"
    payment = GoPay::EshopPayment.new({:variable_symbol => vs,
                                       :total_price_in_cents => price.to_i,
                                       :product_name => name,
                                       :payment_channels => payment_method_code.present? ? [payment_method_code] : GoPay::PaymentMethod.all.map(&:code)}).create
    self.payment_session_id = payment.payment_session_id
    save!
  end

  def payment
    vs = "gopay_#{'test_' if configatron.environment != :production }#{GoPay.configuration.goid}"
    GoPay::EshopPayment.new(:variable_symbol => vs,
                            :total_price_in_cents => price.to_i,
                            :product_name => name,
                            :payment_session_id => payment_session_id,
                            :payment_channels => []).actual
  end

  def payment_attrs
    response = payment.last_response
    ppayment_chanel = response[:payment_channel].is_a?(Hash) ? "" : payment.last_response[:payment_channel]
    {:payment_channel => ppayment_chanel,
     :session_state => response[:session_state]}
  end

  def gopay_url
    GoPay::Payment.new(:payment_session_id => payment_session_id,
                       :payment_channel => "eu_mb_a").gopay_url
  end

end
ghost commented 12 years ago

Porad stejne (musel jsem smazat validaci a 'configatron'). Config mam nastaveny do :test, tudiz by mela byt pouzivana testovaci brana a objednavky to vytvori ( http://cl.ly/2L3L1k2u0M191u1E382m ) Nejsou GoPay udaje vazany na domenu? Pouzivam udaje k eshopu, ktery nepouzivam (testovaci brana funguje, provozni ne)

papricek commented 12 years ago

Nene, nejsou. Máte aktuální verzi gemu? Tuším, že jedna z posledních oprav se týkala právě toho, že jel pouze v testovacím provozu...

ghost commented 12 years ago

Mel jsem 0.0.5 z defactory.net, pak jsem tam dal 0.0.6 z github. Ted jsem se dostal k tomuto:

undefined method attribute' for nil:NilClass app/controllers/orders_controller.rb:6:inindex'

orders_controller.rb:6 @payment_methods = GoPay::PaymentMethod.all

Zkusim si s tim jeste pohrat, treba na neco prijdu

papricek commented 12 years ago

0.0.6 je určitě lepší, ta už je na ostrém provozu.

Tohle by zrovna mělo fungovat jako první - podle mě pořád nemáte gem správně nakonfigurovaný. Příklad toho, co vložit do config/initializers/gopay.rb:

GoPay.configure do |config|
  config.environment = :test #důležité, pokud jste skutečně v testovacím módu GoPay
  config.goid = "xxxxx"
  config.secret = "yyyy"
  config.success_url = "http://test.example.com/orders/success"
  config.failed_url = "http://test.example.com/orders/failed"
end
ghost commented 12 years ago

Ano, presne takto to mam. Environment v test a zbytek jsem zkousel jak rovnou, tak pres yml

papricek commented 12 years ago

Skoro mi z toho vychází, že máte problém někde v instalaci závislostí. Mně následující skript (umístěný pro bezproblémový bundle install přímo do rootu GoPay-API gemu) bezproblémově vyhodí seznam platebních metod.


require 'rubygems'
require 'bundler/setup'
require 'gopay'

GoPay.configure do |config|
    config.environment = :test
    config.goid = "xxxxxxxx"
    config.secret = "yyyyyyy"
    config.success_url = "http://example.com/success"
    config.failed_url = "http://example.com/failed"
end

puts GoPay::PaymentMethod.all.inspect
ghost commented 12 years ago

Maly uspech, je potreba mit wasabi ve verzi 2.0.0, s vyssi verzi to nejde a vyhazuje to error :"undefined method attribute' for nil:NilClass"

Nyni uz mi to seznam platebnich metod vypise, ale vratil jsem se k prvnimu problemu: "undefined method `payment_session_id' for false:FalseClass"

Jake pouzivate verze vsech gems vazanych ke gopay?

papricek commented 12 years ago

Toto je můj Gemfile.lock:

PATH
  remote: .
  specs:
    gopay (0.0.6)
      savon

GEM
  remote: http://rubygems.org/
  specs:
    akami (1.0.0)
      gyoku (>= 0.4.0)
    builder (3.0.0)
    gyoku (0.4.4)
      builder (>= 2.1.2)
    httpi (0.9.7)
      rack
    metaclass (0.0.1)
    mocha (0.11.4)
      metaclass (~> 0.0.1)
    nokogiri (1.5.2)
    nori (1.1.0)
    rack (1.4.1)
    savon (0.9.9)
      akami (~> 1.0)
      builder (>= 2.1.2)
      gyoku (>= 0.4.0)
      httpi (~> 0.9)
      nokogiri (>= 1.4.0)
      nori (~> 1.1)
      wasabi (~> 2.1)
    shoulda (3.0.1)
      shoulda-context (~> 1.0.0)
      shoulda-matchers (~> 1.0.0)
    shoulda-context (1.0.0)
    shoulda-matchers (1.0.0)
    wasabi (2.1.0)
      nokogiri (>= 1.4.0)

PLATFORMS
  ruby

DEPENDENCIES
  gopay!
  mocha
  shoulda
ghost commented 12 years ago

Porad stejne...

Started POST "/orders" for 127.0.0.1 at 2012-06-15 19:25:12 +0200
Processing by OrdersController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"SUSs32LUQeofenGuMWP9GHnmGx4xdTQiNGpGm4Qxj8s=", "order"=>{"name"=>"", "payment_method_code"=>"", "price"=>""}, "commit"=>"Vytvořit platbu na GoPay bráně"}
   (0.1ms)  begin transaction
  SQL (1.1ms)  INSERT INTO "orders" ("created_at", "delivery_data", "name", "payed", "payment_data", "payment_method_code", "payment_session_id", "price", "state", "updated_at") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)  [["created_at", Fri, 15 Jun 2012 17:25:13 UTC +00:00], ["delivery_data", nil], ["name", ""], ["payed", false], ["payment_data", nil], ["payment_method_code", ""], ["payment_session_id", nil], ["price", nil], ["state", "new"], ["updated_at", Fri, 15 Jun 2012 17:25:13 UTC +00:00]]
   (1.7ms)  commit transaction
Completed 500 Internal Server Error in 1657ms

NoMethodError (undefined method `payment_session_id' for false:FalseClass):
  app/models/order.rb:49:in `save_on_gopay'
  app/controllers/orders_controller.rb:12:in `create'

Nevraci mi to payment_session_id. Kdyz upravim EshopPayment aby vracel pouze response[:payment_session_id], tak mi to vrati u kazde objednavky: "f"

papricek commented 11 years ago

Ještě to řešíte? Asi budu mít brzo hotový upgrade na novou verzí paygate...

ghost commented 11 years ago

Zatím nijak, není to nutné. Až budete mít hotový upgrade, určitě to rád zkusím znovu.