LendMN Open Platform

LendMN Open Platform

  • Languages iconEnglish
    • Монгол

›Server API

Basic Tutorial

  • Intro
  • Access token
  • Lend login
  • Create invoice
  • Pay Invoice
  • Webhook

Mini-App

  • Intro
  • UX Design

QR Payment

  • Intro

Client API

  • Intro
  • PayInvoice
  • ReadQr
  • Location
  • OpenUri
  • JavaScript to App
  • Protocol

Server API

  • AccessToken
  • UserInfo
  • Notification
  • InvoiceDetail
  • Transaction refund
  • CreateInvoiceEmbedded
  • CancelInvoice
  • EventHook
  • Transfer
  • CreateInvoice
  • Transactions
  • CreateReceipt
  • Branches
  • Invoices
  • Error codes

Policies

  • Аюулгүй байдлын шаардлага
  • Үйлчилгээний нөхцөл

Payment API

  • Create invoice
  • Check invoice
  • Cancel invoice

EventHook

Event хүлээн авах

Нэхэмжлэл төлөгдсөн, цуцлагдсан, хугацаа нь дууссан үед манай сервер мерчантын бүртгүүлсэн event хүлээн авах хаяг руу дараах бүтэцтэйгээр Event явуулна. Event-н дата нь ирэхдээ цахим гарын үсэгтэй ирэх бөгөөд гарын үсгийг ЛэндМН-с өгсөн public key-н тусламжтай баталгаажуулна. Хэрвээ баталгаажуулалт хийхгүй тохиолдолд нэхэмжлэлийг лавлах api дуудаж тухайн нэхэмжлэлийг баталгаажуулж болно.

Event хүлээн авах:

METHODURLHEADER
POSTeventHookUrlcontent-type: application/x-www-form-urlencoded
signature: signature

eventHookUrl

Мерчантын event хүлээж авах URL.

signature

Илгээж буй хүсэлтийн өгөгдлийг private key-р баталгаажуулсан signature.

Parameters

ПараметерТөрөлЗаавалТайлбар
eventTypeStringТийм[invoice.paid, invoice.cancelled, invoice.expired] гэсэн event -үүд
dataJsonDataТиймEvent-ын дата
signatureStringТиймДээрхи явуулж байгаа дата private key -р sign хийгдсэн гарын үсэг байна. Манайхаас авсан public key-ний тусламжтайгаар баталгаажуулж болно.

eventType

Нэхэмжлэлийн төлөв өөрчлөгдөх үед "invoice.paid", "invoice.cancelled" мөн "invoice.expired" гэсэн event-үүд илгээнэ.

data

data нь нэхэмжлэлийн дэлгэрэнгүй мэдээллийг агуулна.

Data-ны дэлгэрэнгүй

ПараметерТөрөлТайлбар
invoiceNumberStringНэхэмжлэлийн дугаар.
descriptionJsonDataНэхэмжлэлийн гүйлгээний утга.
statusStringНэхэмжлэлийн төлөв:
0: Хүлээгдэж байгаа
1: Төлөгдсөн
2: Цуцлагдсан
3: Хугацаа нь дууссан.
amountStringНэхэмжлэгдсэн мөнгөн дүн.
tracking_dataStringАнх нэхэмжлэл үүсгэх үед мерчант талаас оруулж өгсөн дата.
createdAtStringНэхэмжлэл үүссэн огноо.
expireDateStringНэхэмжлэл дуусах огноо.
paidDateStringНэхэмжлэл төлөгдсөн огноо. Хэрвээ төлөгдөөгүй тохиолдолд null ирнэ.

invoiceNumber

Нэхэмжлэлийн дугаар.

description

Нэхэмжлэлийн гүйлгээний утга.

status

Нэхэмжлэлийн одоогийн төлөв. Төлөв нь нэхэмжлэл төлөгдсөн эсэх, цуцлагдсан эсэх, хүчинтэй хугацаа нь дууссан эсэх эсвэл төлөгдөөгүй хүлээгдэж байгааг илэрхийлнэ.

amount

Нэхэмжлэлийн мөнгөн дүн.

tracking_data

trackingData нь Мерчант нэхэмжлэлийг таних зорилготой өөрийн мэдээллээ хадгалах талбар.

createdAt

createdAt нь нэхэмжлэл үүсгэсэн огноо.

expireDate

expireDate нь нэхэмжлэл цуцлагдсан огноо.

paidDate

paidDate нь нэхэмжлэлийн төлөгдсөн огноо.

Хүсэлт илгээж буй жишээ:

Мерчантын үүсгэсэн 20000 төгрөгний 112233 гэсэн дугаартай нэхэмжлэл төлөгдөх үед.

curl --request POST \
  --url https://{merchant.domain}/lendmn/webhook \
  --header 'Content-Type: application/json' \
  --data '{
        "eventType": "invoice.paid",
        "data": {
                "invoiceNumber": "112233",
                "description": "Нэхэмжлэл",
                "status": 1,
                "amount": 20000,
                "trackingData": {
                        "orderId": "#123456"
                },
                "createdAt": "2018-10-17T08:17:04+08:00",
                "expireDate": "2018-10-17T08:30:04+08:00",
                "paidDate": "2018-10-17T08:25:04+08:00"
        },
        "signature": "A5g80fRClZCy1OogeBqNjqNkb0nhdehdutOb8739a...39a="
  }'

Public key-ээр өгөгдөл баталгаажуулах:

Public key-ээр JSON өгөгдлийг баталгаажуулахад доорх асуудлууд тулгардаг:

  • Кирилл үсгийн асуудал
  • Дарааллын алдаа
  • Algorithm

Хэл хэлийн онцлогоос болж өөр өөр асуудал үүсэж болно. Тиймээс баталгаажуулалт хийх жишээ оруулав.

Node

const crypto = require('crypto')
const fs = require('fs')

const publicKey = fs.readFileSync('./../public.test.pem', 'utf-8')
const input = fs.readFileSync('./input.txt', 'utf-8')

let data = JSON.parse(input)
let signature = data.signature
delete data.signature
data = JSON.stringify(data)

const verifier = crypto.createVerify('sha256')
verifier.update(data)
verifier.end()

signature = new Buffer(signature, 'base64')
const verified = verifier.verify(publicKey, signature)

console.log(verified)

Python

def verify_sign(public_key_loc, signature, data):
    from Crypto.PublicKey import RSA
    from Crypto.Signature import PKCS1_v1_5
    from Crypto.Hash import SHA256
    from base64 import b64decode
    pub_key = open(public_key_loc, "r").read()
    rsakey = RSA.importKey(pub_key)
    signer = PKCS1_v1_5.new(rsakey)
    digest = SHA256.new()
    digest.update(data)
    if signer.verify(digest, b64decode(signature)):
        return True
    return False

import json
import ast
import base64
from collections import OrderedDict

text_file = open("./input.txt", "r")
dataString = text_file.read()
dataDict = json.loads(dataString, object_pairs_hook=OrderedDict)

signature = dataDict['signature']
dataDict.pop('signature', None)
dataDict = json.dumps(dataDict, separators=(",", ":"))

print verify_sign('./../public.test.pem', signature, dataDict)

Ruby

require 'openssl'
require 'base64'
require 'json'

public_key = '../public.test.pem'
input = './input.txt'

# read data and seperate signature
data = JSON.parse(File.read(input))
signature = data['signature']
data.delete('signature')
pubkey = OpenSSL::PKey::RSA.new(File.read(public_key))

signature = Base64.decode64(signature)

if pubkey.verify(OpenSSL::Digest::SHA256.new, signature, data.to_json)
  puts 'VALID'
else
  puts 'INVALID'
end

PHP

<?php

$public_key = '../public.test.pem';
$input = './input.txt';

// Read Data
$data = file_get_contents($input);
$dataArray = json_decode($data, true);

// Seperate signature
$signature = $dataArray['signature'];
unset($dataArray['signature']);
$data = json_encode($dataArray, JSON_UNESCAPED_UNICODE);

$public_key_pem = openssl_pkey_get_public(file_get_contents($public_key));

$r = openssl_verify($data, base64_decode($signature), $public_key_pem, 'sha256WithRSAEncryption');

if ($r) {
    echo "VALID";
} else {
    echo "INVALID";
}
echo "\n";
← CancelInvoiceTransfer →
  • Event хүлээн авах
  • Event хүлээн авах:
    • eventHookUrl
    • signature
  • Parameters
    • eventType
    • data
    • Data-ны дэлгэрэнгүй
    • invoiceNumber
    • description
    • status
    • amount
    • tracking_data
    • createdAt
    • expireDate
    • paidDate
    • Хүсэлт илгээж буй жишээ:
  • Public key-ээр өгөгдөл баталгаажуулах:
    • Node
    • Python
    • Ruby
    • PHP
© AND Systems LLC, All Right Reserved 2022