Жишээ код
v1.5.0 хувилбарын веб сервис дуудах жишээ.
1. HTTP header бэлдэх
Сервис бүрийн хүсэлтэд дараах 3 header заавал байх шаардлагатай:
| Header | Тайлбар |
|---|---|
accessToken | Системд олгосон хандалтын токен |
timeStamp | Хүсэлт бүрд шинэ утга үүсгэнэ |
signature | accessToken.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 | Арга | Шаардагдах талбар |
|---|---|---|
1 | SMS OTP | otp, regnum |
2 | Тоон гарын үсэг | signature, certFingerprint, regnum |
3 | Хурууны хээ | fingerprint, regnum |
4 | SSO OTP | otp, 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) яг тэр чигээр нь хуулахгүй бөгөөд өөрийнхөө жинхэнэ токен болон файлын байршлаар сольж тавина