@@ -93,41 +93,41 @@ public override ProcessPaymentResult ProcessPayment(ProcessPaymentRequest proces
9393 if ( apiResult . Success && apiResult . Json != null )
9494 {
9595 var state = ( string ) apiResult . Json . state ;
96+ string reasonCode = null ;
97+ dynamic relatedObject = null ;
9698
9799 if ( ! state . IsCaseInsensitiveEqual ( "failed" ) )
98100 {
99101 // intent: "sale" for immediate payment, "authorize" for pre-authorized payments and "order" for an order.
100102 // info required cause API has different endpoints for different intents.
101103 result . AuthorizationTransactionCode = ( string ) apiResult . Json . intent ;
102104
103- var sale = apiResult . Json . transactions [ 0 ] . related_resources [ 0 ] . sale ;
105+ if ( result . AuthorizationTransactionCode . IsCaseInsensitiveEqual ( "sale" ) )
106+ {
107+ relatedObject = apiResult . Json . transactions [ 0 ] . related_resources [ 0 ] . sale ;
104108
105- if ( sale != null )
109+ session . PaymentInstruction = PayPalService . ParsePaymentInstruction ( apiResult . Json . payment_instruction ) as PayPalPaymentInstruction ;
110+ }
111+ else
106112 {
107- state = ( string ) sale . state ;
113+ relatedObject = apiResult . Json . transactions [ 0 ] . related_resources [ 0 ] . authorization ;
114+ }
108115
109- result . AuthorizationTransactionResult = state ;
110- result . AuthorizationTransactionId = ( string ) sale . id ;
116+ if ( relatedObject != null )
117+ {
118+ state = ( string ) relatedObject . state ;
119+ reasonCode = ( string ) relatedObject . reason_code ;
111120
112- result . NewPaymentStatus = PaymentStatus . Authorized ;
121+ result . AuthorizationTransactionResult = state ;
122+ result . AuthorizationTransactionId = ( string ) relatedObject . id ;
113123
114- if ( state . IsCaseInsensitiveEqual ( "completed" ) || state . IsCaseInsensitiveEqual ( "processed" ) )
115- {
116- result . CaptureTransactionResult = state ;
117- result . CaptureTransactionId = ( string ) sale . id ;
124+ result . NewPaymentStatus = PayPalService . GetPaymentStatus ( state , reasonCode , PaymentStatus . Authorized ) ;
118125
119- result . NewPaymentStatus = PaymentStatus . Paid ;
120- }
121- else if ( state . IsCaseInsensitiveEqual ( "pending" ) )
126+ if ( result . NewPaymentStatus == PaymentStatus . Paid )
122127 {
123- var reasonCode = ( string ) sale . reason_code ;
124- if ( reasonCode . IsCaseInsensitiveEqual ( "ECHECK" ) )
125- {
126- result . NewPaymentStatus = PaymentStatus . Pending ;
127- }
128+ result . CaptureTransactionResult = result . AuthorizationTransactionResult ;
129+ result . CaptureTransactionId = result . AuthorizationTransactionId ;
128130 }
129-
130- session . PaymentInstruction = PayPalService . ParsePaymentInstruction ( apiResult . Json . payment_instruction ) as PayPalPaymentInstruction ;
131131 }
132132 }
133133 else
@@ -168,33 +168,48 @@ public override CapturePaymentResult Capture(CapturePaymentRequest capturePaymen
168168 } ;
169169
170170 var settings = Services . Settings . LoadSetting < TSetting > ( capturePaymentRequest . Order . StoreId ) ;
171- var currencyCode = Services . WorkContext . WorkingCurrency . CurrencyCode ?? "EUR" ;
171+ var session = new PayPalSessionData ( ) ;
172+
173+ var apiResult = PayPalService . EnsureAccessToken ( session , settings ) ;
174+ if ( result . Success )
175+ {
176+ apiResult = PayPalService . Capture ( settings , session , capturePaymentRequest ) ;
172177
173- var authorizationId = capturePaymentRequest . Order . AuthorizationTransactionId ;
174-
175- // TODO
178+ if ( apiResult . Success )
179+ {
180+ result . NewPaymentStatus = PaymentStatus . Paid ;
181+ }
182+ else
183+ {
184+ result . Errors . Add ( apiResult . ErrorMessage ) ;
185+ }
186+ }
187+ else
188+ {
189+ result . Errors . Add ( apiResult . ErrorMessage ) ;
190+ }
176191
177- return result ;
192+ return result ;
178193 }
179194
180- public override RefundPaymentResult Refund ( RefundPaymentRequest request )
195+ public override RefundPaymentResult Refund ( RefundPaymentRequest refundPaymentRequest )
181196 {
182197 var result = new RefundPaymentResult
183198 {
184- NewPaymentStatus = request . Order . PaymentStatus
199+ NewPaymentStatus = refundPaymentRequest . Order . PaymentStatus
185200 } ;
186201
187- var settings = Services . Settings . LoadSetting < TSetting > ( request . Order . StoreId ) ;
202+ var settings = Services . Settings . LoadSetting < TSetting > ( refundPaymentRequest . Order . StoreId ) ;
188203 var session = new PayPalSessionData ( ) ;
189204
190205 var apiResult = PayPalService . EnsureAccessToken ( session , settings ) ;
191206 if ( result . Success )
192207 {
193- apiResult = PayPalService . Refund ( settings , session , request ) ;
208+ apiResult = PayPalService . Refund ( settings , session , refundPaymentRequest ) ;
194209
195- if ( apiResult . Success && apiResult . Json != null )
210+ if ( apiResult . Success )
196211 {
197- if ( request . IsPartialRefund )
212+ if ( refundPaymentRequest . IsPartialRefund )
198213 result . NewPaymentStatus = PaymentStatus . PartiallyRefunded ;
199214 else
200215 result . NewPaymentStatus = PaymentStatus . Refunded ;
@@ -212,21 +227,33 @@ public override RefundPaymentResult Refund(RefundPaymentRequest request)
212227 return result ;
213228 }
214229
215- public override VoidPaymentResult Void ( VoidPaymentRequest request )
230+ public override VoidPaymentResult Void ( VoidPaymentRequest voidPaymentRequest )
216231 {
217232 var result = new VoidPaymentResult
218233 {
219- NewPaymentStatus = request . Order . PaymentStatus
234+ NewPaymentStatus = voidPaymentRequest . Order . PaymentStatus
220235 } ;
221236
222- var settings = Services . Settings . LoadSetting < TSetting > ( request . Order . StoreId ) ;
223-
224- var transactionId = request . Order . AuthorizationTransactionId ;
225-
226- if ( transactionId . IsEmpty ( ) )
227- transactionId = request . Order . CaptureTransactionId ;
237+ var settings = Services . Settings . LoadSetting < TSetting > ( voidPaymentRequest . Order . StoreId ) ;
238+ var session = new PayPalSessionData ( ) ;
228239
229- // TODO
240+ var apiResult = PayPalService . EnsureAccessToken ( session , settings ) ;
241+ if ( result . Success )
242+ {
243+ apiResult = PayPalService . Void ( settings , session , voidPaymentRequest ) ;
244+ if ( apiResult . Success )
245+ {
246+ result . NewPaymentStatus = PaymentStatus . Voided ;
247+ }
248+ else
249+ {
250+ result . Errors . Add ( apiResult . ErrorMessage ) ;
251+ }
252+ }
253+ else
254+ {
255+ result . Errors . Add ( apiResult . ErrorMessage ) ;
256+ }
230257
231258 return result ;
232259 }
0 commit comments