Skip to content

Instantly share code, notes, and snippets.

@bryanjhv
Created June 28, 2021 22:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bryanjhv/85d7af8a68cd5119be2326415f313001 to your computer and use it in GitHub Desktop.
Save bryanjhv/85d7af8a68cd5119be2326415f313001 to your computer and use it in GitHub Desktop.
package main
import (
"bytes"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
"regexp"
"strings"
)
type JNE struct {
// Request
DNI string `json:"CODDNI,omitempty"`
// Response
Data string `json:"data,omitempty"`
Success bool `json:"success,omitempty"`
Mensaje string `json:"mensaje,omitempty"`
}
func main() {
log.SetFlags(0)
if len(os.Args) < 2 {
log.Fatalf("USAGE:\n\t%s {number}\n", os.Args[0])
}
dni := os.Args[1]
if matched, _ := regexp.MatchString(`^\d{8}$`, dni); !matched {
log.Fatalln("ERROR: Argument is not numeric.")
}
result, err := query(dni)
if err != nil {
log.Fatalln(err)
}
parts := strings.Split(result, "|")
fmt.Println("DNI NUM:", parts[0])
fmt.Println("PATERNO:", parts[1])
fmt.Println("MATERNO:", parts[2])
fmt.Println("NOMBRES:", parts[3])
}
func query(dni string) (string, error) {
model := JNE{DNI: dni}
data, err := json.Marshal(model)
if err != nil {
return "", err
}
req, err := http.NewRequest("POST", "https://aplicaciones007.jne.gob.pe/srop_publico/Consulta/api/AfiliadoApi/GetNombresCiudadano", bytes.NewReader(data))
if err != nil {
return "", err
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("RequestVerificationToken", "Dmfiv1Unnsv8I9EoXEzbyQExSD8Q1UY7viyyf_347vRCfO-1xGFvDddaxDAlvm0cZ8XgAKTaWclVFnnsGgoy4aLlBGB5m-E8rGw_ymEcCig1:eq4At-H2zqgXPrPnoiDGFZH0Fdx5a-1UiyVaR4nQlCvYZzAhzmvWxLwkUk6-yORYrBBxEnoG5sm-Hkiyc91so6-nHHxIeLee5p700KE47Cw1")
resp, err := http.DefaultClient.Do(req)
if err != nil {
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
err = json.Unmarshal(body, &model)
if err != nil {
return "", err
}
if !model.Success {
return "", errors.New("jne: not success: " + model.Mensaje)
}
if model.Data == "||" {
return "", errors.New("jne: empty data: " + dni)
}
return dni + "|" + model.Data, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment