in membership-common/src/main/scala/com/gu/zuora/ZuoraSoapService.scala [114:139]
def createCreditCardPaymentMethod(
accountId: AccountId,
stripeCustomer: Stripe.Customer,
paymentGateway: PaymentGateway,
)(implicit logPrefix: LogPrefix): Future[UpdateResult] = {
val card = stripeCustomer.card
for {
r <- setGatewayAndClearDefaultMethod(
accountId,
paymentGateway,
) // We need to set gateway correctly because it must match with the payment method
paymentMethod <- soapClient.authenticatedRequest(
CreateCreditCardReferencePaymentMethod(
accountId = accountId.get,
cardId = card.id,
customerId = stripeCustomer.id,
last4 = card.last4,
cardCountry = CountryGroup.countryByCode(card.country),
expirationMonth = card.exp_month,
expirationYear = card.exp_year,
cardType = card.`type`,
),
)
result <- setDefaultPaymentMethod(accountId, paymentMethod.id, paymentGateway)
} yield result
}