SlideShare a Scribd company logo
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
CÔNG TY TNHH MTV VTC CÔNG NGHỆ VÀ NỘI DUNG SỐ (VTC INTECOM)
Trung tâm phát triển công nghệ
TÀI LIỆU KỸ THUẬT
API PAYGATE
https://ebank.vtc.vn
Tài liệu kết nối dành cho đối tác Version <1.0>
Dịch vụ chia sẻ kho hàng 21/10/2011
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 2
Mục lục
1. TỔNG QUAN....................................................................................................................3
1.1. Mục đích của tài liệu..................................................................................................................3
1.2. Phạm vi sử dụng.........................................................................................................................3
1.3. Quy trình kết nối: ......................................................................................................................3
1.4. Khái quát....................................................................................................................................3
2. MÔ TẢ CÁC HÀM API .................................................................................................5
2.1. TopupTelco (commandType=TopupTelco;version=1.0)...........................................................5
2.2. CheckAccountGameExits (commandType=CheckAccount; version=1.0)................................6
2.3. TopupPartner (commandType=TopupPartner;version=1.0) ...................................................8
2.4. BuyCard (commandType=BuyCard;version=1.0) ....................................................................9
2.5. GetCard (commandType=GetCard;version=1.0) ...................................................................11
2.6. GetBalance (commandType=GetBalance; version=1.0)..........................................................12
2.7. GetQuantiyCard (commandType=GetQuantityCard; version=1.0).......................................13
2.8 Hàm CheckPartnerTransCode { commandType=CheckPartnerTransCode; version=1.0}......15
2.9 Hàm GetHistoryTrans { commandType= GetHistoryTrans; version=1.0} .............................16
2.10 Hàm GetDebitAmount {commandType= GetDebitAmount; version=1.0}...........................17
2.11 Hàm GetSalePrice {commandType= GetSalePrice; version=1.0}.........................................19
2.12 Hàm GetPromotionDate { commandType= GetPromotionDate; version=1.0} .....................20
3. PHỤ LỤC........................................................................................................................ 21
3.1. Phụ lục mã dịch vụ...................................................................................................................21
3.2. Phụ lục mã lỗi...........................................................................................................................23
4. CODE THAM KHẢO.................................................................................................. 25
4.1. Tạo chữ ký bằng RSA .............................................................................................................25
4.2. Verify chữ ký bằng RSA ..........................................................................................................25
4.3. Mã hóa bằng thuật toán tripleDES..........................................................................................25
4.4. Giải mã bằng thuật toán tripleDES .........................................................................................27
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 3
1. Tổng quan
1.1. Mục đích của tài liệu
Tài liệu mô tả kịch bản đối tác kết nối với eBank để sử dụng dịch vụ mua mã
thẻ hoặc nạp tiền trực tiếp cho các tài khoản game, điện thoại di động thông
qua hệ thống VTC Paygate
1.2. Phạm vi sử dụng
Tài liệu cung cấp thông tin chi tiết về hệ thống dịch vụ của Paygate tại VTC
Intecom để các đối tác có thể sử dụng làm cơ sở xây dựng kết nối thực hiện nạp
tiền vào tài khoản hoặc mua mã thẻ game, điện thoại.
1.3. Quy trình kết nối:
Là tiến trình để đối tác kết nối tới API kho thẻ Paygate. Bao gồm 5 bước:
Môi trường test:
Bước 1: VTC eBank gửi tài liệu kỹ thuật cho đối tác
Bước 2: Đối tác gửi các thông tin cần thiết bao gồm:
Số điện thoại di động (số này chưa từng đăng ký tài khoản trên Paygate)
Email (Email để nhận thông tin gửi về từ Paygate mật khẩu, public key,
mail cảnh báo hạn mức …)
Tên công ty
Tên đăng nhập Paygate của đối tác (Tên không chứa các ký tự đặc biệt,
không chứa khoảng cách, không dài quá 15 ký tự)
Bước 3: Sau khi đối tác gửi thông tin phía Paygate sẽ tạo tài khoản cho đối tác.
Thông tin mật khẩu, public key, … sẽ tự động gửi về mail của đối tác)
Bước 4: Đối tác nhận mail thông tin tài khoản, vào Paygate
(http://sandbox1.vtcebank.vn/pay.vtc.vn/ ) vào mục Hồ sơ>Phân phối>Thông
tin kết nối để cập nhật các thông tin kết nối (TripleDes key, Public RSA Key).
Lưu ý cần nhập Public Key RSA định dạng xml (tự gen hoặc dùng tool VTC
gen)
Bước 5: Đối tác thực hiện kết nối tới API của Paygate theo tài liệu hướng dẫn
http://sandbox3.vtcebank.vn/PayAPI/WS/GoodsPaygate.asmx
Chú ý: Khi đã kết nối thành công dưới môi trường test, khi chuyển lên môi
trường thật thì đối tác làm tương tự như dưới test, cần trỏ từ link test sang link
thật, thay tài khoản test bằng tài khoản thật :
- Url Paygate: https://pay.vtc.vn
- Url API Paygate: https://pay.vtc.vn/WS/GoodsPaygate.asmx
1.4. Khái quát
- Mô hình kết nối
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 4
VTC Paygate
System
Service Gateway
(VTC’s Service &
Providers’s
Seivice)
VTC’s
PARTNER
MERCHANT
Http request
Http request End
Users
End
Users
- Quy trình nghiệp vụ:
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 5
2. Mô tả các hàm API
Tất cả các chức năng API kho hàng của CDT đều gọi thông qua một hàm duy
nhất RequestTransaction. Tùy thuộc vào giá trị tham số CommandType mà
thực hiện chức năng nào.
2.1. TopupTelco (commandType=TopupTelco;version=1.0)
public string RequestTransaction(string requesData, string partnerCode,
string commandType, string version)
Chức năng: Nạp tiền cho điện thoại di động
Mô tả các tham số đầu vào:
- partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này
trên VTC Paygate (do VTC quy định và gửi cho đối tác).
- CommandType: Tên hàm API, trường hợp này là TopupTelco.
- version: Phiên bản của dịch vụ (hiện tại là 1.0).
- requestData: Là một chuỗi string theo định dạng XML:
<?xml version="1.0" encoding="utf-8" ?>
< RequestData >
<ServiceCode>A service code defined by the VTC </ServiceCode>
<Account>The account name should Topup </Account>
<Amount>Amount of transaction (VND)</Amount>
<Quantity>null(empty)</Quantity>
<TransDate>Date and time transaction format yyyyMMddHHmmss(format
24 hour)</TransDate>
<OrgTransID>Code transaction arising from the Partner </OrgTransID>
<DataSign>Electronic signatures </DataSign>
</ RequestData >
Trong đó:
- ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1.
- Account: Là số điện thoại di động cần nạp tiền (topup). VD 0986645352
- Amount: Số tiền giao dịch (VNĐ). Mệnh giá hợp lệ: 10000, 20000, 30000,
50000, 100000, 200000, 300000, 500000.
- Transdate (string, required): Ngày giờ giao dịch theo định dạng
yyyyMMddHHmmss (24 hour).
- Orgtransid (string, required): Mã giao dịch phát sinh từ phía Partner mỗi
làn khách hàng thực hiện một giao dịch, các mã giao dịch các lần gửi cho VTC
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 6
không được trùng nhau (mỗi giao dịch chỉ gửi 1 lần). Mã giao dịch chỉ gồm các
ký tự chữ cái và số ([a-z],[A-Z], 0-9) không gồm các ký tự đặc biệt (@, #, …)
- DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của
VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key
của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key
để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu
cầu
DataSign = ServiceCode + "-" + Account + "-" + Amount + "-" +
PartnerCode + "-" + Transdate + "-" + Orgtransid
Ví dụ: “3002-0983463588-10000-logich-20100824193823-124242”
Kết quả trả về:
Là một chuỗi string có dạng sau:
<ResponseCode>|<OrgTransID>|<PartnerBalance>|<dataSign>
- Orgtransid: Mã giao dịch phát sinh bởi partner.
- ResponseCode: Thể hiện kết quả giao dịch (Có phụ lục mã lỗi kèm theo mỗi
dịch vụ)
- PartnerBalance: Số tiền cược còn lại của Partner tại VTC.
- dataSign: Chữ ký RSA
dataSign = ResponseCode +”-”+OrgTransID +”-”+PartnerBalance
2.2. CheckAccountGameExits (commandType=CheckAccount;
version=1.0)
public string RequestTransaction(string requesData, string partnerCode,
string commandType, string version)
Chức năng: Cho phép đối tác kiểm tra tài khoản game được nạp có tồn tại hay
không truớc khi thực hiện nạp tiền
Các tham số đầu vào:
- PartnerCode (string required): Mã khách hàng tại VTC Paygate Topup (ví
dụ: “LOGICH”)
- CommandType required): Tên hàm API, trường hợp này là CheckAccount.
- Version: Phiên bản của dịch vụ (hiện tại là 1.0)
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 7
- requestData: Là một chuỗi string theo định dạng XML:
<?xml version="1.0" encoding="utf-8" ?>
< RequestData >
<ServiceCode>A service code defined by the VTC </ServiceCode>
<Account>The account name should Topup </Account>
<Amount> null(empty)</Amount>
<TransDate>null(empty)</TransDate>
<OrgTransID null(empty)</OrgTransID>
<DataSign>Electronic signatures </DataSign>
</ RequestData >
Trong đó:
- ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1
- Account: Là tên tài khoản điện thoại di động (hoặc tài khoản game) cần
topup.
- DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của
VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key
của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key
để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu
cầu
DataSign = ServiceCode + "-" + Account + "-" + PartnerCode
Ví dụ: “3002-vtctest-logich”
Kết quả trả về:
Là một chuỗi string có dạng sau:
<ResponseCode>|<Datasign>
- ResponseCode: Thể hiện kết quả giao dịch (Có phụ lục mã lỗi kèm theo mỗi
dịch vụ)
- DataSign: Chữ ký RSA
DataSign = <ResponseCode>
-Trường hợp với gia hạn truyền hình số của VTC:
Là một chuỗi string có dạng sau:
<ResponseCode>|<Datasign>|<Data>
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 8
- DataSign: Chữ ký RSA
DataSign = <ResponseCode>
2.3. TopupPartner (commandType=TopupPartner;version=1.0)
public string RequestTransaction(string requesData, string partnerCode,
string commandType, string version)
Chức năng: Nạp tiền vào tài khoản game của khách hàng.
Mô tả các tham số đầu vào:
- partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này
trên VTC Paygate (do VTC quy định và gửi cho đối tác).
- CommandType: Tên hàm API, trường hợp này là TopupPartner.
- version: Phiên bản của dịch vụ (hiện tại là 1.0).
- requesData: Là một chuỗi string theo định dạng XML:
<?xml version="1.0" encoding="utf-8" ?>
< RequestData >
<ServiceCode>A service code defined by the VTC </ServiceCode>
<Account>The account name should Topup </Account>
<Amount>Amount of transaction (VND)</Amount>
<Quantity>null(empty)</Quantity>
<Description> thông tin mô tả</ Description >
<TransDate>Date and time transaction format yyyyMMddHHmmss(format
24 hour)</TransDate>
<OrgTransID>Code transaction arising from the Partner </OrgTransID>
<DataSign>Electronic signatures </DataSign>
</ RequestData >
Trong đó:
- ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1.
- Account: Là tài khoản game cần topup.
- Amount: Số tiền topup (VNĐ). Mệnh giá hợp lệ: 10000, 20000, 30000,
50000, 100000, 200000, 300000, 500000.
- Transdate (string, required): Ngày giờ giao dịch theo định dạng
yyyyMMddHHmmss (24 hour).
- Orgtransid (string, required): Mã giao dịch phát sinh từ phía Partner mỗi
làn khách hàng thực hiện một giao dịch, các mã giao dịch các lần gửi cho VTC
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 9
không được trùng nhau (mỗi giao dịch chỉ gửi 1 lần). Mã giao dịch chỉ gồm các
ký tự chữ cái và số ([a-z],[A-Z], 0-9) không gồm các ký tự đặc biệt (@, #, …)
- DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của
VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key
của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key
để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu
cầu
- Description (string, required) : Thông tin khách hàng với trường hợp topup
gia hạn thuê bao truyền hình số vệ tinh của VTC. Có dạng như sau :
<Fullname>|<Mobile>|<Address>|<Email>
Nếu khác thì truyền null.
DataSign = ServiceCode + "-" + Account + "-" + Amount + "-" +
PartnerCode + "-" + Transdate + "-" + Orgtransid
Ví dụ: “3002-vtctest1-10000-logich-20100824193823-124242”
Kết quả trả về:
Là một chuỗi string có dạng sau:
<ResponseCode>|<OrgTransID>|<PartnerBalance>|<DataSign>
- Orgtransid: Mã giao dịch phát sinh bởi partner.
- ResponseCode: Thể hiện kết quả giao dịch (Có phụ lục mã lỗi kèm theo mỗi
dịch vụ)
- PartnerBalance: Số tiền cược còn lại của Partner tại VTC.
- dataSign: Chữ ký RSA
dataSign = ResponseCode +”-”+OrgTransID +”-”+ PartnerBalance
2.4. BuyCard (commandType=BuyCard;version=1.0)
public string RequestTransaction(string requesData, string partnerCode,
string version)
Chức năng: Thực hiện giao dịch mua mã thẻ (điện thoại, game), key phần
mềm …
Mô tả các tham số đầu vào:
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 10
- partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này
trên VTC Paygate (do VTC quy định và gửi cho đối tác).
- CommandType: Tên hàm API, trường hợp này là BuyCard.
- Version: Phiên bản của dịch vụ (hiện tại là 1.0).
- requestData: Là một chuỗi string theo định dạng XML:
<?xml version="1.0" encoding="utf-8" ?>
< RequestData >
<ServiceCode>A service code defined by the VTC </ServiceCode>
<Account>null (empty) </Account>
<Amount>Value of card (VND)</Amount>
<Quantity>Number card want buy</Quantity>
<TransDate>Date and time transaction format yyyyMMddHHmmss(format
24 hour)</TransDate>
<OrgTransID>Code transaction arising from the Partner </OrgTransID>
<DataSign>Electronic signatures </DataSign>
</ RequestData >
Trong đó:
- ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1.
- Amount: Mệnh giá của loại thẻ muốn mua. Mệnh giá hợp lệ: 10000, 20000,
30000, 50000, 100000, 200000, 300000, 500000.
- Quantity: Số lượng thẻ cần mua
- Transdate (string, required): Ngày giờ giao dịch theo định dạng
yyyyMMddHHmmss (24 hour).
- Orgtransid (string, required): Mã giao dịch phát sinh từ phía Partner mỗi
làn khách hàng thực hiện một giao dịch, các mã giao dịch các lần gửi cho VTC
không được trùng nhau (mỗi giao dịch chỉ gửi 1 lần). Mã giao dịch chỉ gồm các
ký tự chữ cái và số ([a-z],[A-Z], 0-9) không gồm các ký tự đặc biệt (@, #, …)
- DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của
VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key
của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key
để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu
cầu
DataSign = ServiceCode + "-" + Amount + "-" + quantity+ "-"+PartnerCode
+ "-" + Transdate + "-" + Orgtransid
Ví dụ: “3002-100000-50-logich-20100824193823-124242”
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 11
Kết quả trả về:
Là một chuỗi string có dạng sau:
<ResponseCode>|<OrgTransID>|<VTCTransID>|<PartnerBalance>|<dataSign
>
- VTCTransID: Mã giao dịch phát sinh bởi VTC. Đối tác dùng mã giao dịch
này để lấy lại danh sách mã thẻ đã mua
- OrgTransID: Mã giao dịch phát sinh bởi Partner
- ResponseCode: Thể hiện kết quả giao dịch (Có phụ lục mã lỗi kèm theo mỗi
dịch vụ)
- PartnerBalance: Số tiền cược còn lại của Partner tại VTC.
- dataSign: Chữ ký RSA
dataSign = ResponseCode +”-”+OrgTransID +”-”+VTCTransID +”-
”+PartnerBalance
2.5. GetCard (commandType=GetCard;version=1.0)
public string RequestTransaction(string requesData, string partnerCode,
string version)
Chức năng: Lấy ra mã thẻ mà đối tác đã mua
Mô tả các tham số đầu vào:
- partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này
trên VTC Paygate (do VTC quy định và gửi cho đối tác).
- CommandType: Tên hàm API, trường hợp này là GetCard.
- Version: Phiên bản của dịch vụ (hiện tại là 1.0).
- requestData: Là một chuỗi string theo định dạng XML:
<?xml version="1.0" encoding="utf-8" ?>
< RequestData >
<ServiceCode>A service code defined by the VTC </ServiceCode>
<Account> null(empty)<</Account>
<Amount> Value of card (VND)</Amount>
<TransDate>null(empty)</TransDate>
<OrgTransID> Code transaction arising from the Partner </OrgTransID>
<DataSign>Electronic signatures </DataSign>
</ RequestData >
Trong đó:
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 12
- ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1.
- Amount: Mệnh giá thẻ. Mệnh giá hợp lệ: 10000, 20000, 30000, 50000,
100000, 200000, 300000, 500000.
- Orgtransid (string, required): Mã giao dịch do VTC đã gửi trả về trong
hàm BuyCard
- DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của
VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key
của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key
để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu
cầu
DataSign = ServiceCode + "-" + Amount + "-" + PartnerCode + "-" +
Orgtransid
Ví dụ: “3002-10000-logich-124242”
Kết quả trả về:
Là một chuỗi dữ liệu mã hóa bằng tripleDES sau khi giải mã có dạng sau. Key
dùng để giải mã là key do bên VTC gửi cho đối tác:
<ResponseCode>|<OrgTranID|<ListCard>
ResponseCode: Thể hiện kết quả giao dịch (Có phụ lục mã lỗi kèm theo mỗi
dịch vụ)
- OrgTranID: Mã giao dịch
- ListCard: Danh sách mã thẻ khách hàng đã về. Có định dạng như sau:
ListCard = <CardCode1>:<CardSerial1>:<ExpriceDate1>|
<CardCoden>:<CardSerialn>:<ExpriceDaten>
- CardCode: Mã thẻ
- CardeSerial: Số serial thẻ
- ExpriceDate: Ngày hết hạn thẻ (có format dd/MM/yyyy. Ví du:20/11/2013)
2.6. GetBalance (commandType=GetBalance; version=1.0)
public string RequestTransaction(string requesData,string partnerCode,string
commandType, string version)
Chức năng: Dùng để kiểm tra số dư tài khoản cược của đối tác tại VTC.
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 13
Mô tả tham số đầu vào:
- PartnerCode (string required): Mã khách hàng tại VTC Paygate Topup (ví
dụ: “LOGICH”)
- CommandType required): Tên hàm API, trường hợp này là GetBalance.
- Version: Phiên bản của dịch vụ (hiện tại là 1.0)
- requestData: Là một chuỗi string theo định dạng XML:
<?xml version="1.0" encoding="utf-8" ?>
< RequestData >
<ServiceCode>A service code defined by the VTC </ServiceCode>
<Account> null(empty)<</Account>
<Amount>null(empty)<Amount>
<TransDate> null(empty)</TransDate>
<OrgTransID> null(empty)OrgTransID>
<DataSign> null(empty)</DataSign>
</ RequestData >
Trong đó:
- ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1
- Account (string, not required): Empty
- Amount (int, not require): Empty
- Transdate (string, not required): Empty
- Orgtransid (string[KetNoi]Tài liệu mô tả API kho hàng mới, not
required): Empty
- DataSign (string, required): RSA(“partnerCode”)
Kết quả trả về:
Là một chuỗi string có dạng sau:
<PartnerBalance>|<Datasign>
- PartnerBalance: Số dư tài khoản của đối tác trên Paygate
- DataSign: Chữ ký RSA
DataSign = < PartnerBalance >
Chú ý: Dữ liệu đối tác gửi lên (RequesData, partnerCode, commandType,
version) và dữ liệu trả về của VTC phải được encode.
2.7. GetQuantiyCard (commandType=GetQuantityCard; version=1.0)
public string RequestTransaction(string requesData,string partnerCode,string
commandType, string version)
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 14
Chức năng: Dùng để lấy số lượng mã thẻ hiện có trong kho của VTC.
Mô tả tham số đầu vào:
- PartnerCode (string required): Mã khách hàng tại VTC Paygate Topup (ví
dụ: “LOGICH”)
- CommandType required): Tên hàm API, trường hợp này là
GetQuantityCard.
- Version: Phiên bản của dịch vụ (hiện tại là 1.0)
- requestData: Là một chuỗi string theo định dạng XML:
<?xml version="1.0" encoding="utf-8" ?>
<RequestData>
<ServiceCode>A service code defined by the VTC </ServiceCode>
<Account> null(empty)<</Account>
<Amount>null(empty)<Amount>
<TransDate> null(empty)</TransDate>
<OrgTransID> null(empty)OrgTransID>
<DataSign> null(empty)</DataSign>
</ RequestData >
Trong đó:
- ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1
- Account (string, not required): Empty
- Amount (int, not require): truyền = 0
- Transdate (string, not required): Empty
- Orgtransid (string, required): Truyền capcha
- DataSign (string, required): RSA(ServiceCode + “-“ + “OrgTransID”)
Kết quả trả về:
Là một chuỗi string có dạng sau:
<ListQuantityCard>|<Datasign>
- ListQuantityCard: Chuỗi trả về kiểu Json, có định dạng như sau:
[{“CategoryName”:”Mã thẻ Viettel”,”SLTonCuoiKi”:”10000”,”Value”:”5000”},
{“CategoryName”:”Mã thẻ Viettel”,”SLTonCuoiKi”:”20000”,”Value”:”4000”}]
- DataSign: Chữ ký RSA
DataSign =RSA( ListQuantityCard)
Chú ý: Dữ liệu đối tác gửi lên (RequesData, partnerCode, commandType,
version) và dữ liệu trả về của VTC phải được encode.
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 15
2.8 Hàm CheckPartnerTransCode {
commandType=CheckPartnerTransCode; version=1.0}
Chức năng: Thực hiện kiểm tra xem giao dịch của đối tác đã được thực hiện
hay chưa?
public string RequestTransaction(string requesData,string partnerCode,string
commandType, string version)
Mô tả các tham số đầu vào:
- partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này
trên VTC Paygate (do VTC quy định và gửi cho đối tác).
- CommandType: Tên hàm API, trường hợp này là CheckPartnerTransCode.
- Version: Phiên bản của dịch vụ (hiện tại là 1.0).
- requestData: Là một chuỗi string theo định dạng XML:
<?xml version="1.0" encoding="utf-8" ?>
< RequestData >
<Account>empty </Account>
<OrgTransID>Mã giao dịch của đơn hàng </OrgTransID>
< CheckTypeServiceCode >Loại giao dịch(mã thẻ,topup)</CheckTypeSeviceCode>
<DataSign>Electronic signatures </DataSign>
</ RequestData >
Trong đó:
- Orgtransid (string, required): Mã giao dịch phát sinh từ phía Partner mỗi
làn khách hàng thực hiện một giao dịch, các mã giao dịch các lần gửi cho VTC
không được trùng nhau (mỗi giao dịch chỉ gửi 1 lần). Mã giao dịch chỉ gồm các
ký tự chữ cái và số ([a-z],[A-Z], 0-9) không gồm các ký tự đặc biệt (@, #, …)
- DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của
VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key
của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key
để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu
cầu
- CheckTypeServiceCode: Gía trị kiểu int
CheckTypeServiceCode =1 Check mua mã thẻ
CheckTypeServiceCode khác 1:Check các giao dịch khác
DataSign = PartnerCode + "-" + Orgtransid+-+ CheckTypeServiceCode
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 16
Kết quả trả về:
Là một chuỗi string có dạng sau: <ResponseCode>|<Data>|<dataSign>
Trong đó :
Data = < VTCTransID >|< Orgtransid >|<Account>|<Amount>|<Date>
<ResponseCode> = 1 : thành công.
<ResponseCode >= -99: Nghi vấn,ko check dc kết quả.
<ResponseCode> = -502>Không tồn tại giao dịch.
- VTCTransID: Mã giao dịch phát sinh bởi VTC. Đối tác dùng mã giao dịch
này để lấy lại danh sách mã thẻ đã mua
- Orgtransid: Mã giao dịch phát sinh bởi Partner
- ResponseCode: Thể hiện kết quả giao dịch (Có phụ lục mã lỗi kèm theo mỗi
dịch vụ)
- Account :Tài khoản VTC của đối tác
- Date:Ngày giao dịch
- dataSign: Chữ ký RSA
dataSign = RSA (ResponseCode|Data)
2.9 Hàm GetHistoryTrans { commandType= GetHistoryTrans;
version=1.0}
Chức năng: Lấy lịch sử giao dịch của đối tác
public string RequestTransaction(string requestData,string partnerCode,string
commandType, string version)
Mô tả các tham số đầu vào:
- partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này
trên VTC Paygate (do VTC quy định và gửi cho đối tác).
- CommandType: Tên hàm API, trường hợp này là GetHistoryTrans.
- Version: Phiên bản của dịch vụ (hiện tại là 1.0).
- requestData: Là một chuỗi string theo định dạng XML:
<?xml version="1.0" encoding="utf-8" ?>
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 17
< RequestData >
<Account>Tài khoản VTCPay của đối tác </Account>
<FromDate>Ngày bắt đầu xem lịch sử giao dịch </ FromDate >
<ToDate>Ngày xem lịch sử giao dịch </ ToDate >
< DataSign > Electronic signatures </ DataSign >
</ RequestData >
Trong đó:
- DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của
VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key
của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key
để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu
cầu
- FromDate: định dạng ngày như sau yyyy/mm/dd ví dụ: 2013/10/28
- ToDate: định dạng ngày như sau yyyy/mm/dd ví dụ: 2013/10/30
DataSign =RSA (Account + "-" + FromDate + "-" + ToDate)
Chú ý:Lịch sử giao dịch chỉ lấy trong giới hạn tối đa <5 ngày.
Thường là 2 ngày để đảm bảo dử liệu truyền ổn định và chính xác nhất.
Kết quả trả về:
Là một chuỗi string có dạng sau: <ResponseCode>|<Data>|<dataSign>
Trong đó :
Data = Chuỗi json kết quả
<ResponseCode> = 1 : thành công.
<ResponseCode> = 0 :Không có dữ liệu.
- dataSign: Chữ ký RSA
dataSign = RSA (ResponseCode |Data)
2.10 Hàm GetDebitAmount {commandType= GetDebitAmount;
version=1.0}
Chức năng: Lấy số tiền nợ của khách hàng ứng với hóa đơn tương ứng
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 18
public string RequestTransaction(string requestData,string partnerCode,string
commandType, string version)
Mô tả các tham số đầu vào:
- partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này
trên VTC Paygate (do VTC quy định và gửi cho đối tác).
- CommandType: Tên hàm API, trường hợp này là GetDebitAmount.
- Version: Phiên bản của dịch vụ (hiện tại là 1.0).
- requestData: Là một chuỗi string theo định dạng XML:
<?xml version="1.0" encoding="utf-8" ?>
< RequestData >
<ServiceCode>Mã dịch vụ được cung cấp bởi VTC </ServiceCode>
<Account>Là mã hóa đơn </Account>
< DataSign > Electronic signatures </ DataSign >
</ RequestData >
Trong đó:
- ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1
- Account: Là mã hóa đơn của khách hàng cần thanh toán
- DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của
VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key
của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key
để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu
cầu
DataSign = RSA(ServiceCode + "-" + Account + "-" + PartnerCode )
Ví dụ: “VTC0340-abc1111-mpaytest”
Kết quả trả về:
Là một chuỗi string có dạng sau:
<ResponseCode>|<Account >|<AmountBill>|Extent>|<Sign>
Trong đó :
ResponseCode :Kiểu int > 0 : thành công.
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 19
ResponseCode < 0 :Thất bại,mã lỗi được mô tả ở phần phụ lục
- dataSign: Chữ ký RSA
dataSign = RSA (ResponseCode +”-”+ Account +”-”+ AmountBill +”-”+
Extent)
2.11 Hàm GetSalePrice {commandType= GetSalePrice; version=1.0}
Chức năng: Trả ra giá bán đã có chiết khấu của 1 sản phẩm.
public string RequestTransaction(string requestData,string partnerCode,string
commandType, string version)
Mô tả các tham số đầu vào:
- partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này
trên VTC Paygate (do VTC quy định và gửi cho đối tác).
- CommandType: Tên hàm API, trường hợp này là GetSalePrice.
- Version: Phiên bản của dịch vụ (hiện tại là 1.0).
- requestData: Là một chuỗi string theo định dạng XML:
<?xml version="1.0" encoding="utf-8" ?>
< RequestData >
<ServiceCode>Mã dịch vụ được cung cấp bởi VTC </ServiceCode>
<Amount>Mênh giá của 1 sản phẩm </ Amount >
< DataSign > Electronic signatures </ DataSign >
</ RequestData >
Trong đó:
- ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1
- DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của
VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key
của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key
để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu
cầu
DataSign = RSA(ServiceCode + "-"+”Amount”+”-” + PartnerCode )
Ví dụ: “VTC0340-10000-mpaytest”
Kết quả trả về:
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 20
Là một chuỗi string có dạng sau:
<ResponseCode>|<Amount >|<SalePrice>|Extent>|<Sign>
Trong đó :
ResponseCode :Kiểu int > 0 : thành công.
ResponseCode < 0 :Thất bại,mã lỗi được mô tả ở phần phụ lục
- dataSign: Chữ ký RSA
dataSign = RSA (ResponseCode +”-”+”Amount”+”-”+SalePrice +”-”+ Extent)
2.12 Hàm GetPromotionDate { commandType= GetPromotionDate;
version=1.0}
Chức năng: Lấy lịch khuyến mại của các nhà mạng
public string RequestTransaction(string requestData,string partnerCode,string
commandType, string version)
Mô tả các tham số đầu vào:
- partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này
trên VTC Paygate (do VTC quy định và gửi cho đối tác).
- CommandType: Tên hàm API, trường hợp này là GetPromotionDate.
- Version: Phiên bản của dịch vụ (hiện tại là 1.0).
- requestData: Là một chuỗi string theo định dạng XML:
<?xml version="1.0" encoding="utf-8" ?>
< RequestData >
< DataSign > Electronic signatures </ DataSign >
</ RequestData >
Trong đó:
- DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của
VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key
của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key
để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu
cầu
DataSign =RSA (PartnerCode)
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 21
Kết quả trả về:
Là một chuỗi string có dạng sau: <ResponseCode>|<Data>|<dataSign>
Trong đó :
Data = Chuỗi json kết quả
[{"Provider":"VinaPhone","BeginDate":"08/10/2013
17:00:00","EndDate":"08/10/2013 20:00:00","Apply":"Tat ca thue bao tra
truoc"}, {"Provider":"Viettel","BeginDate":"27/03/2014
00:00:00","EndDate":"29/03/2014 23:00:00","Apply":"Tat ca thue bao tra
truoc"}]
<ResponseCode> = 1 : thành công.
<ResponseCode> = 0 :Không có dữ liệu.
- dataSign: Chữ ký RSA
dataSign = RSA (ResponseCode |Data)
3. Phụ lục
3.1. Phụ lục mã dịch vụ
Mã thẻ:
ServiceCode Tên dịch vụ
Các mệnh giá thẻ Chức năng
VTC0027 Mã thẻ Viettel 10000, 20000, 30000,
50000, 100000, 200000,
300000, 500000
BuyCard, GetCard
VTC0028 Mã thẻ Vina 10000, 20000, 30000,
50000, 100000, 200000,
300000, 500000
BuyCard, GetCard
VTC0029 Mã thẻ Mobi 10000, 20000, 30000,
50000, 100000, 200000,
300000, 500000
BuyCard, GetCard
VTC0030 Mã thẻ SFone 10000, 20000, 30000,
50000, 100000, 200000,
300000, 500000
BuyCard, GetCard
VTC0173 Mã thẻ GMobile 10000, 20000, 30000,
50000, 100000, 200000,
300000, 500000
BuyCard, GetCard
VTC0154 Thẻ t Mã thẻ
V VVietnamobile
10000, 20000, 50000,
100000, 200000, 300000,
500000
BuyCard, GetCard
VTC0067 Mã thẻ Zing 20000, 60000, 120000 BuyCard, GetCard
VTC0068 Mã thẻ Gate 10000, 20000, 50000,
100000, 200000, 500000 BuyCard, GetCard
VTC0114 Mã thẻ đa năng 10000, 20000, 50000,
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 22
VTC Online 100000, 200000, 300000,
500000 BuyCard, GetCard
VTC0185 Mã thẻ MyCard 49000, 146500, 330000,
422000, 930000
BuyCard, GetCard
VTC0191 Mã thẻ Zynga 140000, 28000, 700000 BuyCard, GetCard
VTC0166 Mã thẻ OnCash 20000, 60000, 100000,
200000, 500000
BuyCard, GetCard
VTC0144 Key
BITDEFENDER
150000: Bitdefender
Antivirus plus 2014 1U/1Y
170000: Bitdefender
Antivirus plus 2014 3U/1Y
190000:Bitdefender Internet
security 2014 1U/1Y
250000:Bitdefender Internet
security 2014 3U/1Y
BuyCard, GetCard
VTC0319 Mã thẻ Sò (Garena) 20000, 50000, 100000,
200000, 500000
BuyCard, GetCard
VTC0355
VTC0347(Test)
Mã thẻ Steam
Wallet
126000 (Thẻ Steam $5)
252000 (Thẻ Steam $10)
378000 (Thẻ Steam $15)
504000 (Thẻ Steam $20)
756000 (Thẻ Steam $30)
1260000 (Thẻ Steam $50)
1512000 (Thẻ Steam $60)
BuyCard, GetCard
VTC0321 Mã thẻ LIKE 20000, 50000, 100000,
500000, 1000000
BuyCard, GetCard
VTC0171 CD Key 7554 125000, 249000 BuyCard, GetCard
VTC0321 Mã thẻ SoftNYX 63000, 105000, 208110 BuyCard, GetCard
Nạp tiền trực tiếp:
ServiceCode Tên dịch vụ
Các mệnh giá nạp tiền Chức năng
VTC0040 Nạp tiền
Hocmai.vn
30000, 50000, 100000 TopupPartner,
CheckAccount
VTC0041 Nạp tiền
Truongtructuyen.vn
30000, 50000, 100000 TopupPartner,
CheckAccount
VTC0056 Nạp tiền trả trước
Viettel
10000, 20000, 30000, 50000,
100000, 200000, 300000,
500000
TopupTelco
VTC0217 Nạp tiền DCOM-
3G Viettel trả trước
10000, 20000, 30000, 50000,
100000, 200000, 300000,
500000
TopupTelco
VTC0219 Nạp tiền DCOM-
3G Viettel trả sau
10000, 20000, 30000, 50000,
100000, 200000, 300000,
500000
TopupTelco
VTC0329 Nạp tiền trả sau
Viettel
Số tiền lớn hơn 5000 và phải
chẵn nghìn
TopupTelco
VTC0057 Nạp tiền trả trước
Vina
10000, 20000, 30000, 50000,
100000, 200000, 300000,
500000
TopupTelco
VTC0201 Nạp tiền Vina trả
sau
Số tiền lớn hơn 5000 và phải
chẵn nghìn
TopupTelco
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 23
VTC0058 Nạp tiền trả trước
Mobi
10000, 20000, 30000, 50000,
100000, 200000, 300000,
500000
TopupTelco
VTC0130 Nạp tiền Mobi trả
sau
Số tiền lớn hơn 5000 và phải
chẵn nghìn
TopupTelco
VTC0127 Nạp tiền trả trước
EVN
10000, 20000, 30000, 50000,
100000, 200000, 300000,
500000
TopupTelco
VTC0176 Nạp tiền
Vietnamobile trả
trước
10000, 20000, 50000,
100000, 200000, 300000,
500000
TopupTelco
VTC0177 Nạp tiền trả trước
Beeline
10000, 20000, 50000,
100000, 200000, 300000,
500000
TopupTelco
VTC0193 Gia hạn truyền
hình số của VTC
400000, 650000, 720000,
1200000
TopupPartner
CheckAccount
VTC0187 Nạp bạc (Gate) 10000, 20000, 50000,
100000, 200000, 300000,
500000
TopupPartner,
VTC0051 Nạp @Point Tam
Quốc Chí (Asia
Soft)
20000, 50000, 100000 TopupPartner,
CheckAccount
VTC0209 Nạp mCash 10000, 20000, 50000,
100000, 200000, 500000
TopupPartner,
CheckAccount
VTC0307 Nạp zing xu 10000, 20000, 50000,
60000,100000,
120000,200000, 500000
TopupPartner
VTC0308 Nạp Oncash 10000, 20000, 50000,
100000, 200000,500000
TopupPartner
Chú ý: Đây là mã các dịch vụ hiện tại VTC đang cung cấp. Nếu có thay đổi (bổ
xung dịch vụ mới hoặc bỏ bớt) chúng tôi sẽ thông báo cho đối tác
3.2. Phụ lục mã lỗi
Output Format Là một string có định dạng sau:
<ResponseCode>|<OrgTransID>|<PartnerBalance>
ResponseCode Description Comment
1 Giao dịch thành công
0 Giao dịch chưa xác định Giao dịch nghi vấn,
không hoàn tiền
-1 Lỗi hệ thống Giao dịch nghi vấn
không hoàn tiền
-55 Số dư tài khoản không đủ để thực
hiện giao dịch này
-99 Lỗi chưa xác định Giao dịch nghi vấn,
không hoàn tiền
-290 Thông tin lệnh nạp tiền hợp lệ.
Đang chờ kết quả xử lý
Giao dịch đang xử lý.
Có thể gọi hàm check
trạng thái để kiểm tra
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 24
kết quả giao dịch
-302 Partner không tồn tại hoặc đang
tạm dừng hoạt động
Cho phép hoàn tiền
-304 Dịch vụ này không tồn tại hoặc
đang tạm dừng
Cho phép hoàn tiền
-305 Chữ ký không hợp lệ Cho phép hoàn tiền
-306 Mệnh giá không hợp lệ hoặc đang
tạm dừng
Cho phép hoàn tiền
-307 Tài khoản nạp tiền không tồn tại
hoặc không hợp lệ
Cho phép hoàn tiền
-308 RequesData không hợp lệ Cho phép hoàn tiền
-309 Ngày giao dịch truyền không đúng Cho phép hoàn tiền
-310 Hết hạn mức cho phép sử dụng
dịch vụ này
Cho phép hoàn tiền
-311 RequesData hoặc PartnerCode
không đúng
Cho phép hoàn tiền
-315 Phải truyền CommandType Cho phép hoàn tiền
-316 Phải truyền version Cho phép hoàn tiền
-317 Số lượng thẻ không hợp lệ Cho phép hoàn tiền
-318 ServiceCode không đúng Cho phép hoàn tiền
-320 Hệ thống gián đoạn Cho phép hoàn tiền
-348 Tài khoản bị Block Cho phép hoàn tiên
-350 Tài khoản không tồn tại Cho phép hoàn tiền
-500 Loại thẻ này trong kho hiện đã hết
hoặc tạm ngừng xuất
Cho phép hoàn tiền
-501 Giao dịch không thành công Cho phép hoàn tiền
-502 Không tồn tại giao dịch
-503 Đối tác không đươc thực hiện
chức năng này
-504 Mã giao dịch này đã check quá tối
đa số lần cho phép
-505 Số lần check vượt quá hạn mức
cho phép trong ngày
-509 Giao dịch bị hủy (thất bại)
-600 Quá hạn mức Cho phép hoàn tiền
# Các trường hợp mã lỗi chưa
định nghĩa tường minh
Giao dịch nghi vấn cần
kiểm tra lại, không
hoàn tiền
Lưu ý:
- Thành công: giao dịch đã trừ tiền tại hệ thống VTC Intecom
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 25
- Thất bại: giao dịch chưa bị trừ tiền tại hệ thống VTC Intecom
- Nghi vấn: giao dịch chưa xác đinh tại hệ thống VTC Intecom hoặc hệ thống
đối tác không nhận được phản hồi kết quả của giao dịch đã gửi tới hệ thống
VTC Intecom sau một khoảng thời gian nhất định (System Timeout). Đối với
trạng thái giao dịch này, hệ thống 2 bên sẽ giữ nguyên hiện trạng để đối soát
theo quy trình thống nhất giữa 2 bên.
4. Code tham khảo
4.1. Tạo chữ ký bằng RSA
public static string CreateSignRSA(string data, string privateKey)
{
CspParameters _cpsParameter;
RSACryptoServiceProvider rsaCryptoIPT;
_cpsParameter = new CspParameters();
_cpsParameter.Flags = CspProviderFlags.UseMachineKeyStore;
rsaCryptoIPT = new RSACryptoServiceProvider(1024, _cpsParameter);
rsaCryptoIPT.FromXmlString(privateKey);
return
Convert.ToBase64String(rsaCryptoIPT.SignData(Encoding.UTF8.GetBytes (data), new
SHA1CryptoServiceProvider()));
}
4.2. Verify chữ ký bằng RSA
public static bool CheckSignRSA(string data, string sign, string publicKey)
{
try
{
RSACryptoServiceProvider rsacp = new RSACryptoServiceProvider();
rsacp.FromXmlString(publicKey);
return rsacp.VerifyData(Encoding.UTF8.GetBytes(data), "SHA1",
Convert.FromBase64String(sign));
}
catch (Exception ex)
{
NLogLogger.Info(ex.ToString());
return false;
}
}
4.3. Mã hóa bằng thuật toán tripleDES
a, C#
public static string Encrypt(string key, string data)
{
data = data.Trim();
byte[] keydata = Encoding.ASCII.GetBytes(key);
string md5String = BitConverter.ToString(new
MD5CryptoServiceProvider().ComputeHash(keydata)).Replace("-",
"").ToLower();
byte[] tripleDesKey = Encoding.ASCII.GetBytes(md5String.Substring(0,
24));
TripleDES tripdes = TripleDESCryptoServiceProvider.Create();
tripdes.Mode = CipherMode.ECB;
tripdes.Key = tripleDesKey;
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 26
tripdes.GenerateIV();
MemoryStream ms = new MemoryStream();
CryptoStream encStream = new CryptoStream(ms,
tripdes.CreateEncryptor(),
CryptoStreamMode.Write);
encStream.Write(Encoding.ASCII.GetBytes(data), 0,
Encoding.ASCII.GetByteCount(data));
encStream.FlushFinalBlock();
byte[] cryptoByte = ms.ToArray();
ms.Close();
encStream.Close();
return Convert.ToBase64String(cryptoByte, 0,
cryptoByte.GetLength(0)).Trim();
}
b. Java
public static String Encrypt(String key,String data) throws Exception
{
Cipher cipher=Cipher.getInstance("TripleDES");
MessageDigest
md5=MessageDigest.getInstance("MD5");
md5.update(key.getBytes(),0,key.length());
String keymd5 = new
BigInteger(1,md5.digest()).toString(16).substring(0,
24); SecretKeySpec keyspec = new
SecretKeySpec(keymd5.getBytes(),"TripleDES");
cipher.init(Cipher.ENCRYPT_MODE,keyspec);
byte[] stringBytes=data.getBytes();
byte[] raw=cipher.doFinal(stringBytes);
BASE64Encoder encoder = new
BASE64Encoder(); String base64 =
encoder.encode(raw);
return base64;
}
c. PHP
<?php
function Encrypt($input, $key_seed){
$input = trim($input);
$block = mcrypt_get_block_size('tripledes', 'ecb');
$len = strlen($input);
$padding = $block - ($len % $block);
$input .= str_repeat(chr($padding),$padding);
// generate a 24 byte key from the md5 of the seed
$key = substr(md5($key_seed),0,24);
$iv_size = mcrypt_get_iv_size(MCRYPT_TRIPLEDES, MCRYPT_MODE_ECB);
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 27
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
// encrypt
$encrypted_data = mcrypt_encrypt(MCRYPT_TRIPLEDES, $key,
$input, MCRYPT_MODE_ECB, $iv);
// clean up output and return base64 encoded
return base64_encode($encrypted_data);
} //end function Encrypt()
?>
<?php
4.4. Giải mã bằng thuật toán tripleDES
a. C#
public static string Decrypt(string key, string data)
{
byte[] keydata = Encoding.ASCII.GetBytes(key);
string md5String = BitConverter.ToString(new
MD5CryptoServiceProvider().ComputeHash(keydata)).Replace("-",
"").Replace(" ", "+").ToLower();
byte[] tripleDesKey = Encoding.ASCII.GetBytes(md5String.Substring(0,
24));
TripleDES tripdes = TripleDESCryptoServiceProvider.Create();
tripdes.Mode = CipherMode.ECB;
tripdes.Key = tripleDesKey;
byte[] cryptByte = Convert.FromBase64String(data);
MemoryStream ms = new MemoryStream(cryptByte, 0, cryptByte.Length);
ICryptoTransform cryptoTransform = tripdes.CreateDecryptor();
CryptoStream decStream = new CryptoStream(ms, cryptoTransform,
CryptoStreamMode.Read);
StreamReader read = new StreamReader(decStream);
return (read.ReadToEnd());
}
b. Java
public static String Decrypt(String key,String data) throws Exception
{
Cipher cipher=Cipher.getInstance("TripleDES");
MessageDigest
md5=MessageDigest.getInstance("MD5");
md5.update(key.getBytes(),0,key.length());
String keymd5 = new
BigInteger(1,md5.digest()).toString(16).substring(0
,24); SecretKeySpec keyspec = new
SecretKeySpec(keymd5.getBytes(),"TripleD
ES");
cipher.init(Cipher.DECRYPT_MODE,keyspec);
BASE64Decoder decoder = new BASE64Decoder();
byte[] raw = decoder.decodeBuffer(data);
byte[] stringBytes = cipher.doFinal(raw);
String result = new String(stringBytes);
return result;
}
TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC
VTC-eBank Page 28
c. PHP
<?php
function Decrypt($input, $key_seed)
{
$input = base64_decode($input);
$key = substr(md5($key_seed),0,24);
$text=mcrypt_decrypt(MCRYPT_TRIPLEDES, $key, $input,
MCRYPT_MODE_ECB,'12345678');
$block = mcrypt_get_block_size('tripledes', 'ecb');
$packing = ord($text{strlen($text) - 1});
if($packing and ($packing < $block)){
for($P = strlen($text) - 1; $P >= strlen($text) - $packing; $P--){
if(ord($text{$P}) != $packing){
$packing = 0;
}
}
}
$text = substr($text,0,strlen($text) - $packing);
return $text;
}
?>

More Related Content

Similar to [Ky thuat][ketnoi]api goods_paygate_v1

Tài liệu giới thiệu Trung tâm Thanh toán điện tử VTC Pay (update)
Tài liệu giới thiệu Trung tâm Thanh toán điện tử VTC Pay (update)Tài liệu giới thiệu Trung tâm Thanh toán điện tử VTC Pay (update)
Tài liệu giới thiệu Trung tâm Thanh toán điện tử VTC Pay (update)
E-Wallet, Payment Gateway VTC Pay
 
CHỮ KÝ SỐ VNPT-CA
CHỮ KÝ SỐ VNPT-CACHỮ KÝ SỐ VNPT-CA
CHỮ KÝ SỐ VNPT-CA
Chữ ký số TPHCM
 
Phan mem quan ly doanh nghiep xuat nhap khau - vtranet
Phan mem quan ly doanh nghiep xuat nhap khau - vtranetPhan mem quan ly doanh nghiep xuat nhap khau - vtranet
Phan mem quan ly doanh nghiep xuat nhap khau - vtranet
tam_vinno
 
Tích hợp kỹ thuật của Ứng dụng trên Zing Me
Tích hợp kỹ thuật của Ứng dụng trên Zing MeTích hợp kỹ thuật của Ứng dụng trên Zing Me
Tích hợp kỹ thuật của Ứng dụng trên Zing Mezingopen
 
Huong dansudung
Huong dansudungHuong dansudung
Huong dansudung
Lê Minh Sang
 
Scop full realtime solutions yeucau mohinh_tiendo setup bbb
Scop full realtime solutions yeucau mohinh_tiendo setup bbbScop full realtime solutions yeucau mohinh_tiendo setup bbb
Scop full realtime solutions yeucau mohinh_tiendo setup bbb
laonap166
 
Web Services
Web ServicesWeb Services
Web Servicesask bills
 
giai phap cham cong da chi nhanh
giai phap cham cong da chi nhanhgiai phap cham cong da chi nhanh
giai phap cham cong da chi nhanh
Phần mềm tính lương | phan mem tinh luong
 
Chữ ký số Ca2 là gì?
Chữ ký số Ca2 là gì?Chữ ký số Ca2 là gì?
Chữ ký số Ca2 là gì?
Chữ ký số TPHCM
 
Giải pháp thanh toán trực tuyến - Thẻ cào điện thoại - Hình thức thanh toán t...
Giải pháp thanh toán trực tuyến - Thẻ cào điện thoại - Hình thức thanh toán t...Giải pháp thanh toán trực tuyến - Thẻ cào điện thoại - Hình thức thanh toán t...
Giải pháp thanh toán trực tuyến - Thẻ cào điện thoại - Hình thức thanh toán t...Truong Thu Trang
 
Vms uisp training
Vms uisp trainingVms uisp training
Vms uisp trainingTuấn Anh
 
VMS,
VMS, VMS,
VMS,
Tuấn Anh
 
Asp
AspAsp
Asp
thinhtu
 
Bài thuyết trình hệ thống thông tin quản lý nhóm 1
Bài thuyết trình hệ thống thông tin quản lý nhóm 1Bài thuyết trình hệ thống thông tin quản lý nhóm 1
Bài thuyết trình hệ thống thông tin quản lý nhóm 1Angela Nguyễn
 
Bài tập kerberos
Bài tập kerberosBài tập kerberos
Bài tập kerberos
Trần Thanh
 
hethongvoucheronline-ver1-190814092953-advertising.com_.vn_.pdf
hethongvoucheronline-ver1-190814092953-advertising.com_.vn_.pdfhethongvoucheronline-ver1-190814092953-advertising.com_.vn_.pdf
hethongvoucheronline-ver1-190814092953-advertising.com_.vn_.pdf
SnTrnh54
 
Hệ thống voucher online
Hệ thống voucher onlineHệ thống voucher online
Hệ thống voucher online
Hải Hoàng
 
Dịch vụ thanh toán IAC - 1Pay
Dịch vụ thanh toán IAC - 1PayDịch vụ thanh toán IAC - 1Pay
Dịch vụ thanh toán IAC - 1Pay
Nguyen Minh Quang
 
9.Dd Trieu Fss
9.Dd Trieu Fss9.Dd Trieu Fss
9.Dd Trieu FssHoang Tuan
 
Bai 4 lap trình phia client
Bai 4  lap trình phia clientBai 4  lap trình phia client
Bai 4 lap trình phia clientLee Nam Nguyen
 

Similar to [Ky thuat][ketnoi]api goods_paygate_v1 (20)

Tài liệu giới thiệu Trung tâm Thanh toán điện tử VTC Pay (update)
Tài liệu giới thiệu Trung tâm Thanh toán điện tử VTC Pay (update)Tài liệu giới thiệu Trung tâm Thanh toán điện tử VTC Pay (update)
Tài liệu giới thiệu Trung tâm Thanh toán điện tử VTC Pay (update)
 
CHỮ KÝ SỐ VNPT-CA
CHỮ KÝ SỐ VNPT-CACHỮ KÝ SỐ VNPT-CA
CHỮ KÝ SỐ VNPT-CA
 
Phan mem quan ly doanh nghiep xuat nhap khau - vtranet
Phan mem quan ly doanh nghiep xuat nhap khau - vtranetPhan mem quan ly doanh nghiep xuat nhap khau - vtranet
Phan mem quan ly doanh nghiep xuat nhap khau - vtranet
 
Tích hợp kỹ thuật của Ứng dụng trên Zing Me
Tích hợp kỹ thuật của Ứng dụng trên Zing MeTích hợp kỹ thuật của Ứng dụng trên Zing Me
Tích hợp kỹ thuật của Ứng dụng trên Zing Me
 
Huong dansudung
Huong dansudungHuong dansudung
Huong dansudung
 
Scop full realtime solutions yeucau mohinh_tiendo setup bbb
Scop full realtime solutions yeucau mohinh_tiendo setup bbbScop full realtime solutions yeucau mohinh_tiendo setup bbb
Scop full realtime solutions yeucau mohinh_tiendo setup bbb
 
Web Services
Web ServicesWeb Services
Web Services
 
giai phap cham cong da chi nhanh
giai phap cham cong da chi nhanhgiai phap cham cong da chi nhanh
giai phap cham cong da chi nhanh
 
Chữ ký số Ca2 là gì?
Chữ ký số Ca2 là gì?Chữ ký số Ca2 là gì?
Chữ ký số Ca2 là gì?
 
Giải pháp thanh toán trực tuyến - Thẻ cào điện thoại - Hình thức thanh toán t...
Giải pháp thanh toán trực tuyến - Thẻ cào điện thoại - Hình thức thanh toán t...Giải pháp thanh toán trực tuyến - Thẻ cào điện thoại - Hình thức thanh toán t...
Giải pháp thanh toán trực tuyến - Thẻ cào điện thoại - Hình thức thanh toán t...
 
Vms uisp training
Vms uisp trainingVms uisp training
Vms uisp training
 
VMS,
VMS, VMS,
VMS,
 
Asp
AspAsp
Asp
 
Bài thuyết trình hệ thống thông tin quản lý nhóm 1
Bài thuyết trình hệ thống thông tin quản lý nhóm 1Bài thuyết trình hệ thống thông tin quản lý nhóm 1
Bài thuyết trình hệ thống thông tin quản lý nhóm 1
 
Bài tập kerberos
Bài tập kerberosBài tập kerberos
Bài tập kerberos
 
hethongvoucheronline-ver1-190814092953-advertising.com_.vn_.pdf
hethongvoucheronline-ver1-190814092953-advertising.com_.vn_.pdfhethongvoucheronline-ver1-190814092953-advertising.com_.vn_.pdf
hethongvoucheronline-ver1-190814092953-advertising.com_.vn_.pdf
 
Hệ thống voucher online
Hệ thống voucher onlineHệ thống voucher online
Hệ thống voucher online
 
Dịch vụ thanh toán IAC - 1Pay
Dịch vụ thanh toán IAC - 1PayDịch vụ thanh toán IAC - 1Pay
Dịch vụ thanh toán IAC - 1Pay
 
9.Dd Trieu Fss
9.Dd Trieu Fss9.Dd Trieu Fss
9.Dd Trieu Fss
 
Bai 4 lap trình phia client
Bai 4  lap trình phia clientBai 4  lap trình phia client
Bai 4 lap trình phia client
 

[Ky thuat][ketnoi]api goods_paygate_v1

  • 1. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC CÔNG TY TNHH MTV VTC CÔNG NGHỆ VÀ NỘI DUNG SỐ (VTC INTECOM) Trung tâm phát triển công nghệ TÀI LIỆU KỸ THUẬT API PAYGATE https://ebank.vtc.vn Tài liệu kết nối dành cho đối tác Version <1.0> Dịch vụ chia sẻ kho hàng 21/10/2011
  • 2. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 2 Mục lục 1. TỔNG QUAN....................................................................................................................3 1.1. Mục đích của tài liệu..................................................................................................................3 1.2. Phạm vi sử dụng.........................................................................................................................3 1.3. Quy trình kết nối: ......................................................................................................................3 1.4. Khái quát....................................................................................................................................3 2. MÔ TẢ CÁC HÀM API .................................................................................................5 2.1. TopupTelco (commandType=TopupTelco;version=1.0)...........................................................5 2.2. CheckAccountGameExits (commandType=CheckAccount; version=1.0)................................6 2.3. TopupPartner (commandType=TopupPartner;version=1.0) ...................................................8 2.4. BuyCard (commandType=BuyCard;version=1.0) ....................................................................9 2.5. GetCard (commandType=GetCard;version=1.0) ...................................................................11 2.6. GetBalance (commandType=GetBalance; version=1.0)..........................................................12 2.7. GetQuantiyCard (commandType=GetQuantityCard; version=1.0).......................................13 2.8 Hàm CheckPartnerTransCode { commandType=CheckPartnerTransCode; version=1.0}......15 2.9 Hàm GetHistoryTrans { commandType= GetHistoryTrans; version=1.0} .............................16 2.10 Hàm GetDebitAmount {commandType= GetDebitAmount; version=1.0}...........................17 2.11 Hàm GetSalePrice {commandType= GetSalePrice; version=1.0}.........................................19 2.12 Hàm GetPromotionDate { commandType= GetPromotionDate; version=1.0} .....................20 3. PHỤ LỤC........................................................................................................................ 21 3.1. Phụ lục mã dịch vụ...................................................................................................................21 3.2. Phụ lục mã lỗi...........................................................................................................................23 4. CODE THAM KHẢO.................................................................................................. 25 4.1. Tạo chữ ký bằng RSA .............................................................................................................25 4.2. Verify chữ ký bằng RSA ..........................................................................................................25 4.3. Mã hóa bằng thuật toán tripleDES..........................................................................................25 4.4. Giải mã bằng thuật toán tripleDES .........................................................................................27
  • 3. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 3 1. Tổng quan 1.1. Mục đích của tài liệu Tài liệu mô tả kịch bản đối tác kết nối với eBank để sử dụng dịch vụ mua mã thẻ hoặc nạp tiền trực tiếp cho các tài khoản game, điện thoại di động thông qua hệ thống VTC Paygate 1.2. Phạm vi sử dụng Tài liệu cung cấp thông tin chi tiết về hệ thống dịch vụ của Paygate tại VTC Intecom để các đối tác có thể sử dụng làm cơ sở xây dựng kết nối thực hiện nạp tiền vào tài khoản hoặc mua mã thẻ game, điện thoại. 1.3. Quy trình kết nối: Là tiến trình để đối tác kết nối tới API kho thẻ Paygate. Bao gồm 5 bước: Môi trường test: Bước 1: VTC eBank gửi tài liệu kỹ thuật cho đối tác Bước 2: Đối tác gửi các thông tin cần thiết bao gồm: Số điện thoại di động (số này chưa từng đăng ký tài khoản trên Paygate) Email (Email để nhận thông tin gửi về từ Paygate mật khẩu, public key, mail cảnh báo hạn mức …) Tên công ty Tên đăng nhập Paygate của đối tác (Tên không chứa các ký tự đặc biệt, không chứa khoảng cách, không dài quá 15 ký tự) Bước 3: Sau khi đối tác gửi thông tin phía Paygate sẽ tạo tài khoản cho đối tác. Thông tin mật khẩu, public key, … sẽ tự động gửi về mail của đối tác) Bước 4: Đối tác nhận mail thông tin tài khoản, vào Paygate (http://sandbox1.vtcebank.vn/pay.vtc.vn/ ) vào mục Hồ sơ>Phân phối>Thông tin kết nối để cập nhật các thông tin kết nối (TripleDes key, Public RSA Key). Lưu ý cần nhập Public Key RSA định dạng xml (tự gen hoặc dùng tool VTC gen) Bước 5: Đối tác thực hiện kết nối tới API của Paygate theo tài liệu hướng dẫn http://sandbox3.vtcebank.vn/PayAPI/WS/GoodsPaygate.asmx Chú ý: Khi đã kết nối thành công dưới môi trường test, khi chuyển lên môi trường thật thì đối tác làm tương tự như dưới test, cần trỏ từ link test sang link thật, thay tài khoản test bằng tài khoản thật : - Url Paygate: https://pay.vtc.vn - Url API Paygate: https://pay.vtc.vn/WS/GoodsPaygate.asmx 1.4. Khái quát - Mô hình kết nối
  • 4. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 4 VTC Paygate System Service Gateway (VTC’s Service & Providers’s Seivice) VTC’s PARTNER MERCHANT Http request Http request End Users End Users - Quy trình nghiệp vụ:
  • 5. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 5 2. Mô tả các hàm API Tất cả các chức năng API kho hàng của CDT đều gọi thông qua một hàm duy nhất RequestTransaction. Tùy thuộc vào giá trị tham số CommandType mà thực hiện chức năng nào. 2.1. TopupTelco (commandType=TopupTelco;version=1.0) public string RequestTransaction(string requesData, string partnerCode, string commandType, string version) Chức năng: Nạp tiền cho điện thoại di động Mô tả các tham số đầu vào: - partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này trên VTC Paygate (do VTC quy định và gửi cho đối tác). - CommandType: Tên hàm API, trường hợp này là TopupTelco. - version: Phiên bản của dịch vụ (hiện tại là 1.0). - requestData: Là một chuỗi string theo định dạng XML: <?xml version="1.0" encoding="utf-8" ?> < RequestData > <ServiceCode>A service code defined by the VTC </ServiceCode> <Account>The account name should Topup </Account> <Amount>Amount of transaction (VND)</Amount> <Quantity>null(empty)</Quantity> <TransDate>Date and time transaction format yyyyMMddHHmmss(format 24 hour)</TransDate> <OrgTransID>Code transaction arising from the Partner </OrgTransID> <DataSign>Electronic signatures </DataSign> </ RequestData > Trong đó: - ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1. - Account: Là số điện thoại di động cần nạp tiền (topup). VD 0986645352 - Amount: Số tiền giao dịch (VNĐ). Mệnh giá hợp lệ: 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000. - Transdate (string, required): Ngày giờ giao dịch theo định dạng yyyyMMddHHmmss (24 hour). - Orgtransid (string, required): Mã giao dịch phát sinh từ phía Partner mỗi làn khách hàng thực hiện một giao dịch, các mã giao dịch các lần gửi cho VTC
  • 6. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 6 không được trùng nhau (mỗi giao dịch chỉ gửi 1 lần). Mã giao dịch chỉ gồm các ký tự chữ cái và số ([a-z],[A-Z], 0-9) không gồm các ký tự đặc biệt (@, #, …) - DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu cầu DataSign = ServiceCode + "-" + Account + "-" + Amount + "-" + PartnerCode + "-" + Transdate + "-" + Orgtransid Ví dụ: “3002-0983463588-10000-logich-20100824193823-124242” Kết quả trả về: Là một chuỗi string có dạng sau: <ResponseCode>|<OrgTransID>|<PartnerBalance>|<dataSign> - Orgtransid: Mã giao dịch phát sinh bởi partner. - ResponseCode: Thể hiện kết quả giao dịch (Có phụ lục mã lỗi kèm theo mỗi dịch vụ) - PartnerBalance: Số tiền cược còn lại của Partner tại VTC. - dataSign: Chữ ký RSA dataSign = ResponseCode +”-”+OrgTransID +”-”+PartnerBalance 2.2. CheckAccountGameExits (commandType=CheckAccount; version=1.0) public string RequestTransaction(string requesData, string partnerCode, string commandType, string version) Chức năng: Cho phép đối tác kiểm tra tài khoản game được nạp có tồn tại hay không truớc khi thực hiện nạp tiền Các tham số đầu vào: - PartnerCode (string required): Mã khách hàng tại VTC Paygate Topup (ví dụ: “LOGICH”) - CommandType required): Tên hàm API, trường hợp này là CheckAccount. - Version: Phiên bản của dịch vụ (hiện tại là 1.0)
  • 7. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 7 - requestData: Là một chuỗi string theo định dạng XML: <?xml version="1.0" encoding="utf-8" ?> < RequestData > <ServiceCode>A service code defined by the VTC </ServiceCode> <Account>The account name should Topup </Account> <Amount> null(empty)</Amount> <TransDate>null(empty)</TransDate> <OrgTransID null(empty)</OrgTransID> <DataSign>Electronic signatures </DataSign> </ RequestData > Trong đó: - ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1 - Account: Là tên tài khoản điện thoại di động (hoặc tài khoản game) cần topup. - DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu cầu DataSign = ServiceCode + "-" + Account + "-" + PartnerCode Ví dụ: “3002-vtctest-logich” Kết quả trả về: Là một chuỗi string có dạng sau: <ResponseCode>|<Datasign> - ResponseCode: Thể hiện kết quả giao dịch (Có phụ lục mã lỗi kèm theo mỗi dịch vụ) - DataSign: Chữ ký RSA DataSign = <ResponseCode> -Trường hợp với gia hạn truyền hình số của VTC: Là một chuỗi string có dạng sau: <ResponseCode>|<Datasign>|<Data>
  • 8. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 8 - DataSign: Chữ ký RSA DataSign = <ResponseCode> 2.3. TopupPartner (commandType=TopupPartner;version=1.0) public string RequestTransaction(string requesData, string partnerCode, string commandType, string version) Chức năng: Nạp tiền vào tài khoản game của khách hàng. Mô tả các tham số đầu vào: - partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này trên VTC Paygate (do VTC quy định và gửi cho đối tác). - CommandType: Tên hàm API, trường hợp này là TopupPartner. - version: Phiên bản của dịch vụ (hiện tại là 1.0). - requesData: Là một chuỗi string theo định dạng XML: <?xml version="1.0" encoding="utf-8" ?> < RequestData > <ServiceCode>A service code defined by the VTC </ServiceCode> <Account>The account name should Topup </Account> <Amount>Amount of transaction (VND)</Amount> <Quantity>null(empty)</Quantity> <Description> thông tin mô tả</ Description > <TransDate>Date and time transaction format yyyyMMddHHmmss(format 24 hour)</TransDate> <OrgTransID>Code transaction arising from the Partner </OrgTransID> <DataSign>Electronic signatures </DataSign> </ RequestData > Trong đó: - ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1. - Account: Là tài khoản game cần topup. - Amount: Số tiền topup (VNĐ). Mệnh giá hợp lệ: 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000. - Transdate (string, required): Ngày giờ giao dịch theo định dạng yyyyMMddHHmmss (24 hour). - Orgtransid (string, required): Mã giao dịch phát sinh từ phía Partner mỗi làn khách hàng thực hiện một giao dịch, các mã giao dịch các lần gửi cho VTC
  • 9. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 9 không được trùng nhau (mỗi giao dịch chỉ gửi 1 lần). Mã giao dịch chỉ gồm các ký tự chữ cái và số ([a-z],[A-Z], 0-9) không gồm các ký tự đặc biệt (@, #, …) - DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu cầu - Description (string, required) : Thông tin khách hàng với trường hợp topup gia hạn thuê bao truyền hình số vệ tinh của VTC. Có dạng như sau : <Fullname>|<Mobile>|<Address>|<Email> Nếu khác thì truyền null. DataSign = ServiceCode + "-" + Account + "-" + Amount + "-" + PartnerCode + "-" + Transdate + "-" + Orgtransid Ví dụ: “3002-vtctest1-10000-logich-20100824193823-124242” Kết quả trả về: Là một chuỗi string có dạng sau: <ResponseCode>|<OrgTransID>|<PartnerBalance>|<DataSign> - Orgtransid: Mã giao dịch phát sinh bởi partner. - ResponseCode: Thể hiện kết quả giao dịch (Có phụ lục mã lỗi kèm theo mỗi dịch vụ) - PartnerBalance: Số tiền cược còn lại của Partner tại VTC. - dataSign: Chữ ký RSA dataSign = ResponseCode +”-”+OrgTransID +”-”+ PartnerBalance 2.4. BuyCard (commandType=BuyCard;version=1.0) public string RequestTransaction(string requesData, string partnerCode, string version) Chức năng: Thực hiện giao dịch mua mã thẻ (điện thoại, game), key phần mềm … Mô tả các tham số đầu vào:
  • 10. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 10 - partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này trên VTC Paygate (do VTC quy định và gửi cho đối tác). - CommandType: Tên hàm API, trường hợp này là BuyCard. - Version: Phiên bản của dịch vụ (hiện tại là 1.0). - requestData: Là một chuỗi string theo định dạng XML: <?xml version="1.0" encoding="utf-8" ?> < RequestData > <ServiceCode>A service code defined by the VTC </ServiceCode> <Account>null (empty) </Account> <Amount>Value of card (VND)</Amount> <Quantity>Number card want buy</Quantity> <TransDate>Date and time transaction format yyyyMMddHHmmss(format 24 hour)</TransDate> <OrgTransID>Code transaction arising from the Partner </OrgTransID> <DataSign>Electronic signatures </DataSign> </ RequestData > Trong đó: - ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1. - Amount: Mệnh giá của loại thẻ muốn mua. Mệnh giá hợp lệ: 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000. - Quantity: Số lượng thẻ cần mua - Transdate (string, required): Ngày giờ giao dịch theo định dạng yyyyMMddHHmmss (24 hour). - Orgtransid (string, required): Mã giao dịch phát sinh từ phía Partner mỗi làn khách hàng thực hiện một giao dịch, các mã giao dịch các lần gửi cho VTC không được trùng nhau (mỗi giao dịch chỉ gửi 1 lần). Mã giao dịch chỉ gồm các ký tự chữ cái và số ([a-z],[A-Z], 0-9) không gồm các ký tự đặc biệt (@, #, …) - DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu cầu DataSign = ServiceCode + "-" + Amount + "-" + quantity+ "-"+PartnerCode + "-" + Transdate + "-" + Orgtransid Ví dụ: “3002-100000-50-logich-20100824193823-124242”
  • 11. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 11 Kết quả trả về: Là một chuỗi string có dạng sau: <ResponseCode>|<OrgTransID>|<VTCTransID>|<PartnerBalance>|<dataSign > - VTCTransID: Mã giao dịch phát sinh bởi VTC. Đối tác dùng mã giao dịch này để lấy lại danh sách mã thẻ đã mua - OrgTransID: Mã giao dịch phát sinh bởi Partner - ResponseCode: Thể hiện kết quả giao dịch (Có phụ lục mã lỗi kèm theo mỗi dịch vụ) - PartnerBalance: Số tiền cược còn lại của Partner tại VTC. - dataSign: Chữ ký RSA dataSign = ResponseCode +”-”+OrgTransID +”-”+VTCTransID +”- ”+PartnerBalance 2.5. GetCard (commandType=GetCard;version=1.0) public string RequestTransaction(string requesData, string partnerCode, string version) Chức năng: Lấy ra mã thẻ mà đối tác đã mua Mô tả các tham số đầu vào: - partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này trên VTC Paygate (do VTC quy định và gửi cho đối tác). - CommandType: Tên hàm API, trường hợp này là GetCard. - Version: Phiên bản của dịch vụ (hiện tại là 1.0). - requestData: Là một chuỗi string theo định dạng XML: <?xml version="1.0" encoding="utf-8" ?> < RequestData > <ServiceCode>A service code defined by the VTC </ServiceCode> <Account> null(empty)<</Account> <Amount> Value of card (VND)</Amount> <TransDate>null(empty)</TransDate> <OrgTransID> Code transaction arising from the Partner </OrgTransID> <DataSign>Electronic signatures </DataSign> </ RequestData > Trong đó:
  • 12. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 12 - ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1. - Amount: Mệnh giá thẻ. Mệnh giá hợp lệ: 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000. - Orgtransid (string, required): Mã giao dịch do VTC đã gửi trả về trong hàm BuyCard - DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu cầu DataSign = ServiceCode + "-" + Amount + "-" + PartnerCode + "-" + Orgtransid Ví dụ: “3002-10000-logich-124242” Kết quả trả về: Là một chuỗi dữ liệu mã hóa bằng tripleDES sau khi giải mã có dạng sau. Key dùng để giải mã là key do bên VTC gửi cho đối tác: <ResponseCode>|<OrgTranID|<ListCard> ResponseCode: Thể hiện kết quả giao dịch (Có phụ lục mã lỗi kèm theo mỗi dịch vụ) - OrgTranID: Mã giao dịch - ListCard: Danh sách mã thẻ khách hàng đã về. Có định dạng như sau: ListCard = <CardCode1>:<CardSerial1>:<ExpriceDate1>| <CardCoden>:<CardSerialn>:<ExpriceDaten> - CardCode: Mã thẻ - CardeSerial: Số serial thẻ - ExpriceDate: Ngày hết hạn thẻ (có format dd/MM/yyyy. Ví du:20/11/2013) 2.6. GetBalance (commandType=GetBalance; version=1.0) public string RequestTransaction(string requesData,string partnerCode,string commandType, string version) Chức năng: Dùng để kiểm tra số dư tài khoản cược của đối tác tại VTC.
  • 13. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 13 Mô tả tham số đầu vào: - PartnerCode (string required): Mã khách hàng tại VTC Paygate Topup (ví dụ: “LOGICH”) - CommandType required): Tên hàm API, trường hợp này là GetBalance. - Version: Phiên bản của dịch vụ (hiện tại là 1.0) - requestData: Là một chuỗi string theo định dạng XML: <?xml version="1.0" encoding="utf-8" ?> < RequestData > <ServiceCode>A service code defined by the VTC </ServiceCode> <Account> null(empty)<</Account> <Amount>null(empty)<Amount> <TransDate> null(empty)</TransDate> <OrgTransID> null(empty)OrgTransID> <DataSign> null(empty)</DataSign> </ RequestData > Trong đó: - ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1 - Account (string, not required): Empty - Amount (int, not require): Empty - Transdate (string, not required): Empty - Orgtransid (string[KetNoi]Tài liệu mô tả API kho hàng mới, not required): Empty - DataSign (string, required): RSA(“partnerCode”) Kết quả trả về: Là một chuỗi string có dạng sau: <PartnerBalance>|<Datasign> - PartnerBalance: Số dư tài khoản của đối tác trên Paygate - DataSign: Chữ ký RSA DataSign = < PartnerBalance > Chú ý: Dữ liệu đối tác gửi lên (RequesData, partnerCode, commandType, version) và dữ liệu trả về của VTC phải được encode. 2.7. GetQuantiyCard (commandType=GetQuantityCard; version=1.0) public string RequestTransaction(string requesData,string partnerCode,string commandType, string version)
  • 14. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 14 Chức năng: Dùng để lấy số lượng mã thẻ hiện có trong kho của VTC. Mô tả tham số đầu vào: - PartnerCode (string required): Mã khách hàng tại VTC Paygate Topup (ví dụ: “LOGICH”) - CommandType required): Tên hàm API, trường hợp này là GetQuantityCard. - Version: Phiên bản của dịch vụ (hiện tại là 1.0) - requestData: Là một chuỗi string theo định dạng XML: <?xml version="1.0" encoding="utf-8" ?> <RequestData> <ServiceCode>A service code defined by the VTC </ServiceCode> <Account> null(empty)<</Account> <Amount>null(empty)<Amount> <TransDate> null(empty)</TransDate> <OrgTransID> null(empty)OrgTransID> <DataSign> null(empty)</DataSign> </ RequestData > Trong đó: - ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1 - Account (string, not required): Empty - Amount (int, not require): truyền = 0 - Transdate (string, not required): Empty - Orgtransid (string, required): Truyền capcha - DataSign (string, required): RSA(ServiceCode + “-“ + “OrgTransID”) Kết quả trả về: Là một chuỗi string có dạng sau: <ListQuantityCard>|<Datasign> - ListQuantityCard: Chuỗi trả về kiểu Json, có định dạng như sau: [{“CategoryName”:”Mã thẻ Viettel”,”SLTonCuoiKi”:”10000”,”Value”:”5000”}, {“CategoryName”:”Mã thẻ Viettel”,”SLTonCuoiKi”:”20000”,”Value”:”4000”}] - DataSign: Chữ ký RSA DataSign =RSA( ListQuantityCard) Chú ý: Dữ liệu đối tác gửi lên (RequesData, partnerCode, commandType, version) và dữ liệu trả về của VTC phải được encode.
  • 15. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 15 2.8 Hàm CheckPartnerTransCode { commandType=CheckPartnerTransCode; version=1.0} Chức năng: Thực hiện kiểm tra xem giao dịch của đối tác đã được thực hiện hay chưa? public string RequestTransaction(string requesData,string partnerCode,string commandType, string version) Mô tả các tham số đầu vào: - partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này trên VTC Paygate (do VTC quy định và gửi cho đối tác). - CommandType: Tên hàm API, trường hợp này là CheckPartnerTransCode. - Version: Phiên bản của dịch vụ (hiện tại là 1.0). - requestData: Là một chuỗi string theo định dạng XML: <?xml version="1.0" encoding="utf-8" ?> < RequestData > <Account>empty </Account> <OrgTransID>Mã giao dịch của đơn hàng </OrgTransID> < CheckTypeServiceCode >Loại giao dịch(mã thẻ,topup)</CheckTypeSeviceCode> <DataSign>Electronic signatures </DataSign> </ RequestData > Trong đó: - Orgtransid (string, required): Mã giao dịch phát sinh từ phía Partner mỗi làn khách hàng thực hiện một giao dịch, các mã giao dịch các lần gửi cho VTC không được trùng nhau (mỗi giao dịch chỉ gửi 1 lần). Mã giao dịch chỉ gồm các ký tự chữ cái và số ([a-z],[A-Z], 0-9) không gồm các ký tự đặc biệt (@, #, …) - DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu cầu - CheckTypeServiceCode: Gía trị kiểu int CheckTypeServiceCode =1 Check mua mã thẻ CheckTypeServiceCode khác 1:Check các giao dịch khác DataSign = PartnerCode + "-" + Orgtransid+-+ CheckTypeServiceCode
  • 16. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 16 Kết quả trả về: Là một chuỗi string có dạng sau: <ResponseCode>|<Data>|<dataSign> Trong đó : Data = < VTCTransID >|< Orgtransid >|<Account>|<Amount>|<Date> <ResponseCode> = 1 : thành công. <ResponseCode >= -99: Nghi vấn,ko check dc kết quả. <ResponseCode> = -502>Không tồn tại giao dịch. - VTCTransID: Mã giao dịch phát sinh bởi VTC. Đối tác dùng mã giao dịch này để lấy lại danh sách mã thẻ đã mua - Orgtransid: Mã giao dịch phát sinh bởi Partner - ResponseCode: Thể hiện kết quả giao dịch (Có phụ lục mã lỗi kèm theo mỗi dịch vụ) - Account :Tài khoản VTC của đối tác - Date:Ngày giao dịch - dataSign: Chữ ký RSA dataSign = RSA (ResponseCode|Data) 2.9 Hàm GetHistoryTrans { commandType= GetHistoryTrans; version=1.0} Chức năng: Lấy lịch sử giao dịch của đối tác public string RequestTransaction(string requestData,string partnerCode,string commandType, string version) Mô tả các tham số đầu vào: - partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này trên VTC Paygate (do VTC quy định và gửi cho đối tác). - CommandType: Tên hàm API, trường hợp này là GetHistoryTrans. - Version: Phiên bản của dịch vụ (hiện tại là 1.0). - requestData: Là một chuỗi string theo định dạng XML: <?xml version="1.0" encoding="utf-8" ?>
  • 17. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 17 < RequestData > <Account>Tài khoản VTCPay của đối tác </Account> <FromDate>Ngày bắt đầu xem lịch sử giao dịch </ FromDate > <ToDate>Ngày xem lịch sử giao dịch </ ToDate > < DataSign > Electronic signatures </ DataSign > </ RequestData > Trong đó: - DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu cầu - FromDate: định dạng ngày như sau yyyy/mm/dd ví dụ: 2013/10/28 - ToDate: định dạng ngày như sau yyyy/mm/dd ví dụ: 2013/10/30 DataSign =RSA (Account + "-" + FromDate + "-" + ToDate) Chú ý:Lịch sử giao dịch chỉ lấy trong giới hạn tối đa <5 ngày. Thường là 2 ngày để đảm bảo dử liệu truyền ổn định và chính xác nhất. Kết quả trả về: Là một chuỗi string có dạng sau: <ResponseCode>|<Data>|<dataSign> Trong đó : Data = Chuỗi json kết quả <ResponseCode> = 1 : thành công. <ResponseCode> = 0 :Không có dữ liệu. - dataSign: Chữ ký RSA dataSign = RSA (ResponseCode |Data) 2.10 Hàm GetDebitAmount {commandType= GetDebitAmount; version=1.0} Chức năng: Lấy số tiền nợ của khách hàng ứng với hóa đơn tương ứng
  • 18. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 18 public string RequestTransaction(string requestData,string partnerCode,string commandType, string version) Mô tả các tham số đầu vào: - partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này trên VTC Paygate (do VTC quy định và gửi cho đối tác). - CommandType: Tên hàm API, trường hợp này là GetDebitAmount. - Version: Phiên bản của dịch vụ (hiện tại là 1.0). - requestData: Là một chuỗi string theo định dạng XML: <?xml version="1.0" encoding="utf-8" ?> < RequestData > <ServiceCode>Mã dịch vụ được cung cấp bởi VTC </ServiceCode> <Account>Là mã hóa đơn </Account> < DataSign > Electronic signatures </ DataSign > </ RequestData > Trong đó: - ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1 - Account: Là mã hóa đơn của khách hàng cần thanh toán - DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu cầu DataSign = RSA(ServiceCode + "-" + Account + "-" + PartnerCode ) Ví dụ: “VTC0340-abc1111-mpaytest” Kết quả trả về: Là một chuỗi string có dạng sau: <ResponseCode>|<Account >|<AmountBill>|Extent>|<Sign> Trong đó : ResponseCode :Kiểu int > 0 : thành công.
  • 19. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 19 ResponseCode < 0 :Thất bại,mã lỗi được mô tả ở phần phụ lục - dataSign: Chữ ký RSA dataSign = RSA (ResponseCode +”-”+ Account +”-”+ AmountBill +”-”+ Extent) 2.11 Hàm GetSalePrice {commandType= GetSalePrice; version=1.0} Chức năng: Trả ra giá bán đã có chiết khấu của 1 sản phẩm. public string RequestTransaction(string requestData,string partnerCode,string commandType, string version) Mô tả các tham số đầu vào: - partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này trên VTC Paygate (do VTC quy định và gửi cho đối tác). - CommandType: Tên hàm API, trường hợp này là GetSalePrice. - Version: Phiên bản của dịch vụ (hiện tại là 1.0). - requestData: Là một chuỗi string theo định dạng XML: <?xml version="1.0" encoding="utf-8" ?> < RequestData > <ServiceCode>Mã dịch vụ được cung cấp bởi VTC </ServiceCode> <Amount>Mênh giá của 1 sản phẩm </ Amount > < DataSign > Electronic signatures </ DataSign > </ RequestData > Trong đó: - ServiceCode: Là mã dịch vụ do VTC quy định theo phụ lục 1 - DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu cầu DataSign = RSA(ServiceCode + "-"+”Amount”+”-” + PartnerCode ) Ví dụ: “VTC0340-10000-mpaytest” Kết quả trả về:
  • 20. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 20 Là một chuỗi string có dạng sau: <ResponseCode>|<Amount >|<SalePrice>|Extent>|<Sign> Trong đó : ResponseCode :Kiểu int > 0 : thành công. ResponseCode < 0 :Thất bại,mã lỗi được mô tả ở phần phụ lục - dataSign: Chữ ký RSA dataSign = RSA (ResponseCode +”-”+”Amount”+”-”+SalePrice +”-”+ Extent) 2.12 Hàm GetPromotionDate { commandType= GetPromotionDate; version=1.0} Chức năng: Lấy lịch khuyến mại của các nhà mạng public string RequestTransaction(string requestData,string partnerCode,string commandType, string version) Mô tả các tham số đầu vào: - partnerCode: Là tên tài khoản của đối tác khi đăng ký sử dụng dịch vụ này trên VTC Paygate (do VTC quy định và gửi cho đối tác). - CommandType: Tên hàm API, trường hợp này là GetPromotionDate. - Version: Phiên bản của dịch vụ (hiện tại là 1.0). - requestData: Là một chuỗi string theo định dạng XML: <?xml version="1.0" encoding="utf-8" ?> < RequestData > < DataSign > Electronic signatures </ DataSign > </ RequestData > Trong đó: - DataSign (string, required): Chữ ký điện tử trên giao dịch tương ứng của VTC’s Partner. Chữ ký điện tử theo thuật toán RSA 1024 bit bằng private key của VTC’s Partner tạo trong cặp key và cung cấp cho VTC Paygate public key để xác nhận chữ ký. Nếu xác nhận đúng chữ ký sẽ thực hiện theo thông tin yêu cầu DataSign =RSA (PartnerCode)
  • 21. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 21 Kết quả trả về: Là một chuỗi string có dạng sau: <ResponseCode>|<Data>|<dataSign> Trong đó : Data = Chuỗi json kết quả [{"Provider":"VinaPhone","BeginDate":"08/10/2013 17:00:00","EndDate":"08/10/2013 20:00:00","Apply":"Tat ca thue bao tra truoc"}, {"Provider":"Viettel","BeginDate":"27/03/2014 00:00:00","EndDate":"29/03/2014 23:00:00","Apply":"Tat ca thue bao tra truoc"}] <ResponseCode> = 1 : thành công. <ResponseCode> = 0 :Không có dữ liệu. - dataSign: Chữ ký RSA dataSign = RSA (ResponseCode |Data) 3. Phụ lục 3.1. Phụ lục mã dịch vụ Mã thẻ: ServiceCode Tên dịch vụ Các mệnh giá thẻ Chức năng VTC0027 Mã thẻ Viettel 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000 BuyCard, GetCard VTC0028 Mã thẻ Vina 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000 BuyCard, GetCard VTC0029 Mã thẻ Mobi 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000 BuyCard, GetCard VTC0030 Mã thẻ SFone 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000 BuyCard, GetCard VTC0173 Mã thẻ GMobile 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000 BuyCard, GetCard VTC0154 Thẻ t Mã thẻ V VVietnamobile 10000, 20000, 50000, 100000, 200000, 300000, 500000 BuyCard, GetCard VTC0067 Mã thẻ Zing 20000, 60000, 120000 BuyCard, GetCard VTC0068 Mã thẻ Gate 10000, 20000, 50000, 100000, 200000, 500000 BuyCard, GetCard VTC0114 Mã thẻ đa năng 10000, 20000, 50000,
  • 22. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 22 VTC Online 100000, 200000, 300000, 500000 BuyCard, GetCard VTC0185 Mã thẻ MyCard 49000, 146500, 330000, 422000, 930000 BuyCard, GetCard VTC0191 Mã thẻ Zynga 140000, 28000, 700000 BuyCard, GetCard VTC0166 Mã thẻ OnCash 20000, 60000, 100000, 200000, 500000 BuyCard, GetCard VTC0144 Key BITDEFENDER 150000: Bitdefender Antivirus plus 2014 1U/1Y 170000: Bitdefender Antivirus plus 2014 3U/1Y 190000:Bitdefender Internet security 2014 1U/1Y 250000:Bitdefender Internet security 2014 3U/1Y BuyCard, GetCard VTC0319 Mã thẻ Sò (Garena) 20000, 50000, 100000, 200000, 500000 BuyCard, GetCard VTC0355 VTC0347(Test) Mã thẻ Steam Wallet 126000 (Thẻ Steam $5) 252000 (Thẻ Steam $10) 378000 (Thẻ Steam $15) 504000 (Thẻ Steam $20) 756000 (Thẻ Steam $30) 1260000 (Thẻ Steam $50) 1512000 (Thẻ Steam $60) BuyCard, GetCard VTC0321 Mã thẻ LIKE 20000, 50000, 100000, 500000, 1000000 BuyCard, GetCard VTC0171 CD Key 7554 125000, 249000 BuyCard, GetCard VTC0321 Mã thẻ SoftNYX 63000, 105000, 208110 BuyCard, GetCard Nạp tiền trực tiếp: ServiceCode Tên dịch vụ Các mệnh giá nạp tiền Chức năng VTC0040 Nạp tiền Hocmai.vn 30000, 50000, 100000 TopupPartner, CheckAccount VTC0041 Nạp tiền Truongtructuyen.vn 30000, 50000, 100000 TopupPartner, CheckAccount VTC0056 Nạp tiền trả trước Viettel 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000 TopupTelco VTC0217 Nạp tiền DCOM- 3G Viettel trả trước 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000 TopupTelco VTC0219 Nạp tiền DCOM- 3G Viettel trả sau 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000 TopupTelco VTC0329 Nạp tiền trả sau Viettel Số tiền lớn hơn 5000 và phải chẵn nghìn TopupTelco VTC0057 Nạp tiền trả trước Vina 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000 TopupTelco VTC0201 Nạp tiền Vina trả sau Số tiền lớn hơn 5000 và phải chẵn nghìn TopupTelco
  • 23. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 23 VTC0058 Nạp tiền trả trước Mobi 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000 TopupTelco VTC0130 Nạp tiền Mobi trả sau Số tiền lớn hơn 5000 và phải chẵn nghìn TopupTelco VTC0127 Nạp tiền trả trước EVN 10000, 20000, 30000, 50000, 100000, 200000, 300000, 500000 TopupTelco VTC0176 Nạp tiền Vietnamobile trả trước 10000, 20000, 50000, 100000, 200000, 300000, 500000 TopupTelco VTC0177 Nạp tiền trả trước Beeline 10000, 20000, 50000, 100000, 200000, 300000, 500000 TopupTelco VTC0193 Gia hạn truyền hình số của VTC 400000, 650000, 720000, 1200000 TopupPartner CheckAccount VTC0187 Nạp bạc (Gate) 10000, 20000, 50000, 100000, 200000, 300000, 500000 TopupPartner, VTC0051 Nạp @Point Tam Quốc Chí (Asia Soft) 20000, 50000, 100000 TopupPartner, CheckAccount VTC0209 Nạp mCash 10000, 20000, 50000, 100000, 200000, 500000 TopupPartner, CheckAccount VTC0307 Nạp zing xu 10000, 20000, 50000, 60000,100000, 120000,200000, 500000 TopupPartner VTC0308 Nạp Oncash 10000, 20000, 50000, 100000, 200000,500000 TopupPartner Chú ý: Đây là mã các dịch vụ hiện tại VTC đang cung cấp. Nếu có thay đổi (bổ xung dịch vụ mới hoặc bỏ bớt) chúng tôi sẽ thông báo cho đối tác 3.2. Phụ lục mã lỗi Output Format Là một string có định dạng sau: <ResponseCode>|<OrgTransID>|<PartnerBalance> ResponseCode Description Comment 1 Giao dịch thành công 0 Giao dịch chưa xác định Giao dịch nghi vấn, không hoàn tiền -1 Lỗi hệ thống Giao dịch nghi vấn không hoàn tiền -55 Số dư tài khoản không đủ để thực hiện giao dịch này -99 Lỗi chưa xác định Giao dịch nghi vấn, không hoàn tiền -290 Thông tin lệnh nạp tiền hợp lệ. Đang chờ kết quả xử lý Giao dịch đang xử lý. Có thể gọi hàm check trạng thái để kiểm tra
  • 24. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 24 kết quả giao dịch -302 Partner không tồn tại hoặc đang tạm dừng hoạt động Cho phép hoàn tiền -304 Dịch vụ này không tồn tại hoặc đang tạm dừng Cho phép hoàn tiền -305 Chữ ký không hợp lệ Cho phép hoàn tiền -306 Mệnh giá không hợp lệ hoặc đang tạm dừng Cho phép hoàn tiền -307 Tài khoản nạp tiền không tồn tại hoặc không hợp lệ Cho phép hoàn tiền -308 RequesData không hợp lệ Cho phép hoàn tiền -309 Ngày giao dịch truyền không đúng Cho phép hoàn tiền -310 Hết hạn mức cho phép sử dụng dịch vụ này Cho phép hoàn tiền -311 RequesData hoặc PartnerCode không đúng Cho phép hoàn tiền -315 Phải truyền CommandType Cho phép hoàn tiền -316 Phải truyền version Cho phép hoàn tiền -317 Số lượng thẻ không hợp lệ Cho phép hoàn tiền -318 ServiceCode không đúng Cho phép hoàn tiền -320 Hệ thống gián đoạn Cho phép hoàn tiền -348 Tài khoản bị Block Cho phép hoàn tiên -350 Tài khoản không tồn tại Cho phép hoàn tiền -500 Loại thẻ này trong kho hiện đã hết hoặc tạm ngừng xuất Cho phép hoàn tiền -501 Giao dịch không thành công Cho phép hoàn tiền -502 Không tồn tại giao dịch -503 Đối tác không đươc thực hiện chức năng này -504 Mã giao dịch này đã check quá tối đa số lần cho phép -505 Số lần check vượt quá hạn mức cho phép trong ngày -509 Giao dịch bị hủy (thất bại) -600 Quá hạn mức Cho phép hoàn tiền # Các trường hợp mã lỗi chưa định nghĩa tường minh Giao dịch nghi vấn cần kiểm tra lại, không hoàn tiền Lưu ý: - Thành công: giao dịch đã trừ tiền tại hệ thống VTC Intecom
  • 25. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 25 - Thất bại: giao dịch chưa bị trừ tiền tại hệ thống VTC Intecom - Nghi vấn: giao dịch chưa xác đinh tại hệ thống VTC Intecom hoặc hệ thống đối tác không nhận được phản hồi kết quả của giao dịch đã gửi tới hệ thống VTC Intecom sau một khoảng thời gian nhất định (System Timeout). Đối với trạng thái giao dịch này, hệ thống 2 bên sẽ giữ nguyên hiện trạng để đối soát theo quy trình thống nhất giữa 2 bên. 4. Code tham khảo 4.1. Tạo chữ ký bằng RSA public static string CreateSignRSA(string data, string privateKey) { CspParameters _cpsParameter; RSACryptoServiceProvider rsaCryptoIPT; _cpsParameter = new CspParameters(); _cpsParameter.Flags = CspProviderFlags.UseMachineKeyStore; rsaCryptoIPT = new RSACryptoServiceProvider(1024, _cpsParameter); rsaCryptoIPT.FromXmlString(privateKey); return Convert.ToBase64String(rsaCryptoIPT.SignData(Encoding.UTF8.GetBytes (data), new SHA1CryptoServiceProvider())); } 4.2. Verify chữ ký bằng RSA public static bool CheckSignRSA(string data, string sign, string publicKey) { try { RSACryptoServiceProvider rsacp = new RSACryptoServiceProvider(); rsacp.FromXmlString(publicKey); return rsacp.VerifyData(Encoding.UTF8.GetBytes(data), "SHA1", Convert.FromBase64String(sign)); } catch (Exception ex) { NLogLogger.Info(ex.ToString()); return false; } } 4.3. Mã hóa bằng thuật toán tripleDES a, C# public static string Encrypt(string key, string data) { data = data.Trim(); byte[] keydata = Encoding.ASCII.GetBytes(key); string md5String = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(keydata)).Replace("-", "").ToLower(); byte[] tripleDesKey = Encoding.ASCII.GetBytes(md5String.Substring(0, 24)); TripleDES tripdes = TripleDESCryptoServiceProvider.Create(); tripdes.Mode = CipherMode.ECB; tripdes.Key = tripleDesKey;
  • 26. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 26 tripdes.GenerateIV(); MemoryStream ms = new MemoryStream(); CryptoStream encStream = new CryptoStream(ms, tripdes.CreateEncryptor(), CryptoStreamMode.Write); encStream.Write(Encoding.ASCII.GetBytes(data), 0, Encoding.ASCII.GetByteCount(data)); encStream.FlushFinalBlock(); byte[] cryptoByte = ms.ToArray(); ms.Close(); encStream.Close(); return Convert.ToBase64String(cryptoByte, 0, cryptoByte.GetLength(0)).Trim(); } b. Java public static String Encrypt(String key,String data) throws Exception { Cipher cipher=Cipher.getInstance("TripleDES"); MessageDigest md5=MessageDigest.getInstance("MD5"); md5.update(key.getBytes(),0,key.length()); String keymd5 = new BigInteger(1,md5.digest()).toString(16).substring(0, 24); SecretKeySpec keyspec = new SecretKeySpec(keymd5.getBytes(),"TripleDES"); cipher.init(Cipher.ENCRYPT_MODE,keyspec); byte[] stringBytes=data.getBytes(); byte[] raw=cipher.doFinal(stringBytes); BASE64Encoder encoder = new BASE64Encoder(); String base64 = encoder.encode(raw); return base64; } c. PHP <?php function Encrypt($input, $key_seed){ $input = trim($input); $block = mcrypt_get_block_size('tripledes', 'ecb'); $len = strlen($input); $padding = $block - ($len % $block); $input .= str_repeat(chr($padding),$padding); // generate a 24 byte key from the md5 of the seed $key = substr(md5($key_seed),0,24); $iv_size = mcrypt_get_iv_size(MCRYPT_TRIPLEDES, MCRYPT_MODE_ECB);
  • 27. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 27 $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); // encrypt $encrypted_data = mcrypt_encrypt(MCRYPT_TRIPLEDES, $key, $input, MCRYPT_MODE_ECB, $iv); // clean up output and return base64 encoded return base64_encode($encrypted_data); } //end function Encrypt() ?> <?php 4.4. Giải mã bằng thuật toán tripleDES a. C# public static string Decrypt(string key, string data) { byte[] keydata = Encoding.ASCII.GetBytes(key); string md5String = BitConverter.ToString(new MD5CryptoServiceProvider().ComputeHash(keydata)).Replace("-", "").Replace(" ", "+").ToLower(); byte[] tripleDesKey = Encoding.ASCII.GetBytes(md5String.Substring(0, 24)); TripleDES tripdes = TripleDESCryptoServiceProvider.Create(); tripdes.Mode = CipherMode.ECB; tripdes.Key = tripleDesKey; byte[] cryptByte = Convert.FromBase64String(data); MemoryStream ms = new MemoryStream(cryptByte, 0, cryptByte.Length); ICryptoTransform cryptoTransform = tripdes.CreateDecryptor(); CryptoStream decStream = new CryptoStream(ms, cryptoTransform, CryptoStreamMode.Read); StreamReader read = new StreamReader(decStream); return (read.ReadToEnd()); } b. Java public static String Decrypt(String key,String data) throws Exception { Cipher cipher=Cipher.getInstance("TripleDES"); MessageDigest md5=MessageDigest.getInstance("MD5"); md5.update(key.getBytes(),0,key.length()); String keymd5 = new BigInteger(1,md5.digest()).toString(16).substring(0 ,24); SecretKeySpec keyspec = new SecretKeySpec(keymd5.getBytes(),"TripleD ES"); cipher.init(Cipher.DECRYPT_MODE,keyspec); BASE64Decoder decoder = new BASE64Decoder(); byte[] raw = decoder.decodeBuffer(data); byte[] stringBytes = cipher.doFinal(raw); String result = new String(stringBytes); return result; }
  • 28. TỔNG CÔNG TY TRUYỀN THÔNG ĐA PHƯƠNG TIỆN VTC VTC-eBank Page 28 c. PHP <?php function Decrypt($input, $key_seed) { $input = base64_decode($input); $key = substr(md5($key_seed),0,24); $text=mcrypt_decrypt(MCRYPT_TRIPLEDES, $key, $input, MCRYPT_MODE_ECB,'12345678'); $block = mcrypt_get_block_size('tripledes', 'ecb'); $packing = ord($text{strlen($text) - 1}); if($packing and ($packing < $block)){ for($P = strlen($text) - 1; $P >= strlen($text) - $packing; $P--){ if(ord($text{$P}) != $packing){ $packing = 0; } } } $text = substr($text,0,strlen($text) - $packing); return $text; } ?>