@@ -112,7 +112,7 @@ pub struct Amount {
112112#[ derive( Default , Debug , Serialize , Deserialize , Eq , PartialEq , Clone ) ]
113113#[ serde( rename_all = "PascalCase" ) ]
114114pub struct Reason {
115- pub code : String ,
115+ pub code : Option < String > ,
116116 pub reject_reason : Option < String > ,
117117}
118118
@@ -510,6 +510,7 @@ fn is_payment_failed(payment_status: &str) -> (bool, &'static str) {
510510 "800.100.172" => ( true , "Transaction declined (account blocked)" ) ,
511511 "800.100.190" => ( true , "Transaction declined (invalid configuration data)" ) ,
512512 "800.100.202" => ( true , "Account Closed" ) ,
513+ "800.100.203" => ( true , "Insufficient Funds" ) ,
513514 "800.120.100" => ( true , "Rejected by throttling" ) ,
514515 "800.300.102" => ( true , "Country blacklisted" ) ,
515516 "800.300.401" => ( true , "Bin blacklisted" ) ,
@@ -823,9 +824,16 @@ fn handle_bank_redirects_sync_response(
823824 . status_reason_information
824825 . unwrap_or_default ( ) ;
825826 Some ( types:: ErrorResponse {
826- code : reason_info. reason . code . clone ( ) ,
827+ code : reason_info
828+ . reason
829+ . code
830+ . clone ( )
831+ . unwrap_or ( consts:: NO_ERROR_CODE . to_string ( ) ) ,
827832 // message vary for the same code, so relying on code alone as it is unique
828- message : reason_info. reason . code ,
833+ message : reason_info
834+ . reason
835+ . code
836+ . unwrap_or ( consts:: NO_ERROR_MESSAGE . to_string ( ) ) ,
829837 reason : reason_info. reason . reject_reason ,
830838 status_code,
831839 attempt_status : None ,
@@ -875,9 +883,16 @@ pub fn handle_webhook_response(
875883 . status_reason_information
876884 . unwrap_or_default ( ) ;
877885 Some ( types:: ErrorResponse {
878- code : reason_info. reason . code . clone ( ) ,
886+ code : reason_info
887+ . reason
888+ . code
889+ . clone ( )
890+ . unwrap_or ( consts:: NO_ERROR_CODE . to_string ( ) ) ,
879891 // message vary for the same code, so relying on code alone as it is unique
880- message : reason_info. reason . code ,
892+ message : reason_info
893+ . reason
894+ . code
895+ . unwrap_or ( consts:: NO_ERROR_MESSAGE . to_string ( ) ) ,
881896 reason : reason_info. reason . reject_reason ,
882897 status_code,
883898 attempt_status : None ,
@@ -1483,9 +1498,16 @@ fn handle_webhooks_refund_response(
14831498 let error = if utils:: is_refund_failure ( refund_status) {
14841499 let reason_info = response. status_reason_information . unwrap_or_default ( ) ;
14851500 Some ( types:: ErrorResponse {
1486- code : reason_info. reason . code . clone ( ) ,
1501+ code : reason_info
1502+ . reason
1503+ . code
1504+ . clone ( )
1505+ . unwrap_or ( consts:: NO_ERROR_CODE . to_string ( ) ) ,
14871506 // message vary for the same code, so relying on code alone as it is unique
1488- message : reason_info. reason . code ,
1507+ message : reason_info
1508+ . reason
1509+ . code
1510+ . unwrap_or ( consts:: NO_ERROR_MESSAGE . to_string ( ) ) ,
14891511 reason : reason_info. reason . reject_reason ,
14901512 status_code,
14911513 attempt_status : None ,
@@ -1540,9 +1562,16 @@ fn handle_bank_redirects_refund_sync_response(
15401562 . status_reason_information
15411563 . unwrap_or_default ( ) ;
15421564 Some ( types:: ErrorResponse {
1543- code : reason_info. reason . code . clone ( ) ,
1565+ code : reason_info
1566+ . reason
1567+ . code
1568+ . clone ( )
1569+ . unwrap_or ( consts:: NO_ERROR_CODE . to_string ( ) ) ,
15441570 // message vary for the same code, so relying on code alone as it is unique
1545- message : reason_info. reason . code ,
1571+ message : reason_info
1572+ . reason
1573+ . code
1574+ . unwrap_or ( consts:: NO_ERROR_MESSAGE . to_string ( ) ) ,
15461575 reason : reason_info. reason . reject_reason ,
15471576 status_code,
15481577 attempt_status : None ,
0 commit comments