github.com/companieshouse/lfp-pay-api@v0.0.0-20230203133422-0ca455cd79f9/service/payment_service.go (about)

     1  package service
     2  
     3  import (
     4  	"net/http"
     5  
     6  	"github.com/companieshouse/chs.go/log"
     7  	"github.com/companieshouse/go-sdk-manager/manager"
     8  	"github.com/companieshouse/lfp-pay-api-core/validators"
     9  )
    10  
    11  // GetPaymentInformation will attempt to get the payment resource from the payment platform.
    12  // this can then be used to validate the state of a payment.
    13  func GetPaymentInformation(id string, req *http.Request) (*validators.PaymentInformation, error) {
    14  	publicSDK, err := manager.GetSDK(req)
    15  	if err != nil {
    16  		log.Error(err, log.Data{"payment_id": id})
    17  		return nil, err
    18  	}
    19  
    20  	paymentResource, err := publicSDK.Payments.Get(id).Do()
    21  	if err != nil {
    22  		log.Error(err, log.Data{"payment_id": id})
    23  		return nil, err
    24  	}
    25  
    26  	privateSDK, err := manager.GetPrivateSDK(req)
    27  	if err != nil {
    28  		log.Error(err, log.Data{"payment_id": id})
    29  		return nil, err
    30  	}
    31  
    32  	paymentDetails, err := privateSDK.Payments.GetPaymentDetails(id).Do()
    33  	if err != nil {
    34  		log.Error(err, log.Data{"payment_id": id})
    35  		return nil, err
    36  	}
    37  
    38  	paymentInformation := &validators.PaymentInformation{
    39  		PaymentID:         id,
    40  		CompletedAt:       paymentResource.CompletedAt,
    41  		CreatedBy:         paymentResource.CreatedBy.Email,
    42  		Amount:            paymentResource.Amount,
    43  		Status:            paymentResource.Status,
    44  		Reference:         paymentResource.Reference,
    45  		ExternalPaymentID: paymentDetails.ExternalPaymentID,
    46  		CardType:          paymentDetails.CardType,
    47  	}
    48  
    49  	return paymentInformation, nil
    50  }