代码之家  ›  专栏  ›  技术社区  ›  Richtopia

PayPal express ActiveMerchant网关不工作

  •  1
  • Richtopia  · 技术社区  · 7 年前

    根据 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中的选项哈希?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Piers C    7 年前

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