2015-09-07 128 views
0

我想用無效的美國地址覆蓋PayPal的送貨地址。我確實在https://developer.paypal.com/docs/classic/express-checkout/integration-guide/ECCustomizing/中讀過,我只需要使用ADDROVERRIDE=1,然後用PAYMENTREQUEST_0_SHIPTOSTREET(加上一些其他相關的參數)覆蓋地址。用無效的美國地址覆蓋送貨地址

但是,文檔化的指南並不適合我。如果送貨地址位於美國以外,這將起作用。我設置一個測試應用程序,這些都是代碼:

class HomeController < ApplicationController 
    def index 
    end 

    def pay 
    paypal_options = { 
     no_shipping: true, # if you want to disable shipping information 
     allow_note: false, # if you want to disable notes 
     pay_on_paypal: true # if you don't plan on showing your own confirmation step 
    } 

    response = paypal_request.setup(
     payment_request, 
     'http://localhost:3000/done', 
     'http://localhost:3000/done', 
     paypal_options # Optional 
    ) 

    redirect_to response.redirect_uri 

    rescue Paypal::Exception::HttpError, Paypal::Exception::APIError => e 
    puts "------- ERROR" 
    puts e.response.details.map(&:long_message).join("") 
    end 

    def done 
    @response = paypal_request.checkout!(
     params[:token], 
     params[:PayerID], 
     payment_request 
    ) 
    end 

    private 

    def payment_request 
    Paypal::Payment::Request.new(
     :description => "Some description", # item description 
     :quantity  => 1,  # item quantity 
     :amount  => 1.00, # item value 
     :custom_fields => { 
     METHOD: 'SetExpressCheckout', 
     ADDROVERRIDE: 1, 
     REQCONFIRMSHIPPING: 0, 
     :"PAYMENTREQUEST_{n}_SHIPTONAME" => 'Donna W. Brogan', 
     :"PAYMENTREQUEST_{n}_SHIPTOCITY" => 'Oak Lawns', 
     :"PAYMENTREQUEST_{n}_SHIPTOSTREET" => '4223 Flinderation Road', 
     :"PAYMENTREQUEST_{n}_SHIPTOSTREET2" => '', 
     :"PAYMENTREQUEST_{n}_SHIPTOSTATE" => 'IL', 
     :"PAYMENTREQUEST_{n}_SHIPTOCOUNTRYCODE" => 'US', 
     :"PAYMENTREQUEST_{n}_SHIPTOZIP" => '60453' 
     } 
    ) 
    end 

    def paypal_request 
    Paypal::Express::Request.new(
     :username => PAYPAL_CONFIG[:username], 
     :password => PAYPAL_CONFIG[:password], 
     :signature => PAYPAL_CONFIG[:signature] 
    ) 
    end 
end 

地址是無效的,因爲沒有Oak Lawns,注意額外的s

我得到的錯誤是:

Shipping Address Invalid City State Postal Code 

這些都是根據調試器發送的PARAMS:

ADDROVERRIDE=1 
&ALLOWNOTE=0 
&CANCELURL=http%3A%2F%2Flocalhost%3A3000%2Fdone 
&METHOD=SetExpressCheckout 
&NOSHIPPING=1 
&PAYMENTREQUEST_0_AMT=1.00 
&PAYMENTREQUEST_0_DESC=Some+description 
&PAYMENTREQUEST_0_SHIPPINGAMT=0.00 
&PAYMENTREQUEST_0_SHIPTOCITY=Oak+Lawns 
&PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE=US 
&PAYMENTREQUEST_0_SHIPTONAME=Donna+W.+Brogan 
&PAYMENTREQUEST_0_SHIPTOSTATE=IL 
&PAYMENTREQUEST_0_SHIPTOSTREET2= 
&PAYMENTREQUEST_0_SHIPTOSTREET=4223+Flinderation+Road 
&PAYMENTREQUEST_0_SHIPTOZIP=60453 
&PAYMENTREQUEST_0_TAXAMT=0.00 
&REQCONFIRMSHIPPING=0 
&RETURNURL=http%3A%2F%2Flocalhost%3A3000%2Fdone 

,如果我改變了城市Oak Lawn這將很好地工作這是一個有效的送貨地址。我爲此使用https://github.com/nov/paypal-express寶石。

回答

0

PayPal默認使用USPS格式驗證美國地址,這意味着當您「覆蓋」買方的帳戶存儲地址時,無效的地址會導致錯誤並且不會讓您通過。見地址處理過程here

+0

我有點知道,但問題是,我可以提供一個無效的地址?如果可能的話,我該怎麼做? – amree

+0

對於美國地址,沒有。如果您提供的美國地址無效,則使用「address_override」,流程將首先打破錯誤。如果沒有「address_override」,則無效地址將被剝離並顯示買方的賬戶存儲地址 –