Added payment update action
This commit is contained in:
1 parent
b6203d8a03
commit
fe6f3b6672
12 files changed
+420
-105
No files matched your search
+46
-20
@@ -12,29 +12,53 @@ import (
|
||||
)
|
||||
|
||||
type Service struct {
|
||||
Provider *database.PaymentEntryProvider
|
||||
ApiKey string
|
||||
BackendUrl string
|
||||
}
|
||||
|
||||
func (s *Service) CreatePaymentUrl(amount int64) (url string, err error) {
|
||||
entry, err := s.Provider.CreateEntry(database.PaymentEntry{
|
||||
Gateway: state.GatewayStripe,
|
||||
State: state.StateInitialized,
|
||||
TotalAmount: amount,
|
||||
})
|
||||
func (s *Service) UpdatePayment(entry database.PaymentEntry) (updatedEntry database.PaymentEntry, err error) {
|
||||
pi, err := paymentintent.Get(*entry.PaymentIntentId, nil)
|
||||
if err != nil {
|
||||
return "", err
|
||||
return entry, err
|
||||
}
|
||||
entry, url, err = s.InitializePayment(entry)
|
||||
newState := determineState(pi.Status)
|
||||
|
||||
if entry.State != newState && newState != "" {
|
||||
log.Printf("Updated state for %s: %s -> %s", entry.Id.String(), entry.State, newState)
|
||||
if pi.AmountReceived > 0 {
|
||||
entry.Amount = &pi.AmountReceived
|
||||
}
|
||||
entry.State = newState
|
||||
}
|
||||
return entry, nil
|
||||
}
|
||||
|
||||
func determineState(status stripe.PaymentIntentStatus) state.PaymentState {
|
||||
switch status {
|
||||
case stripe.PaymentIntentStatusCanceled:
|
||||
return state.StateCanceled
|
||||
case stripe.PaymentIntentStatusProcessing:
|
||||
return state.StatePending
|
||||
case stripe.PaymentIntentStatusRequiresAction:
|
||||
return state.StatePending
|
||||
case stripe.PaymentIntentStatusRequiresCapture:
|
||||
return state.StateAccepted
|
||||
case stripe.PaymentIntentStatusRequiresConfirmation:
|
||||
return state.StatePending
|
||||
case stripe.PaymentIntentStatusRequiresPaymentMethod:
|
||||
return state.StateVoided
|
||||
case stripe.PaymentIntentStatusSucceeded:
|
||||
return state.StateCompleted
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (s *Service) CreatePaymentUrl(entry database.PaymentEntry) (database.PaymentEntry, string, error) {
|
||||
entry, url, err := s.InitializePayment(entry)
|
||||
if err != nil {
|
||||
return "", err
|
||||
return entry, "", err
|
||||
}
|
||||
entry, err = s.Provider.UpdateEntry(entry)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return url, nil
|
||||
return entry, url, nil
|
||||
}
|
||||
|
||||
func (s *Service) InitializePayment(entry database.PaymentEntry) (database.PaymentEntry, string, error) {
|
||||
@@ -68,6 +92,7 @@ func (s *Service) InitializePayment(entry database.PaymentEntry) (database.Payme
|
||||
if err != nil {
|
||||
return database.PaymentEntry{}, "", err
|
||||
}
|
||||
entry.State = state.StateInitialized
|
||||
entry.PaymentIntentId = &result.PaymentIntent.ID
|
||||
|
||||
return entry, result.URL, nil
|
||||
@@ -82,9 +107,10 @@ func (s *Service) CompleteTransaction(entry database.PaymentEntry, amount int64)
|
||||
return database.PaymentEntry{}, err
|
||||
}
|
||||
log.Printf("received state on completion: %v", pi.Status)
|
||||
if pi.Status == stripe.PaymentIntentStatusSucceeded || pi.Status == stripe.PaymentIntentStatusProcessing {
|
||||
newState := determineState(pi.Status)
|
||||
entry.State = newState
|
||||
if newState == state.StateCompleted || newState == state.StatePending {
|
||||
entry.Amount = &pi.AmountReceived
|
||||
entry.State = state.StateCompleted
|
||||
}
|
||||
return entry, nil
|
||||
}
|
||||
@@ -102,13 +128,13 @@ func (s *Service) CancelTransaction(entry database.PaymentEntry) (database.Payme
|
||||
return entry, nil
|
||||
}
|
||||
|
||||
func (s *Service) HandleResponse(c *gin.Context, paymentState state.PaymentState) (string, error) {
|
||||
func (s *Service) HandleResponse(c *gin.Context, provider *database.PaymentEntryProvider, paymentState state.PaymentState) (string, error) {
|
||||
id := uuid.MustParse(c.Query("token"))
|
||||
entry, err := s.Provider.FetchById(id)
|
||||
entry, err := provider.FetchById(id)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
entry.State = paymentState
|
||||
s.Provider.UpdateEntry(entry)
|
||||
provider.UpdateEntry(entry)
|
||||
return "/entries/" + entry.Id.String(), nil
|
||||
}
|
||||
Reference in new issue
Block a user