1

我正在使用位于此处的 paypal SDK 开票: https ://github.com/paypal/invoice-sdk-ruby

这很好用。

我为 rails 集成了 paypal 权限 SDK: https ://github.com/paypal/permissions-sdk-ruby

授权工作流程运行良好。

所以现在我需要把它们放在一起。获得令牌后,权限 sdk 的文档就会消失。它没有解释如何将它与其他贝宝 SDK 一起使用(至少我不能理解:D)发票 sdk 告诉您查看 Auth sdk。

贝宝告诉我:

# Third-party Auth headers
-H "X-PAYPAL-SECURITY-SUBJECT:<receiverEdress>"  # Merchant's PayPal e-mail
-H "X-PAYPAL-AUTHENTICATION:<OAuthSig>"          # Generated OAuth Signature

不知道怎么插入。该请求是在我的模型中生成的:

    @create_and_send_invoice = api.build_create_and_send_invoice(paypalized || default_api_value)

数据本身在发票模型中组装,如下所示:

paypalized = {
:access_token => self.user.paypal_token, 
:invoice => {
  :merchantEmail => self.user.paypal_email || self.user.email,
  :payerEmail => self.client.email,
  :itemList => @itemlist,
  :currencyCode => "USD",
  :paymentTerms => "DueOnReceipt",
  :invoiceDate => self.updated_at,
  :number => self.name,
  :note => self.description,
  :merchantInfo => @businessinfo
  # project / Invoice title?
 } # end invoice
} # end paypalized
return paypalized

此实现不起作用,并且 access_token 字段被拒绝。我查看了与 sdks 相关的 gem,但看不到标头本身的构建位置或如何与之交互。

更新:发现这给了我一个线索......

       INVOICE_HTTP_HEADER = { "X-PAYPAL-REQUEST-SOURCE" => "invoice-ruby-sdk-#{VERSION}" }

这似乎在 paypal-sdk-invoice gem 中的调用期间在这里使用:

    # Service Call: CreateAndSendInvoice
  # @param CreateAndSendInvoiceRequest
  # @return CreateAndSendInvoiceResponse
  def CreateAndSendInvoice(options = {} , http_header = {})
    request_object  = BuildCreateAndSendInvoice(options)
    request_hash    = request_object.to_hash
    ...

我注意到有两个参数:options 和 http_header。我可以修改 http_header 参数并在我的控制器中以这种方式传递它:

@create_and_send_invoice_response = api.create_and_send_invoice(@create_and_send_invoice, @cutsom_header)

或者可能

@create_and_send_invoice = api.build_create_and_send_invoice(data, custom_header)

我会保持更新,因为我用谷歌搜索了很多,但找不到任何关于如何做到这一点的明确答案......

4

1 回答 1

0

您必须在为第三方身份验证创建 API 对象时传递tokenand 。token_secret

@api = PayPal::SDK::Invoice::API.new({
   :token => "replace with token",
   :token_secret => "replace with token-secret" })
于 2013-08-03T16:11:29.377 回答