Ruby on rails Paypal express签出在本地工作,但不在rails中进行生产。返回一个名为“未传递令牌”的错误

Ruby on rails Paypal express签出在本地工作,但不在rails中进行生产。返回一个名为“未传递令牌”的错误,ruby-on-rails,paypal,activemerchant,Ruby On Rails,Paypal,Activemerchant,使用rails中的快速结账和activemerchant gem,我创建了一个钱包功能,您可以通过paypal(快速结账)将资金添加到钱包中。这在本地起作用,但在生产中不起作用 在生产中,只要我单击paypal checkout按钮,我就会被重定向到以下url,但没有标记(如您所见) 在空白页上的唯一东西是“没有令牌通过”< /P> 这是heroku生产的日志 在本地开发中,我得到了相同的行动: (我从会话中删除了几个字符,因此上面的url不起作用) 可以选择付款 下面是开发日志的屏幕截图

使用rails中的快速结账和activemerchant gem,我创建了一个钱包功能,您可以通过paypal(快速结账)将资金添加到钱包中。这在本地起作用,但在生产中不起作用

在生产中,只要我单击paypal checkout按钮,我就会被重定向到以下url,但没有标记(如您所见)

在空白页上的唯一东西是“没有令牌通过”< /P> 这是heroku生产的日志

在本地开发中,我得到了相同的行动:

(我从会话中删除了几个字符,因此上面的url不起作用) 可以选择付款

下面是开发日志的屏幕截图

以下是相关代码:

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\u controller.rb、payment.rb和wallet.html.erb


您能告诉我为什么这在开发环境中有效而在生产环境中无效,以及我应该怎么做吗?

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


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

当我面对这个问题时,对我有效的是,我们在prod中没有正确设置环境变量(或者)我把环境变量的设置搞砸了。我努力编码这些值,只是为了检查这是否是问题所在,对我来说这就是问题所在。后来删除了硬编码的值,我正确地设置了ENV变量


然而,将这些细节硬编码是一种非常糟糕的做法,仅用于测试,您可以尝试这种方法。

我使用环境变量进行同样的测试。我就是这样设置的:EXPRESS\u GATEWAY=
ActiveMerchant::Billing::PaypalExpressGateway.new(登录名:ENV['PAYPAL\u用户名],密码:ENV['PAYPAL\u密码],签名:ENV['PAYPAL\u签名])