Skip to content

Commit 5ec731c

Browse files
committed
Implement AES-256-CBC encryption for PHP 7.0+
- Add support for AES-256-CBC encryption for PHP 7.0+ with OpenSSL > 1.0.0 - Maintain backward compatibility with RC4 for older PHP versions - Add IV parameter handling for AES encryption - Update payment form generation to include IV parameter when using AES - Add comprehensive tests for AES encryption and form generation - Fix 500 error when processing payments with newer PHP versions
1 parent 7450688 commit 5ec731c

File tree

12 files changed

+1634
-60
lines changed

12 files changed

+1634
-60
lines changed

.phpunit.cache/test-results

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"version":"pest_2.36.0","defects":{"P\\Tests\\Feature\\NetopiaSandboxTest::__pest_evaluable_it_can_encrypt_and_decrypt_data_with_the_current_cipher_settings":8,"P\\Tests\\Feature\\NetopiaPaymentRedirectTest::__pest_evaluable_it_can_make_a_successful_HTTP_request_to_the_Netopia_sandbox_URL":8,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_registers_the_package_services":8,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_provides_the_netopia_payments_service":7,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_has_the_correct_provides_array":7},"times":{"P\\Tests\\Unit\\ResponseTest::__pest_evaluable_it_can_check_if_payment_is_successful":0,"P\\Tests\\Unit\\ResponseTest::__pest_evaluable_it_can_check_if_payment_is_canceled":0,"P\\Tests\\Unit\\ResponseTest::__pest_evaluable_it_can_check_if_payment_is_credited":0,"P\\Tests\\Unit\\ResponseTest::__pest_evaluable_it_can_check_if_payment_is_paid":0,"P\\Tests\\Unit\\ResponseTest::__pest_evaluable_it_can_check_if_payment_is_not_successful_with_error_code":0,"P\\Tests\\Unit\\ResponseTest::__pest_evaluable_it_can_check_if_payment_is_pending":0,"P\\Tests\\Unit\\InvoiceTest::__pest_evaluable_it_can_set_billing_address":0,"P\\Tests\\Unit\\NetopiaPaymentsTest::__pest_evaluable_it_generates_a_payment_response_with_error":0,"P\\Tests\\Unit\\NetopiaPaymentsTest::__pest_evaluable_it_generates_a_payment_response":0,"P\\Tests\\Unit\\NetopiaPaymentsTest::__pest_evaluable_it_can_be_instantiated":0,"P\\Tests\\Unit\\PaymentFormGeneratorTest::__pest_evaluable_it_generates_a_payment_form":0,"P\\Tests\\Unit\\PaymentFormGeneratorTest::__pest_evaluable_it_renders_a_payment_button":0,"P\\Tests\\Feature\\NetopiaPaymentControllerTest::__pest_evaluable_it_handles_confirm_request_and_returns_canceled_response":0.003,"P\\Tests\\Feature\\NetopiaPaymentControllerTest::__pest_evaluable_it_handles_error_in_confirm_request":0.049,"P\\Tests\\Feature\\NetopiaPaymentControllerTest::__pest_evaluable_it_handles_confirm_request_and_returns_pending_response":0.001,"P\\Tests\\Feature\\NetopiaPaymentControllerTest::__pest_evaluable_it_handles_confirm_request_and_returns_success_response":0.001,"P\\Tests\\Feature\\NetopiaSandboxTest::__pest_evaluable_it_can_encrypt_and_decrypt_data_with_the_current_cipher_settings":0,"P\\Tests\\Feature\\NetopiaSandboxTest::__pest_evaluable_it_can_generate_payment_form_data_for_a_1_0_RON_transaction":0.006,"P\\Tests\\Feature\\NetopiaPaymentRedirectTest::__pest_evaluable_it_can_generate_a_complete_payment_form_for_a_1_00_RON_transaction":0.002,"P\\Tests\\Feature\\NetopiaPaymentRedirectTest::__pest_evaluable_it_can_encrypt_and_decrypt_payment_data_using_our_RC4_implementation":0.001,"P\\Tests\\Feature\\NetopiaPaymentRedirectTest::__pest_evaluable_it_can_generate_a_payment_redirect_URL_for_a_1_00_RON_transaction":0.001,"P\\Tests\\Feature\\NetopiaPaymentRedirectTest::__pest_evaluable_it_can_make_a_successful_HTTP_request_to_the_Netopia_sandbox_URL":0.029,"P\\Tests\\Feature\\NetopiaPaymentRedirectTest::__pest_evaluable_it_verifies_payment_data_format_for_a_1_00_RON_transaction":0.001,"P\\Tests\\Unit\\FixedKeyRC4Test::__pest_evaluable_it_can_use_different_keys_for_different_encryption_contexts":0.001,"P\\Tests\\Unit\\FixedKeyRC4Test::__pest_evaluable_it_can_handle_empty_strings":0,"P\\Tests\\Unit\\FixedKeyRC4Test::__pest_evaluable_it_can_handle_special_characters":0.001,"P\\Tests\\Unit\\FixedKeyRC4Test::__pest_evaluable_it_can_encrypt_and_decrypt_data_with_a_fixed_key":0.001,"P\\Tests\\Unit\\NetopiaPaymentEncryptionTest::__pest_evaluable_it_handles_different_cipher_types_correctly":0.001,"P\\Tests\\Unit\\NetopiaPaymentEncryptionTest::__pest_evaluable_it_can_encrypt_data_using_the_signature_and_public_key":0,"P\\Tests\\Unit\\NetopiaPaymentEncryptionTest::__pest_evaluable_it_can_decrypt_data_using_the_signature_and_private_key":0,"P\\Tests\\Unit\\NetopiaPaymentHelperTest::__pest_evaluable_it_can_generate_payment_form_data_for_a_request":0.001,"P\\Tests\\Unit\\NetopiaPaymentHelperTest::__pest_evaluable_it_can_generate_a_payment_response_XML":0,"P\\Tests\\Feature\\NetopiaPaymentReturnTest::__pest_evaluable_it_validates_required_parameters_in_return_request":0.001,"P\\Tests\\Feature\\NetopiaPaymentReturnTest::__pest_evaluable_it_handles_return_request_and_redirects_to_pending_page":0.001,"P\\Tests\\Feature\\NetopiaPaymentReturnTest::__pest_evaluable_it_handles_error_in_return_request":0.001,"P\\Tests\\Feature\\NetopiaPaymentReturnTest::__pest_evaluable_it_handles_return_request_and_redirects_to_success_page":0.004,"P\\Tests\\Feature\\NetopiaPaymentReturnTest::__pest_evaluable_it_handles_return_request_and_redirects_to_failed_page":0.001,"P\\Tests\\Feature\\NetopiaSandboxTest::__pest_evaluable_it_can_encrypt_and_decrypt_data_with_our_NetopiaPaymentEncryption_helper":0,"P\\Tests\\Feature\\NetopiaPaymentIntegrationTest::__pest_evaluable_it_simulates_a_complete_payment_flow_from_request_to_confirmation":0.006,"P\\Tests\\Unit\\BillingAddressTest::__pest_evaluable_it_can_set_and_get_properties_for_person_type":0,"P\\Tests\\Unit\\BillingAddressTest::__pest_evaluable_it_can_set_and_get_properties_for_company_type":0,"P\\Tests\\Unit\\BillingAddressTest::__pest_evaluable_it_can_be_instantiated_with_default_values":0,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_registers_the_package_services":0,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_publishes_the_config_file":0,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_extends_the_service_provider_class":0.001,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_provides_the_netopia_payments_service":0.001,"P\\Tests\\Unit\\RequestTest::__pest_evaluable_it_can_set_and_get_properties":0,"P\\Tests\\Unit\\RequestTest::__pest_evaluable_it_can_create_a_complete_payment_request":0,"P\\Tests\\Unit\\RequestTest::__pest_evaluable_it_can_be_instantiated_with_default_values":0.001,"P\\Tests\\Unit\\RequestTest::__pest_evaluable_it_can_set_and_get_invoice":0,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_has_the_correct_provides_array":0.001,"P\\Tests\\Feature\\NetopiaPaymentIntegrationTest::__pest_evaluable_it_can_create_a_payment_request_with_correct_structure":0.001,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_registers_and_provides_the_netopia_payments_service":0}}
1+
{"version":"pest_2.36.0","defects":{"P\\Tests\\Feature\\NetopiaSandboxTest::__pest_evaluable_it_can_encrypt_and_decrypt_data_with_the_current_cipher_settings":8,"P\\Tests\\Feature\\NetopiaPaymentRedirectTest::__pest_evaluable_it_can_make_a_successful_HTTP_request_to_the_Netopia_sandbox_URL":8,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_registers_the_package_services":8,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_provides_the_netopia_payments_service":7,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_has_the_correct_provides_array":7,"P\\Tests\\Feature\\NetopiaAesEncryptionTest::__pest_evaluable_it_generates_a_valid_payment_redirect_URL_that_can_be_accessed_with_Guzzle":7},"times":{"P\\Tests\\Unit\\ResponseTest::__pest_evaluable_it_can_check_if_payment_is_successful":0,"P\\Tests\\Unit\\ResponseTest::__pest_evaluable_it_can_check_if_payment_is_canceled":0,"P\\Tests\\Unit\\ResponseTest::__pest_evaluable_it_can_check_if_payment_is_credited":0,"P\\Tests\\Unit\\ResponseTest::__pest_evaluable_it_can_check_if_payment_is_paid":0,"P\\Tests\\Unit\\ResponseTest::__pest_evaluable_it_can_check_if_payment_is_not_successful_with_error_code":0,"P\\Tests\\Unit\\ResponseTest::__pest_evaluable_it_can_check_if_payment_is_pending":0,"P\\Tests\\Unit\\InvoiceTest::__pest_evaluable_it_can_set_billing_address":0,"P\\Tests\\Unit\\NetopiaPaymentsTest::__pest_evaluable_it_generates_a_payment_response_with_error":0,"P\\Tests\\Unit\\NetopiaPaymentsTest::__pest_evaluable_it_generates_a_payment_response":0,"P\\Tests\\Unit\\NetopiaPaymentsTest::__pest_evaluable_it_can_be_instantiated":0,"P\\Tests\\Unit\\PaymentFormGeneratorTest::__pest_evaluable_it_generates_a_payment_form":0,"P\\Tests\\Unit\\PaymentFormGeneratorTest::__pest_evaluable_it_renders_a_payment_button":0,"P\\Tests\\Feature\\NetopiaPaymentControllerTest::__pest_evaluable_it_handles_confirm_request_and_returns_canceled_response":0.003,"P\\Tests\\Feature\\NetopiaPaymentControllerTest::__pest_evaluable_it_handles_error_in_confirm_request":0.049,"P\\Tests\\Feature\\NetopiaPaymentControllerTest::__pest_evaluable_it_handles_confirm_request_and_returns_pending_response":0.001,"P\\Tests\\Feature\\NetopiaPaymentControllerTest::__pest_evaluable_it_handles_confirm_request_and_returns_success_response":0.001,"P\\Tests\\Feature\\NetopiaSandboxTest::__pest_evaluable_it_can_encrypt_and_decrypt_data_with_the_current_cipher_settings":0,"P\\Tests\\Feature\\NetopiaSandboxTest::__pest_evaluable_it_can_generate_payment_form_data_for_a_1_0_RON_transaction":0.006,"P\\Tests\\Feature\\NetopiaPaymentRedirectTest::__pest_evaluable_it_can_generate_a_complete_payment_form_for_a_1_00_RON_transaction":0.002,"P\\Tests\\Feature\\NetopiaPaymentRedirectTest::__pest_evaluable_it_can_encrypt_and_decrypt_payment_data_using_our_RC4_implementation":0.001,"P\\Tests\\Feature\\NetopiaPaymentRedirectTest::__pest_evaluable_it_can_generate_a_payment_redirect_URL_for_a_1_00_RON_transaction":0.001,"P\\Tests\\Feature\\NetopiaPaymentRedirectTest::__pest_evaluable_it_can_make_a_successful_HTTP_request_to_the_Netopia_sandbox_URL":0.029,"P\\Tests\\Feature\\NetopiaPaymentRedirectTest::__pest_evaluable_it_verifies_payment_data_format_for_a_1_00_RON_transaction":0.001,"P\\Tests\\Unit\\FixedKeyRC4Test::__pest_evaluable_it_can_use_different_keys_for_different_encryption_contexts":0.001,"P\\Tests\\Unit\\FixedKeyRC4Test::__pest_evaluable_it_can_handle_empty_strings":0,"P\\Tests\\Unit\\FixedKeyRC4Test::__pest_evaluable_it_can_handle_special_characters":0.001,"P\\Tests\\Unit\\FixedKeyRC4Test::__pest_evaluable_it_can_encrypt_and_decrypt_data_with_a_fixed_key":0.001,"P\\Tests\\Unit\\NetopiaPaymentEncryptionTest::__pest_evaluable_it_handles_different_cipher_types_correctly":0.001,"P\\Tests\\Unit\\NetopiaPaymentEncryptionTest::__pest_evaluable_it_can_encrypt_data_using_the_signature_and_public_key":0,"P\\Tests\\Unit\\NetopiaPaymentEncryptionTest::__pest_evaluable_it_can_decrypt_data_using_the_signature_and_private_key":0,"P\\Tests\\Unit\\NetopiaPaymentHelperTest::__pest_evaluable_it_can_generate_payment_form_data_for_a_request":0.001,"P\\Tests\\Unit\\NetopiaPaymentHelperTest::__pest_evaluable_it_can_generate_a_payment_response_XML":0,"P\\Tests\\Feature\\NetopiaPaymentReturnTest::__pest_evaluable_it_validates_required_parameters_in_return_request":0.001,"P\\Tests\\Feature\\NetopiaPaymentReturnTest::__pest_evaluable_it_handles_return_request_and_redirects_to_pending_page":0.001,"P\\Tests\\Feature\\NetopiaPaymentReturnTest::__pest_evaluable_it_handles_error_in_return_request":0.001,"P\\Tests\\Feature\\NetopiaPaymentReturnTest::__pest_evaluable_it_handles_return_request_and_redirects_to_success_page":0.004,"P\\Tests\\Feature\\NetopiaPaymentReturnTest::__pest_evaluable_it_handles_return_request_and_redirects_to_failed_page":0.001,"P\\Tests\\Feature\\NetopiaSandboxTest::__pest_evaluable_it_can_encrypt_and_decrypt_data_with_our_NetopiaPaymentEncryption_helper":0,"P\\Tests\\Feature\\NetopiaPaymentIntegrationTest::__pest_evaluable_it_simulates_a_complete_payment_flow_from_request_to_confirmation":0.006,"P\\Tests\\Unit\\BillingAddressTest::__pest_evaluable_it_can_set_and_get_properties_for_person_type":0,"P\\Tests\\Unit\\BillingAddressTest::__pest_evaluable_it_can_set_and_get_properties_for_company_type":0,"P\\Tests\\Unit\\BillingAddressTest::__pest_evaluable_it_can_be_instantiated_with_default_values":0,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_registers_the_package_services":0,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_publishes_the_config_file":0,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_extends_the_service_provider_class":0.001,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_provides_the_netopia_payments_service":0.001,"P\\Tests\\Unit\\RequestTest::__pest_evaluable_it_can_set_and_get_properties":0,"P\\Tests\\Unit\\RequestTest::__pest_evaluable_it_can_create_a_complete_payment_request":0,"P\\Tests\\Unit\\RequestTest::__pest_evaluable_it_can_be_instantiated_with_default_values":0.001,"P\\Tests\\Unit\\RequestTest::__pest_evaluable_it_can_set_and_get_invoice":0,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_has_the_correct_provides_array":0.001,"P\\Tests\\Feature\\NetopiaPaymentIntegrationTest::__pest_evaluable_it_can_create_a_payment_request_with_correct_structure":0.001,"P\\Tests\\Unit\\NetopiaPaymentsServiceProviderTest::__pest_evaluable_it_registers_and_provides_the_netopia_payments_service":0,"P\\Tests\\Feature\\NetopiaAesEncryptionTest::__pest_evaluable_it_can_encrypt_and_decrypt_data_using_AES_256_CBC":0.003,"P\\Tests\\Feature\\NetopiaAesEncryptionTest::__pest_evaluable_it_generates_a_valid_payment_redirect_URL_that_can_be_accessed_with_Guzzle":0.236,"P\\Tests\\Feature\\NetopiaAesEncryptionTest::__pest_evaluable_it_can_build_a_valid_payment_form_with_AES_encryption":0.03,"P\\Tests\\Feature\\NetopiaAesEncryptionTest::__pest_evaluable_it_verifies_payment_data_structure_with_AES_encryption":0.001}}

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@
1414
"illuminate/support": "^8.0|^9.0|^10.0",
1515
"ext-openssl": "*",
1616
"ext-dom": "*",
17-
"felixdorn/php-rc4": "^0.1.0"
17+
"felixdorn/php-rc4": "^0.1.0",
18+
"guzzlehttp/guzzle": "^7.9"
1819
},
1920
"require-dev": {
2021
"orchestra/testbench": "^6.0|^7.0|^8.0",

0 commit comments

Comments
 (0)