darajago

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 4, 2023 License: MIT Imports: 19 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// ENVIRONMENT_SANDBOX is the sandbox environment
	ENVIRONMENT_SANDBOX = "sandbox"
	// ENVIRONMENT_PRODUCTION is the production environment
	ENVIRONMENT_PRODUCTION = "production"
)
View Source
const (
	ExpressDefaultCallBackURL = "daraja-payments/mpesa"
)

Variables

This section is empty.

Functions

func MapExpressGinCallBack

func MapExpressGinCallBack(gingroup *gin.RouterGroup, callBackUrl string, callback ExpressCallBackFunc)

MapExpressGinCallBack Register a callback for listening to MPESA requests

Types

type Authorization

type Authorization struct {
	// contains filtered or unexported fields
}

type B2BPayload

type B2BPayload struct {
	// InitiatorName is the initiator name.
	InitiatorName string `json:"InitiatorName"`

	// PassKey is the password generated on the Safaricom portal.
	PassKey string `json:"SecurityCredential"`

	// CommandID is the command ID.
	CommandID string `json:"CommandID"`

	// Amount is the amount to be transferred.
	Amount string `json:"Amount"`

	// PartyA is the party A (the organization making the payment).
	PartyA string `json:"PartyA"`

	// PartyB is the party B (the customer receiving the payment).
	PartyB string `json:"PartyB"`

	// Remarks are any remarks for the request.
	Remarks string `json:"Remarks"`

	// QueueTimeOutURL is the queue timeout URL.
	QueueTimeOutURL string `json:"QueueTimeOutURL"`

	// ResultURL is the result URL.
	ResultURL string `json:"ResultURL"`

	// Occasion is the occasion for the payment.
	Occasion string `json:"Occasion"`
}

B2BPayload represents a request payload for the B2C API.

type B2BResponse

type B2BResponse struct {
	OriginatorConversationID string `json:"OriginatorConversationID"`
	ConversationID           string `json:"ConversationID"`
	ResponseDescription      string `json:"ResponseDescription"`
}

B2BResponse is the response from the C2BPayload API

type B2CCommandID

type B2CCommandID string

B2CCommandID is a type that represents the command ID for a B2C payment.

const (
	// B2CCommandIDSalaryPayment is a command ID for a salary payment.
	B2CCommandIDSalaryPayment B2CCommandID = "SalaryPayment"
	// B2CCommandIDBusinessPayment is a command ID for a business payment.
	B2CCommandIDBusinessPayment B2CCommandID = "BusinessPayment"
	// B2CCommandIDPromotionPayment is a command ID for a promotion payment.
	B2CCommandIDPromotionPayment B2CCommandID = "PromotionPayment"
)

type B2CPayload

type B2CPayload struct {
	// InitiatorName is the initiator name.
	// This is the API operator's username as set on the portal when the user was created.
	// For Sandbox users, the username is already created and assigned to them and is available
	// on the docs credentials page as Initiator Name (Shortcode 1).
	InitiatorName string `json:"InitiatorName"`

	// PassKey is the security credential.
	PassKey string `json:"PassKey"`

	// CommandID eg.
	//
	//· SalaryPayment
	//
	//· BusinessPayment
	//
	//· PromotionPayment
	CommandID B2CCommandID `json:"CommandID"`

	// Amount is the amount to be transferred.
	Amount string `json:"Amount"`

	// PartyA is the party A (the organization making the payment).
	// This is the B2C organization shortcode from which the money is sent from.
	PartyA string `json:"PartyA"`

	// PartyB is the party B (the customer receiving the payment).
	// This is the customer mobile number to receive the amount.
	//-The number should have the country code (254) without the plus sign.
	PartyB string `json:"PartyB"`

	// Remarks are any remarks for the request.
	Remarks string `json:"Remarks"`

	// QueueTimeOutURL is the queue timeout URL.
	// This is the URL to be specified in your request that will be used by API Proxy
	// to send notification in case the payment request is timed out while awaiting processing in the queue.
	QueueTimeOutURL string `json:"QueueTimeOutURL"`

	// ResultURL is the result URL.
	ResultURL string `json:"ResultURL"`

	// Occasion is the occasion for the payment.
	// Any additional information to be associated with the transaction.
	Occasion string `json:"Occasion"`
}

B2CPayload represents a request payload for the B2C API.

type B2CResponse

type B2CResponse struct {
	// OriginatorConversationID is the unique request ID for tracking a transaction.
	OriginatorConversationID string `json:"OriginatorConversationID"`

	// ConversationID is the unique request ID returned by Mpesa for each request made.
	ConversationID string `json:"ConversationID"`

	// ResponseDescription is the response description message.
	ResponseDescription string `json:"ResponseDescription"`
}

B2CResponse is the response from the B2C API

type BalanceQuery

type BalanceQuery struct {
	Initiator          string `json:"Initiator"`
	SecurityCredential string `json:"SecurityCredential"`
	CommandID          string `json:"CommandID"`
	PartyA             string `json:"PartyA"`
	IdentifierType     string `json:"IdentifierType"`
	Remarks            string `json:"Remarks"`
	QueueTimeOutURL    string `json:"QueueTimeOutURL"`
	ResultURL          string `json:"ResultURL"`
}

BalanceQuery is used to query the balance of an M-Pesa account

type C2BPayload

type C2BPayload struct {
	ShortCode     string `json:"ShortCode"`
	CommandID     string `json:"CommandID"`
	Amount        string `json:"Amount"`
	Msisdn        string `json:"Msisdn"`
	BillRefNumber string `json:"BillRefNumber"`
}

C2BPayload Simulate paying bills online

type C2BRegistrationPayload

type C2BRegistrationPayload struct {
	// ValidationURL is the URL that receives the validation request from the API upon payment submission.
	// The validation URL is only called if the external validation on the registered shortcode is enabled.
	ValidationURL string `json:"ValidationURL"`

	// ConfirmationURL is the URL that receives the confirmation request from the API upon payment completion.
	ConfirmationURL string `json:"ConfirmationURL"`

	// ResponseType specifies what is to happen if the validation URL is not reachable.
	// Only two values are allowed: Completed or Cancelled.
	// Completed means MPesa will automatically complete the transaction,
	// whereas Cancelled means MPesa will automatically cancel the transaction.
	ResponseType string `json:"ResponseType"`

	// ShortCode is the short code of the organization.
	ShortCode string `json:"ShortCode"`
}

C2BRegistrationPayload is the payload for C2BPayload shortcode registration.

type C2BRegistrationResponse

type C2BRegistrationResponse struct {
	OriginatorConversationID string `json:"OriginatorConversationID"`
	ConversationID           string `json:"ConversationID"`
	// ResponseDescription 	This is the status of the request.
	ResponseDescription string `json:"ResponseDescription"`
}

C2BRegistrationResponse is the response from the C2BPayload API

type C2BResponse

type C2BResponse struct {
	OriginatorConversationID string `json:"OriginatorConversationID"`
	ConversationID           string `json:"ConversationID"`
	ResponseDescription      string `json:"ResponseDescription"`
}

C2BResponse is the response from the C2BPayload API

type C2BURLRegistration

type C2BURLRegistration struct {
	ShortCode       string `json:"ShortCode"`
	ResponseType    string `json:"ResponseType"`
	ConfirmationURL string `json:"ConfirmationURL"`
	ValidationURL   string `json:"ValidationURL"`
}

C2BURLRegistration is used to register the confirmation and validation URLs

type CallbackResponse

type CallbackResponse struct {
	Body struct {
		StkCallback struct {
			MerchantRequestID string `json:"MerchantRequestID"`
			CheckoutRequestID string `json:"CheckoutRequestID"`
			ResultCode        int    `json:"ResultCode"`
			ResultDesc        string `json:"ResultDesc"`
			CallbackMetadata  struct {
				Item []struct {
					Name  string      `json:"Name"`
					Value interface{} `json:"Value"`
				} `json:"Item"`
			} `json:"CallbackMetadata"`
		} `json:"stkCallback"`
	} `json:"Body"`
}

type DarajaApi

type DarajaApi struct {
	ConsumerKey    string // Consumer key
	ConsumerSecret string // Consumer secret
	// contains filtered or unexported fields
}

func NewDarajaApi

func NewDarajaApi(consumerKey, consumerSecret string, environment Environment) *DarajaApi

NewDarajaApi is a function that creates a new DarajaApi struct. It takes a consumer key, a consumer secret, and an Environment as input, and returns a pointer to the DarajaApi struct.

func (*DarajaApi) Authorize

func (d *DarajaApi) Authorize() (*Authorization, error)

Authorize is a function that retrieves an authorization token from the Mpesa API. It returns an Authorization struct representing the authorization token, or an error if an error occurred during the request.

func (*DarajaApi) MakeB2BPayment

func (d *DarajaApi) MakeB2BPayment(b2c B2BPayload, certPath string) (*B2CResponse, *ErrorResponse)

MakeB2BPayment makes a B2C payment.

func (*DarajaApi) MakeB2CPayment

func (d *DarajaApi) MakeB2CPayment(b2c B2CPayload, certPath string) (*B2CResponse, *ErrorResponse)

MakeB2CPayment is a function that makes a B2C payment using the Mpesa API. It takes a B2CPayload struct representing the payment request payload as input, and returns a pointer to a B2CResponse struct representing the payment response, or a pointer to an ErrorResponse struct representing an error that occurred during the request.

func (*DarajaApi) MakeC2BPayment

func (d *DarajaApi) MakeC2BPayment(c2b C2BPayload) (*C2BResponse, *ErrorResponse)

func (*DarajaApi) MakeC2BPaymentV2

func (d *DarajaApi) MakeC2BPaymentV2(c2b C2BPayload) (*C2BResponse, *ErrorResponse)

func (*DarajaApi) MakeQRCodeRequest

func (d *DarajaApi) MakeQRCodeRequest(payload QRPayload) (*QRResponse, *ErrorResponse)

MakeQRCodeRequest is a function that generates a QR code for a payment. It takes in a QRPayload struct representing the payment configuration, and returns a QRResponse struct representing the response from the QR code generation API, or an ErrorResponse struct representing an error that occurred during the request.

func (*DarajaApi) MakeSTKPushRequest

func (d *DarajaApi) MakeSTKPushRequest(mpesaConfig LipaNaMpesaPayload) (*LipaNaMpesaResponse, *ErrorResponse)

MakeSTKPushRequest is a function that initiates a Lipa Na Mpesa Online payment. It takes in a LipaNaMpesaPayload struct representing the payment configuration, and returns a LipaNaMpesaResponse struct representing the response from the Lipa Na Mpesa API, or an ErrorResponse struct representing an error that occurred during the request.

func (*DarajaApi) QuerySTKPushStatus

func (d *DarajaApi) QuerySTKPushStatus(mpesaConfig STKPushStatusPayload) (*STKPushStatusResponse, *ErrorResponse)

QuerySTKPushStatus is a function that queries the status of a Lipa Na Mpesa Online payment. It takes in a STKPushStatusPayload struct representing the payment configuration, and returns a STKPushStatusResponse struct representing the response from the Lipa Na Mpesa API, or an ErrorResponse struct representing an error that occurred during the request.

func (*DarajaApi) RegisterC2BCallback

func (d *DarajaApi) RegisterC2BCallback(payload C2BRegistrationPayload) (*C2BRegistrationResponse, *ErrorResponse)

func (*DarajaApi) ReverseTransaction

func (d *DarajaApi) ReverseTransaction(transation ReversalPayload, certPath string) (*ReversalResponse, *ErrorResponse)

type Environment

type Environment string

type ErrorResponse

type ErrorResponse struct {
	RequestID    string `json:"requestId"`
	ErrorCode    string `json:"errorCode"`
	ErrorMessage string `json:"errorMessage"`

	Raw []byte `json:"-"`
	// contains filtered or unexported fields
}

func (ErrorResponse) Error

func (e ErrorResponse) Error() string

type ExpressCallBackFunc

type ExpressCallBackFunc func(response *CallbackResponse, request *http.Request, err error)

ExpressCallBackFunc A function called after MPESA API sends a request

type LipaNaMpesaPayload

type LipaNaMpesaPayload struct {
	BusinessShortCode string `json:"BusinessShortCode"`
	Password          string `json:"Password"`
	Timestamp         string `json:"Timestamp"`
	TransactionType   string `json:"TransactionType"`
	Amount            string `json:"Amount"`
	PartyA            string `json:"PartyA"`
	PartyB            string `json:"PartyB"`
	PhoneNumber       string `json:"PhoneNumber"`
	CallBackURL       string `json:"CallBackURL"`
	AccountReference  string `json:"AccountReference"`
	TransactionDesc   string `json:"TransactionDesc"`
}

LipaNaMpesaPayload is used to initiate a transaction on Lipa Na M-Pesa Online Payment

type LipaNaMpesaResponse

type LipaNaMpesaResponse struct {
	// MerchantRequestID is the unique request ID for tracking a transaction.
	MerchantRequestID string `json:"MerchantRequestID"`

	// CheckoutRequestID is the unique request ID for the checkout process.
	CheckoutRequestID string `json:"CheckoutRequestID"`

	// ResponseCode is the response code for the request.
	ResponseCode string `json:"ResponseCode"`

	// ResponseDescription is a description of the response.
	ResponseDescription string `json:"ResponseDescription"`

	// CustomerMessage is a message for the customer.
	CustomerMessage string `json:"CustomerMessage"`
}

LipaNaMpesaResponse represents a response from the Lipa Na Mpesa API.

type QRPayload

type QRPayload struct {
	// MerchantName is the merchant name.
	MerchantName string `json:"MerchantName"`

	// RefNo is the reference number.
	RefNo string `json:"RefNo"`

	// Amount is the amount to be paid.
	Amount int `json:"Amount"`

	// TransactionType is the transaction code.
	//Transaction Type. The supported types are:
	//
	//BG: Pay Merchant (Buy Goods).
	//
	//WA: Withdraw Cash at Agent Till.
	//
	//PB: Paybill or Business number.
	//
	//SM: Send Money(Mobile number).
	//
	//SB: Sent to Business. Business number CreditPartyIdentifier in MSISDN format.
	TransactionType TransactionType `json:"TrxCode"`

	// CreditPartyIdentifier Credit Party Identifier. Can be a Mobile Number, Business Number,
	//Agent Till, Paybill or Business number, Merchant Buy Goods.
	CreditPartyIdentifier string `json:"CPI"`
}

QRPayload represents a request payload for a QR code payment.

type QRResponse

type QRResponse struct {
	// ResponseCode is the response code.
	ResponseCode string `json:"ResponseCode"`

	// RequestID is the request ID.
	RequestID string `json:"RequestID"`

	// ResponseDescription is the response description.
	ResponseDescription string `json:"ResponseDescription"`

	// QRCode is the QR code as a base64-encoded string.
	QRCode string `json:"QRCode"`
}

QRResponse represents a response from a QR code payment request.

type RegisterURLConfig

type RegisterURLConfig struct {
	ShortCode       string `json:"ShortCode"`
	ResponseType    string `json:"ResponseType"`
	ConfirmationURL string `json:"ConfirmationURL"`
	ValidationURL   string `json:"ValidationURL"`
}

type ReversalPayload

type ReversalPayload struct {
	Initiator              string `json:"Initiator"`
	PassKey                string `json:"SecurityCredential"`
	CommandID              string `json:"CommandID"`
	TransactionID          string `json:"TransactionID"`
	Amount                 string `json:"Amount"`
	ReceiverParty          string `json:"ReceiverParty"`
	RecieverIdentifierType string `json:"RecieverIdentifierType"`
	ResultURL              string `json:"ResultURL"`
	QueueTimeOutURL        string `json:"QueueTimeOutURL"`
	Remarks                string `json:"Remarks"`
	Occasion               string `json:"Occasion"`
}

type ReversalResponse

type ReversalResponse struct {
	// OriginatorConversationID is the unique request ID for tracking a transaction.
	OriginatorConversationID string `json:"OriginatorConversationID"`

	// ConversationID is the unique request ID returned by mpesa for each request made.
	ConversationID string `json:"ConversationID"`

	// ResponseDescription is the response description message.
	ResponseDescription string `json:"ResponseDescription"`
}

ReversalResponse represents a response from the Mpesa Reversal.

type STKPushStatusPayload

type STKPushStatusPayload struct {
	BusinessShortCode string `json:"BusinessShortCode"`
	Password          string `json:"Password"`
	Timestamp         string `json:"Timestamp"`
	CheckoutRequestID string `json:"CheckoutRequestID"`
}

STKPushStatusPayload is used to check the status of a transaction on Lipa Na M-Pesa Online Payment

type STKPushStatusResponse

type STKPushStatusResponse struct {
	// MerchantRequestID	This is a global unique Identifier for any submited payment request.	String	16813-1590513-1
	MerchantRequestID string `json:"MerchantRequestID"`

	// CheckoutRequestID	This is a global unique Identifier for the processed payment request.	String	ws_CO_DMZ_1234567890
	CheckoutRequestID string `json:"CheckoutRequestID"`

	// ResponseCode This is a Numeric status code that indicates the status of the transaction submission. 0 means successful submission and any other code means an error occured. 	Numeric	0\
	ResponseCode string `json:"ResponseCode"`

	// ResponseDescription	This is a description of the response code.	String	Success. Request accepted for processing
	ResponseDescription string `json:"ResponseDescription"`

	//ResultDesc	Result description is a message from the API that gives the status of the request processing, usualy maps to a specific ResultCode value. It can be a Success processing message or an error description message.	String	E.g: 0: The service request is processed successfully., 1032: Request cancelled by user
	ResultDesc string `json:"ResultDesc"`

	// ResultCode	This is a numeric status code that indicates the status of the transaction processing. 0 means successful processing and any other code means an error occured or the transaction failed.	Numeric	0, 1032
	ResultCode string `json:"ResultCode"`
}

STKPushStatusResponse represents a response from the Lipa Na Mpesa API.

type TransactionStatus

type TransactionStatus struct {
	Initiator          string `json:"Initiator"`
	SecurityCredential string `json:"SecurityCredential"`
	CommandID          string `json:"CommandID"`
	TransactionID      string `json:"TransactionID"`
	PartyA             string `json:"PartyA"`
	IdentifierType     string `json:"IdentifierType"`
	ResultURL          string `json:"ResultURL"`
	QueueTimeOutURL    string `json:"QueueTimeOutURL"`
	Remarks            string `json:"Remarks"`
	Occasion           string `json:"Occasion"`
}

type TransactionType

type TransactionType string
const (
	TransactionTypeBuyGoods       TransactionType = "BG"
	TransactionTypePayBill        TransactionType = "PB"
	TransactionTypeWithdraw       TransactionType = "WA" // Withdraw Cash at Agent Till.
	TransactionTypeSendMoney      TransactionType = "SM" // Send Money to a Phone Number.
	TransactionTypeSendtoBusiness TransactionType = "SB" // Send Money to a Business.
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL