Хайлт

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

Жишээ код

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) яг тэр чигээр нь хуулахгүй бөгөөд өөрийнхөө жинхэнэ токен болон файлын байршлаар сольж тавина