#mehrad

1 messages · Page 1 of 1 (latest)

teal kayakBOT
fleet venture
#

hi there

edgy hill
#

Hi, let me help you with this.

fleet venture
#

should I explain more ?

#

if you need I can share the code too

edgy hill
#

Are you sure your middleware/proxy doesn't modify the request body?

fleet venture
#

yes, it will not modify the body

edgy hill
#

Could you please share the code of your handler?

fleet venture
#

yes, just a minute

#

handler code :
func StripeWebhookHandler(meetingService meeting.UseCase, log logger.Logger) Handler {
return func(ctx *fiber.Ctx) error {
logCtx := logger.NewContextWithValue(ctx.Context(), log, nil, 0, 0, 0, 0, ctx.OriginalURL(), log.GetTypeValueHandler())
log.Info(logCtx, "call StripeWebhookHandler")

    payload := ctx.Body()
    secretKey := config.Get().StripeWebhookSecretKey
    logCtx = log.SetRequestBodyToLoggerContext(logCtx, payload)
    log.Info(logCtx, "parse stripe request body")
    if err := meetingService.ProcessStripeEvent(logCtx, secretKey, ctx.GetReqHeaders()["Stripe-Signature"], payload); err != nil {
        logCtx = log.SetStatusCodeToLoggerContext(logCtx, GetHttpStatusCodeFromError(err))
        log.Error(logCtx, err.Error())
        return err
    }
    log.Info(logCtx, "call StripeWebhookHandler successful")
    return nil
}

}

#

processor func :

#

func (s *service) ProcessStripeEvent(ctx context.Context, secretKey string, stringSignature string, eventPayload []byte) error {
ctx = s.log.SetLayerTypeToLoggerContext(ctx, s.log.GetTypeValueService())
s.log.Info(ctx, "ProcessStripeEvent - event received"+" , header : "+stringSignature)
event, err := webhook.ConstructEventIgnoringTolerance(eventPayload, stringSignature, secretKey)
if err != nil {
s.log.Error(ctx, fmt.Sprintf("ProcessStripeEvent - error constructing event: %v", err)+" , header : "+stringSignature+" , secret : "+secretKey)
return err
}
paymentIntentId := fmt.Sprintf("%v", event.Data.Object["id"])
s.log.Debug(ctx, fmt.Sprintf("ProcessStripeEvent - event result: %s paymentIntentId: %s", event.Type, paymentIntentId))
tx, err := s.invoiceRepo.GetTransactionByPaymentIntent(ctx,
paymentIntentId, 0)
if err != nil {
s.log.Error(ctx, fmt.Sprintf("ProcessStripeEvent - error getting transaction by payment intent: %v", err))
return err
}
invoiceEnt, err := s.invoiceRepo.GetInvoiceWithTransactionListById(ctx, tx.InvoiceId)
if err != nil {
s.log.Error(ctx, fmt.Sprintf("ProcessStripeEvent - error getting invoice with transaction list by ID: %v", err))
return err
}

#

switch event.Type {
// when block money
case "payment_intent.amount_capturable_updated":
if invoiceEnt.Status == entity.PaymentStatusPending {
_, _, err = s.PaymentCheckStatus(ctx, paymentIntentId)
if err == nil {
s.log.Info(ctx, "ProcessStripeEvent - payment status check successful")
return nil
}
if err != nil {
s.log.Error(ctx, fmt.Sprintf("ProcessStripeEvent - error checking payment status: %v", err))
}
go func() {
err := s.callShamanPaymentHook(ctx, invoiceEnt.ID)
if err != nil {
s.log.Error(ctx, fmt.Sprintf("ProcessStripeEvent - callShamanPaymentHook and update payment status in doki programs: %v", err.Error()))
}
}()
s.log.Debug(ctx, "GetHomePageUserUpComingList - event received successfully")
return nil
}
// todo add failed Stripe status
default:
s.log.Info(ctx, fmt.Sprintf("ProcessStripeEvent - unhandled event type: %s", event.Type))
}
return nil
}

edgy hill
#

Could you please share the event ID?

fleet venture
#

yes, just a moment

#

"pi_3ODQv4FCUkqKibOg0Mmq5GI9"

#

sorry this is object ID
is this ok ?

edgy hill
#

Yes, but I don't see any errors with delivery of the events associated with this PI.