Хайлт

Баримт бичиг болон сервисээс хайна

Жишээ код

v1.5.0 хувилбарын веб сервис дуудах жишээ.


1. HTTP header бэлдэх

Сервис бүрийн хүсэлтэд дараах 3 header заавал байх шаардлагатай:

HeaderТайлбар
accessTokenСистемд олгосон хандалтын токен
timeStampХүсэлт бүрд шинэ утга үүсгэнэ
signatureaccessToken.timeStamp мөрийг RSA-SHA256-аартоон гарын үсэг үүсгэж Base64 болгосон утга

Тоон гарын үсэг үүсгэх:

text
keyData   = accessToken + "." + timeStamp
signature = Base64( RSA_SHA256_Sign(privateKey, keyData) )
js
import crypto from 'crypto'
import fs from 'fs'

const accessToken = 'YOUR_ACCESS_TOKEN'
const timeStamp = Math.floor(Date.now() / 1000) // Unix timestamp
const keyData = `${accessToken}.${timeStamp}`

const privateKey = fs.readFileSync('./private.pem') // RSA хувийн түлхүүр

const signer = crypto.createSign('SHA256')
signer.update(keyData, 'utf8')
signer.end()
const signature = signer.sign(privateKey, 'base64')

2. Request body угсарах

authType утгууд

auth блок доторх authType талбар иргэний баталгаажуулалтын аргыг заана:

authTypeАргаШаардагдах талбар
1SMS OTPotp, regnum
2Тоон гарын үсэгsignature, certFingerprint, regnum
3Хурууны хээfingerprint, regnum
4SSO OTPotp, regnum
5ДАН апп-р баталгаажуулахregnum

Ашиглахгүй байгаа талбарыг null (JSON) эсвэл хоосон (XML) утгаар дамжуулна.

Жишээ body

WS100101_getCitizenIDCardInfo сервисийг иргэн баталгаажуулалтай дуудах

xml
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:tns="http://citizen.xyp.gov.mn/">
  <soap:Body>
    <tns:WS100101_getCitizenIDCardInfo>
      <request>
        <regnum>РД00000000</regnum>
        <auth>
          <citizen>
            <authType>1</authType>   <!-- 1–6, дээрх хүснэгт харна уу -->
            <otp></otp>
            <fingerprint></fingerprint>
            <signature></signature>
            <certFingerprint></certFingerprint>
          </citizen>
        </auth>
      </request>
    </tns:WS100101_getCitizenIDCardInfo>
  </soap:Body>
</soap:Envelope>

3. Бүрэн жишээ (иргэний баталгаажуулалтгүй)

js
import crypto from "crypto";
import fs from "fs";
import soap from "soap"; // npm install soap

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";

const wsdlEndpoint = "https://xyp.gov.mn/service-1.5.0/ws?WSDL"; // дуудах endpoint-оор солино
const accessToken = "YOUR_ACCESS_TOKEN";
const timeStamp = Math.floor(Date.now() / 1000);
const keyData = `${accessToken}.${timeStamp}`;

const privateKey = fs.readFileSync("./private.pem"); // RSA хувийн түлхүүр
const signer = crypto.createSign("SHA256");
signer.update(keyData, "utf8");
signer.end();
const signature = signer.sign(privateKey, "base64");

// жишээ оролт (input)
const args = {
  request: {
    'regnum': "РД00000000",
  },
};

soap.createClient(wsdlEndpoint, { endpoint: wsdlEndpoint }, (err, client) => {

  client.addHttpHeader("accessToken", accessToken);
  client.addHttpHeader("timeStamp", String(timeStamp));
  client.addHttpHeader("signature", signature);
    
  // WSDL-д тодорхойлсон методын нэрийг солино
  client.ServiceMethodName(args , (err, result) => {
    console.log(result);
  });
});

timeStamp утгыг хүсэлт бүрд шинээр тооцоолно. Хуучин timestamp-тай хүсэлтийг сервер татгалзана.

Дээрх код дахь YOUR_ACCESS_TOKEN болон түлхүүр файлын нэрийг (private.pem / private.der) яг тэр чигээр нь хуулахгүй бөгөөд өөрийнхөө жинхэнэ токен болон файлын байршлаар сольж тавина