PayPal快递ActiveMerchant网关不起作用



据此,ActiveMerchant PayPal Express Gateway

初始化如下:
paypal_options = {
login: "API_USERNAME_HERE",
password: "API_PASSWORD_HERE",
signature: "API_SIGNATURE_HERE"
}
::EXPRESS_GATEWAY = ActiveMerchant::Billing::PaypalExpressGateway.new(paypal_options)

我肯定提供了签名,但是我收到此错误:

需要 API 证书或 API 签名才能向PayPal发出请求

PayPal初始值设定项如下所示(可在此处找到):

def initialize(options = {})
requires!(options, :login, :password)
headers = {'X-PP-AUTHORIZATION' => options.delete(:auth_signature), 'X-PAYPAL-MESSAGE-PROTOCOL' => 'SOAP11'} if options[:auth_signature]
options = {
:pem => pem_file,
:signature => signature,
:headers => headers || {}
}.update(options)
if options[:pem].blank? && options[:signature].blank?
raise ArgumentError, "An API Certificate or API Signature is required to make requests to PayPal"
end
super(options)
end

我不明白这个初始值设定项对签名做了什么,以及为什么它不接受它

。以下是我正在传递的选项,我已经将其提交给STDOUT:

{  
"password"   =>"***************",
"signature"   =>"AVtrAKGQXoUNJFduUU0pn1dewq80AK9KYWenyFwYcduz8elS85B8T0Wc",
"allow_guest_checkout"   =>true,
"login"   =>"********************",
"test"   =>true
}

有人可以帮我解决这个问题吗?
请注意,我在JRuby中使用它,但我认为在这种情况下没有任何区别。


在@PiersC的评论后编辑:

我对此进行了硬编码,而不是将它们作为来自 Java 的参数,它起作用了:

options = {
login: "*************",
password: "*****************",
signature: "AVtrAKGQXoUNJFduUU0pn1dewq80AK9KYWenyFwYcduz8elS85B8T0Wc"
}

然而,这导致了另一个问题。我一直在将 Java 映射转换为 Ruby 哈希,如下所示:

def self.convert_hash(map)
hsh = {}
map.each {|key, value| hsh[key] = value}
hsh.with_indifferent_access
end

这在所有其他网关上都有效。如何将 Java 映射正确转换为 Ruby 中的选项哈希?

您的选项键是字符串,但应该是符号,例如。{ 密码: '***', ... } ActiveSupport::HashWithInvalidAccess 隐藏(模糊?)符号键和字符串键之间的区别,但如果您使用的是常规哈希,那么 { 'signature' => signature } 与 { signature: signature } 不同。

最新更新