ActionController :: TestCase模拟PayPal购买

时间:2013-02-27 13:38:31

标签: ruby-on-rails-3 unit-testing paypal functional-testing activemerchant

有没有办法模拟购买PaypalExpressGateway

我使用了两个操作进行PayPal付款处理, 第一个操作将用户带到paypal沙箱登录,并将重定向回我的应用程序以进行付款确认

但是PAYPAL_GATEWAY.purchase方法没有成功,并返回错误消息Payment has not been authorized by the user.

嗯,我想这是由于用户授权购买的跳过步骤

有没有办法伪造或模仿PayPal接受交易?

我的ActionController::TestCase测试操作products#initiate_payment products#confirm_payment将这些操作称为

post :initiate_payment, initiate_payment_action_params(@product)
get :confirm_payment, confirm_action_params(@product, product_purchased, paypal_token)

设置paypal回调响应,然后重定向到paypal登录

@setup_response = PAYPAL_GATEWAY.setup_purchase(amount, ip: request.remote_ip,
      items: [{name: @product.name, quantity: 1, description: @product.description, amount: amount}],
      currency: 'USD',
      return_url: url_for(action: 'confirm_payment',
                                 product_purchased: @product_purchased.id,                                   
                                 only_path: false),    
      cancel_return_url: url_for(action: 'index',
                                 product_purchased: @product_purchased.id,
                                 only_path: false))

redirect_to PAYPAL_GATEWAY.redirect_url_for(@setup_response.token)

我已在products#confirm_payment行动中处理了购买交易 我已经将confirm_payment的params嘲笑为

{"product_purchased"=>"10", "token"=>"EC-91J25480XA799581U", "PayerID"=>"4QBC9Y658K6MA", "id"=>"55", "controller"=>"products", "action"=>"confirm_payment"}

get :confirm_payment, confirm_action_params(@product, product_purchased, paypal_token)

PAYPAL_GATEWAY的配置

PAYPAL_GATEWAY ||= ActiveMerchant::Billing::PaypalExpressGateway.new(paypal_options)

我没有找到任何方法来实现这一点,所以这可能会帮助他们中的许多人......

除此之外的任何更好的解决方案将非常受欢迎

提前致谢

1 个答案:

答案 0 :(得分:1)

简短的回答是你必须走过去进行测试购买。此外,这将允许您完成买家从头到尾的体验。您是否有特殊原因试图跳过一两步?

有些商家也会通过流程一次,并捕获发回的信息,然后只使用相同的字符串创建一个表单页面,他们只是用来将信息发布回他们的页面进行测试。这样他们就不必一遍又一遍地通过流程,但根据您的设置,这可能会也可能不会起作用。

最常见的是选项A并从头到尾完成流程。