根据
this
,ActiveMerchant PayPal Express网关初始化如下:
paypal_options = {
login: "API_USERNAME_HERE",
password: "API_PASSWORD_HERE",
signature: "API_SIGNATURE_HERE"
}
::EXPRESS_GATEWAY = ActiveMerchant::Billing::PaypalExpressGateway.new(paypal_options)
我确实提供了一个签名,但我遇到了以下错误:
向贝宝发出请求需要API证书或API签名
贝宝初始值设定项如下所示(找到
here
):
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中的选项哈希?