Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Worldpay: Update where to pass shopperIPAddress #5348

Merged
merged 1 commit into from
Dec 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@
* FlexCharge: Update homePage url [javierpedrozaing] #5351
* Nuvei: Fix send savePM in false by default [javierpedrozaing] #5353
* Decidir and DecicirPlus: Add the wallet_id field [yunnydang] #5354
* Worldpay: Update where to pass shopperIPAddress [almalee24] #5348

== Version 1.137.0 (August 2, 2024)
* Unlock dependency on `rexml` to allow fixing a CVE (#5181).
Expand Down
10 changes: 8 additions & 2 deletions lib/active_merchant/billing/gateways/worldpay.rb
Original file line number Diff line number Diff line change
Expand Up @@ -402,7 +402,12 @@ def build_fast_fund_credit_request(money, payment_method, options)
add_amount(xml, money, options)
add_order_content(xml, options)
add_payment_details_for_ff_credit(xml, payment_method, options)
add_shopper_id(xml, options)

if options[:email]
xml.shopper do
xml.shopperEmailAddress options[:email]
end
end
end
end
end
Expand Down Expand Up @@ -477,6 +482,7 @@ def add_payment_details_for_ff_credit(xml, payment_method, options)
add_token_for_ff_credit(xml, payment_method, options)
end
end
add_shopper_id(xml, options)
end
end

Expand Down Expand Up @@ -670,8 +676,8 @@ def add_network_tokenization_card(xml, payment_method, options)
eci = eci_value(payment_method, options)
xml.eciIndicator eci if eci.present?
end
add_shopper_id(xml, options, false)
add_stored_credential_options(xml, options)
add_shopper_id(xml, options, false)
end
end

Expand Down
48 changes: 23 additions & 25 deletions test/remote/gateways/remote_worldpay_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ def setup

@options = {
order_id: generate_unique_id,
email: '[email protected]'
email: '[email protected]',
ip: '127.0.0.1'
}

@level_two_data = {
Expand Down Expand Up @@ -1037,35 +1038,32 @@ def test_failed_visa_account_funding_transfer_acquirer_error
assert_equal '20', credit.error_code
end

# These three fast_fund_credit tests are currently failing with the message: Disbursement transaction not supported
# It seems that the current sandbox setup does not support testing this.

# def test_successful_fast_fund_credit_on_cft_gateway
# options = @options.merge({ fast_fund_credit: true })
def test_successful_fast_fund_credit_on_cft_gateway
options = @options.merge({ fast_fund_credit: true })

# credit = @cftgateway.credit(@amount, @credit_card, options)
# assert_success credit
# assert_equal 'SUCCESS', credit.message
# end
credit = @cftgateway.credit(@amount, @credit_card, options)
assert_success credit
assert_equal 'SUCCESS', credit.message
end

# def test_successful_fast_fund_credit_with_token_on_cft_gateway
# assert store = @gateway.store(@credit_card, @store_options)
# assert_success store
def test_successful_fast_fund_credit_with_token_on_cft_gateway
assert store = @gateway.store(@credit_card, @store_options)
assert_success store

# options = @options.merge({ fast_fund_credit: true })
# assert credit = @cftgateway.credit(@amount, store.authorization, options)
# assert_success credit
# end
options = @options.merge({ fast_fund_credit: true })
assert credit = @cftgateway.credit(@amount, store.authorization, options)
assert_success credit
end

# def test_failed_fast_fund_credit_on_cft_gateway
# options = @options.merge({ fast_fund_credit: true })
# refused_card = credit_card('4444333322221111', name: 'REFUSED') # 'magic' value for testing failures, provided by Worldpay
def test_failed_fast_fund_credit_on_cft_gateway
options = @options.merge({ fast_fund_credit: true })
refused_card = credit_card('4444333322221111', name: 'REFUSED') # 'magic' value for testing failures, provided by Worldpay

# credit = @cftgateway.credit(@amount, refused_card, options)
# assert_failure credit
# assert_equal '01', credit.params['action_code']
# assert_equal "A transaction status of 'ok' or 'PUSH_APPROVED' is required.", credit.message
# end
credit = @cftgateway.credit(@amount, refused_card, options)
assert_failure credit
assert_equal '01', credit.params['action_code']
assert_equal "A transaction status of 'ok' or 'PUSH_APPROVED' is required.", credit.message
end

def test_transcript_scrubbing
transcript = capture_transcript(@gateway) do
Expand Down
11 changes: 11 additions & 0 deletions test/unit/gateways/worldpay_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -838,6 +838,17 @@ def test_capture_using_order_id_embedded_with_token
assert_success response
end

def test_successful_fast_fund_credit
options = @options.merge({ fast_fund_credit: true, email: '[email protected]' })

stub_comms do
@gateway.credit(@amount, @credit_card, options)
end.check_request do |_endpoint, data, _headers|
assert_match(/<FF_DISBURSE-SSL>/, data)
assert_match(/<shopperEmailAddress>/, data)
end.respond_with(successful_visa_credit_response)
end

def test_successful_visa_credit
response = stub_comms do
@gateway.credit(@amount, @credit_card, @options)
Expand Down
Loading