1

ヘッダーと本文を含む別のリクエストを PayPal に送信する必要があります。標準クラス NET::HTTP を使用したいので、ここに私のコードを示します ( ISN'T WORKING ):

    require "net/http"
    require "uri"
    header = {...}
    body = {...}
    url = "https://svcs.sandbox.paypal.com/AdaptiveAccounts/GetVerifiedStatus"
    uri = URI.parse(url)
    args = { 'header' => header,'body' => body }
    res = Net::HTTP.post_form(uri, args)
    puts res.status

エラーが発生します:

  C:/Ruby193/lib/ruby/1.9.1/net/protocol.rb:141:in `read_nonblock': An existing connection was forcibly closed by the remote host. (Errno::ECONNRESET)

EDIT 2 番目のバリアント:

      require 'httpclient'
      require 'xmlsimple'
      header =  {"X-PAYPAL-SECURITY-USERID" => "tok261_biz_api.abc.com",
           "X-PAYPAL-SECURITY-PASSWORD" => "1244612379",
           "X-PAYPAL-SECURITY-SIGNATURE" => "lkfg9groingghb4uw5",
           "X-PAYPAL-REQUEST-DATA-FORMAT" => "NV",
           "X-PAYPAL-RESPONSE-DATA-FORMAT" => "XML",
           "X-PAYPAL-APPLICATION-ID" =>  "APP-80W284485P519543T"
            }
      #data to be sent in the request
      data = {"emailAddress" => "denmed_1342605975_biz@gmail.com",
       "firstName"=> "Den",
       "lastName" => "Med",
       "matchCriteria"=> "NAME",
       "requestEnvelope.errorLanguage" => "en_US"}
      #initialize the request
      clnt = HTTPClient.new
      #API end point(sandbox)
      uri = "https://svcs.sandbox.paypal.com/AdaptiveAccounts/GetVerifiedStatus"
     #make the post
     res = clnt.post(uri, data, header)
     if res.status == 200
      @xml = XmlSimple.xml_in(res.content)
     if @xml['accountType']!=nil
    account_type = @xml['accountType'][0]
    #its pretty obvious from here init?
   if account_type.to_s() == "Business"
    puts "Business account!"
    elseif account_type.to_s() == "Premier"
    puts  "Premier Account!"
  end
   elseif account_type.to_s() == "Personal"
    puts "Personal account!"
   else
    puts "Account type not null but not a valid PayPal account type."
   end
   else
    puts "Gee! sorry! something went seriously wrong"
   end

このメソッドは常に私に与えます - Account type not null ですが、有効な PayPal アカウントの種類ではありません。しかし、それはサンドボックスで検証されています! 空白のフィールドを残そうとしましたが、同じ結果になりました!

事前に助けてくれてありがとう!

4

1 に答える 1

0

私はあなたの2番目のコード例に精通していませんが、以前に最初のコード例(Net :: HTTP)を使用したことがあり、非常にうまく機能していることがわかりました。私は一般的にGETにのみ使用しましたが、POSTについてアドバイスしようとします:)

最初に:ヘッダーは、リクエストとともに送信されるデータとして設定しないでください(実行しているように見えます)。代わりに、各ヘッダーをリクエストの属性として設定する必要があります。

request['X-HEADER_NAME'] = header_value

Net :: HTTPを使用する場合、コードブロックは次のようになります。

require "net/http"
require "uri"

url = "https://svcs.sandbox.paypal.com/AdaptiveAccounts/GetVerifiedStatus"
uri = URI.parse(url)

req = Net::HTTP::Post.new(url)
req["X-PAYPAL-SECURITY-USERID"] = "tok261_biz_api.abc.com"
req["X-PAYPAL-SECURITY-PASSWORD"] = "1244612379"
req["...."] = "...."   .... etc for all headers

req.set_form_data( {"emailAddress" => "denmed_1342605975_biz@gmail.com",
   "firstName"=> "Den",
   "lastName" => "Med",
   "matchCriteria"=> "NAME",
   "requestEnvelope.errorLanguage" => "en_US"} )

Net::HTTP.start(uri.host, uri.port) do |http|
    response = http.request(req)
    return response
end

そのようなことを試してみることをお勧めします。それがうまくいかない場合は、与えられたエラーの正確な表現を教えていただけますか?

別の提案は、アプリケーションがを受信するたびにErrno::ECONNRESET、バックエンドサーバーに到達できないことを意味します(この場合、それはペイパルサーバーになると思います)-サーバーが実行されていることを確認しますか?また、接続を妨げるファイアウォールなどが設置されていないことを確信していますか?

于 2012-07-27T15:57:31.757 に答える