Paypal快速结账在本地工作,但不在轨道生产。返回名为No Token Passed

时间:2016-06-11 01:25:26

标签: ruby-on-rails paypal activemerchant

在rails中使用express checkout和activemerchant gem我创建了一个钱包功能,你可以通过paypal(快速结账)在钱包中添加资金。这适用于本地但不适用于生产。

在我点击paypal结帐按钮后立即生产中,我被重定向到以下网址,没有任何令牌(如您所见)

https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=

此处空白页上的唯​​一内容是"没有令牌传递"

这是heroku中的生产日志 enter image description here

在本地开发中设置了同样的操作:

https://www.sandbox.paypal.com/in/cgi-bin/merchantpaymentweb?cmd=_flow&SESSION=-ubDPzpaPpBkgHFsZshLh8PR4jHMxWQYbCjt5Wlq2Tcj8SAtu0iW3Vysmhq&dispatch=50a222a57771920b6a3d7b606239e4d529b525e0b7e69bf0fb0124e9b61f737ba21b0819848475f0da5465a2ea26eae033cbe3bda

(我从会话中删除了一些字符,因此以上网址不起作用) 可以选择付款。

以下是开发日志的屏幕截图 enter image description here

以下是相关代码:

def express_checkout
    response = EXPRESS_GATEWAY.setup_purchase(BigDecimal.new(params[:amount])*100,
        ip: request.remote_ip,
        return_url: new_payment_url,
        cancel_return_url: wallet_url,
        currency: "USD",
        allow_guest_checkout: true,
        items: [{name: "Add Money", description: "Adds money to wallet ", amount: BigDecimal.new(params[:amount])*100}]
    )
    redirect_to EXPRESS_GATEWAY.redirect_url_for(response.token)
end

以下是与之相关的所有代码。代码分为以下文件名作为标题 - activemerchant.rb,payments_controller.rb,payment.rb和wallet.html.erb

http://pastebin.com/caAGd2ST

你能告诉我为什么这个在开发中工作而不是在生产中以及我应该怎么做呢?

2 个答案:

答案 0 :(得分:1)

我相信您缺少生产环境的yml配置。通常,这些第三方集成需要具有每个环境的配置/设置的yml文件。特别是PayPal,当他们有不同的ID,秘密等等。

根据您的评论,您的环境变量似乎没有为生产环境加载。

答案 1 :(得分:1)

当我遇到这个问题对我有用时,ENV变量我们没有在prod(或)中正确设置我搞砸了设置ENV变量。我试图对这些值进行严格编码,以检查这是否是问题,对我而言是问题。后来删除了硬编码值,我已经正确设置了ENV变量。

然而,将这些细节硬编码是一种非常糟糕的做法,只是为了测试你可以尝试这种方法。