Trang chủ- PACIFIC MOBILE PAY SOLUTION
HTTP APIs > API giao dịch qua SMS

Các bước thực hiện

1 KH soạn tin nhắn theo cú pháp NAPxxx MaCP MaGame TaikhoangameKH gửi đến 9505
2 mPay9505 phân tích cú pháp, nếu đúng cú pháp sẽ chuyển sang bước tiếp theo, nếu sai cú pháp mPay9505 sẽ trả thông báo tương ứng cho KH
3 mPay9505 gọi API của CPđể check account game của KH.
4 CPcheck account game của KH trong hệ thống, kết quả trả về cho mPay9505
5 mPay9505 căn cứ vào kết quả do CPtrả về.

•Nếu account game không đúng: mPay9505 sẽ trả thông báo cho KH

•Nếu account game là hợp lệ: mPay9505 sẽ tiến hành trừ cước tài khoản điện thoại của KH

Nếu trừ cước không thành công, mPay9505 sẽ thông báo cho KH

Nếu trừ cước thành công: mPay sẽ báo kết quả sang Merchant, đồng thời gửi thông báo cho KH

Api CPcần xây dựng

- CP cần xây dựng API này để cổng mPay9505 gọi sau khi giao dịch thanh toán của KH thành công

- Hình thức kết nối qua giao thức HTTP, phương thức GET

- Địa chỉ API có dạng:
http://cpdomain/recivechangingresult?requestId={0}&cpCode={1}&gameCode={2}&totalAmount={3}&account={4}&provider={5}&channel={6}&isdn={7}&requestTime={8}&resultCode={9}&accessKey={10}&signature={11}

Tham số đầu vào:

STT

Tên tham số

Kiểu dữ liệu

Mô tả

1

  requestId

String(50)

Mã giao dịch do MPAY trả về

2

  cpCode

String(5)

Mã CP, mã này được mPay cấp cho CP, CP có thể vào CMS để xem

3

  gameCode

String(3)

Mã game, mã này được mPay cấp cho CP, CP có thể vào CMS để xem

4

  totalAmount

Int

Số tiền nạp, ví dụ: 10000, 20000, …

5

  account

String(30)

Tài khoản game của KH

6

  provider

String(10)

Nhà mạng (VIETTEL, MOBI)

7

  channel

String(10)

Kênh giao dịch(SMS, OTP)

8

  isdn

String(15)

Số điện thoại, ví dụ: 098123123, …

9

  requestTime

String(19)

Thời gian gửi giao dịch định dạng yyyy-MM-dd HH:mm:ss

10

  resultCode

String(2)

Kết quả giao dịch với resultCode=”00” là thành công

11

  accessKey

String(50)

Khóa truy cập CP api, CP phải check mã này trước khi check chữ ký(signature). Khóa này được mPay cấp cho CP, CP có thể vào CMS để xem

12

  signature

String

Chữ ký điện tử dùng để xác thực dữ liệu giữa MPAY và CP, thuật toán mã hóa là

HMACSHA256

Cách sinh chữ ký:

plaintext="requestId={0}&cpCode={1}&gameCode={2}&totalAmount={3}
&account={4}&provider={5}&channel={6}&isdn={7}&
requestTime={8}&resultCode={9}&accessKey={10}"

Ví dụ:
plaintext =
"requestId=T123456&cpCode=CPC1&gameCode=GC&totalAmount=10000&
account=doladola&provider=VIETTEL&channel=SMS&isdn=0988888888&
requestTime=2017-03-03 00:00:00&resultCode=00&accessKey= abcdef12345ghijklmn";

signature = HMACSHA256(plaintext, secretKey)
-    secretKey được mPay cấp cho CP, CP có thể vào CMS để xem

 

Kết quả trả về

Kết quả trả về theo format sau: resultCode|Text_mo_ta

STT

Tên tham số

Kiểu dữ liệu

Mô tả

1

 resultCode

 String(2)

 Mã lỗi: “00” là thành công, khác “00” là lỗi

2

 Text_mo_ta

 String(200)

 Text mô tả ngắn cho resultCode

Lưu ý:
-Thời gian timeout cho lệnh gọi API này là 15s
-Trường hợp lỗi mạng, mPay không gọi được API này của CP để báo kết quả giao dịch, mPay sẽ retry lệnh gọi, tối đa 3 lần, mỗi lệnh gọi cách nhau 1 phút.
-Do đó CP cần check requestId trong lệnh gọi, nếu requestId đã được update trong hệ thống của CP thì CP cần có xử lý thích hợp, tránh double giao dịch cho KH

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;

namespace Test
{
    public class HmacSha256
    {
        public string hash(string data, string secretKey)
        {
            var byteKey = Encoding.UTF8.GetBytes(secretKey);
            var byteData = Encoding.UTF8.GetBytes(data);
            HMACSHA256 hmacSHA256 = new HMACSHA256(byteKey);
            var hashDataByte = hmacSHA256.ComputeHash(byteData);
            var encrypted = this.ByteToString(hashDataByte);
            return encrypted.ToLower();
        }

        private string ByteToString(byte[] buff)
        {
            string sbinary = "";

            for (int i = 0; i < buff.Length; i++)
            {
                sbinary += buff[i].ToString("X2"); // hex format
            }
            return (sbinary);
        }
    }
}

 

    private function getData()
    {
        $plainText = $this->cpCode . "|" . $this->requestId . "|" . $this->gameCode . "|" . $this->returnUrl . "|" . $this->account . "|" . $this->accessKey;
        $signature = hash_hmac("sha256", $plainText, $this->secretKey);
        $plainText = $plainText . "|" . $signature;

        $strBase64Encode = base64_encode($plainText);
        return $strBase64Encode;
    }