NAV

Mô hình tích hợp

Chọn mô hình tích hợp ZaloPay phù hợp

POS - QuickPay

Giới thiệu Demo Hướng dẫn tích hợp

Mô tả#

Thu ngân quét mã thanh toán trên ứng dụng ZaloPay của User để thực hiện thanh toán

Luồng xử lý#

* CHÚ THÍCH

-
-
-
-

Sequence Flow

Đặc tả API#

Environment Method Endpoint
Sandbox POST https://sandbox.zalopay.com.vn/v001/tpe/submitqrcodepay
Real POST https://zalopay.com.vn/v001/tpe/submitqrcodepay

Dữ liệu truyền vào api#

Tham số Kiểu dữ liệu Kích thước Bắt buộc Ý nghĩa Ví dụ
appid int Định danh cho ứng dụng đã được cấp bởi ZaloPay. 1
appuser String 50 Thông tin người dùng như id/username... Dùng tên ứng dụng nếu không định danh được. pmqc
apptime long Thời điểm tạo đơn hàng (current unix timestamp in milisecond). 1459823610957
amount long Giá trị của đơn hàng theo VND 50000
apptransid String 40 Mã giao dịch của đơn hàng bắt đầu theo format yymmdd-Mã đơn hàng thanh toán.

Lưu ý: Với yymmdd phải đúng TimeZone Vietnam (GMT+7) (Vì các giao dịch đối soát theo ngày giờ Việt Nam).

180208_007242
embeddata String 1024 Dữ liệu riêng của đơn hàng. Dùng "{}" nếu rỗng. {"promotioninfo":"","merchantinfo":"du lieu rieng cua ung dung"}
item String 2048 Item của đơn hàng, do Merchant tự định nghĩa. Dùng "[]" nếu rỗng. [{"itemid":"knb","itename":"kim nguyen bao","itemprice":198400,"itemquantity":1}]
mac String Thông tin chứng thực của đơn hàng. (javascript:scrollToElement('#dac-ta-api_du-lieu-truyen-vao-api_tao-thong-tin-chung-thuc')) c8f49d523336f0a182586a70b71c20 da964d37954711de9273152b500df74c0d
paymentcode String Được scan từ ứng dụng ZaloPay, được mã hóa bằng Public Key do ZaloPay cấp =RSA(paymentcoderaw, publicKey) aoSCLACtsQM5g5blVNLgEBBBIz8KNg+Pz0LbcdhX8AoQR TWGEH/BrbHG8rIkNo3JIpOc7U7na0CZQ+HU8Zwhgw==
description String 100 Thông tin mô tả về đơn hàng. Sẽ hiển thị lúc thanh toán ZaloPay Mua kim nguyên bảo cho game VLTK
userIP String Địa chỉ IP của user 127.0.0.1

Một số trường đặc biệt của embeddata#

Tên
Kiểu dữ liệu Định dạng Mô tả Ví dụ
redirecturl String URL Redirect về url này sau khi thanh toán trên cổng ZaloPay (override redirect url lúc đăng ký app với ZaloPay) {"redirecturl": "https://docs.zalopay.vn/result"}
columninfo JSON String {"column_name": "value"} Thêm thông tin hiển thị ở phần Quản lý giao dịch chi tiết trên Merchant site, nếu cột chưa tồn tại cần vào phần Cài đặt hiển thị dữ liệu để cấu hình {"columninfo": "{\"branch_id\": \"HCM\",\"store_id\": \"CH123\",\"store_name\": \"Saigon Centre\",\"mc_campaign_id\": \"FREESHIP\"}"}
promotioninfo JSON String {"campaigncode":"code"} Dùng để triển khai chương trình khuyến mãi {"promotioninfo": "{\"campaigncode\":\"blackfriday\"}"}
zlppaymentid String - Mã thông tin thanh toán.
- Chỉ truyền khi đối tác cần nhận tiền đối soát về nhiều tài khoản khác nhau.
- Hệ thống ZaloPay sẽ tạo ra một mã Thanh toán (tương ứng với mỗi Tài khoản ngân hàng đối tác cung cấp) và gởi lại cho đối tác thiết lập.
{"zlppaymentid": "P4201372"}

Tạo thông tin chứng thực#

mac = HMAC(hmac_algorithm, key1, hmac_input)

Trong đó:

Tham số api trả về#

Tham số Kiểu dữ liệu Ý nghĩa
returncode int

1: Giao dịch thành công

10: Đang xử lý, kiểm tra trạng thái đơn hàng bằng API truy vấn trạng thái đơn hàng

<>: Lỗi

returnmessage String Thông tin lỗi
isprocessing boolean true: Đang xử lý
false: Kết thúc giao dịch
zptransid long Mã giao dịch của ZaloPay

Code mẫu#

/**
 * .Net core 2.1.505
 */
using System;
using System.Text;
using System.Collections.Generic;
using System.Threading.Tasks;
using ZaloPay.Helper; // HmacHelper, RSAHelper, HttpHelper, Utils (tải về ở mục DOWNLOADS)
using ZaloPay.Helper.Crypto;
using Newtonsoft.Json; // https://www.newtonsoft.com/json

namespace ZaloPayExample
{
    class Program
    {
        static string appid = "553";
        static string key1 = "9phuAOYhan4urywHTh0ndEXiV3pKHr5Q";
        static string quickPayUrl = "https://sandbox.zalopay.com.vn/v001/tpe/submitqrcodepay";
        static string rsaPublicKey = "MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAOfB6/x0b5UiLkU3pOdcnXIkuCSzmvlVhDJKv1j3yBCyvsgAHacVXd+7WDPcCJmjSEKlRV6bBJWYam5vo7RB740CAwEAAQ==";

        static async Task Main(string[] args)
        {
            var transid = Guid.NewGuid().ToString(); 
            var embeddata = new { merchantinfo = "embeddata123" };
            var items = new []{
                new { itemid = "knb", itemname = "kim nguyen bao", itemprice = 198400, itemquantity = 1 }
            };
            var paymentCodeRaw = "174830909300000096"; 
            var param = new Dictionary<string, string>();

            param.Add("appid", appid);
            param.Add("appuser", "demo");
            param.Add("apptime", Utils.GetTimeStamp().ToString());
            param.Add("amount", "1000");
            param.Add("apptransid", DateTime.Now.ToString("yyMMdd") + "_" + transid);
            param.Add("embeddata", JsonConvert.SerializeObject(embeddata));
            param.Add("item", JsonConvert.SerializeObject(items));
            param.Add("description", "ZaloPay QickPay Demo");
            param.Add("userip", "127.0.0.1"); 
            param.Add("paymentcode", RSAHelper.Encrypt(paymentCodeRaw, rsaPublicKey)); 

            var data = appid + "|" + param["apptransid"] + "|" + param["appuser"] + "|" + param["amount"] + "|" 
                + param["apptime"] + "|" + param["embeddata"] + "|" + param["item"] + "|" + paymentCodeRaw;
            param.Add("mac", HmacHelper.Compute(ZaloPayHMAC.HMACSHA256, key1, data));

            var result = await HttpHelper.PostFormAsync(quickPayUrl, param);

            foreach(var entry in result) {
                Console.WriteLine("{0} = {1}", entry.Key, entry.Value);
            }
        }
    }
}
Không tìm thấy kết quả phù hợp