| 1 |  |  | package flutterwave | 
            
                                                                                                            
                            
            
                                    
            
            
                | 2 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 3 |  |  | import ( | 
            
                                                                                                            
                            
            
                                    
            
            
                | 4 |  |  | 	"context" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 5 |  |  | 	"encoding/json" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 6 |  |  | 	"net/http" | 
            
                                                                                                            
                            
            
                                    
            
            
                | 7 |  |  | ) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 8 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 9 |  |  | // billsService is the API client for the `/gateway` endpoint | 
            
                                                                                                            
                            
            
                                    
            
            
                | 10 |  |  | type billsService service | 
            
                                                                                                            
                            
            
                                    
            
            
                | 11 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 12 |  |  | // CreatePayment creates bill payments. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 13 |  |  | // | 
            
                                                                                                            
                            
            
                                    
            
            
                | 14 |  |  | // API Docs: https://developer.flutterwave.com/reference/create-a-bill-payment | 
            
                                                                                                            
                            
            
                                    
            
            
                | 15 |  |  | func (service *billsService) CreatePayment(ctx context.Context, payload *BillsCreatePaymentRequest) (*BillsCreatePaymentResponse, *Response, error) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 16 |  |  | 	request, err := service.client.newRequest(ctx, http.MethodPost, "/v3/bills", payload) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 17 |  |  | 	if err != nil { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 18 |  |  | 		return nil, nil, err | 
            
                                                                                                            
                            
            
                                    
            
            
                | 19 |  |  | 	} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 20 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 21 |  |  | 	response, err := service.client.do(request) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 22 |  |  | 	if err != nil { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 23 |  |  | 		return nil, response, err | 
            
                                                                                                            
                            
            
                                    
            
            
                | 24 |  |  | 	} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 25 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 26 |  |  | 	var data BillsCreatePaymentResponse | 
            
                                                                                                            
                            
            
                                    
            
            
                | 27 |  |  | 	if err = json.Unmarshal(*response.Body, &data); err != nil { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 28 |  |  | 		return nil, response, err | 
            
                                                                                                            
                            
            
                                    
            
            
                | 29 |  |  | 	} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 30 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 31 |  |  | 	return &data, response, nil | 
            
                                                                                                            
                            
            
                                    
            
            
                | 32 |  |  | } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 33 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 34 |  |  | // Validate validates services like DSTV smartcard number, Meter number etc. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 35 |  |  | // | 
            
                                                                                                            
                            
            
                                    
            
            
                | 36 |  |  | // API Docs: https://developer.flutterwave.com/reference/validate-bill-service | 
            
                                                                                                            
                            
            
                                    
            
            
                | 37 |  |  | func (service *billsService) Validate(ctx context.Context, itemCode string, billerCode string, customer string) (*BillsValidateResponse, *Response, error) { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 38 |  |  | 	request, err := service.client.newRequest(ctx, http.MethodGet, "/v3/bill-items/"+itemCode+"/validate", nil) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 39 |  |  | 	if err != nil { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 40 |  |  | 		return nil, nil, err | 
            
                                                                                                            
                            
            
                                    
            
            
                | 41 |  |  | 	} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 42 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 43 |  |  | 	request = service.client.addURLParams(request, map[string]string{ | 
            
                                                                                                            
                            
            
                                    
            
            
                | 44 |  |  | 		"code":     billerCode, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 45 |  |  | 		"customer": customer, | 
            
                                                                                                            
                            
            
                                    
            
            
                | 46 |  |  | 	}) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 47 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 48 |  |  | 	response, err := service.client.do(request) | 
            
                                                                                                            
                            
            
                                    
            
            
                | 49 |  |  | 	if err != nil { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 50 |  |  | 		return nil, response, err | 
            
                                                                                                            
                            
            
                                    
            
            
                | 51 |  |  | 	} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 52 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 53 |  |  | 	var data BillsValidateResponse | 
            
                                                                                                            
                            
            
                                    
            
            
                | 54 |  |  | 	if err = json.Unmarshal(*response.Body, &data); err != nil { | 
            
                                                                                                            
                            
            
                                    
            
            
                | 55 |  |  | 		return nil, response, err | 
            
                                                                                                            
                            
            
                                    
            
            
                | 56 |  |  | 	} | 
            
                                                                                                            
                            
            
                                    
            
            
                | 57 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 58 |  |  | 	return &data, response, nil | 
            
                                                                                                            
                            
            
                                    
            
            
                | 59 |  |  | } | 
            
                                                                                                            
                            
            
                                    
            
            
                | 60 |  |  |  | 
            
                                                                                                            
                            
            
                                    
            
            
                | 61 |  |  | // GetStatusVerbose gets the verbose status of a bill payment. | 
            
                                                                                                            
                            
            
                                    
            
            
                | 62 |  |  | // | 
            
                                                                                                            
                                                                
            
                                    
            
            
                | 63 |  |  | // API Docs: https://developer.flutterwave.com/reference/get-status-of-a-bill-payment | 
            
                                                        
            
                                    
            
            
                | 64 |  |  | func (service *billsService) GetStatusVerbose(ctx context.Context, transactionReference string) (*BillsStatusVerboseResponse, *Response, error) { | 
            
                                                        
            
                                    
            
            
                | 65 |  |  | 	request, err := service.client.newRequest(ctx, http.MethodGet, "/v3/bills/"+transactionReference, map[string]int{"verbose": 1}) | 
            
                                                        
            
                                    
            
            
                | 66 |  |  | 	if err != nil { | 
            
                                                        
            
                                    
            
            
                | 67 |  |  | 		return nil, nil, err | 
            
                                                        
            
                                    
            
            
                | 68 |  |  | 	} | 
            
                                                        
            
                                    
            
            
                | 69 |  |  |  | 
            
                                                        
            
                                    
            
            
                | 70 |  |  | 	response, err := service.client.do(request) | 
            
                                                        
            
                                    
            
            
                | 71 |  |  | 	if err != nil { | 
            
                                                        
            
                                    
            
            
                | 72 |  |  | 		return nil, response, err | 
            
                                                        
            
                                    
            
            
                | 73 |  |  | 	} | 
            
                                                        
            
                                    
            
            
                | 74 |  |  |  | 
            
                                                        
            
                                    
            
            
                | 75 |  |  | 	var data BillsStatusVerboseResponse | 
            
                                                        
            
                                    
            
            
                | 76 |  |  | 	if err = json.Unmarshal(*response.Body, &data); err != nil { | 
            
                                                        
            
                                    
            
            
                | 77 |  |  | 		return nil, response, err | 
            
                                                        
            
                                    
            
            
                | 78 |  |  | 	} | 
            
                                                        
            
                                    
            
            
                | 79 |  |  |  | 
            
                                                        
            
                                    
            
            
                | 80 |  |  | 	return &data, response, nil | 
            
                                                        
            
                                    
            
            
                | 81 |  |  | } | 
            
                                                        
            
                                    
            
            
                | 82 |  |  |  |