Only this pageAll pages
Powered by GitBook
1 of 47

VinID

Loading...

Giới thiệu chung

Loading...

Loading...

Loading...

Tài liệu tích hợp

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Tích hợp với VinID Voucher

Loading...

Loading...

Đối soát

Loading...

Khác

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Dịch vụ thanh toán VinID Pay

Ví điện tử VinID Pay

Ví điện từ VinID Pay là giải pháp giúp khách hàng không phải lo lắng quản lý giao dịch chi tiêu hay mang theo quá nhiều tiền mặt theo người mà vẫn có thể tự do mua sắm, thanh toán hóa đơn, dịch vụ một cách nhanh chóng và an toàn, mọi lúc mọi nơi.

Trở thành đối tác của Ví điện tử VinID Pay là cơ hội để tăng doanh thu của bạn với tập khách hàng trung thành và tiềm năng của VinID cũng như hệ sinh thái Vingroup.

Lợi ích cho doanh nghiệp khi tích hợp dịch vụ thanh toán VinID Pay

Khách hàng của bạn được gì ?

Các hình thức tích hợp dịch vụ thanh toán VinID Pay

Transaction QR: Là giải pháp hỗ trợ cho các đơn vị kinh doanh, đối tác thanh toán qua các thiết bị có thể hiển thị mã QR hoá đơn (máy POS/ web/ app/ in hoá đơn…). Xem thêm

App to App: Là giải pháp thanh toán áp dụng cho đối tác có ứng dụng di dộng (Android/iOS) muốn hỗ trợ thanh toán trực tiếp qua ứng dụng VinID. Xem thêm

Web Payment: Là giải pháp hỗ trợ các đơn vị kinh doanh, đối tác có sở hữu website thanh toán riêng. Xem thêm

Merchant QR: Là giải pháp thanh toán tiện lợi cho các đối tác của VinID Pay bằng mã QR định danh cửa hàng (MerchantQR) do VinID Pay cung cấp giúp quản lý dòng tiền và đơn hàng 1 cách rõ ràng và hiệu quả. Xem thêm

Ứng dụng VinID

VinID - trợ lý thông minh cho mọi gia đình.

VinID là ứng dụng trợ lý thông minh của công ty OneID thuộc tập đoàn One Mount Group.

Ứng dụng VinID chạy trên 2 nền tảng Android và iOS, kết nối tất cả các mảng trong hệ sinh thái rộng lớn của tập đoàn Vingroup.

VinID sở hữu mạng lưới đối tác doanh nghiệp hàng đầu. Khách hành có thể sở hữu nhiều ưu đãi hấp dẫn từ mạng lưới đối tác từ hàng ngàn thương hiệu được yêu thích nhất.

Với nguồn dữ liệu đa dạng, VinID nhận diện và thấu hiểu chân dung khách hàng mục tiêu của đối tác, từ đó cung cấp các giải pháp nhân hoá phù hợp với từng cá nhân trên ứng dụng VinID.

Ứng dụng VinID tích hợp nhiều tính năng hữu ích giúp cho cuộc sống của người sử dụng trở nên dễ dàng hơn, thuận tiện hơn.

  • Voucher - sở hữu mã ưu đãi từ hàng trăm đối tác uy tín

  • Shopping qua các tính năng Đi chợ / Mua sắm / Ăn uống

  • Tính năng Mua vé với các sự kiện thể thao, giải trí nổi bật

  • Giải pháp thanh toán tiện lợi, an toàn thông qua Ví điện từ VinID Pay

  • Tích và tiêu điểm VinID khi thanh toán hóa đơn tại Vinmec / Vinmart / Vinpearl ... và hàng ngàn điểm chấp nhận thanh toán khác.

VinID sở hữu tập khách hàng tiềm năng lớn với dữ liệu hành vi phong phú với gần 10 triệu khách hàng thân thiết của tập đoàn VinGroup.

Nền tảng công nghệ đáng tin cậy, kiến trúc linh hoạt, cho phép phát triển các tính năng phức tạp trong thời gian ngắn.

Quy tắc kết nối chung

Các quy tắc chung khi thực hiện kết nối vào hệ thống VinID

Để có thể thực hiện tích hợp vào hệ thống VinID, đối tác cần tuân thủ các quy tắc kĩ thuật chung sau :

  1. API Host

  2. Chuẩn bị X-Key-Code

  3. ​Dữ liệu trong Request Header

  4. Signature - chữ kí điện tử

Môi trường tích hợp

VinID cung cấp cho các đối tác 2 môi trường để tích hợp vào hệ thống bao gồm :

  • UAT: Sử dụng trong quá trình tích hợp bao gồm xây dựng tính năng, kiểm thử, debug, v.v..

  • Production: Sử dụng để triển khai cho người dùng cuối có thể sử dụng dịch vụ.

API Host

Địa chỉ host server cho các API

  • UAT: https://api-merchant-uat.vinid.dev/{api_path}

  • Production: https://api-merchant.vinid.net/{api_path}

Merchant Website

Là trang web dành riêng cho đối tác phục vụ việc tra cứu giao dịch và quản lý các thông tin kết nối (keycode, store, pos, ...).

Bên cạnh đó VinID cũng cung cấp ứng dụng dành cho đối tác trên mobile (Android/iOS) với các chức năng tương tự trên Merchant Website.

Xem thêm:

Mobile App

UAT:

Production:

Hỗ trợ kỹ thuật sẽ cung cấp ứng dụng VinID trên môi trường sandbox cho các đối tác có nhu cầu. Xin vui lòng liên hệ tại .

https://merchant-uat.vinid.dev
https://merchant.vinid.net
Hướng dẫn sử dụng Merchant Website
Hướng dẫn sử dụng Merchant App
đây

Quy trình tích hợp

Các bước cơ bản để tích hợp với VinID

  1. Đối tác có thể đăng ký tài khoản doanh nghiệp hoặc liên hệ và cung cấp e-mail nhận thông tin với bộ phận phát triển kinh doanh của VinID để ký hợp đồng tích hợp với VinID.

    Hotline PTKD: 02471015888

    Email PTKD: hotro.mc@vinid.net

  2. Bộ phận hỗ trợ kinh doanh của VinID sẽ tạo và gửi cho đối tác một tài khoản khách hàng thông qua email mà khách hàng cung cấp.

    Đối tác cần hoàn thành quá trình đăng ký với đầy đủ thông tin. Thông tin tích hợp mặc định là môi trường Sandbox.

  3. Đối tác sử dụng tài khoản được cung cấp đăng nhập vào Merchant Site do VinID cung cấp để khởi tạo các thông tin cần thiết.

  4. Đối tác tiến hành tích hợp theo tài liệu tích hợp kỹ thuật của VinID. Phía VinID sẽ có người support đối tác trong quá trình tích hợp.

  5. Sau khi phía đối tác hoàn thành tích hợp và kiểm thử trên môi trường Sandbox, VinID sẽ xác thực dịch vụ của bạn trên môi trường Sandbox trước khi đưa lên môi trường Production.

  6. Sau khi tích hợp hoàn thành, VinID sẽ tiến hành nghiệm thu dịch vụ trước khi triển khai Production.

  7. VinID cung cấp thông số kỹ thuật trên môi trường production, đối tác tiến hành cấu hình trên hệ thống.

  8. Triển khai dịch vụ thanh toán cho khách hàng. VinID và đối tác thỏa thuận các chương trình khuyến mại cho khách hàng (nếu có).

  9. Hỗ trợ giải đáp các vấn đề phát sinh (nếu có).

Dịch vụ loyalty VinID Point

Điểm VinID

Điểm VinID hay còn gọi là Vinpoint là điểm được tích lũy từ các giao dịch mua sắm hàng hoá, hoặc dịch vụ tại các địa điểm kinh doanh thuộc Tập đoàn Vingroup.

Điểm VinID có thể được sử dụng để chi tiêu ở rất nhiều nơi trong hệ sinh thái đa dạng của Vingroup mang lại giá trị sử dụng lớn, dễ dàng, tiện lợi cho khách hàng, giúp bạn đơn giản hơn trong các giao dịch thanh toán bởi ngay cả khi không còn tiền trong Ví hoặc quên mang theo tiền mặt, bạn vẫn có thể mua hàng và thanh toán thành công.

1 điểm Vinpoint được quy đổi giá trị tương đương 1.000 đồng khi thanh toán tại các điểm giao dịch thuộc hệ thống Vingroup, cụ thể như:

  • Mua sắm từ xa tại siêu thị ảo VinMart 4.0 bằng tính năng Scan & Go trên ứng dụng VinID

  • Mua sắm hàng hoá tại hơn 1500 siêu thị VinMart và các cửa hàng VinMart+

  • Đóng học phí tại Vinschool

  • Khám bệnh tại Vinmec

  • Du lịch, nghỉ dưỡng tại Vinpearl

  • Thanh toán phụ tùng, chi phí sửa chữa tại Vinfast

Lưu ý

Số điểm VinID sẽ hết hạn khi khách hàng không phát sinh một giao dịch tích/tiêu bằng thẻ nào trong suốt 12 tháng liên tiếp.

Lợi ích cho doanh nghiệp khi ích hợp dịch vụ Loyalty với VinID Point

Ngoài giá trị về thanh toán như việc tích hợp VinID Pay, điểm Vinpoint còn có ý nghĩa về mặt trải nghiệm người dùng cho các đối tác doanh nghiệp thuộc lĩnh vực tiếp thị liên kết (Affiliate Marketing), trung gian thanh toán hoặc đối tác có hệ thống Loyalty riêng cho khách hàng của mình đang tìm kiếm đầu ra cho các giá trị tích lũy trong hệ thống.

Nếu khách hàng trong hệ thống loyalty của bạn đang chờ đợi những sản phẩm quy đổi hấp dẫn hơn bên cạnh thẻ điện thoại, vé xem phim, thì VinID Point chính là điều mà bạn cần. Còn gì tiện lợi hơn cho khách hàng của bạn bằng một đơn vị điểm loyalty với khả năng sử dụng tại hàng ngàn địa điểm trong hệ sinh thái Vingroup trên toàn quốc như VinID Point?

Đối tác có toàn quyền triển khai và quản lý nghiệp vụ loyalty trên hệ thống của mình (về hình thức, cơ chế, tỷ lệ quy đổi ....) và VinID sẽ chỉ tham gia như một nhà cung cấp điểm Vinpoint tới khách hàng theo hình thức mà đối tác yêu cầu. Chỉ cần khách hàng đã sở hữu thẻ thành viên VinID hoặc đăng ký tài khoản trên ứng dụng VinID là có thể sử dụng được Vinpoint với vô vàn tiện ích.

Các hình thức tích hợp dịch vụ loyalty VinID Point

Hiện tại VinID cung cấp Vinpoint cho đối tác tích hợp qua 2 hình thức:

  • Mã Giftcode: VinID cung cấp mã nạp điểm theo mệnh giá mà đối tác yêu cầu. Đối tác nhận mã và phân phối cho khách hàng. Xem chi tiết

  • Topup điểm: VinID nạp điểm trực tiếp đến số điện thoại của khách hàng mà đối tác yêu cầu. Xem chi tiết

X-Key-Code

X-Key-Code là mã được tạo ra để xác thực merchant tích hợp với VinID. Mã này sẽ do merchant tạo thông qua Merchant Site sau khi được VinID cung cấp tài khoản để đăng nhập.

Bước 1: Đăng nhập vào Merchant Site bằng tài khoản do VinID cung cấp.

Bước 2: Tìm đến phần API Key trong mục Tích hợp thanh toán.

Bước 3: Bấm vào nút TẠO MỚI và nhập các thông tin cần thiết.

  • Tên Key : để phân biệt các X-Key-Code trong danh sách

  • Ngày hết hạn : nếu không chỉ định thì X-Key-Code sẽ có hạn sử dụng là vĩnh viễn.

  • Tự Động Tạo Key : mặc định hệ thống sẽ tự động sinh ra Public key và cấp Private key tương ứng cho merchant. Trường hợp merchant muốn sử dụng Public key của mình thì có thể bỏ check ở option này và điền Public key của mình vào ô Public key ở bên phải.

Bước 4: Bấm nút XÁC NHẬN để thực hiện tạo X-Key-Code

Nếu ở Bước 3, merchant sử dụng tính năng Tự động tạo key thì hệ thống sẽ trả lại Private key tương ứng. Vui lòng lưu giữ Private key này để thực hiện việc tạo signature trong các API request gửi đến với X-Key-Code mà bạn vừa tạo.

Bước 5: X-Key-Code mới được tạo ra sẽ hiển thị trong danh sách API Keys. Merchant sử dụng Mã Key để truyền vào header của API request theo quy chuẩn request header của VinID.

Signature - chữ kí điện tử

Mô tả về chữ kí điện tử để xác thực dữ liệu.

VinID sử dụng chữ ký điện tử (signature) để xác thực dữ liệu đầu vào và ra trên mỗi HTTP Request.

Hệ thống VinID sử dụng thuật toán SHA256 RSA ( key size = 2048 bit) để tạo signature.

Tạo chữ ký điện tử

openssl genrsa -out RS256-2048-Private.rsa 2048
openssl rsa -in RS256-2048-Private.rsa -pubout > RS256-2048-Public.rsa
brew update
brew install openssl
echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile

openssl genrsa -out RS256-2048-Private.rsa 2048
openssl rsa -in RS256-2048-Private.rsa -pubout > RS256-2048-Public.rsa
  • Tải và cài đặt OpenSSL từ https://wiki.openssl.org/index.php/Binaries

  • Thêm đường dẫn vào biến môi trường PATH của Windows

openssl genrsa -out RS256-2048-Private.rsa 2048
openssl rsa -in RS256-2048-Private.rsa -pubout > RS256-2048-Public.rsa

Format chữ ký điện tử

  • PrivateKey: do merchant tự generate ra theo định dạng SHA256 RSA ( 2048 )

  • URL: Endpoint API

RawData = {url};{method};{X-Nonce};{X-Timestamp};{X-Key-Code};{body}
X-Signature = ​SHA256WithRSA(PrivateKey, RawData)
RawData = {url};{method};{X-Nonce};{X-Timestamp};{X-Key-Code};
X-Signature = ​SHA256WithRSA(PrivateKey, RawData)

Ví dụ:

url: '/merchant-integration/v1/qr/gen-transaction-qr'
method: 'POST'
X-Nonce: '00a81e60-2684-4cf9-878d-f37559213059'
X-Timestamp: 1570723375
X-Key-Code: 'b7bdf002-4948-44d2-99d1-99c8c81c3f47'
Body: {"callback_url":"https://webhook.site/17d9577f-70ca-4918-8388-1d6d53d8bc69","description":"Kiểm thử thanh toán","order_amount":10000,"order_currency":"VND","pos_code":"IPOS002","service_type":"PURCHASE","store_code":"ISTORE002"}
RawData: /merchant-integration/v1/qr/gen-transaction-qr;POST;00a81e60-2684-4cf9-878d-f37559213059;1570723375;b7bdf002-4948-44d2-99d1-99c8c81c3f47;{"callback_url":"https://webhook.site/17d9577f-70ca-4918-8388-1d6d53d8bc69","description":"Kiểm thử thanh toán","order_amount":10000,"order_currency":"VND","pos_code":"IPOS002","service_type":"PURCHASE","store_code":"ISTORE002"}
X-Signature: SHA256WithRSA(PrivateKey, RawData)
=> X-Signature: ERSt3cZoijwJf8QIZdcpHPygcDQJ+tA7l/2EVyJyhO8fwpp6mbrYWsyhyqDjD4zkhGwcXVJ7zJQUDWFpCPitG9GlmssEnkp57YK94/6GR54x6COzPqOlJjoQ4Lq6Fvw99QVmjiL+WjGWSOTUkusXh9dr871vCrjcYmyFSCZ9Ydfw6l4iv2evOnibUtalIkdsNM6evrVa7qW28Uno5t8fmz68QJeXd0dqL4lm2tsFAr9094jbWh/zlynqAW9MOIIYjXQC7XwEVKiBEmoZyTnSd8SLITLNIXvLCJjjVT5XYqZAMNIyoNYZKom8dUjLuirBBurcUpXuxlu01O8dU9qHdg==
url: '/merchant-integration/v2/qr/query/20200623T0017FB54CBB'
method: 'GET'
X-Nonce: '00a81e60-2684-4cf9-878d-f37559213059'
X-Timestamp: 1570723375
X-Key-Code: 'b7bdf002-4948-44d2-99d1-99c8c81c3f47'
RawData: /merchant-integration/v2/qr/query/20200623T0017FB54CBB;GET;00a81e60-2684-4cf9-878d-f37559213059;1570723375;b7bdf002-4948-44d2-99d1-99c8c81c3f47;
X-Signature: SHA256WithRSA(PrivateKey, RawData)
=> X-Signature: ERSt3cZoijwJf8QIZdcpHPygcDQJ+tA7l/2EVyJyhO8fwpp6mbrYWsyhyqDjD4zkhGwcXVJ7zJQUDWFpCPitG9GlmssEnkp57YK94/6GR54x6COzPqOlJjoQ4Lq6Fvw99QVmjiL+WjGWSOTUkusXh9dr871vCrjcYmyFSCZ9Ydfw6l4iv2evOnibUtalIkdsNM6evrVa7qW28Uno5t8fmz68QJeXd0dqL4lm2tsFAr9094jbWh/zlynqAW9MOIIYjXQC7XwEVKiBEmoZyTnSd8SLITLNIXvLCJjjVT5XYqZAMNIyoNYZKom8dUjLuirBBurcUpXuxlu01O8dU9qHdg==

Code mẫu tạo Signature

// GenerateSignature util to generate signature form Auth Claim of merchant
func GenerateSignature(claim *dtos.AuthClaims, privKey []byte) (string, error) {
    block, _ := pem.Decode(privKey)
    privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
    if err != nil {
        fmt.Printf("Error ParsePKCS1PrivateKey: %v", err)
        return "", err
    }
    hash := generateHash(claim.URL, claim.Method, claim.Nonce, claim.Timestamp, claim.KeyCode, claim.Body)
    signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hash[:])
    if err != nil {
        fmt.Printf("Error from signing: %s\n", err)
        return "", err
    }
    claim.Signature = base64.StdEncoding.EncodeToString(signature)
    return claim.Signature, nil
}
function generateSignature($url, $method, $nonce, $timestamp, $apiKey, $requestBody, $privateKey)
{
    $data = $url . ";" . $method . ";" . $nonce . ";" . $timestamp . ";" . $apiKey . ";" . $requestBody;
    $p = openssl_pkey_get_private($privateKey);
    if (!$p) {
        trigger_error("Invalid private key\n".$privateKey, E_USER_WARNING);
        throw new InvalidPrivateKeyException($privateKey);
    }
    $signSuccess = openssl_sign($data, $signature, $p, OPENSSL_ALGO_SHA256);
    $encodedSignature = base64_encode($signature);
    openssl_free_key($p);
    return $encodedSignature;
}
def generateSign():
    requestBody = json.dumps(params, default=lambda o:o.__dict__, ensure_ascii=False,separators=(',', ':'))
    data = url+";"+method+";"+nonce+";"+str(int(timestamp))+";"+keyCode+";"+requestBody
    f = open("/home/vid/Documents/leo/sb_private.pem", "r")
    pkey = crypto.load_privatekey(crypto.FILETYPE_PEM, f.read())
    sign = OpenSSL.crypto.sign(pkey, data, "sha256")
    encodedSign = base64.b64encode(sign)
    return encodedSign
import java.io.File;
import java.nio.file.Files;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.Base64;

public class VinIDSignature {

    //The method that signs the data using the private key that is stored in keyFile path
    public String generateSign(String url, String method, String nonce, String timestamp, String keyCode, String requestBody, String keyFile) throws Exception {
        String body = requestBody == null || "".equals(requestBody) ? "" : requestBody;
        String data = url + ";" + method + ";" + nonce + ";" + timestamp + ";" + keyCode + ";" + body;
        java.security.Signature rsa = java.security.Signature.getInstance("SHA256withRSA");
        rsa.initSign(getPrivate(keyFile));
        rsa.update(data.getBytes());
        return new String(Base64.getEncoder().encode(rsa.sign()));
    }

    //Method to retrieve the Private Key from a file
    private PrivateKey getPrivate(String filename) throws Exception {
        byte[] keyBytes = Files.readAllBytes(new File(filename).toPath());
        PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
        KeyFactory kf = KeyFactory.getInstance("RSA");
        return kf.generatePrivate(spec);
    }
}
using System.Text;
using System.IO;
using java.security.spec;
using java.security;
using System;
using System.Security.Cryptography;

namespace OneID
{
    class Security
    {
        public string sign(string url, string method, string nonce, string timestamp, string keycode, string requestBody, string keyfile)
        {
            string data = url + ";" + method + ";" + nonce + ";" + timestamp + ";" + keycode + ";" + requestBody;
            RSACryptoServiceProvider ras = PemKeyUtils.GetRSAProviderFromPemFile(keyfile);
            return System.Convert.ToBase64String(ras.SignData(Encoding.ASCII.GetBytes(data), CryptoConfig.MapNameToOID("SHA256")));
        }
    }
}

Ví dụ Request / Response

Ví dụ minh họa với hình thức thanh toán Transaction QR

Request

POST https://api-merchant-sandbox.vinid.dev/merchant-integration/v1/qr/gen-transaction-qr
Accept: 'application/json',
Content-Type: 'application/json',
X-Key-Code: '28f04867-c6d5-425f-9108-0d90a0c0b09e',
X-Nonce: '1583122246',
X-Timestamp: 1583122246,
X-Signature: 'IrAHA7RAxGVRfu8TyM+VVtuNwzbvSZFQ6BUSHxBZHV1o7m5uJpr4CIuor6Ku2tSvWM5VHGGQkvqHXmpo7uwceVJorpey9v8sJE+pgtanRO8fnHDbXWrW4JNL6MgrNZwXZU5qh8GMnCxNmToXTqFoFrB5vilekyDlFKzWdz/PDIju2HdTeJgNMWm54zqtoq6L1qc8vc5earylaFspWlaI+qDvK93cklDOAaJinxK0m+4EQtjkdAvL1D4LuI4mnvvwXoMo69W3ZUZp/KLCRTKDvvfHCwpNsqJDv7vQLBDKMbzFSNECu+CIG2z9e2lXpLwSxIoDdh+bYS831QPQK4nQnQ==',

{
  "callback_url": null,
  "description": "Test trans QR",
  "extra_data": "",
  "order_amount": 10000,
  "order_currency": "VND",
  "order_reference_id": "",
  "pos_code": "POSCODE01",
  "service_type": "PURCHASE",
  "store_code": "STORECODE01"
}

Response

HTTP/1.1 200 OK
Date: Mon, 02 Mar 2020 04:15:43 GMT
Content-Type: application/json; charset=utf-8
Transfer-Encoding: chunked
Connection: close
Set-Cookie: __cfduid=d17ef257bc41217c6cc999b06d6f8b8f21583122543; expires=Wed, 01-Apr-20 04:15:43 GMT; path=/; domain=.vinid.dev; HttpOnly; SameSite=Lax; Secure
X-Request-ID: eb79bbea-77cd-455a-82ff-a33041671914#1098
CF-Cache-Status: DYNAMIC
Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"
Alt-Svc: h3-27=":443"; ma=86400, h3-25=":443"; ma=86400, h3-24=":443"; ma=86400, h3-23=":443"; ma=86400
Server: cloudflare
CF-RAY: 56d84c563ceea366-HKG
Content-Encoding: gzip

{
  "meta": {
    "code": 200,
    "message": "OK"
  },
  "data": {
    "qr_url": "",
    "qr_data": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEAAQMAAABmvDolAAAABlBMVEX///8AAABVwtN+AAACTklEQVR42uyYPW7kOhCES1DAkEfgUXgxQxLhi/EoPAJDBoTqoVp6nrF3Nx5ydzowYOILpqGq/sM73vFPxkKSp2MHXF4LfG6BNeo1TwQ0AJvL8KfTa40Ne40A/FRAYN0cu08kQiJbSDXqYTRAP/pA7OG4ZDQr0KWtjp2cEzBFkRUAy4Y/SO61wGXe3H1qcS2bzJt+4+6xgSuU5kKuPL3MUX8pp8MD5u4Mn5hNUQ3wbNi/0nw9sLCsdWlYVYdMUfoMBD6+etYMQAumKH2LfPv2kDk+ntw9PiAdJWWWGrp5Wr5AOGYC4Mpq7lah6pexk1XToQBKUdF8AXNDILMqPyYCELrMvFYb1fZ7iED4fNh/fEBNzR/u+mctZo79uZAOAZDdn4BmhLgWS+v0ZPmfmgJQctX+7DLvXtE0r7XwUNQMgKPcQFazxCm7b4jyfB4HAFaaovYWVx4+u6LBZy5gabBWa6Oa0lShx/dlcALAelaLd8o76YqmoEcJGgBQeI0HaqyaijUkq7seT2VoeGBhMXOo82YDnB6eh5wZgBbgT0koXdrShiKfH2MB5KGNFaL0GbB998UUgBRl1V4vy32ocTz8XIC525bBHrSchNNnS30m4GtbtELlecdnHQd47N07s/UsdWGYg+cBrhsIIm0q5qnq811RUwB2j9JXSlJUYhbwnOYQwHVlxXVusu1Qk1v5+HGGnQLQVByvs7wKqQa4+YBsirpb2eZ/NLXXA6ao2GH3YC0gpijOBdzmhT8Aluvg5+l+nGEHB97xjr8s/gsAAP//tq28Lpz6etIAAAAASUVORK5CYII=",
    "qr_code": "https://qr.id.vin/TX.20200302T00100015912",
    "order_id": "20200302T00100015912",
    "expiration": 1583123381
  }
}

Chân dung người dùng OneID

Token endpoint

Token endpoint được thiết kế theo đặc tả tại https://tools.ietf.org/html/rfc6749#section-4

/oauth2/token

POST https://oauth-qc.vinid.net/oauth2/token

API này được sử dụng cho Authorization code (PKCE) để exchange token từ authorization code có được từ Auth endpoint.

Headers

Name
Type
Description

Content-Type

string

application/x-www-form-urlencoded

Request Body

Name
Type
Description

redirect_uri

string

code

string

code_verifier

string

client_id

string

grant_type

string

{
  "access_token": "string",
  "expires_in": 0,
  "id_token": 0,
  "refresh_token": "string",
  "scope": 0,
  "token_type": "string"
}

Tham số

Định dạng

Mô tả

Ví dụ

client_id

string

1mg

grant_type

string

authorization_code

code_verifier

string

code

string

Authorization code

redirect_uri

string

http://example.com/callback

Auth endpoint

Token endpoint được thiết kế theo đặc tả tại https://tools.ietf.org/html/rfc6749#section-4

/oauth2/auth

GET https://oauth-qc.vinid.dev/oauth2/auth

API Này sử dụng cho luồng Authorization code (PKCE), sau khi authentication thành công, một authorization code (query parameter) sẽ được redirect về callback endpoint của ứng dụng.

Query Parameters

Name
Type
Description

code_challenge_method

string

code_challenge

string

state

string

scope

string

response_type

string

code

redirect_uri

string

client_id

string

Tham số

Định đạng

Mô tả

Ví dụ

client_id

string

1mg

redirect_uri

string

http://example.com/callback

response_type

string

code

scope

string

openid offline profile

state

string

code_challenge

string

code_challenge_method

string

S256

Refresh token

Lấy token mới khi hết hạn sau một thời gian (mặc định: 1 giờ)

/oauth2/token

POST https://oauth-qc.vinid.dev/oauth2/token

Request Body

Name
Type
Description

redirect_uri

string

client_secret

string

Không cần đối với luồng PKCE

client_id

string

refresh_token

string

grant_type

string

{
    "access_token": "string",
    "expires_in": 3600,
    "id_token": "string",
    "refresh_token": "string",
    "scope": "openid offline some_scope",
    "token_type": "bearer"
}
curl --location --request POST 'https://oauth2-dev.vinid.dev/oauth2/token' \
--form 'grant_type=refresh_token' \
--form 'refresh_token={refresh_token}' \
--form 'client_id={client_id}' \
--form 'redirect_uri=https://your-home-page'

Thời gian hết hạn của refresh_token mặc định là 720 giờ

Request Header

Chuẩn Request Header khi tích hợp.

Mọi request đến hệ thống VinID đều tuân thủ theo Request Header sau :

Tham số

Bắt buộc

Định dạng

Độ dài (Max)

Mô tả

Ví dụ

X-Key-Code

Có

String

36

Đăng nhập vào Merchant Site để tạo mã. Mô tả chi tiết tại .

b7bdf002-4948-44d2-99d1-99c8c81c3f47

X-Timestamp

Có

Number

Thời gian tạo đơn hàng (unix timestamp in seconds)

1570723375

X-Nonce

Có

String

255

Sử dụng với mỗi request từ merchant, có giá trị sử dụng duy nhất trong vòng 2h tính từ thời điểm hệ thống VinID nhận được request.

00a81e60-2684-4cf9-878d-f37559213059

X-Signature

Có

String

Dữ liệu xác thực của đơn hàng.

Mô tả chi tiết tại

X-Request-ID

Không

String

255

ID của request từ đối tác

đây
đây.

Profile endpoint

Profile API được sử dụng để truy xuất userinfo với các scope tương ứng với từng client

/user-management/user-info

GET https://oauth-qc.vinid.dev/user-management/user-info

Headers

Name
Type
Description

Content-Type

string

application/json

Authentication

string

bearer access_token

{
    "data": {
        "full_name": "string",
        "email": "string",
        "phone_number": "string",
        "dob": "string",
        "gender": "int",
        "nationality": "string",
        "identity_documents": [
            {
                "identity_number": "string",
                "identity_type": "CMT|HC|CCCD",
                "issue_place": "string",
                "issue_date": "string",
            }
        ],
        "addresses": [
            {
                "city": "string",
                "commune": "string",
                "address": "string",
                "type": "int",
                "district": "string"
            }
        ]
    },
    "meta": {
        "code": 200
    }
}

OpenID Configuration

OpenID Configuration được thiết kế theo đặc tả tại https://openid.net/specs/openid-connect-discovery-1_0.html

/.well-known/openid-configuration

GET https://oauth-qc.vinid.dev/.well-known/openid-configuration

​Cấu hình tích hợp OneID

Sequence diagram
{
  issuer: "https://oauth2-dev.vinid.dev/",
  authorization_endpoint: "https://oauth2-dev.vinid.dev/oauth2/auth",
  token_endpoint: "https://oauth2-dev.vinid.dev/oauth2/token",
  jwks_uri: "https://oauth2-dev.vinid.dev/.well-known/jwks.json",
  subject_types_supported: [
    "public"
  ],
  response_types_supported: [
    "code",
    "code id_token",
    "id_token",
    "token id_token",
    "token",
    "token id_token code"
  ],
  claims_supported: [
    "sub"
  ],
  grant_types_supported: [
    "authorization_code",
    "implicit",
    "client_credentials",
    "refresh_token"
  ],
  response_modes_supported: [
    "query",
    "fragment"
  ],
  userinfo_endpoint: "https://oauth2-qc.vinid.dev/user-management/user-info",
  scopes_supported: [
    "offline",
    "openid"
  ],
  token_endpoint_auth_methods_supported: [
    "client_secret_post",
    "client_secret_basic",
    "private_key_jwt",
    "none"
  ],
  userinfo_signing_alg_values_supported: [
    "none",
    "RS256"
  ],
  id_token_signing_alg_values_supported: [
    "RS256"
  ],
  request_parameter_supported: true,
  request_uri_parameter_supported: true,
  require_request_uri_registration: true,
  claims_parameter_supported: false,
  revocation_endpoint: "https://oauth2-dev.vinid.dev/oauth2/revoke",
  backchannel_logout_supported: true,
  backchannel_logout_session_supported: true,
  frontchannel_logout_supported: true,
  frontchannel_logout_session_supported: true,
  end_session_endpoint: "https://oauth2-dev.vinid.dev/oauth2/sessions/logout"
}//20200908143350//https: //oauth2-dev.vinid.dev/.well-known/openid-configuration​{
  "issuer": "https://oauth2-dev.vinid.dev/",
  "authorization_endpoint": "https://oauth2-dev.vinid.dev/oauth2/auth",
  "token_endpoint": "https://oauth2-dev.vinid.dev/oauth2/token",
  "jwks_uri": "https://oauth2-dev.vinid.dev/.well-known/jwks.json",
  "subject_types_supported": [
    "public"
  ],
  "response_types_supported": [
    "code",
    "code id_token",
    "id_token",
    "token id_token",
    "token",
    "token id_token code"
  ],
  "claims_supported": [
    "sub"
  ],
  "grant_types_supported": [
    "authorization_code",
    "implicit",
    "client_credentials",
    "refresh_token"
  ],
  "response_modes_supported": [
    "query",
    "fragment"
  ],
  "userinfo_endpoint": "https://oauth2-qc.vinid.dev/user-management/user-info",
  "scopes_supported": [
    "offline",
    "openid"
  ],
  "token_endpoint_auth_methods_supported": [
    "client_secret_post",
    "client_secret_basic",
    "private_key_jwt",
    "none"
  ],
  "userinfo_signing_alg_values_supported": [
    "none",
    "RS256"
  ],
  "id_token_signing_alg_values_supported": [
    "RS256"

Extra Data

Sử dụng trong trường hợp đối tác muốn bổ sung thêm thông tin cho 01 giao dịch.

Hệ thống VinID sẽ đọc theo format sau:

{
    "partner_code": "YOUR-PARTNER-CODE-HERE",
    // thông tin thêm mà đối tác muốn bổ sung cho giao dịch.
    "order_info": "your-json-string"
}

Ví dụ:

// request body với extra data dạng array key-value
{
    "callback_url": "your-callback-url",
    "description": "Mua hàng tại quầy",
    "order_amount": "10000",
    "order_currency": "VND",
    "order_reference_id": "DOITAC-DON-01",
    "pos_code": "POS-CUA-HANG-01",
    "service_type": "PURCHASE",
    "store_code": "CUA-HANG-01",
    "extra_data": {
        "partner_code": "MERCHANT-01",
        "order_info": "[{\"topping\":\"pho mai\",\"ship_method\":\"ship b\u1eb1ng m\u00e1y bay\"}]"
    }
}
// request body với extra data dạng object
{
    "callback_url": "your-callback-url",
    "description": "Mua hàng tại quầy",
    "order_amount": "10000",
    "order_currency": "VND",
    "order_reference_id": "DOITAC-DON-01",
    "pos_code": "POS-CUA-HANG-01",
    "service_type": "PURCHASE",
    "store_code": "CUA-HANG-01",
    "extra_data": {
        "partner_code": "MERCHANT-01",
        "order_info": "{\"customer\":\"joker\",\"sent_to\":\"batman\",\"is_a_bomb\":true}"
    }
}

OneID SSO Integration (PKCE)

OneID's Identity and Access Management (IAM) solution uses PKCE (Proof Key for Code Exchange) method from open standards such as Oauth2 & OpenID Connect to provide authentication and authorization.

Step 1 - Determined the platform

OneID SSO support many type of platform including:

  1. Native/Mobile App (Mobile or Desktop app that support web browser web-view)

  2. Single-Page App (JavaScript web app that runs in the browser)

  3. Regular Web App (Traditional web app that runs on the server)

  4. Backend/API (An API or service protected)

Step 2 - Pick the SDK

Select the SDK that match with your project programing language

Language & framework

OIDC Client

Vue

React Native

Angular

Javascript

Android

IOS & MacOS

Golang

PHP

https://oauth.net/code/php/

Java

.NET

https://oauth.net/code/dotnet/

NodeJS

RUBY

Python

https://oauth.net/code/python/

Step 3 - Create Client

Contact us to create/register Client: VUPNA@Onemount.com

Tenant & Client is the identity of the 3rd party service which use OneID SSO. Required information for registering including:

  1. client_id - ID of the 3rd party app

  2. client_secret - optional

  3. redirect_uris - the redirect url after the process complete

  4. owner - owner of the 3rd party app

  5. contacts - email of the owner

  6. client_name - name of the 3rd party app. This information is required for white label

  7. logo_uri - logo of the 3rd party app. This information is required for white label

  8. client_uri - home page URL of 3rd party app. This information is required for white label

  9. policy_uri - policy page. This information is required for white label

  10. tos_uri - term & condition page. This information is required for white label

  11. post_logout_redirect_uri - Hyperlink when click on 3rd party app logo image

  12. frontchannel_logout_uri - Logout URL for frontent

  13. backchannel_logout_uri - Logout URL for backend

  14. metadata - json format data which contain additional data such as:

    1. background image

    2. hotline - phone number

    3. support email

Step 4 - Working Flow

Make the login button.

Assuming step 2 & 3 is completed.

  1. User click the login button on 3rd app

  2. SDK it will generate code_verifier and code_challenge (from code_verifier).

  3. SDK send authorization_code and code_challenge to /auth endpoint GET https://oauth-qc.vinid.dev/oauth2/auth?client_id={client_id}&redirect_uri={callback_url}&response_type=code&scope={scope}&state={state}&code_challenge={code_challenge}&code_challenge_method=S256

  4. OneID redirect to OneID login form

  5. User login and consent scope

  6. OneID callback authorization_code to 3rd app

  7. SDK call /token endpoint with authorization_code and code_verifier

  8. OneID validate code_verifier

  9. OneID return access_token, id_token & access_token

Get resource with authorization code

10. 3rd party app uses access_token to access resource server (ex: /userinfo endpoint). 11. Resource server return data.

Tích hợp với VinID Pay

Hiện tại VinID Pay đã hỗ trợ các hình thức thanh toán khác nhau, phục vụ cho cả In-store Payment và Online Payment.

In-store Payment/QR Pay

Online Payment

https://github.com/IdentityModel/oidc-client-js

https://github.com/FormidableLabs/react-native-app-auth

https://github.com/manfredsteyer/angular-oauth2-oidc

https://github.com/openid/AppAuth-JS

https://github.com/openid/AppAuth-Android

https://github.com/openid/AppAuth-iOS

https://godoc.org/golang.org/x/oauth2 https://github.com/coreos/go-oidc

https://github.com/scribejava/scribejava

https://github.com/jaredhanson/passport https://github.com/simov/grant https://github.com/lelylan/simple-oauth2

https://github.com/oauth-xx/oauth2

Sequence diagram

Dịch vụ

User jouney

Đặc điểm

Điều kiện Go live

Merchant QR

1. KH mở app VinID, quét mã đặt tại cửa hàng/ quầy

2. KH nhập số tiền cần thanh toán

3. KH xác nhận giao dịch

4. Báo giao dịch thành công cho KH. Merchant vào trang web do VinID cung cấp để check lịch sử giao dịch

1. Đặt mã tại quầy, hoặc dán trên PIN để KH thanh toán cho tiện. Merchant tự thông báo cho KH số tiền cần thanh toán (email/ SMS/ thông báo tại quầy…)

2. Đã hỗ trợ sẵn tiêu/tích điểm đi kèm cùng luồng thanh toán Ví

3. Phù hợp tại các điểm thanh toán offline, dành cho các merchant không có điều kiện đầu tư tích hợp CNTT

  1. Không cần kết nối

  2. .Có thể chạy ngay sau khi thỏa thuận hợp tác được kí kết (mất 1-2 tuần để setup)

Chú ý: không có callback mà phải check ở trên web của VinID

Transaction QR

1. Merchant in hoá đơn/hiển thị trên màn hình QR có chứa số tiền cần thanh toán

2. KH mở app VinID, quét mã.

3. KH xác nhận giao dịch

4. Báo giao dịch thành công cho KH và hệ thống CNTT của Merchant

1. Đã hỗ trợ sẵn tiêu/tích điểm đi kèm cùng luồng thanh toán Ví

2. Phù hợp tại các điểm thanh toán offline, dành cho các merchant có điều kiện đầu tư tích hợp CNTT và có màn hình để hiển thị mã QR thanh toán

  1. Cần kết nối hệ thống (mất 1-2 tuần kể từ khi bắt đầu & hệ thống Merchant sẵn sàng)

  2. Mất 1-2 tuần để test và nghiệm thu

  3. Có thể chạy ngay sau khi thỏa thuận hợp tác được kí kết

Toàn bộ quá trình trên mất 2-4 tuần

Customer QR

1. KH đưa mã cho NV quầy quét

2. Thu ngân nhập số tiền và điểm để thanh toán

3. Xác nhận giao dịch

4. Báo giao dịch thành công cho KH, máy thu ngân

1. Có thiết bị quét được mã Barcode/QRcode

2. Cần tích hợp riêng biệt 2 luồng thanh toán ví và tiêu/tích điểm

3. Phù hợp tại các điểm thanh toán offline, dành cho các merchant có điều kiện đầu tư tích hợp CNTT và có các thiết bị quét được mã Barcode/QRcode

  1. Cần kết nối hệ thống (mất 6-10 tuần kể từ khi bắt đầu & hệ thống Merchant sẵn sàng, tùy thuộc vào Merchant có áp dụng tiêu tích điểm, hay chỉ thanh toán Ví)

  2. Mất 1-2 tuần để test và nghiệm thu

  3. Có thể chạy ngay sau khi thỏa thuận hợp tác được kí kết

Toàn bộ quá trình trên mất 8-12 tuần

Dịch vụ

User jouney

Đặc điểm

Điều kiện Go live

App to app

1. KH lên app của Merchant chọn thanh toán VinID Pay

2. Hệ thống Merchant chuyển thông tin sang VinID Pay và chuyển KH sang app của VinID để tiếp tục thanh toán

3. KH xác nhận thanh toán

4. Báo giao dịch thành công cho KH và hệ thống CNTT của Merchant

1. Tích hợp SDK để xử lý các case KH chưa có app VinID, chưa mở Ví etc…

2. Đã hỗ trợ sẵn tiêu/tích điểm đi kèm cùng luồng thanh toán Ví

3. Phù hợp thanh toán Online tại các app mà KH không có nhu cầu thanh toán thường xuyên, và Merchant chấp nhận chuyện KH chuyển sang VinID mỗi lần thanh toán

  1. Cần kết nối hệ thống (mất 2-3 tuần kể từ khi bắt đầu & hệ thống Merchant sẵn sàng)

  2. Mất 1-2 tuần để test và nghiệm thu

  3. Có thể chạy ngay sau khi thỏa thuận

Toàn bộ quá trình trên mất 3-4 tuần

Web Payment

1. KH lên website của Merchant chọn thanh toán VinID Pay

2. Hệ thống Merchant chuyển thông tin sang VinID Pay và chuyển KH sang website thanh toán của VinID Pay để tiếp tục thanh toán

3. KH mở app, quét mã hiển thị trên website thanh toán của VinID Pay/KH đăng nhập trên website thanh toán của VinID Pay

4. KH xác nhận thanh toán

5. Báo giao dịch thành công cho KH và hệ thống CNTT của Merchant

1. Đã hỗ trợ sẵn tiêu/tích điểm đi kèm cùng luồng thanh toán Ví trên app

2. Phù hợp thanh toán Online tại các website hỗ trợ thanh toán

  1. Cần kết nối hệ thống (mất 1-2 tuần kể từ khi bắt đầu & hệ thống Merchant sẵn sàng)

  2. Mất 1-2 tuần để test và nghiệm thu

  3. Có thể chạy ngay sau khi thỏa thuận hợp tác được kí kết

Toàn bộ quá trình trên mất 2-4 tuần

Linked account

Liên kết

1. KH lên app của Merchant và chọn liên kết với VinID Pay

2. Hệ thống Merchant chuyển thông tin sang VinID Pay và chuyển KH sang app của VinID để xác nhận liên kết

3. KH mở app VinID Pay để xác nhận liên kết

4. Báo liên kết thành công cho KH và hệ thống CNTT của Merchant

Thanh toán

1. KH chọn sản phẩm cần thanh toán và chọn thanh toán VinID Pay

2. Báo giao dịch thành công cho KH và hệ thống CNTT của Merchant

1. Mới hỗ trợ thanh toán Ví, chưa hỗ trợ thanh toán tiêu/tích điểm (sẽ bổ sung khi có Merchant có nhu cầu)

2. Phù hợp thanh toán Online tại các app mà KH có nhu cầu thanh toán thường xuyên, và Merchant không muốn KH phải chuyển qua app VinID mỗi lần thanh toán

  1. Cần kết nối hệ thống (mất 3-6 tuần kể từ khi bắt đầu & hệ thống Merchant sẵn sàng, tùy thuộc vào Merchant có áp dụng tiêu tích điểm, hay chỉ thanh toán Ví)

  2. Mất 1-2 tuần để test và nghiệm thu

  3. Có thể chạy ngay sau khi thỏa thuận hợp tác được kí kết

Toàn bộ quá trình trên mất 4-8 tuần

Thanh toán App to App

Giới thiệu dịch vụ

Loại hình dịch vụ App to App là giải pháp thanh toán áp dụng cho đối tác có ứng dụng di dộng (Android/iOS) muốn hỗ trợ thanh toán trực tiếp qua ứng dụng VinID.

Khách hàng mua hàng trên ứng dụng của đối tác và chọn VinID Pay là phương thức thanh toán. Hệ thống sẽ tự động kết nối với ví VinID Pay và tiến hành thanh toán cho giao dịch của khách hàng.

Quá trình thanh toán sẽ diễn ra liên tục mà khách hàng không cần phải tự mở nhiều ứng dụng cùng lúc.

Sơ đồ luồng trải nghiệm người dùng

Sequence diagram

APIs

Create Order

POST {API-HOST}/merchant-integration/v1/qr/create-transaction-order

API to create new order

Request Body

Name
Type
Description

extra_data

string

Thông tin thêm cho đơn hàng

order_reference_id

string

Mã đơn hàng của đối tác. Sử dụng để refund và đối soát.

order_currency

string

Mã tiền tệ ( VND )

store_code

string

Mã cửa hàng

description

string

Thông tin mô tả đơn hàng

callback_url

string

Callback URL của đối tác

pos_code

string

Mã POS

order_amount

number

Số tiền thanh toán

service_type

string

Giá trị mặc định = PURCHASE

user_id

string

User ID của đối tác

{
    "meta": {
        "code": 200,
        "message": "OK"
    },
    "data": {
        "signature": "",
        "order_id": "20190101T00300000001",
        "expired_at": 0
    }
}

Query Order Status

GET {API-HOST}/merchant-integration/v1/qr/query/{order_id}

API to check current order status

Path Parameters

Name
Type
Description

order_id

string

Order ID

{
  "data": {
    "created_at": 0,
    "merchant_user_id": "string",
    "order_amount": 0,
    "order_id": "string",
    "pay_status": "string",
    "point_amount": 0,
    "transaction_id": "string",
    "updated_at": 0,
    "vnd_amount": 0
  },
  "meta": {
    "code": 0,
    "message": "string"
  }
}

Thông tin thêm:

  • API Host

  • Extra Data

  • Request Header

  • Callback

  • Ví dụ Request / Response

Bảng mã lỗi

Tham khảo Bảng mã lỗi

Mobile SDK

iOS

Android

Logout endpoint

Đăng xuất

/oauth2/sessions/logout

GET https://oauth-qc.vinid.dev/oauth2/sessions/logout

Query Parameters

Name
Type
Description

post_logout_redirect_uri

string

id_token_hint

string

Tham số

Định dạng

Mô tả

Ví dụ

id_token_hint

string

id_token

post_logout_redirect_uri

string

Url để điều hướng tới sau khi logout thành công

state

string

Tham số ngẫu nhiên của post_logout_redirect_uri

post_logout_redirect_uri = urlencode(https://your_redirect_page?state=example)

  • frontchannel_logout_uri được sử dụng để OneID hủy token đối với frontend app.

GET https://yourapp.test/frontchannel_logout?iss=https://oauth-dev.vinid.dev/&sid=08a5019c-17e1-4977-8f42-65a12843ea02
  • backchannel_logout_uri được sử dụng để OneID hủy token đối với backend app.

POST /backchannel_logout HTTP/1.1
Host: yourapp.test
Content-Type: application/x-www-form-urlencoded

logout_token=eyJhbGci ... .eyJpc3Mi ... .T3BlbklE ...

Thanh toán Merchant QR

Giới thiệu dịch vụ

Là giải pháp thanh toán tiện lợi cho các đối tác của VinID Pay bằng mã QR định danh cửa hàng (MerchantQR) do VinID Pay cung cấp giúp quản lý dòng tiền và đơn hàng 1 cách rõ ràng và hiệu quả.

Khách hàng chỉ cần thực hiện với 3 bước đơn giản: 1- Dùng tính năng "Quét mã" trên ứng dụng VinID, quét QR cửa hàng (thường đặt ở quầy thu ngân, tại bàn…); 2- Nhập số tiền cần thanh toán. 3- Xác nhận thanh toán bằng ví điện tử VinID Pay.

Hệ thống sẽ tự động cập nhật số dư và chuyển tiền về ví của đối tác. Đối tác được cung cấp công cụ app/web để nhận thông tin giao dịch.

Luồng người dùng sử dụng dịch vụ

Sau khi ký hợp đồng, đơn vị kinh doanh, đối tác sẽ được VinID Pay hỗ trợ toàn diện về kỹ thuật và công nghệ. Đối tác không cần phải kết nối về kỹ thuật. Các bước hợp tác giữa VinID Pay - Đối tác:

Bước 1: Đối tác kí kết hợp đồng hợp tác với VinID Pay.

Bước 2: Đối tác được VinID Pay hỗ trợ tạo mã QR thanh toán và POSM tại cửa hàng.

Bước 3: Đối tác được cung cấp tài khoản và công cụ trên app/web để kiểm tra thông tin số dư và lịch sử giao dịch.

Trải nghiệm tính năng thanh toán

Trải nghiệm tính năng thanh toán Merchant QR bằng ví điện tử VinID tại đây

Thanh toán Web Payment

Giới thiệu dịch vụ

Là giải pháp hỗ trợ các đơn vị kinh doanh, đối tác có sở hữu website.

Khách hàng mua hàng tại website của đối tác, chọn VinID Pay là phương thức thanh toán, hệ thống sẽ điều hướng khách hàng sang cổng thanh toán VinID Pay.

Tại đây, khách hàng có quyền lựa chọn giữa 2 hình thức thanh toán sau:

  • Sử dụng tài khoản VinID của khách hàng để đăng nhập trên cổng thanh toán và tiến hành thanh toán mà không cần mở ứng dụng VinID.

  • Dùng tính năng quét mã trên ứng dụng VinID để quét mã QR hóa đơn được tạo trên cổng thanh toán để tiến hành thanh toán như các hình thức khác.

Hướng dẫn người dùng sử dụng dịch vụ

Trải nghiệm tính năng thanh toán

Sequence diagram

APIs

Create order

POST {API-HOST}/merchant-integration/v1/orders/web-payment

API to request payment via Payment Web

Request Body

Khi điều hướng người dùng vềredirect_urlcủa merchant, VinID sẽ đính kèm thêm các tham số vào URL có định dạng như sau

return_url?order_id=string&order_reference_id=string&pay_status=string

Merchant có thể dựa vào các tham số này để tiếp tục nghiệp vụ sau thanh toán của mình

Thông tin thêm:

Thông tin mã lỗi

Luồng xử lý hệ thống

Logout sequence diagram
Luồng người dùng sử dụng dịch vụ MerchantQR

Trải nghiệm tính năng thanh toán Web Payment bằng ví điện tử VinID tại

Name
Type
Description

Tham khảo

callback_url

string

Merchant's backend URL to receive IPN (Instant Payment Notification) from VinIB backend

redirect_url

string

Merchant's frontend URL to redirect user from VinID Payment Website after payment process.

expired_in

number

Order timeout in minute. Can be set from 3 to 15. Default value is 15 if not defined

description

string

Description of order.

extra_data

object

Addition information of order. Merchant can add more data in JSON string format here for their business

order_amount

number

The amount which the user must to pay. Value must be large than 0.

order_currency

string

Currency code. Currently only support VND

order_reference_id

string

Order id from merchant system. Maximum 35 characters length and need to be unique to refund and reconcile.

pos_code

string

Merchant's terminal code registered in VinID system

service_type

string

Currently only support PURCHASE

store_code

string

Merchant's store code registered in VinID system

{
  "data": {
    "expiration": 0,//expiration time in timestamp
    "order_id": "string"
    "payment_url": "string"//Payment Web URL 
    "qr_code": "string",
    "qr_data": "string",
    "qr_url": "string"
  },
  "meta": {
    "code": 0,
    "message": "string"
  },
}
đây
API Host
Request Header
Extra Data
Callback
Mã lỗi chung

Thanh toán Transaction QR

Giới thiệu dịch vụ

Là giải pháp hỗ trợ cho các đơn vị kinh doanh, đối tác thanh toán qua các thiết bị có thể hiển thị mã QR hoá đơn (máy POS/ web/ app/ in hoá đơn…)

Khi khởi tạo hóa đơn, đối tác gửi thông tin đến hệ thống VinID Pay để tạo mã. Khách hàng sử dụng tính năng “Quét mã” trên ứng dụng VinID để quét mã do nhân viên cửa hàng cung cấp và tiến hành thanh toán mà không cần nhập thêm bất cứ thông tin nào.

Để sử dụng Transaction QR, đối tác có thể lựa chọn 1 trong 2 phương án như sau:

  • Chủ động tích hợp với hệ thống thanh toán VinID Pay.

  • Sử dụng máy POS của các đối tác đã tích hợp thanh toán với VinID Pay như KiotViet, mPOS, iPOS.

Luồng người dùng sử dụng dịch vụ

Trải nghiệm tính năng thanh toán

Trải nghiệm tính năng thanh toán Transaction QR bằng ví điện tử VinID tại đây

Sequence diagram

APIs

Generate Transaction QR

POST {API-HOST}/merchant-integration/v1/orders/tqr

New API return generated QR for payment. For old endpoint, please read note below

Request Body

Name
Type
Description

expired_in

integer

Order timeout in minute. Can be set from 3 to 15. Default value is 15 if not defined

callback_url

string

Callback URL to merchant's backend

description

string

Description for order

extra_data

string

Extra information for order.

order_amount

integer

Amount of order. Value must be large than 0

order_currency

string

Currency code. Default value is VND

order_reference_id

string

Order id from merchant system. For partial refund with transaction paid by VinID Point, this is required parameter, maximum 35 characters length and need to be unique.

pos_code

string

POS code

service_type

string

Default value is PURCHASE

store_code

string

Store code

{
    "meta": {
        "code": 200,
        "message": "OK"
    },
    "data": {
        "qr_url": "",
        "qr_data": "iVBORw0KGgoAAAANSUhEUgAAAQAAAAEAAQMAAABmvDolAAAABlBMVEX///8AAABVwtN+AAACWUlEQVR42uyZzY0jIRSEq8WBIyEQComN+keTGKEQAkcOyLWqR8/akgMY2DUHq936Loj3qurR+KzP+i/XRpIPpB4ePjueIbfImvQ2LwQ0ADuSnhKAkBGvej8tBETWHXBk009NXrv27BMCCFdLPV7V3q4J6P+J5AqAFh8LAlZRQCDZ4xnoC/Becr8LWPP63HUWruxq3uu9uycHxvKZVEXhYG446pucTg9EvWbH0RLLjsRy0E5sHmBjYd0aXD3sLAAdA4GvlQAAkqDUw+nJclTtNWTyuy4FxFFR9WiQXUFGjBY7VgJUXLunfrLjVeF52WHdGjUDsLEgXMysQOqSz4ZN8eDgYoBCjlNqwLCrR3jRoTUANTY8VUDJle1NSGcA4Dk2EEx4tppkxSr7vyW3ALCxDNOt8mCpj1fqfM0PSwDEMLWNGZHMXp7gi+NUAFVRpkN9ZB4yt3i+DIPTAxJSmwOrCemYA2vyxdWlADqOilJDjAAU2OL3RMAmC7Vj2H3u8VJFaYx6VtQKAHxRReUxd8cTSUJqT1gH0DYDm6IaoMSsCUV9fj6nxV8HAPOsTJ4y1qumFu225ny61gKAxP1osOYg75EWLFgJUE+HSyFia8nZcBIfwXa9EACgK6opcMJGWl/Mg/EsuRkAG0CcEn3HVscU8ryoWQL4uQOxbD8mKEmQ57kUcN9HjewcH4H3Nr85E2D3k0rFDeZZbezsRe1XASyltaSjyW3cbzvmFQGTz42UE7xEtTmAn4raPUdCVshh+cJKwP0dx3bFu2UD/duHnqmBz/qsf2z9CQAA//87GIM+C12YZwAAAABJRU5ErkJggg==",
        "qr_code": "https://qr.id.vin/TX.20200217T00100018959",
        "order_id": "20200217T00100018959",
        "expiration": 1581914928
    }
}
//REQUEST TEMPLATE
{
  "callback_url": "string",
  "description": "string",
  "expired_in": 0,
  "extra_data": "string",
  "order_amount": 0,
  "order_currency": "string",
  "order_reference_id": "string",
  "pos_code": "string",
  "service_type": "string",
  "store_code": "string"
}

The old endpoint of this API is deprecated.

{API-HOST}/merchant-integration/v1/qr/gen-transaction-qr

Although we will keep it work, but we recommend merchants should move to the new one ASAP.

Please note that the order_reference_id is no more optional in the new endpoint. You should input a unique value every request to make sure the refund process can work correctly.

Thông tin thêm:

  • API Host

  • Request Header

  • Callback

  • Extra Data

  • Ví dụ Request / Response

Thông tin mã lỗi

Tham khảo Mã lỗi chung

Code mẫu

function getSign($url, $method, $nonce, $timestamp, $keyCode, $requestBody, $pem_private_key)
{
    $data = $url.";".$method.";".$nonce.";".$timestamp.";".$keyCode.";".$requestBody;
    try {
        $p = openssl_pkey_get_private($pem_private_key);
        $signSuccess = openssl_sign($data, $signature, $p, OPENSSL_ALGO_SHA256);
        if (!$signSuccess) {
            print("False");
            return "";
        }
        $encodedSignature = base64_encode($signature);
        openssl_free_key($p);
        return $encodedSignature;
    } catch (Exception $e) {
        print_r($e->getMessage());
    }
}

$url = '/merchant-integration/v1/qr/gen-transaction-qr';
$method = 'POST';
$timestamp = time();
$nonce = (string)$timestamp;

$params = [
    'callback_url' => 'http://merchant-site/vinid/result',
    'description' => 'test qr code',
    'extra_data' => '',
    'order_amount' => '1000',
    'order_currency' => 'VND',
    'order_reference_id' => 'merchant-order-id-01',
    'pos_code' => 'merchant-pos-code',
    'service_type' => 'PURCHASE',
    'store_code' => 'merchant-store-code'
];
$requestBody = json_encode($params);
$apiKey = 'Your api key';
$privateKey = 'Your private key';
$sign = getSign($url, $method, $nonce, $timestamp, $apiKey, $requestBody, $privateKey);
$headers = [
    'Accept: application/json',
    'Content-Type: application/json',
    'X-Key-Code: '.$apiKey,
    'X-Nonce: '.$nonce,
    'X-Timestamp: '.$timestamp,
    'X-Signature: '.$sign,
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api-merchant-sandbox.vinid.dev'.$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $requestBody);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

$result = curl_exec($ch);
curl_close($ch);

print_r($result);
return $result;

( Đang cập nhật )

import com.google.gson.Gson;

//The method that signs the data using the private key that is stored in keyFile path
public String generateSign(String url, String method, String nonce, String timestamp, String keyCode, String requestBody, String keyFile) throws Exception {
    String body = requestBody == null || "".equals(requestBody) ? "" : requestBody;
    String data = url + ";" + method + ";" + nonce + ";" + timestamp + ";" + keyCode + ";" + body;
    java.security.Signature rsa = java.security.Signature.getInstance("SHA256withRSA");
    rsa.initSign(getPrivate(keyFile));
    rsa.update(data.getBytes());
    return new String(Base64.getEncoder().encode(rsa.sign()));
}

//Method to retrieve the Private Key from a file
private PrivateKey getPrivate(String filename) throws Exception {
    byte[] keyBytes = Files.readAllBytes(new File(filename).toPath());
    PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
    KeyFactory kf = KeyFactory.getInstance("RSA");
    return kf.generatePrivate(spec);
}

// Generate Transaction QR
public static void main(String... args){
    String timeStamp = String.valueOf(System.currentTimeMillis() / 1000);
    UUID uuid = UUID.randomUUID();
    String nonce = uuid.toString();
    String host = "https://api-merchant-sandbox.vinid.dev";
    String url = "/merchant-integration/v1/qr/gen-transaction-qr";
    String method = "POST";
    String sig = generateSign(url, method, nonce, timeStamp, "your-key-code-here", getJsonSerdes().toJson(reqBody)), "/path/to/private-key");
    Map<String, String> headers = new HashMap<>();
    headers.put("X-Key-Code", callCtx.getKeyCode());
    headers.put("X-Nonce", nonce);
    headers.put("X-Timestamp", timeStamp);
    headers.put("X-Signature", sig);
    HttpClient httpClient = new HttpClient.HttpClientBuilder()
        .setEndpoint(host + url)
        .setMethod(method)
        .setHeader(headers)
        .setBody(reqBody)
        .build();
    
    System.out.println(httpClient.response());
}

Dịch vụ chi hộ

Giới thiệu dịch vụ

Dịch vụ chi hộ là giải pháp chuyển tiền dành cho các đối tác là tổ chức, doanh nghiệp, đơn vị kinh doanh đã đăng ký tại VinID có nhu cầu chuyển tiền cho cá nhân qua ví điện tử VinID Pay (nhân viên, khách hàng, đối tác...)

Dịch vụ chi hộ cung cấp cho đối tác phương thức chuyển tiền đơn giản, nhanh chóng. Người nhận sẽ nhận được tiền tức thời 24/7. Bên cạnh đó, lịch sử giao dịch sẽ được lưu lại, đảm bảo tra cứu hiệu quả, an toàn và bảo mật.

Đối tác sau khi ký hợp đồng sẽ được VinID hỗ trợ tích hợp kỹ thuật trong cả trong quá trình tích hợp và triển khai, sử dụng để đảm bảo vận hành trơn tru.

Lưu ý: Đối tác cần nạp tiền vào tài khoản ví khả dụng của mình trên VinID Pay. Cách nạp tiền:

  • Bước 1: Đối tác chuyển tiền vào tài khoản của VinID Pay nội dung được VinID Pay cung cấp

  • Bước 2: VinID Pay ghi tăng số dư Tài khoản ví của đối tác trên VinID Pay

  • Bước 3: VinID Pay thông báo kết quả nạp tiền thành công

Luồng người dùng sử dụng dịch vụ

Sơ đồ xử lý kỹ thuật

APIs

Create Money transfer request

POST {API-HOST}/merchant-integration/v1/money-transfer/b2c

Request Body

Mã lỗi

Thông tin thêm:

iOS Mobile SDK
Android Mobile SDK
Luồng người dùng sử dụng dịch vụ Transaction QR trên ứng dụng VinID

Về API header và chữ ký điện tử, vui lòng tham khảo thêm :

Name
Type
Description

amount

string

Số tiền cần chuyển

currency

string

Đơn vị tiền tệ, mặc định là VNĐ

description

string

Mô tả nội dung giao dịch Tối đa 255 ký tự

receiver_phone_number

string

Số điện thoại người nhận tiền

merchant_account_id

string

Mã tài khoản ví khả dụng của merchant trên hệ thống VinID để thực hiện trừ tiền (sẽ được Vận hành cung cấp sau khi ký hợp đồng)

merchant_transaction_id

string

Mã giao dịch tại hệ thống của merchant. Tối đa 35 ký tự và cần unique để đối soát.

{
  "data": {
    "transaction_id": "string",//mã của giao dịch tại hệ thống VinID
    "merchant_transaction_id": "string",
    "post_balance": 7795993 //Số dư sau giao dịch
  },
  "meta": {
    "code": int,
    "message": "string"
  }
}

Code

Message

4000001

Dữ liệu yêu cầu không hợp lệ.

4000502

Mã giao dịch của merchant không hợp lệ.

4000505

Merchant không hoạt động.

4000506

Thông tin khách hàng không tồn tại.

4000507

Khách hàng không hoạt động.

4000508

Hạng ví của khách hàng không hợp lệ.

4000513

Currency không đúng định dạng.

4000514

Số dư không khả dụng

4000515

Số tiền phải lớn hơn giá trị min

4000516

Số tiền phải nhỏ hơn giá trị max

4000517

Tài khoản ví của merchant không khả dụng.

4000518

Thông tin tài khoản không hợp lệ

5000001

Máy chủ có lỗi khi xử lý yêu cầu của bạn.

Quy tắc kết nối chung
API Host
Mã lỗi chung

Refund giao dịch

Hoàn trả lại số tiền/điểm mà khách hàng đã thanh toán

Giới thiệu dịch vụ

Dịch vụ Hoàn lại giao dịch (Refund) cho phép merchant trả lại số tiền/điểm mà người dùng đã thanh toán qua ví VinID Pay.

Merchant có thể thực hiện hoàn lại một phần hoặc toàn bộ giá trị của giao dịch tùy thuộc vào nghiệp vụ của mình. Người dùng sẽ được thông báo trên ứng dụng VinID về số tiền/điểm mà merchant hoàn trả.

VinID Pay cung cấp dịch vụ Refund thông qua 2 phương thức sử dụng:

  • User Frontend (Merchant Site/Merchant App): merchant đăng nhập bằng tài khoản merchant vào trang web/ ứng dụng của VinID cung cấp để hoàn tiền cho giao dịch. Xem hướng dẫn tại đây

  • Backend-to-Backend: merchant tích hợp kết nối hệ thống thanh toán của VinID và sử dụng API để yêu cầu hoàn tiền cho giao dịch.

Lưu ý

  • Hiện tại chỉ có thể refund trong kỳ (được hiểu là giao dịch gốc diễn ra vào ngày T và giao dịch refund diễn ra trong khoảng thời gian từ 00:00 ngày T đến hết 09:09:59 AM ngày T+1).

  • Không cho phép refund các giao dịch có khuyến mãi như sử dụng voucher, giao dịch có cashback, hoặc ưu đãi giảm giá khi thanh toán của VinID ….

  • Đối với các giao dịch thanh toán qua hình thức MerchantQR thì merchant cần sử dụng Merchant Site/Merchant App để thực hiện refund.

Luồng người dùng

  1. User thực hiện trả lại mặt hàng đã mua tại Merchant

  2. Merchant tạm giữ lại hàng và gửi yêu cầu refund giao dịch tới VinID

  3. VinID kiểm tra yêu cầu của Merchant:

    a. Nếu các thông tin yêu cầu hợp lệ, VinID sẽ thực hiện refund theo yêu cầu của Merchant

    b. Nếu các thông tin yêu cầu không hợp lệ, VinID sẽ từ chối yêu cầu và báo lỗi cho Merchant.

  4. VinID thông báo kết quả xử lý refund cho Merchant

  5. Dựa vào kết quả phản hồi của VinID, Merchant đưa ra quyết định việc trả hàng của User.

APIs

Refund

POST {API-HOST}/merchant-integration/v1/orders/refund

Tạo yêu cầu refund giao dịch

Request Body

Name
Type
Description

order_reference_id

string

Mã định danh đơn hàng hoàn tiền tại merchant. Cần unique trên mỗi request, tối đa 35 ký tự

original_order_reference_id

string

Mã định danh đơn hàng gốc cần refund. (Là giá trị order_reference_id mà merchant truyền sang VinID khi tạo giao dịch)

description

string

Mô tả lý do của việc refund

merchant_user_id

string

Mã nhân viên của merchant thực hiện hoàn tiền.

merchant_user_name

string

Tên nhân viên của merchant thực hiện hoàn tiền.

vnd_amount

number

Số tiền muốn hoàn lại cho khách hàng. Giá trị phải nguyên lớn hơn 0

point_amount

number

Số điểm muốn hoàn lại cho khách hàng. Giá trị phải nguyên lớn hơn 0

Hoàn tiền thành công
{
    "meta": {
        "code": 200,
        "string": "OK"
    },
    "data": {
        "original_loyalty_transaction_id": "string",
        "refund_transaction_id": "string",
        "refund_loyalty_transaction_id": "string",
        "refund_transaction_wallet_id": "string"
    }
}
GD thanh toán tiền lẫn điểm. Refund tiền thành công, điểm thất bại
{
    "meta": {
        "code": 2000801,
        "message": "Refund thành công. Khách hàng đã nhận lại tiền. Phần điểm hoàn lại sẽ được cập nhật trong thời gian sớm nhất."
    },
    "data": {
        "refund_transaction_id": "string",
        "refund_transaction_wallet_id": "string",
    }
}
GD thanh toán tiền lẫn điểm. Refund tiền thất bại, điểm thành công
{
    "meta": {
        "code": 2000802,
        "message": "Refund thành công. Khách hàng đã nhận lại điểm. Phần tiền hoàn lại sẽ được cập nhật trong thời gian sớm nhất"
    },
    "data": {
        "original_loyalty_transaction_id": "string",
        "refund_loyalty_transaction_id": "string",
        "refund_transaction_wallet_id": "string"
    }
}
GD chỉ thanh toán bằng tiền. Yêu cầu vượt quá số tiền có thể refund
{
    "meta": {
        "code": 4004009,
        "message": "Số tiền có thể refund còn lại không đủ"
    }
}
GD chỉ thanh toán bằng tiền. Yêu cầu refund truyền vào cả giá trị điểm
{
    "meta": {
        "code": 4000812,
        "message": "Giao dịch gốc không được thanh toán bằng điểm"
    }
}

Lưu ý

  • Nếu merchant không chỉ định giá trị cụ thể chovnd_amountvàpoint_amountthì không truyền hoặc truyền null.Nếu truyền 0 sẽ báo lỗi. Trường hợp cả 2 tham số đều không được chỉ định thì VinID sẽ thực hiện refund toàn phần cho giao dịch.

  • Hiện tại chỉ cho phép refund toàn phần điểm. Vì vậy nếu muốn refund điểm thì merchant cần truyền vào chính xác số điểm mà người dùng đã tiêu trong giao dịch gốc.

  • Thời gian timeout khi gọi API refund tối thiểu là 25s để đảm bảo nhận được response từ VinID

Mã lỗi

Mã lỗi

Thông báo

200

OK

2000801

Refund thành công. Khách hàng đã nhận lại tiền. Phần điểm hoàn lại sẽ được cập nhật trong thời gian sớm nhất

2000802

Refund thành công. Khách hàng đã nhận lại điểm. Phần tiền hoàn lại sẽ được cập nhật trong thời gian sớm nhất

4000001

Dữ liệu không hợp lệ

4000800

Mã đơn hàng gốc không tồn tại

4000801

Giao dịch gốc không phải là payment

4000802

Giao dịch gốc không thành công

4000803

Giao dịch gốc có khuyến mãi

4000804

Giao dịch gốc đã cashback

4000807

Giao dịch gốc không phải DIRECT PAY hoặc QR PAYMENT

4000809

Số tiền còn lại không đủ thực hiện giao dịch

4000810

Currency không đúng với giao dịch gốc

4000811

Số tiền refund phải là số nguyên dương

4000812

Giao dịch gốc không được thanh toán bằng điểm

4000813

Điểm loyalty không trùng với giao dịch gốc

4000817

Merchant không được thiết lập refund tự động

4000820

Giao dịch đã quá thời hạn có thể refund

4000824

Thiếu thông tin mã giao dịch gốc

4030800

Merchant không được phép thực hiện hoàn tiền

4040800

Giao dịch gốc không tồn tại trên core ví

4040801

Giao dịch gốc không tồn tại

4080804

Quá thời hạn kết nối

4090801

Mã đơn hàng đã tồn tại

5000800

Refund thất bại

5000801

Hệ thống xảy ra lỗi khi xử lý yêu cầu

5000802

Hệ thống xảy ra lỗi khi xử lý yêu cầu

Thông tin thêm:

  • API Host

  • Mã lỗi chung

Tích hợp với VinID Loyalty

Về thông tin dịch vụ, vui lòng xem bài viết về Dịch vụ loyalty VinID Point

Về thông tin tích hợp, vui lòng xem thông tin cụ thể trong các bài viết dưới đây:

  • Dịch vụ VinID Giftcode

  • Dịch vụ Topup VinID Point

  • Dịch vụ lấy hạng thành viên trung thành

Dịch vụ lấy hạng thành viên trung thành

Giới thiệu dịch vụ

Là giải pháp giúp các bên đối tác lấy hạng của thành viên trung thành (vàng, bạc đồng) của VinID.

Khách hàng mua hàng, sử dụng dịch vụ của đối tác VinID khi đối tác không có hệ thống loyalty, khi thực hiện thanh toán bằng VinID, hệ thống sẽ lấy hạng thành viên của khách hàng. Theo đó, khách hàng sẽ được giảm giá dựa theo thứ hạng thành viên của mình trong VinID.

Luồng người dùng sử dụng dịch vụ

Sơ đồ xử lý kĩ thuật

APIs

Lưu ý:

Merchant muốn lấy thông tin hạng thành viên VinID cần được cấp quyền cụ thể allow_loyalty_membership_check. Khi onboard một merchant hoặc một merchant đăng kí sử dụng dịch vụ này cần được set thêm quyền này trong database.

Lấy thông tin hạng thành viên

GET {API_HOST}/merchant-integration/v1/loyalty/membership?id_type=string&identity=string&business_code=string&program_code=string

Path Parameters

Name
Type
Description

id_type

string

USER_ID: Vinid User MOBILE: User's phonenumber CARD: Loyalty Card Number MEMBER_ID: Member code, Customer Loyalty Number

identity

string

user_id, phone number, card number, member code according to id_type

business_code

string

the owner of the loyalty program, eg: VGC

program_code

string

the loyalty program, eg: VGC

{
  "data": {
    "member": {
      "member_code": "string",
      "full_name": "string"
    },
    "tier_info": {
      "tier_code": "string",
      "tier_name": "string",
      "description": "string"
    } 
  },
  "meta": {
    "code": int,
    "message": "string"
  }
}

Những mã lỗi có thể xảy ra

  • 401005: identity_type not supported

  • 400002: invalid phone_number format

  • 401006: invalid customer id

  • 401007: invalid loyalty business

  • 401008: invalid loyalty program

  • 500503: generic OLS error

Deprecated APIs

APIs

Check quantity

POST {API-HOST}/merchant-integration/v1/loyalty/gift-code/quantity

API để kiểm tra số lượng giftcode còn lại trong kho của merchant.

Request Body

Name
Type
Description

store_code

string

Mã cửa hàng của merchant tại VinID.

pos_code

string

Mã máy POS của merchant tại VinID.

card_type

array

Danh sách mệnh giá giftcode cần kiểm tra. Đơn vị: nghìn đồng. Ví dụ: [“10”, "50", "100"]

{
  "meta": {
    "code": 200,
    "message": "OK"
  },
  "data": [
    {
      "card_type": "string",
      "quantity": 0
    }
  ]
}

Withdraw Giftcode

POST {API-HOST}/merchant-integration/v1/loyalty/gift-code/orders

API để lấy giftcode ra khỏi kho

Request Body

Name
Type
Description

store_code

string

Mã cửa hàng của merchant tại VinID

pos_code

string

Mã máy pos của merchant tại VinID

merchant_order_id

string

Mã order unique phía merchant tự sinh

order_info

array

Thông tin của lệnh lấy giftcode.

card_type

string

Mệnh giá giftcode cần lấy. Đơn vị: nghìn đồng.

quantity

integer

Số lượng giftcode cần lấy

extra_data

string

Thông tin bổ sung của order. Merchant có thể truyền thêm các dữ liệu cần thiết cho nghiệp vụ của mình theo string dạng JSON trong phần này

{
  "meta": {
    "code": int,
    "message": "string"
  },
  "data": {
    "created_at": 0,
    "extra_data: "string"
    "merchant_order_id": "string",
    "order_info": [
      {
        "card_type": "string", //Mệnh giá giftcode
        "cards": [
          {
            "code": "string", //Mã nạp của giftcode
            "expire_date": "string", //Ngày hết hạn
            "serial": "string" //Mã tra soát
          }
        ]
      }
    ]
  }
REQUEST TEMPLATE
{
  "store_code": "string",
  "pos_code": "string",
  "merchant_order_id": "string",
  "order_info": [
    {
      "card_type": "string",
      "quantity": 10
    }
  ],
  "extra_data": "string"
}

Check giftcode

POST {API-HOST}/merchant-integration/v1/loyalty/gift-code/check

API để kiểm tra trạng thái của giftcode

Request Body

Name
Type
Description

store_code

string

Mã cửa hàng của merchant tại VinID

pos_code

string

Mã máy pos của merchant tại VinID

serial

string

Mã serial của giftcode cần kiểm tra

{
  "meta": {
    "code": int,
    "message": "string"
  },
  "data": {
    "status": "USED", //“USED” hoặc “ACTIVE”
    "expire_date": "yyyy-MM-dd" //Hạn sử dụng
  }
}
{
  "meta": {
    "code": int,
    "message": "string"
  },
  "data": }

Get order detail

GET {API-HOST}/merchant-integration/v1/loyalty/gift-code/orders?{parameters}

API để yêu cầu lấy thông tin của đơn hàng đã thực hiện

Path Parameters

Name
Type
Description

store_code

string

Mã cửa hàng của merchant tại VinID

pos_code

string

Mã máy pos của merchant tại VinID

merchant_order_id

string

Mã order muốn kiểm tra. (Là mã order merchant đã sử dụng khi tạo order)

{
  "meta": {
    "code": int,
    "message": "string"
  },
  "data": {
    "created_at": 0,
    "extra_data": "string",
    "merchant_order_id": "string",
    "order_info": [
      {
        "card_type": "string",
        "cards": [
          {
            "code": "string", //Mã nạp của giftcode
            "expire_date": "string", //Ngày hết hạn
            "serial": "string" //Mã tra soát
          }
        ]
      }
    ]   
  }
REQUEST TEMPLATE
{API-HOST}/merchant-integration/v1/loyalty/giftcode/orders?merchant_order_id=string&store_code=string&pos_code=string

Mã lỗi

Code

Message

4000001

Dữ liệu không hợp lệ

4000301

Số lượng giftcode trong kho không đủ

4000302

Mã order đã tồn tại

5000001

Hệ thống xảy ra lỗi khi xử lý yêu cầu

Tham khảo bảng Mã lỗi chung

Xem thêm:

  • API Host

  • Quy tắc kết nối

Callback / IPN

Phía đối tác cần chuẩn bị Callback API để nhận về kết quả giao dịch thành công từ phía VinID Pay. (Với thanh toán thất bại, VinID Pay sẽ không thực hiện callback)

VinID sẽ cung cấp một Public Key cho đối tác để có thể thực hiện xác thực request do VinID gọi qua theo format sau :

Format: status;transactionID;orderID
signature = SHA256WithRSA(status;transactionID;orderID)

Tham số

Định dạng

Mô tả

Ví dụ

order_id

String

Order ID trong response trả về của VinID.

Xem thêm

20190101T00300000001

pay_status

String

Trạng thái thanh toán

SUCCESS

signature

String

Chữ ký do VinID Pay tạo ra

KFfoZvHz9n 6MimLnCNn+4/DtPFQenQH12 +3qX5RkfhBw2mfPTc/fHLfhSP4g==

transaction_id

String

Mã giao dịch của VinID

extra_data

String

Thông tin bổ sung của đơn hàng

total_discount

Number

Tổng giá trị khuyến mãi của đơn hàng

user_id

String

Mã người dùng đã thực hiện thanh toán

point_amount

Number

Số điểm mà người dùng đã thanh toán

vnd_amount

Number

Số tiền ví khách hàng đã thanh toán

Method: GET
Query string:
○ order_id : mã đơn hàng
○ pay_status : trạng thái đơn hàng
○ transaction_id : mã giao dịch bên hệ thống của VinID
○ signature : chữ ký điện tử, để đối tác có thể verify request
Example: 
https://merchant-host.com?extra_data=&order_id=20190178900134567890&pay_status=SUCCESS&point_amount=0&total_discount=0&transaction_id=1234567890&user_id=12345&vnd_amount=99000&signature=sAHaSf1peit3rrMmD2PivrDSWq1dE%2BolCe1rknWH0f%2FV5eYZ5lJv7Kygrv7Wp9PUbZUO2lbbLUBSFfdF7y4UVwQLFIzFTUCBymPqYFyOz8nsTXFWAoneigFm0B4%2BoZIT1yVZERF2mqwnFdPLRhnkCN4zq9z8g%3D%3D

Dịch vụ Topup VinID Point

Giới thiệu dịch vụ

Dịch vụ Topup VinID Point cho phép các đối tác tích hợp thực hiện nạp điểm VinID trực tiếp tới số điện thoại của người dùng. Chỉ cần số điện thoại đã đăng ký tài khoản VinID là người dùng sẽ nhận được điểm Vinpoint ngay vào tài khoản VinID mà không cần thực hiện bất cứ thao tác gì.

Lưu ý:

Điểm VinID đã được topup cho người dùng thì không thể thu hồi. Để tránh rủi ro cho đối tác, mặc định số điểm được Topup chỉ có thể sử dụng sau 24 giờ kể từ thời điểm nhận. Trường hợp Merchant mong muốn số điểm có thể sử dụng ngay, vui lòng liên hệ với Bộ phận kinh doanh hoặc tham khảo Dịch vụ VinID Giftcode

Luồng người dùng sử dụng dịch vụ

Đối tác có thể sử dụng Dịch vụ Topup VinID Point cho nhiều mục đích khác nhau tùy thuộc vào nghiệp vụ của mình như: mua bán điểm, trao đổi/tặng thưởng, … từ hệ thống của mình. Sơ đồ dưới đây minh họa cho nghiệp vụ Đổi điểm VinID của đối tác có hệ thống điểm loyalty riêng.

Sơ đồ xử lý kỹ thuật

APIs

Get user info by phone number

POST {API-HOST}/merchant-integration/v1/gateway

API cho merchant để kiểm tra thông tin của số điện thoại người dùng.

Headers

Name
Type
Description

X-API-Code*

string

mi_v1_loyalty_member_info

X-Merchant-ID*

string

Mã cửa hàng của merchant tại VinID

X-Terminal-ID*

string

Mã máy POS của merchant tại VinID

Request Body

Name
Type
Description

phone_no*

string

Số điện thoại của người dùng theo định dạng 0xxxxxxx. Tối thiểu 10 ký tự. Tối đa 11 ký tự

card_no

string

{
  "meta": {
    "code": int,
    "message": "string"
  },
  "data": {
    "full_name":        string,
    "phone_number":     string,
    "dob":              string,
    "gender":           string,
    "identify":         string,  // Số điện thoại cá nhân
    "status":           string,  // A: Active | I: Inactive | B: Block
    "card_status":      string   // A: Active | I: Inactive
  }
}

Top-up points to phone number

POST {API-HOST}/merchant-integration/v1/gateway

API để nạp điểm cho số điện thoại người dùng

Headers

Name
Type
Description

X-API-Code*

string

mi_v1_loyalty_transaction_topup

X-Merchant-ID*

String

Mã cửa hàng của merchant tại VinID

X-Terminal-ID*

String

Mã máy POS của merchant tại VinID

Request Body

Name
Type
Description

phone_no*

string

Số điện thoại nhận điểm theo định dạng 0xxxxxxx Tối thiểu 10 ký tự. Tối đa 11 ký tự.

point_amount*

integer

Số điểm cần nạp. Tối thiểu 50 .Tối đa 20000000 Nhỏ hơn 20000 nếu xuất hóa đơn

invoice_no*

string

Mã hóa đơn của merchant

send_receipt*

boolean

Yêu cầu xuất hóa đơn true: có. false : không

receipt_info

object

Thông tin để xuất hóa đơn Tất cả các trường thông tin bên dưới sẽ required nếu xuất hóa đơn

name

string

Tên ghi hóa đơn Tối đa 50 ký tự

address

string

Địa chỉ ghi hóa đơn Tối đa 100 ký tự

email

string

Email ghi hóa đơn (Yêu cầu truyền đúng định dạng) Tối đa 50 ký tự

tax_code

string

Mã số thuế ghi hóa đơn. Tối đa 32 ký tự

send_sms

boolean

id_type

string

Valid value: MOBILE, CARD, USER_ID

id

string

{
  "meta": {
    "code": 200,
    "message": "OK"
  }
}
REQUEST TEMPLATE
{
  "phone_no": "01118281123", 				// 	optional,numeric,min=10,max=11
  "point_amount": 2, 						//	required,numeric,min=0,should be < 20000 when send_reciept is true
  "invoice_no": "string", 				//	required,max length=23
  "send_receipt": true | false,			//	required
  "receipt_info": {						//	All receipt info fields is required if send_receipt is true
    "name": "string",            		//	max length=50
    "address":"string",					//	max length=100
    "email":"string",					//  Email format,max length=50
    "tax_code":"string"         		// 	max=32
  },
  "send_sms": true | false,				// optional, default value: true
  "id_type": "string",					// optional, valid value:  MOBILE, CARD, USER_ID
  "id": "string"                      // optional, 
}

Query order status

POST {API-HOST}/merchant-integration/v1/gateway

API để kiểm tra trạng thái đơn hàng

Headers

Name
Type
Description

X-Merchant-ID*

string

Mã cửa hàng của merchant tại VinID

X-Terminal-ID*

string

Mã máy POS của merchant tại VinID

X-API-Code*

string

mi_v1_loyalty_transaction_detail

Request Body

Name
Type
Description

invoice_no*

string

Mã hóa đơn của merchant

{
    "meta": {
        "code": 200,
        "message": "Success"
    },
     "data": {
        "type":                     string,     //  TXN_EARN
        "status":                   string,     //  "S": success |  "E" : error
    }
}

Mã lỗi

HTTP Status Code
Code
API
Message
Note

400

4000

All

Bad request

403

403100

All

MerchantId/TerminalId invalid

500

5000

All

(Varies)

Mã lỗi chung của hệ thống

200

200300

Get member info

Member card is not activated or blocked

200

4000306

Top-up points

Member card is not activated or blocked

200

200301

Get member info

Account is not activated or blocked

Tài khoản chưa được kích hoạt hoặc tạm thời bị khóa

200

4000326

Top-up points

Account is not activated or blocked

Tài khoản chưa được kích hoạt hoặc tạm thời bị khóa

200

200400

Get member info

Member does not exist

Tài khoản của thành viên không tồn tại

200

4000315

Top-up points

Member does not exist

Tài khoản của thành viên không tồn tại

200

4000307

Top-up points

Invoice no already exists

200

4000001

Top-up points

MerchantId/TerminalId/RequestId invalid

200

4030302

Top-up points

MerchantId/TerminalId not found/not active

200

500400

Top-up points

Insufficient point balance

Số điểm của thành viên không đủ để thanh toán

200

4000318

Top-up points

Member is potential risk

200

4000328

Top-up points

Exceeded max point amount for receipting

Giá trị giao dịch vượt giới hạn

200

600400

Top-up points

Campaign is unavailable or Allowed point has exceeded

200

600500

Top-up points

Transaction value exceeds limitation

200

600600

Top-up points

Transaction is invalid

Giao dịch không hợp lệ (điểm vượt hạn mức tối đa trên giao dịch, trạng thái khách hàng không hoạt động,…)

Tham khảo bảng Mã lỗi chung

Xem thêm:

  • API Host

  • Quy tắc kết nối

Mã lỗi chung

Code

Message

Nguyên nhân / Giải pháp

5000001

Hệ thống xảy ra lỗi khi xử lý yêu cầu

Lỗi khi xử lý yêu cầu

4000001

Dữ liệu không hợp lệ

Request gửi lên không hợp lệ

4010001

Lỗi trong quá trình chứng thực yêu cầu

Sai keycode, nonce, body signature, timestamp

4010002

Timestamp không hợp lệ

Timestamp không phải dạng số

4010003

Timestamp không hợp lệ

Giá trị timestamp đang lớn hơn timestamp hiện tại ( lớn hơn time.Now() )

4010004

Yêu cầu đã hết hạn

Giá trị timestamp nên trong khoảng 02 tiếng tính từ thời điểm request

4010005

Hệ thống xảy ra lỗi khi xử lý yêu cầu

Kiểm tra lại giá trị Nonce trong request header

4010006

Hệ thống xảy ra lỗi khi xử lý yêu cầu

Giá trị Nonce hiện tại đã được hệ thống ghi nhận sử dụng. Nên thay bằng giá trị Nonce mới.

4040001

Không tìm thấy dữ liệu

Kiểm tra lại các thông tin / ID truyền lên. Trong trường hợp dữ liệu đúng, vui lòng liên hệ hỗ trợ kỹ thuật để được trợ giúp.

5000101

Hệ thống xảy ra lỗi khi xử lý yêu cầu

Vui lòng liên hệ hỗ trợ kỹ thuật để được trợ giúp.

4040201

Merchant không tồn tại trong hệ thống

Kiểm tra lại mã Merchant / Store / POS tương ứng.

4000801

Không có quyền thực hiện hoàn tiền

Vui lòng liên hệ hỗ trợ kỹ thuật để được trợ giúp.

4030001

Merchant ko có quyền truy cập

Merchant chưa được hệ thống cấp phép để sử dụng tính năng nên việc gọi API đang bị từ chối

Deprecated APIs

APIs

Get user info by phone number

GET {API-HOST}/merchant-integration/v1/loyalty/topup/member?{parameters}

API cho merchant để kiểm tra thông tin của số điện thoại người dùng.

Path Parameters

Name
Type
Description

phone_number

string

Số điện thoại của người dùng theo định dạng 0xxxxxxx. Tối thiểu 10 ký tự. Tối đa 11 ký tự

store_code

string

Mã cửa hàng của merchant tại VinID

pos_code

string

Mã máy POS của merchant tại VinID

{
  "meta": {
    "code": int,
    "message": "string"
  },
  "data": {
    "full_name":        string,
    "phone_number":     string,
    "dob":              string,
    "gender":           string,
    "identify":         string,  // Số điện thoại cá nhân
    "status":           string,  // A: Active | I: Inactive | B: Block
    "card_status":      string   // A: Active | I: Inactive
  }
}
REQUEST TEMPLATE
{API-HOST}/merchant-integration/v1/loyalty/topup/member?phone_number=string&store_code=string&pos_code=string

Top-up points to phone number

POST {API-HOST}/merchant-integration/v1/loyalty/topup

API để nạp điểm cho số điện thoại người dùng

Request Body

Name
Type
Description

phone_number

string

Số điện thoại nhận điểm theo định dạng 0xxxxxxx Tối thiểu 10 ký tự. Tối đa 11 ký tự.

store_code

string

Mã cửa hàng của merchant tại VinID

pos_code

string

Mã máy POS của merchant tại VinID

point_amount

integer

Số điểm cần nạp. Tối thiểu 50 .Tối đa 20000000 Nhỏ hơn 20000 nếu xuất hóa đơn

order_id

string

Mã hóa đơn của merchant

txn_id

string

Mã giao dịch nạp điểm của đối tác với VinID. Tối đa 23 ký tự. Merchant tự sinh unique theo định dạng {{store_code}}xxxx

send_receipt

boolean

Yêu cầu xuất hóa đơn true: có. false : không

receipt_info

object

Thông tin để xuất hóa đơn Tất cả các trường thông tin bên dưới sẽ required nếu xuất hóa đơn

name

string

Tên ghi hóa đơn Tối đa 50 ký tự

address

string

Địa chỉ ghi hóa đơn Tối đa 100 ký tự

email

string

Email ghi hóa đơn (Yêu cầu truyền đúng định dạng) Tối đa 50 ký tự.

tax_code

string

Mã số thuế ghi hóa đơn. Tối đa 32 ký tự

{
  "meta": {
    "code": 200,
    "message": "OK"
}
REQUEST TEMPLATE
{
  "phone_number": "string",
  "store_code" : "string",
  "pos_code" : "string",
  "point_amount":2,
  "order_id": "string",
  "txn_id":"string",
  "send_receipt": true/false,
  "receipt_info": {
    "name": "string",
    "address": "string",
    "email": "string",
    "tax_code": "string"
    }
}

Query order status

GET {API-HOST}/merchant-integration/v1/loyalty/topup/status?{parameters}

API để kiểm tra trạng thái đơn hàng

Path Parameters

Name
Type
Description

txn_id

string

Mã giao dịch nạp điểm cần kiểm tra (Là mã merchant đã dùng ở API nạp điểm)

store_code

string

Mã cửa hàng của merchant tại VinID

pos_code

string

Mã máy POS của merchant tại VinID

{
  "meta": {
    "code": int,
    "message": "string"
  },
  "data": {
    "type": "string", //TXN_SALE | TXN_EARN | TXN_BURN | TXN_REFUND
    "status": "string" //SUCCESS | ERROR
  }}
REQUEST TEMPLATE
{API-HOST}/merchant-integration/v1/loyalty/topup/status?txn_id=string&store_code=string&pos_code=string

Mã lỗi

Code

Message

4000001

Dữ liệu không hợp lệ

4000306

Thẻ chưa được kích hoạt hoặc tạm thời bị khóa

4000307

TnxID đã tồn tại

4000315

Tài khoản không tồn tại

4000318

Tài khoản có nguy cơ tiềm ẩn

4000326

Tài khoản chưa được kích hoạt hoặc tạm thời bị khóa

4000328

Quá giới hạn số điểm cho phép để xuất hóa đơn

4010001

Lỗi trong quá trình chứng thực yêu cầu

4030302

Store/POS không tồn tại

Tham khảo bảng Mã lỗi chung

Xem thêm:

  • API Host

  • Quy tắc kết nối

Dịch vụ E-Voucher

Luồng người sử dụng dịch vụ

Khách hàng lấy voucher phía VinID để sử dụng dịch vụ phía đối tác.

Verify voucher

POST {API-Host}/merchant-integration/v1/e-voucher/verify

API cho Merchant xác thực thông tin voucher mà khách hàng sử dụng

Headers

Request Body

Mark used voucher

POST {API-Host}/merchant-integration/v1/e-voucher/mark-used

API cho Merchant đánh dấu voucher đã sử dụng

Headers

Request Body

Mã lỗi

Refund Voucher

POST {API-Host}/merchant-integration/v1/e-voucher/refund

API Thu hồi e-voucher

Headers

Request Body

Mã lỗi

Name
Type
Description
Name
Type
Description
Name
Type
Description
Name
Type
Description
Name
Type
Description
Name
Type
Description
Code
Mesage

X-Key-Code*

string

mã xác thực merchant được khởi tạo trên Merchant Site

X-Timestamp*

string

thời gian merchant tạo request đến hệ thống của VinID

X-Nonce*

number

sử dụng với mỗi request từ merchant, có giá trị sử dụng trong 2h từ thời điểm hệ thống VinID nhận được request

X-Signature*

string

chữ ký điện tử xác thực của request

store_code*

string

Mã cửa hàng của merchant được VinID cấp, nơi khách hàng sử dụng voucher

pos_code*

string

Mã máy pos cửa hàng của merchant được VinID cấp, nơi khách hàng sử dụng voucher

serial_number*

string

Mã sử dụng (ticket/code/serial) của voucher mà khách hàng sử dụng

order_info*

object

Thông tin đơn hàng phía đối tác

merchant_staff_id*

string

Mã định danh nhân viên merchant tại cửa hàng

extra_data

object

Thông tin bổ sung

{
   "meta":{
      "code":200,
      "message":"success"
   },
   "data": {
      "available_to": "long",
      "available_from": "long",
      "min_order_value": "double",
      "discount_value": "double",
      "discount_type": "string (percent, amount)",
      "apply_in_holiday": "boolean",
      "merchant_voucher_code": "string"
   }
}
{
	"meta":{
		"code":4040901,
		"message":"Không tìm thấy dữ liệu thiết lập của merchant"
	}
}
{
	"meta":{
		"code":4000001,
		"message":"Dữ liệu không hợp lệ"
	}
}
{
	"meta":{
		"code":4000902,
		"message":"Voucher serial không tồn tại, đã hết hạn hoặc đã được sử dụng"
	}
}
{
	"meta":{
		"code":5000001,
		"message":"Hệ thống xảy ra lỗi khi xử lý yêu cầu"
	}
}
{ 
  "store_code": "string",
  "pos_code": "string",
  "serial_number": "string",
  "order_info": {},
  "merchant_staff_id": "string",
  "extra_data": {}   
}

X-Key-Code*

string

mã xác thực merchant được khởi tạo trên Merchant Site

X-Timestamp*

string

thời gian merchant tạo request đến hệ thống của VinID

X-Nonce*

number

sử dụng với mỗi request từ merchant, có giá trị sử dụng trong 2h từ thời điểm hệ thống VinID nhận được request

X-Signature*

string

chữ ký điện tử xác thực của request

store_code*

string

Mã cửa hàng của merchant được VinID cấp, nơi khách hàng sử dụng voucher

pos_code*

string

Mã máy pos cửa hàng của merchant được VinID cấp, nơi khách hàng sử dụng voucher

serial_number*

string

Mã sử dụng (ticket/code/serial) của voucher mà khách hàng sử dụng

redeem_ref_id*

string

Mã tham chiếu của giao dịch sử dụng sử dụng voucher của merchant

merchant_staff_id*

number

Mã định danh nhân viên merchant tại cửa hàng

extra_data

object

Thông tin bổ sung

merchant_code*

string

Mã merchant được VinID cấp

merchant_voucher_code*

string

Merchant voucher code

merchant_reference_id*

string

Merchant reference id

{
   "meta":{
      "code":200,
      "message":"success"
   }
}
{
	"meta":{
		"code":4040901,
		"message":"Không tìm thấy dữ liệu thiết lập của merchant"
	}
}
{
	"meta":{
		"code":4000001,
		"message":"Dữ liệu không hợp lệ"
	}
}
{
	"meta":{
		"code":4000902,
		"message":"Voucher serial không tồn tại, đã hết hạn hoặc đã được sử dụng"
	}
}
{
	"meta":{
		"code":5000001,
		"message":"Hệ thống xảy ra lỗi khi xử lý yêu cầu"
	}
}
{ 
  "store_code": "string",
  "pos_code": "string",
  "merchant_code": "string",
  "merchant_voucher_code": "string",
  "merchant_reference_id": "string",
  "serial_number": "string",
  "redeem_ref_id": "string",
  "merchant_staff_id": int,
  "extra_data": {}   
}

Code

Message

4000001

Dữ liệu không hợp lệ

4040901

Không tìm thấy dữ liệu thiết lập của merchant

4000902

Voucher serial không tồn tại, đã hết hạn hoặc đã được sử dụng

5000001

Hệ thống xảy ra lỗi khi xử lý yêu cầu

X-Key-Code*

string

mã xác thực merchant được khởi tạo trên Merchant Site

X-Timestamp*

string

thời gian merchant tạo request đến hệ thống của VinID

X-Nonce*

number

sử dụng với mỗi request từ merchant, có giá trị sử dụng trong 2h từ thời điểm hệ thống VinID nhận được request

X-Signature*

string

chữ ký điện tử xác thực của request

serials*

[]string

Serial numbers of the voucher codes

{
   "meta":{
      "code":200,
      "message":"success"
   }
}
{
	"meta":{
		"code":5000001,
		"message":"Hệ thống xảy ra lỗi khi xử lý yêu cầu"
	}
}
{
    "meta": {
        "code": 4010001,
        "message": "Lỗi trong quá trình chứng thực yêu cầu"
    }
}
{
	"meta":{
		"code":4040901,
		"message":"Không tìm thấy dữ liệu thiết lập của merchant"
	}
}
{ 
  "serials": []"string"
}

4000001

Dữ liệu không hợp lệ

4040901

Không tìm thấy dữ liệu thiết lập của merchant

5000001

Hệ thống xảy ra lỗi khi xử lý yêu cầu

Dịch vụ VinID Giftcode

Giới thiệu dịch vụ

Người dùng hiện nay đã không còn xa lạ với VinID Gift Card - là những chiếc thẻ cứng của VinID với những mệnh giá khác nhau từ 50.000đ đến 10.000.000đ sử dụng để nạp điểm thẻ vào tài khoản VinID của mình và tiêu dùng tại hệ sinh thái của Tập đoàn Vingroup và các đối tác của VinID.

Để nâng cao sự tiện lợi trong kỷ nguyên số, VinID cung cấp dịch vụ mua mã Giftcode cho phép đối tác tích hợp chủ động mua mã thẻ Gift Card để cung cấp đến người dùng cuối bằng hệ thống của chính mình. Người dùng thực hiện nạp mã vào tài khoản VinID để sử dụng.

Lưu ý

Điểm VinID được nạp bằng Giftcard/Giftcode có thể sử dụng ngay sau khi nạp

Hướng dẫn cách sử dụng mã Giftcode

Cách 1: Nạp qua SMS Soạn tin nhắn theo cú pháp VinID[dấu cách][số thẻ VinID][dấu cách][mã nạp điểm] gửi đến 6067

Cách 2: Nạp qua ứng dụng VinID Truy cập ứng dụng VinID, trong mục Tiện ích, chọn Nạp điểm, nhập mã Giftcode và ấn Tiếp tục.

Luồng người dùng sử dụng dịch vụ

Đối tác có thể sử dụng Giftcode cho nhiều mục đích khác nhau tùy thuộc vào nghiệp vụ của mình như: mua bán, trao đổi, tặng thưởng, … Sơ đồ dưới đây minh họa cho nghiệp vụ Đổi VinID Giftcode của đối tác có hệ thống điểm loyalty riêng.

Sơ đồ xử lý kỹ thuật

APIs

Lưu ý:

  • Mã code nạp điểm sẽ được mã hóa bằng thuật toán RSA-2048. Đối tác cần chuẩn bị 1 cặp private / public key để thực hiện việc mã hóa / giải mã code. Public key sẽ được cung cấp cho VinID để thực hiện mã hóa.

  • Đối tác có trách nhiệm bảo vệ private key của mình không để lộ ra ngoài. Cặp key này sẽ không được phép thay đổi trên môi trường Production.

  • Cặp khóa để mã hóa giftcode là riêng biệt với các cặp khóa tạo X-Key-Code để kết nối API.

Check quantity

POST {API-HOST}/merchant-integration/v1/gateway

API để kiểm tra số lượng giftcode còn lại trong kho của merchant.

Headers

Name
Type
Description

X-API-Code*

String

mi_v1_loyalty_giftcode_quantity

Request Body

Name
Type
Description

merchant_id*

string

Mã cửa hàng của merchant tại VinID

terminal_id*

string

Mã máy POS của merchant tại VinID

card_type

array

Danh sách mệnh giá giftcode cần kiểm tra Đơn vị: nghìn đồng Ví dụ: [“10”, "50", "100"]

merchant_code*

string

Mã của merchant tại VinID

{
  "meta": {
    "code": 200,
    "message": "OK"
  },
  "data": [
    {
      "card_type": "string",
      "quantity": 0
    }
  ]
}

Withdraw Giftcode

POST {API-HOST}/merchant-integration/v1/gateway

API để lấy giftcode ra khỏi kho

Headers

Name
Type
Description

X-API-Code*

string

mi_v1_loyalty_giftcode_orders

Request Body

Name
Type
Description

merchant_id*

string

Mã cửa hàng của merchant tại VinID

terminal_id*

string

Mã máy pos của merchant tại VinID

order_id*

string

Mã order unique phía merchant tự sinh

order_info*

array

Thông tin của lệnh lấy giftcode

card_type*

string

Mệnh giá giftcode cần lấy Đơn vị: nghìn đồng

quantity*

integer

Số lượng giftcode cần lấy

merchant_code*

String

Mã của merchant tại VinID

{
  "meta": {
    "code": int,
    "message": "string"
  },
  "data": {
    "created_at": 0,
    "extra_data: "string"
    "merchant_order_id": "string",
    "order_info": [
      {
        "card_type": "string", //Mệnh giá giftcode
        "cards": [
          {
            "code": "string", //Mã nạp của giftcode
            "expire_date": "string", //Ngày hết hạn
            "serial": "string" //Mã tra soát
          }
        ]
      }
    ]
  }
}
REQUEST TEMPLATE
{
  "merchant_code": string,
  "merchant_id": string,
  "terminal_id": string,
  "order_info": [
    {
      "quantity": integer,
      "card_type": string
    }
  ],
  "order_id": string
}

Check giftcode

POST {API-HOST}/merchant-integration/v1/gateway

API để kiểm tra trạng thái của giftcode

Headers

Name
Type
Description

X-API-Code*

string

mi_v1_loyalty_giftcode_status

Request Body

Name
Type
Description

merchant_id*

string

Mã cửa hàng của merchant tại VinID

terminal_id*

string

Mã máy pos của merchant tại VinID

serial*

string

Mã serial của giftcode cần kiểm tra

merchant_code*

String

Mã của merchant tại VinID

{
  "meta": {
    "code": int,
    "message": "string"
  },
  "data": {
    "status": "USED", //“USED” hoặc “ACTIVE”
    "expire_date": "yyyy-MM-dd" //Hạn sử dụng
  }
}
{
  "meta": {
    "code": int,
    "message": "string"
  },
  "data": null
}

Get order detail

POST {API-HOST}/merchant-integration/v1/gateway

API để yêu cầu lấy thông tin của đơn hàng đã thực hiện

Headers

Name
Type
Description

X-API-Code*

string

mi_v1_loyalty_giftcode_detail

Request Body

Name
Type
Description

merchant_code*

String

Mã của merchant tại VinID

merchant_id*

String

Mã cửa hàng của merchant tại VinID

terminal_id*

String

Mã máy POS của merchant tại VinID

order_id*

String

Mã order unique phía merchant tự sinh

{
  "meta": {
    "code": int,
    "message": "string"
  },
  "data": {
    "created_at": 0,
    "extra_data": "string",
    "merchant_order_id": "string",
    "order_info": [
      {
        "card_type": "string",
        "cards": [
          {
            "code": "string", //Mã nạp của giftcode
            "expire_date": "string", //Ngày hết hạn
            "serial": "string" //Mã tra soát
          }
        ]
      }
    ]   
  }
}

Mã lỗi

Code

Message

4000

Dữ liệu không hợp lệ

200100

Số lượng giftcode trong kho không đủ

200200

Mã order đã tồn tại

5000

Hệ thống xảy ra lỗi khi xử lý yêu cầu

Tham khảo bảng Mã lỗi chung

Xem thêm:

  • API Host

  • Quy tắc kết nối

Thuật ngữ

Các thuật ngữ kỹ thuật được dùng trong tài liệu này

  • Đối tác:

Bên đã tích hợp và sử dụng một hoặc nhiều phương thức thanh toán hiện hành của VinID như là một trong các phương thức thanh toán chính thức của mình.

  • Mã giao dịch VinID:

Mã giao dịch VinID là một mã được VinID Pay tạo ra để định danh cho một giao dịch của đối tác. Mã giao này là duy nhất trên hệ thống VinID. này là duy nhất trên hệ thống VinID Pay.

  • Mã giao dịch đối tác:

Mã giao dịch đối tác là mã duy nhất và định danh cho giao dịch của đối tác khi gửi qua VinID để yêu cầu thanh toán. Mã giao dịch đối tác sẽ tương ứng với một mã giao dịch của VinID.order_reference_id.

  • Trang web/ứng dụng khách hàng

Trang web / Ứng dụng được VinID xây dựng nhằm hỗ trợ khách hàng doanh nghiệp truy cập vào để xem và quản lý các thông tin kinh doanh (giao dịch, thông tin tích hợp, cửa hàng, tài khoản ví, v.v.. ) của doanh nghiệp mình.

  • Tài khoản khách hàng (Merchant account):

Mỗi đối tác khi liên kết với VinID Pay sẽ được cấp tài khoản khách hàng. Tài khoản này sẽ dùng để quản lý các giao dịch, thông tin tích hợp, cửa hàng, tài khoản ví, v.v.. trên trang web/ ứng dụng doanh nghiệp (Merchant Site/App) do VinID Pay cung cấp.

Nếu bạn là nhà phát triển phần mềm hoặc tổ chức thứ 3, bạn vẫn có thể đăng ký tài khoản khách hàng và sử dụng các thông tin tích hợp của VinID Pay, cũng như các chức năng khác (nêu trên).

  • RSA

RSA là một thuật toán mã hóa công khai. Đây là thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời với việc mã hóa, nó đánh dấu một sự tiến bộ vượt bậc của lĩnh vực mật mã học trong việc sử dụng khóa công cộng. RSA đang được sử dụng phổ biến trong thương mại điện tử và được cho là đảm bảo an toàn với điều kiện độ dài khóa đủ lớn.

Câu hỏi thường gặp

Merchant QR và Transaction QR khác nhau như nào? Tôi nên dùng hình thức nào cho cửa hàng của mình?

Mã Merchant QR (MQR) sẽ cố định theo từng đối tác, VinID sẽ hỗ trợ khởi tạo và in mã để có thể đặt tại cửa hàng. Khách hàng khi thanh toán sẽ thực hiện quét mã này và chủ động nhập số tiền cần thanh toán vào để thực hiện thanh toán.

Mã Transaction QR (TQR) là mã linh động, mỗi 1 mã sẽ tương ứng với 1 đơn hàng nhất định và không trùng lặp. Hệ thống của đối tác sẽ chủ động gọi đến hệ thống VinID để khởi tạo và lấy mã QR tương ứng để show ra cho khách. Khách hàng khi thanh toán sẽ thực hiện quét mã và thanh toán mà không cần nhập số tiền.

Nếu đối tác không có sẵn hệ thống kĩ thuật để thực hiện tích hợp vào hệ thống VinID thì nên sử dụng hình thức thanh toán qua mã MQR.

Làm thế nào tôi có thể theo dõi được các giao dịch phát sinh tại cửa hàng của mình?

  • Với đối tác có hệ thống quản lý đơn hàng riêng, toàn bộ trạng thái của các giao dịch sẽ được báo về cho đối tác thông qua callback/response và đối tác có thể hoàn toàn chủ động theo dõi cập nhật của các giao dịch trên hệ thống của chính mình.

  • Với đối tác chưa có hệ thống quản lý đơn hàng thì có thể sử dụng hệ thống quản lý của VinID cung cấp để theo dõi qua website hoặc ứng dụng điện thoại :

Ứng dụng quản lý

Có 02 hình thức cho phép đối tác đăng nhập vào hệ thống quản lý để theo dõi và cài đặt các thông tin cần thiết:

  • Ứng dụng VinID Merchant

Merchant Mobile App

Merchant App là công cụ tra cứu giao dịch, thông tin chi tiết giao dịch, cửa hàng và nhận thông báo khi có giao dịch thành công trên tài khoản ví điện tử của đối tác chấp nhận thanh toán qua VinID.

Tải ứng dụng tại:

Thanh toán Linked Account

Giới thiệu dịch vụ

Là giải pháp thanh toán hỗ trợ các đối tác, đơn vị kinh doanh có website hoặc ứng dụng di động (Android, iOS).

Khách hàng sau khi đã liên kết tài khoản ví VinID Pay với ứng dụng của đối tác, tại bước chọn phương thức thanh toán, khách hàng chỉ cần chọn VinID Pay để thanh toán trực tiếp ở ứng dụng đối tác mà không cần phải thực hiện thêm thao tác gì hay mở ứng dụng VinID.

Luồng người dùng sử dụng dịch vụ

Sơ đồ xử lý kỹ thuật

1.Liên kết

2. Thanh toán

Giải thích sơ đồ

Liên kết

  1. Khách hàng chọn liên kết tài khoản ví VinID Pay làm phương thức thanh toán trên hệ thống của Merchant.

  2. Merchant Backend kiểm tra yêu cầu liên kết và gửi yêu cầu liên kết cho VinID Pay Backend.

  3. VinID Pay Backend kiểm tra và thực hiện khởi tạo liên kết, trả về ID và url cho Merchant Backend.

  4. Merchant Backend lưu thông tin và thực hiện: a. Trên thiết bị di động, mở url đã nhận → Hệ thống sẽ mở web hoặc app VinID Pay để khách hàng xác nhận. b. Trên các thiết bị IoT, generate mã QR liên kết và hiển thị mã QR cho khách hàng.

  5. Khách hàng thực hiện xác nhận nếu liên kết trên thiết bị di động hoặc sử dụng app VinID Pay để quét mã QR.

  6. Khách hàng xác nhận liên kết

  7. Sau khi xác nhận liên kết thành công, VinID Pay Backend gọi API của Merchant Backend để thực hiện thông báo kết quả liên kết đồng thời quay lại ứng dụng của Merchant. Merchant Backend gọi API kiểm tra trạng thái liên kết nếu không nhận được kết quả.

  8. Merchant hiển thị kết quả liên kết trên ứng dụng của Merchant.

Thanh toán

  1. Khách hàng lựa chọn sản phẩm/dịch vụ trên ứng dụng của Merchant và lựa chọn thanh toán qua liên kết tài khoản VinID Pay.

  2. Merchant Backend yêu cầu khách hàng xác nhận trước khi thực hiện thanh toán

  3. Sau khi khách hàng xác nhận thanh toán, Merchant Backend kiểm tra và gửi yêu cầu thanh toán cho VinID Pay Pay Backend.

  4. VinID Pay Backend kiểm tra yêu cầu thanh toán và thực hiện: a. Nếu số tiền thanh toán nằm trong hạn mức ko cần xác thực, VinID Pay Backend thực hiện trừ tiền của ví khách hàng và trả về kết quả giao dịch cho Merchant Backend. b. Nếu số tiền thanh toán nằm trong hạn mức yêu cầu xác thực, VinID Pay Backend thực hiện khởi tạo giao dịch và trả về thông tin giao dịch cho Merchant Backend.

  5. Merchant Backend nhận thông tin giao dịch: a. Nếu giao dịch không yêu cầu xác thực, Merchant Backend thực hiện lưu thông tin và thông báo kết quả cho khách hàng b. Nếu giao dịch yêu cầu xác thực (OTP), Merchant Frontend mở màn hình nhập OTP để khách hàng xác nhận. Sau khi khách hàng nhập OTP, Merchant Backend gửi thông tin xác thực cho VinID Pay Backend. VinID Backend kiểm tra thông tin, thực hiện trừ tiền ví khách hàng và trả về kết quả giao dịch.

  6. Kết quả giao dịch: a. Với trường hợp merchant muốn xác nhận lại trạng thái đơn hàng, VinID Pay sẽ trừ tiền ví user trước và thực hiện HOLD tiền và báo lại đã HOLD tiền. Merchant sẽ thực hiện confirm lại đơn hàng đã thanh toán và VinID Pay sẽ update giao dịch thành công và báo lại. b. Với trường hợp không cần xác nhận từ phía merchant, VinID Pay sẽ thực hiện trừ tiền ví, ghi nhận giao dịch thành công luôn và báo lại cho merchant.

  7. Merchant Frontend hiển thị kết quả giao dịch cho khách hàng.

APIs

Create link request

POST https://api-payment-uat.vinid.dev/oh-integration/account/v1/link-wallet

Request Body

Check link status

POST https://api-payment-uat.vinid.dev/oh-integration/account/v1/check-status-link-wallet

Request Body

Create payment transaction

POST https://api-payment-uat.vinid.dev/oh-integration/transaction/purchase/v1/online-transactions

Request Body

Confirm payment transaction

POST https://api-payment-uat.vinid.dev/oh-integration/transaction/purchase/v1/online-transactions-confirm

Request Body

Confirm order transaction

POST https://api-payment-uat.vinid.dev/oh-integration/transaction/purchase/v1/confirmOrder

Request Body

Unlink VinID Pay Wallet

POST https://api-payment-uat.vinid.dev/oh-integration/account/v1/unlink-wallet

Request Body

Hướng dẫn test

VinID Giftcard

Link tài liệu tham khảo từ wiki

Tham khảo thêm tại .

iOS:

Android:

Merchant Site:

iOS:

ANDROID:

Xem thêm

Name
Type
Description
Name
Type
Description
Name
Type
Description
Name
Type
Description
Name
Type
Description
Name
Type
Description

signature

string

signature = sign(<partner_user_id>|<partner_code>|<callback_url>) Cần thực hiện ký số (SHA 256, RSA 2048) bằng private_key

callback_url

string

URL của API callback sau khi liên kết thành công. Trong API Callback VinID sẽ gửi thông tin token sau liên kết và thông tin điện thoại của user

partner_type

string

Default value = MERCHANT

partner_code

string

Mã định danh của Merchant tại VinID Pay

partner_user_id

string

Unique user identify on merchant system (user name, email, phone_number...)

{
    "data": {
        "web_url": "string",
        "link_id": "string",
        "expiry_duration": int       //expire time (minute)
    }
    "meta": {
    }
}

signature

string

Signature = sign (<partner_user_id>|<partner_code>|<callback_url>) Cần thực hiện ký số (SHA 256, RSA 2048) bằng private_key

partner_code

string

Mã định danh của Merchant tại VinID Pay

link_reference_id

string

unique user indentity on merchant system (user name, email, phone_number...)

{
    "data": {
                "link_reference_id": "String",
                "user_token":"string",
                "phone_number": "string" //masked và hiển thị 3 số cuối: *******xxx
            }
    "meta": {
        "code": 200
    }
}

signature

string

signature = (<user_token>|<merchant_code>|<merchant_id>|<terminal_id>|<invoice_no>|<order_create_at>|<bill_amount>|<amount_currency=VND>|<amount_currency=OE POINT>) Cần thực hiện ký số (SHA 256, RSA 2048) bằng private_key

holding_enabled

boolean

Nếu Merchnat cần check lại trạng thái đơn hàng (trừ tiền user, hold tiền vào tài khoản merchant) > holding_enable=true nếu Merchant không cần check lại trạng thái đơn hàng > holding_enable=false

invoice_no

string

Số hóa đơn (mã đơn hàng)

currency

string

VNĐ

amount

string

Số tiền cần thanh toán (VNĐ)

payment_request_list

array

Thông tin thanh toán

bill_amount

string

Số tiền hóa đơn gốc

order_created_at

number

Ngày tạo đơn hàng

transaction_reference_number

string

Mã giao dịch phía merchant

description

string

Mô tả đơn hàng

terminal_id

string

pos code (mã pos)

merchant_id

string

store code (mã cửa hàng)

merchant_code

string

Mã định danh của merchant tại VinID

partner_code

string

Mã định danh của Merchant tại VinID Pay

user_token

string

User token sau khi đăng ký tài khoản

{
    "data": {
        "transaction_id": "string",
        "transaction_ref_number": "string",
        "transaction_status": "string",
        "transaction_wallet_number": "string", //for reconciliation
        "verification_methods" : number, // 0: By pass; 2: OTP;
    }
    "meta": {
    }
}

signature

string

signature = sign(<user_token>|<transaction_id>|<transaction_reference_id>) Cần thực hiện ký số (SHA 256, RSA 2048) bằng private_key

otp

string

Mã OTP khách nhận được

transaction_reference_number

string

Mã giao dịch phía đối tác

transaction_id

string

Mã giao dịch

partner_code

string

Mã định danh của merchant tại VinID Pay

user_token

string

User token sau khi liên kết tài khoản

{
    "data": {
        "transaction_id": "string",
        "transaction_ref_number": "string",
        "transaction_status": "string",
        "transaction_wallet_number": "string", //for reconciliation
    }
    "meta": {
    }
}

signature

string

signature = sign(<invoice_no>|<parter_code>|<order_status>) Cần thực hiện ký số (SHA 256, RSA 2048) bằng private_key

order_status

string

Trạng thái đơn hàng

partner_code

string

Mã định danh của merchant tại VinID Pay

invoice_no

string

Mã hóa đơn (mã đơn hàng)

{
    "meta": {
        "request_id": "string",
        "code": 200
    },
    "data": {
        "transaction_status": "FAIL", // FAIL, SUCCESS
    }
}

signature

string

signature = sign(<user_token>|<partner_code>) Cần thực hiện ký số (SHA 256, RSA 2048) bằng private_key

partner_code

string

Mã định danh của Merchnat tại VinID Pay

user_token

string

User token sau khi liên kết tài khoản

{
    "data": {}
    "meta": {
          "code": 200
    }
}

Case

Description / Steps to procedure

Expect Behavior

Thanh toán thành công với trường hợp số tiền nhỏ hơn X

(không yêu cầu khách hàng xác nhận)

  • Trên Merchant app, chọn thanh toán 1 đơn hàng sử dụng VinID Pay làm phương thức thanh toán

  • Thanh toán thành công không cần xác nhận

  • Thông báo thanh toán thành công trên 3rd-party app

  • Thông báo thanh toán thành công trên ứng dụng VinID

Thanh toán thành công với số tiền >= X

(yêu cầu khách hàng xác nhận OTP)

  • Trên Merchant app, chọn thanh toán 1 đơn hàng sử dụng VinID Pay làm phương thức thanh toán

  • 3rd-party hiển thị màn hình nhập OTP

  • Nhập OTP và xác nhận thanh toán thành công

  • Thông báo thanh toán thành công trên Merchant app

  • Thông báo thanh toán thành công trên ứng dụng VinID

https://en.wikipedia.org/wiki/RSA_(cryptosystem)
Ứng dụng iOS
Ứng dụng Android
Web Merchant site
Ứng dụng quản lý
https://apps.apple.com/vn/app/vinid-merchant/id1477309624
https://play.google.com/store/apps/details?id=com.vingroup.VinIDMerchantApp&hl=en
https://merchant.vinid.net/
https://apps.apple.com/vn/app/vinid-merchant/id1477309624
https://play.google.com/store/apps/details?id=com.vingroup.VinIDMerchantApp&hl=en
Hướng dẫn sử dụng Merchant App

Đối soát Ví điện tử VinID Pay

Cung cấp các thông tin trao đổi, quy trình đối soát, quy trình xử lý sai sót.

1. Các quy định chung

  1. Với trường hợp đối tác gửi dữ liệu dùng để đối soát thì các case trả lời dùng dữ liệu đối tác để trả lời, trừ case dữ liệu chỉ có ở VinID.

  2. Quy định chỉ trả lời các giao dịch sai lệch khi trả lời kết quả đối soát. Các trường hợp trả lời tất cả các loại giao dịch thì sẽ note riêng sau.

2. Quy trình đối soát

2.1. VinID gửi dữ liệu đối soát

Mô tả quy trình :

  • Bước 1: Hàng ngày Vinid thực hiện xuất dữ liệu giao dịch của ngày hôm trước ra file CSV để upload lên server sFTP cho đối tác.

  • Bước 2: Đối tác kết nối vào server sFTP của Vinid để lấy file giao dịch.

  • Bước 3: Đối tác thực hiện đối soát và xuất kết quả đối soát ra file CSV sau đó upload lên server sFTP.

  • Bước 4: Nghiệp vu của đối tác phối hợp cùng nghiệp vụ của Vinid xử lý các giao dịch sai lệch (nếu có).

  • Bước 5: Hệ thống đối soát của Vinid thực hiện lấy file kết quả đối soát trên sFTP do đối tác gửi để cập nhật vào hệ thống.

  • Bước 6: Nghiệp vụ của Vinid thực hiện kiểm tra kết quả đối soát và phối hợp cùng nghiệp vụ của đối tác xử lý các giao dịch (nếu có).

  • Bước 7: Kết thúc.

2.2. Đối tác gửi dữ liệu đối soát

Mô tả quy trình :

  • Bước 1: Hàng ngày đối tác thực hiện xuất danh sách giao dịch của ngày trước đó ra file và upload lên server sFTP của VinID.

  • Bước 2: VinID thực hiện lấy file giao dịch do đối tác cung cấp sau đó import vào hệ thống

  • Bước 3: Hệ thống đối soát của V thực hiện đối soát, cập nhật kết quả đối soát vào cơ sở dữ liệu sau đó xuất file kết quả đối soát để upload lên server sFTP cho đối tác.

  • Bước 4: Đối tác thực hiện lấy file kết quả đối soát sử server sFTP và cập nhật kết quả vào hệ thống của đối tác.

  • Bước 5: Nghiệp vụ của đối tác kiểm tra kết quả đối soát sau đó kết hợp cùng nghiệp vụ của Vinid xử lý các giao dịch sai lệch (nếu có).

  • Bước 6: Nghiệp vụ của Vinid thực hiện kiểm tra kết quả đối soát sau đó kết hợp cùng nghiệp vụ đối tác xử lý các giao dịch sai lệch (nếu có).

  • Bước 7: Kết thúc.

3. Xử lý khi có sai lệch

3.1. VinID có giao dịch thành công, đối tác ghi nhận không thành công

  • Cách 1: Nhân viên đối soát thực hiện: Hoàn tiền vào ví cho khách hàng.

  • Cách 2: Thực hiện ghi nhận thành công bổ sung ở dịch vụ: áp dụng ở bill gạch nợ bổ sung cước cho khách hàng, mua hàng thì thực hiện giao hàng cho khách hàng.

3.2. Đối tác có giao dịch thành công, VinID ghi nhận không thành công

  • Cách 1: Thực hiện truy thu tiền của khách hàng tại ví khi 2 bên đồng ý gạch nợ hóa đơn của khách hàng.

  • Cách 2: Hủy giao dịch phía đối tác: áp dụng ở bill hủy gạch nợ ở đối tác.

3.3. Sai lệch số tiền, sai lệch thông tin

  • Vận hành 2 bên phối hợp để xử lý trường hợp này.

4. Thông tin trường dữ liệu giữa đối tác và VinID

  • Định dạng file đối tác gửi : YYYYMMDD_Đối_tác_VINID_TRAN.csv

  • Định dạng file giao dịch VinID gửi đối tác: YYYYMMDD_VINID_Đối_tác_TRAN.csv

  • Định dạng file dữ liệu kết quả đối soát VinID gửi: YYYYMMDD_VINID_Đối_tác_RESULT_TRAN.csv

4.1. File đối tác gửi VinID

STT

Tên trường

Yêu cầu

Dữ liệu

Mô tả

1

ID

Mandatory

String(50)

ID tại đối tác

2

Mã hóa đơn

Mandatory

String(50)

Mã hóa đơn gửi khi thanh toán

3

Mã giao dịch tại ví

Mandatory

String(30)

Thông tin ví trả khi thanh toán

4

Số tiền

Mandatory

Number

Số tiền giao

5

Tiền tệ

Mandatory

String(10)

VND

6

Phí

Mandatory

Number

Tiền phí giao dịch khách hàng phải thanh toán

7

Thuế

Mandatory

Number

Tiền thuế giao dịch khách hàng phải thanh toán

8

Chiết khấu

Mandatory

Number

Chiết khấu cho khách hàng

9

Mã merchant

Optional

String(50)

Mã merchant truyền khi giao dịch

10

Mã MID

Optional

String(15)

Mã MID truyền khi giao dịch

11

Mã TID

Optional

String(16)

Mã TID truyền khi giao dịch

12

Ngày giao dịch

Mandatory

String(10)

DD/MM/YYYY

13

Thời gian giao dịch

Optonal

String(8)

H24:mi:ss

14

Trạng thái giao dịch đối tác

Mandatory

Number

0: Thành công

1: Pending/processing

2: Thất bại

15

Mô tả giao dịch

Optional

String(1000)

Các thông tin liên quan đến đối soát, gửi dạng json

16

Loại giao dịch

Mandatory

String(10)

1: Giao dịch thanh toán

-1: Giao dịch hòan tiền

17

Check sum

Mandatory

String

md5(dòng dữ liệu + private key)

4.2. File VinID gửi đối tác

STT

Tên trường

Yêu cầu

Dữ liệu

Mô tả

1

Mã hóa đơn

Mandatory

String(50)

Mã hóa đơn khi gửi thanh toán

2

Mã giao dịch tại ví

Mandatory

String(30)

Thông tin ví trả khi thanh toán

3

Số tiền

Mandatory

Number

Số tiền giao

4

Tiền tệ

Mandatory

String(10)

VND, POINT

5

Phí

Mandatory

Number

Tiền phí giao dịch khách hàng phải thanh toán

6

Thuế

Mandatory

Number

Tiền thuế giao dịch khách hàng phải thanh toán

7

Chiết khấu

Mandatory

Number

Chiết khấu cho khách hàng

8

Mã merchant

Optional

String(50)

Mã merchant truyền khi giao dịch

9

Mã MID

Optional

String(15)

Mã MID truyền khi giao dịch

10

Mã TID

Optional

String(16)

Mã TID truyền khi giao dịch

11

Ngày giao dịch

Mandatory

String(10)

DD/MM/YYYY

12

Thời gian giao dịch

Optonal

String(8)

H24:mi:ss

13

Mô tả giao dịch

Optional

String(1000)

Mô tả

14

Mã giao dịch tại VinID

Mandatory

String(20)

Mã giao dịch tại VinID

15

Trạng thái tại VinID

Mandatory

Number

0: Thành công

1: Hold tiền khách hàng

-1: Thất bại

16

Loại giao dịch

Optional

String(10)

1: Thanh toán

-1: Refund

17

Check sum

Mandatory

String

md5(dòng dữ liệu + private key)

4.3. File kết qủa đối soát VinID gửi đối tác

STT

Tên trường

Yêu cầu

Dữ liệu

Mô tả

1

ID

Mandatory

String(50)

ID tại đối tác

2

Mã hóa đơn

Optional

String(50)

Mã hóa đơn gửi khi thanh toán

3

Mã giao dịch tại ví

Mandatory

String(30)

Thông tin ví trả khi thanh toán

4

Số tiền

Mandatory

Number

Số tiền giao

5

Tiền tệ

Mandatory

String(10)

VND, POINT

6

Phí

Mandatory

Number

Tiền phí giao dịch khách hàng phải thanh toán

7

Thuế

Mandatory

Number

Tiền thuế giao dịch khách hàng phải thanh toán

8

Chiết khấu

Mandatory

Number

Chiết khấu cho khách hàng

9

Mã merchant

Optional

String(50)

Mã merchant truyền khi giao dịch

10

Mã MID

Optional

String(15)

Mã MID truyền khi giao dịch

11

Mã TID

Optional

String(16)

Mã TID truyền khi giao dịch

12

Ngày giao dịch

Mandatory

String(10)

DD/MM/YYYY

13

Thời gian giao dịch

Optonal

String(8)

H24:mi:ss

14

Trạng thái giao dịch đối tác

Mandatory

Number

0: Thành công

1: Pending/processing

2: Thất bại

15

Mô tả giao dịch

Optional

String(1000)

Các thông tin liên quan đến đối soát, gửi dạng json

16

Mã giao dịch tại VinID

Mandatory

String(20)

Mã giao dịch tại VinID

17

Trạng thái tại VinID

Mandatory

Number

0: Thành công

1: Hold tiền khách hàng

-1: Thất bại

18

Loại giao dịch

Mandatory

String(10)

1: Giao dịch thanh toán

-1: Giao dịch hòan tiền

19

Trạng thái đối soát

Mandatory

String(2)

00: Giao dịch khớp 2 bên

01: VinID thành công, đối tác không thành công

02: VinID không thành công, đối tác thành công

03: Thông tin sai lệch (do sai lệch số tiền, thông tin khách hàng, ...)

20

Check sum

Mandatory

String

md5(dòng dữ liệu + private key)

Xem thông tin chi tiết giao dịch
Xem thông báo khi có giao dịch mới

Thông tin hỗ trợ

1.Hỗ Trợ Khách Hàng

  • Hỗ trợ chăm sóc khách hàng

    • Hotline: 1900 6959

    • Thời gian: 8h00 - 22h00 các ngày trong tuần

    • Email: cskh@vinid.net

  • Hỗ trợ đối tác:

    • Hotline: 0247 1015 888

    • Thời gian:

      • Thứ 2 - 6: 9h00 - 18h00

      • Thứ 7: 9h00 - 13h00

    • Email: hotro.mc@vinid.net

2. Địa Chỉ Liên Hệ

  • Công Ty Cổ Phần VinID

    1. Địa chỉ: Số 7, Đường Bằng Lăng 1, Khu đô thị Vinhomes Riverside, Phường Việt Hưng, Quận Long Biên, Hà Nội, Việt Nam.

    2. Điện thoại: 024-39749999

    3. Mã số Doanh nghiệp: 0108372860

    4. Ngày cấp: 23/07/2018.

    5. Nơi cấp: Phòng Đăng ký Kinh Doanh – Thành phố Hà Nội

    6. Email: cskh@vinid.net

Merchant Website

https://merchant.vinid.net

Merchant Site là công cụ của đối tác sử dụng để:

  • Phân quyền / Tạo tài khoản nhân viên.

  • Quản lý cửa hàng.

  • Tạo Pos thanh toán.

  • Tra cứu và xem thông tin chi tiết giao dịch.

Đối tác sẽ được cấp 01 tài khoản master account có toàn bộ các quyền truy cập trên Merchant Site.

Tra cứu giao dịch trên Merchant website

Phân quyền và tạo tài khoản trên Merchant website

Phân quyền

Tạo tài khoản

Xem thêm

Hướng dẫn sử dụng Merchant Website
VinID Merchant - Cổng quản lý doanh nghiệp, đối tác
Logo