Mini App - Web token
Баримтын зориулалт
Энэхүү баримт бичиг нь Голомт банкны зүгээс шинээр хөгжүүлэлт хийгдэж буй Socialpay 3.0 системийн өгөгдөл солилцох дүрмийг тодорхойлно.
Хүсэлтийн ерөнхий мэдээлэл
Өгөгдөл илгээхдээ HTTP протоколоор, POST функцээр REST ашиглан Request Body хэсэгт уг SPEC-ийн дагуу хүсэлтийн JSON-ийг бэлдэж илгээх шаардлагатай.
Protocol | HTTP |
---|---|
Method | POST |
URL (үндсэн орчин) | https://sp-api.golomtbank.com/api |
Request Headers | |
Content-Type | Application/json |
X-Golomt-Cert-Id | There is a fixed value given in the tertiary system |
X-Golomt-Signature | Base64.decode the request (JSON request) and send it secretly using RSA encrypt |
Response Headers | |
Content-Type | Application/json |
Системийн аюулгүй байдал
Гуравдагч системд ашиглах key
X-Golomt-Cert-Id: test_cert_id
Public key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ7rnZH30unXZbTNHNX7wjfECxWyaABX88F5cjSqnA5Soo6Uwu72ufzjEzAtoPk8sE9tnfi/74dyZa0PEK4mT7KK+Yy73acKNv0zKVYnFZMBWxH75ezEv6+4YllUHZ+AIjUN6d2Si/AJrvYmeFayykbXpFEN5+GycBp35cGxGYyQIDAQAB
Signature (X-Golomt-Signature) үүсгэх аргачлал.
Зааварын дагуу бэлдсэн хүсэлт буюу JSON хүсэлтийг SHA256 алгоритм ашиглаж HASH үүсгэнэ. Үүсгэсэн текстийн урт нь 64 Byte байна.
Тухайн үүсгэсэн 64 урттай текст өгөгдлийг өгөгдсөн түлхүүрүүдийн тусламжтай RSA (Mode = ECB; Padding = PKCS1Padding; Output text format = Base64) нууцлалын төрөл ашиглаж encrypt хийнэ. Гаралт нь http header –ийн X-Golomt-Signature утга болно.
Нэмэлт токен шалгах сервис
Байгууллагын вебийг хэрэглэгчийн нэмэлт токентой дуудах
Хэрэглэгч апп дээрээс цэсийг сонгоход нэг удаагийн нэмэлт токен үүснэ. Тухайн токенийг агуулсан байдлаар байгууллагын вебийг дуудна. ЖИШЭЭ
Үйлчилгээ үзүүлэгч байгуулга нь нэмэлт токеноор хэрэглэгчийн мэдээллийг банкнаас татан авч үйлчилгээ үзүүлнэ.
Нэмэлт токеноор хэрэглэчийн мэдээллийг татах
URI: /utility/miniapp/token/check?language=mn
Тайлбар: Retrieving user data with additional tokens.
Хүсэлтийн төрөл: POST
HEADER:
Field name | Value |
---|---|
X-Golomt-Cert-Id | <<CERT_ID>> |
X-Golomt-Signature | <<ENCRYPTED_REQUEST>> |
Description of the Request
Field name | Value | Explanation | Mandatory |
---|---|---|---|
token | 123456789abcdefg | Нэмэлт токен | Тийм |
Description of the Response
Field name | Value | Explanation |
---|---|---|
individualId | 12121212 | Хэрэглэгчийн дугаар |
registerNumber | БӨ95020321 | Регистрийн дугаар |
lastName | Бат | Овог |
firstName | Дорж | Нэр |
account | 2015115673 | Дансны дугаар |
mobileNumber | 99999999 | Утасны дугаар |
bat@gmail.com | Имэйл | |
imgUrl | https://sp-uat.golomtbank.com:8443/api/utility/image/100603-093882492803.jpg | SocialPay дахь хэрэглэгчийн профайл зураг |
ЖАВА програмчлалын хэл дээрх жишээ код:
package mn.golomt.payment.util;
import org.apache.commons.codec.digest.DigestUtils;
import javax.crypto.Cipher;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import java.util.Base64;
import static java.nio.charset.StandardCharsets.UTF_8;
public class RSAEncrypt {
public static String encrypt(String data, String publicKey) {
try {
//get public key
X509EncodedKeySpec keySpecPublic = new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey pubKey = keyFactory.generatePublic(keySpecPublic);
//encrypt
byte[] hex = getHex(data).getBytes(UTF_8);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] encryptedBytes = cipher.doFinal(hex);
return Base64.getEncoder().encodeToString(encryptedBytes);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
public static String decrypt(String cipherText, String privateKey) {
try {
//get private key
PKCS8EncodedKeySpec keySpecPrivate = new PKCS8EncodedKeySpec(Base64.getDecoder().decode(privateKey));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey pKey = keyFactory.generatePrivate(keySpecPrivate);
byte[] encryptedBytes = Base64.getDecoder().decode(cipherText);
//decrypt
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.DECRYPT_MODE, pKey);
byte[] decryptedMessage = cipher.doFinal(encryptedBytes);
return new String(decryptedMessage, UTF_8);
} catch (Exception ex) {
ex.printStackTrace();
return null;
}
}
public static String getHex(String data) {
return DigestUtils.sha256Hex(data);
}
}