feat: add zohal pkg and http util
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
package zohal
|
||||
|
||||
type respMatched struct {
|
||||
Matched bool `json:"matched"`
|
||||
}
|
||||
type personIdentity struct {
|
||||
Matched bool `json:"matched"`
|
||||
LastName string `json:"last_name"`
|
||||
FirstName string `json:"first_name"`
|
||||
FatherName string `json:"father_name"`
|
||||
NationalCode string `json:"national_code"`
|
||||
IsDead bool `json:"is_dead"`
|
||||
Alive bool `json:"alive"`
|
||||
}
|
||||
type respBody[T any] struct {
|
||||
Data T `json:"data"`
|
||||
Message string `json:"message"`
|
||||
}
|
||||
type zohalResp[T any] struct {
|
||||
StatusCode int `json:"status_code"`
|
||||
Body respBody[T] `json:"response_body"`
|
||||
}
|
||||
|
||||
type (
|
||||
// https://service.zohal.io/api/v0/services/inquiry/shahkar
|
||||
ZohalShahkarReq struct {
|
||||
Phone string `json:"mobile"`
|
||||
NationalID string `json:"national_code"`
|
||||
}
|
||||
ZohalShahkarResp struct {
|
||||
zohalResp[respMatched]
|
||||
}
|
||||
// https://service.zohal.io/api/v0/services/inquiry/national_identity_inquiry
|
||||
ZohalIdentityReq struct {
|
||||
NationalID string `json:"national_code"`
|
||||
BirthDate string `json:"birth_date"`
|
||||
}
|
||||
ZohalIdentityResp struct {
|
||||
zohalResp[personIdentity]
|
||||
}
|
||||
// https://service.zohal.io/api/v0/services/inquiry/check_iban_with_national_code
|
||||
ZohalIbanReq struct {
|
||||
NationalID string `json:"national_code"`
|
||||
IBAN string `json:"IBAN"`
|
||||
BirthDate string `json:"birth_date"`
|
||||
}
|
||||
ZohalIbanResp struct {
|
||||
zohalResp[respMatched]
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,63 @@
|
||||
package zohal
|
||||
|
||||
import (
|
||||
"backend/config"
|
||||
"backend/pkg/util"
|
||||
"backend/pkg/validate/common"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"net/url"
|
||||
)
|
||||
|
||||
type Zohal struct {
|
||||
cfg config.KYC
|
||||
}
|
||||
|
||||
func (z *Zohal) Shahkar(ctx context.Context, phone, nationalID string) (ZohalShahkarResp, error) {
|
||||
var req ZohalShahkarReq
|
||||
var resp ZohalShahkarResp
|
||||
ok, err := common.IsValidPhone(phone)
|
||||
if !ok {
|
||||
return resp, err
|
||||
}
|
||||
|
||||
ok, err = common.IsValidNationalID(nationalID)
|
||||
if !ok {
|
||||
return resp, err
|
||||
}
|
||||
|
||||
header := make(map[string]string)
|
||||
header["Content-Type"] = "application/json"
|
||||
header["Accept"] = "application/json"
|
||||
header["Authorization"] = fmt.Sprintf("Bearer %s", z.cfg.APIKey)
|
||||
|
||||
req.Phone = phone
|
||||
req.NationalID = nationalID
|
||||
|
||||
u, err := url.Parse(z.cfg.URL)
|
||||
if err != nil {
|
||||
return resp, err
|
||||
}
|
||||
u = u.JoinPath("inquiry", "shahkar")
|
||||
|
||||
client := util.NewHttpClient()
|
||||
clientResp, err := client.HttpRequest(ctx, http.MethodPost, u.String(), req, header)
|
||||
if err != nil {
|
||||
return resp, err
|
||||
}
|
||||
|
||||
bodyBytes, err := io.ReadAll(clientResp.Body)
|
||||
if err != nil {
|
||||
return resp, err
|
||||
}
|
||||
|
||||
err = json.Unmarshal(bodyBytes, &resp)
|
||||
if err != nil {
|
||||
return resp, err
|
||||
}
|
||||
|
||||
return resp, err
|
||||
}
|
||||
Reference in New Issue
Block a user