stripe / stripe-terminal-ios

Stripe Terminal iOS SDK
https://stripe.com/docs/terminal/sdk/ios
Other
105 stars 65 forks source link

WisePOS E transactions missing Charge.paymentMethodDetails.cardPresent object when a card is used #286

Closed matthewryan closed 8 months ago

matthewryan commented 9 months ago

Summary

On February 10, ~11am AEST time (GMT+11) we noticed that our US clients using the WisePOS E terminals were unable to capture their payments.

(lldb) po paymentIntent.charges.first?.paymentMethodDetails
▿ Optional<SCPPaymentMethodDetails>
  - some : <SCPPaymentMethodDetails: 0x135faede0; cardPresent = (null); interacPresent = (null); type = card_present>

Subsequent investigation suggests that the Charge.paymentMethodDetails.cardPresent value is missing from the resultant PaymentIntent.charges of Terminal.processPayment(_) -- we use the data in this object for extra record keeping and halt the capture of payment without this information.

This value was returned as expected during implementation, test, and many months of production usage. API/SDK documentation suggests that the field is nullable but should be populated when the transaction is "card present". The type of the payment method details is confirmed as .cardPresent as above in the debug output block.

https://stripe.dev/stripe-terminal-ios/docs/Classes/SCPPaymentMethodDetails.html#/c:objc(cs)SCPPaymentMethodDetails(py)cardPresent

The raw API responses do include these values as captured in the dashboard event: https://dashboard.stripe.com/test/events/evt_3OiTeMDGO95FH5Z415s59znN

Transactions from other card terminals (WisePOS 3 and M2) appear to be unaffected.

iOS version

17.*

Installation method

SPM

SDK version

2.10.2 thru 2.23.2 (I haven't tried 3.+ as it's breaking on our current implementation)

Thanks! Matt

bric-stripe commented 9 months ago

Hi, sorry for the trouble here. We've been able to reproduce the issue with 2.x SDKs and are investigating fixes. There is an incompatibility with the response from the reader to the SDK.

I realize this may not be very helpful as it would require potentially significant client changes for you but in case it helps: you can get at the raw JSON dictionary for payment method details with paymentIntent.charges.first?.paymentMethodDetails?.originalJSON which will have the card_present field.

Will update with more info with a fix as we have it.

bric-stripe commented 9 months ago

I can't provide a timeline yet but wanted to let you know we're working on a fix to deploy to the readers to fix this up.

matthewryan commented 9 months ago

Thank you!

bric-stripe commented 8 months ago

A reader update to version 2.20.4.0 (seen in the lower left when you swipe right on the reader) has been shipped to address this. I'm going to close out this issue but please re-open and let us know if still seeing issues on readers that have been updated.

matthewryan commented 8 months ago

Thanks @bric-stripe, I will check it out shortly.