1Pay

Local BANK Charging


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

1 End User gửi yêu cầu thanh toán đến Merchant.

2 Merchant thực hiện gọi web service (2)transaction_request để lấy pay_url và trans_ref.

3 Merchant submit request(redirect request) qua địa chỉ api trả về (pay_url).

4 1Pay hiển thị form nhập thông tin thẻ và thực hiện giao dịch với end user, sau đó trả kết quả về cho Merchant.

5 Merchant commit request để xác thực request đã được hoàn thành.

Mô tả chi tiết

I. Thực hiện giao dịch

(2) transaction request

Địa chỉ nhận Request Charging:

POST  http://api.1pay.vn/bank-charging/service/v2

Max request time out: 30 giây

Tham số Mô tả
access_key Đại diện cho sản phẩm của merchant khai báo trong hệ thống 1pay.vn.
amount Số tiền tối đa 10,000,000 vnd/giao dịch, số tiền tối thiểu 10,000 vnd/giao dịch (Riêng Vietcombank tối thiểu 20,000/giao dịch) . Hạn mức giao dịch 50,000,000 vnd/tài khoản ngân hàng/ngày. Có thể mở hạn mức cao hơn*
command Mã lệnh nhận giá trị : request_transaction
order_id Mã hóa đơn là duy nhất, đại diện cho giao dịch <50 ký tự
order_info Mô tả hóa đơn. Tiếng Việt không dấu, không quá 30 kí tự
return_url Địa chỉ url sau khi thực hiện thanh toán sẽ được redirect về, merchant cần xây dựng để nhận kết quả từ 1Pay gửi sang. Request do hệ thống 1Pay System gửi sang sẽ ở dạng HTTP GET
signature Chữ ký, merchant có thể sử dụng signature để kiểm soát an ninh
Signature là một chuỗi string
access_key=$access_key&amount=$amount&command=$command&order_id=$order_id&order_info=$order_info&return_url=$return_url
được hmac bằng thuật toán SHA256

(2') Transaction response

là một chuỗi json có chứa các giá trị sau:

{"pay_url":"[url]","status":"[Mã trạng thái]", "trans_ref":"[Mã giao dịch]"}

Trong đó

Tham số Mô tả
pay_url Địa chỉ url để thực hiện submit request (redirect)
status Trạng thái, init: thành công
trans_ref Mã giao dịch dùng để commit request và lưu lại trên hệ thống

(3) Submit(redirect) request

Thực hiện redirect request đến địa chỉ pay_url nhận được từ (1), hệ thống 1Pay sẽ hiển thị nhập thông tin thẻ và thực hiện giao dịch với end user.

(3') Response submit to return_url

Sau khi end user thực hiện thanh toán thẻ, 1Pay sẽ trả kết quả về cho Merchant qua địa chỉ return_url khai báo ở (2).

Tham số Mô tả
access_key Đại diện cho sản phẩm của merchant khai báo trong hệ thống 1pay.vn
amount Số tiền cần giao dịch (>10000vnd)
card_name Tên chi nhánh ngân hàng, do khách hàng lựa chọn
card_type Loại thẻ
order_id Mã hóa đơn là duy nhất, đại diện cho giao dịch <50 ký tự
order_info Mô tả hóa đơn
order_type Nhận giá trị : ND
request_time Thời gian bắt đầu giao dịch ở dạng iso, ví dụ: 2013-07-06T22:54:50Z
response_code Kết quả giao dịch .Nhận giá trị : 0
response_message Mô tả hóa đơn
response_time Thời gian hoàn thành giao dịch ở dạng iso, ví dụ: 2013-07-06T22:54:50Z
trans_ref Mã giao dịch
trans_status Mô tả trạng thái giao dịch
signature Chữ ký, merchant có thể sử dụng signature để kiểm soát an ninh
Signature là một chuỗi string
access_key=$access_key&amount=$amount&card_name=$card_name&card_type=$card_type&order_id=$order_id&order_info=$order_info&order_type=$order_type&request_time=$request_time&response_code=$response_code&response_message=$response_message&response_time=$response_time&trans_ref=$trans_ref&trans_status=$trans_status
được hmac bằng thuật toán SHA256

(5) Commit request

Thực hiện lện POST:

POST  http://api.1pay.vn/bank-charging/service/v2

xác thực giao dịch đã được hoàn thành.

Tham số Mô tả
access_key Đại diện cho sản phẩm của merchant khai báo trong hệ thống 1pay.vn
command Mã lệnh nhận giá trị: close_transaction
trans_ref Mã giao dịch
signature Chữ ký, merchant có thể sử dụng signature để kiểm soát an ninh.
Signature là một chuỗi string:
access_key=$access_key&command=$command&trans_ref=$trans_ref
được hmac bằng thuật toán SHA256

(5') Response commit

Là một chuỗi json có chứa các giá trị bao gồm

{"amount":"[giá trị giao dịch]","trans_status":"[trạng thái giao dịch]", "response_time":"[thời gian bắt đầu]", "response_message": "[thông báo kết quả giao dịch]", "response_code":"[kết quả giao dịch]", "order_info":"[mô tả hóa đơn]","order_id":"[Mã hóa đơn]","trans_ref":"[mã số giao dịch]", "request_time":"[thời gian hoàn thành giao dịch]","order_type":"ND"}

Trong đó

Kết quả giao dịch Mô tả
00 Giao dịch thành công.
01 Ngân hàng từ chối thanh toán: thẻ/tài khoản bị khóa.
02 Thông tin thẻ không hợp lệ.
03 Thẻ hết hạn.
04 Lỗi người mua hàng: Quá số lần cho phép. (Sai OTP, quá hạn mức trong ngày).
05 Không có trả lời của Ngân hàng.
06 Lỗi giao tiếp với Ngân hàng.
07 Tài khoản không đủ tiền.
08 Lỗi dữ liệu.
09 Kiểu giao dịch không được hỗ trợ.
10 Giao dịch không thành công.
11 Giao dịch chưa xác thực OTP.
12 Giao dịch không thành công, số tiền giao dịch vượt hạn mức ngày.
13 Thẻ chưa đăng ký Internet Banking
14 Khách hàng nhập sai OTP.
15 Khách hàng nhập sai thông tin xác thực.
16 Khách hàng nhập sai tên chủ thẻ.
17 Khách hàng nhập sai số thẻ.
18 Khách hàng nhập sai ngày phát hành thẻ.
19 Khách hàng nhập sai ngày hết hạn thẻ.
20 OTP hết thời gian hiệu lực.
21 Quá thời gian thực hiện request (7 phút) hoặc OTP timeout.
22 Khách hàng chưa xác thực thông tin thẻ.
23 Thẻ không đủ điều kiện thanh toán (Thẻ/Tài khoản không hợp lệ hoặc TK không đủ số dư).
24 Giao dịch vượt quá hạn mức một lần thanh toán của ngân hàng.
25 Giao dịch vượt quá hạn mức của ngân hàng.
26 Giao dịch chờ xác nhận từ Ngân hàng.
27 Khách hàng nhập sai thông tin bảo mật thẻ.
28 Giao dịch không thành công do quá thời gian quy định.
29 Lỗi xử lý giao dịch tại hệ thống Ngân hàng.
99 Không xác định.

II. Kiểm tra lại kết quả giao dịch

Thực hiện lện POST:

POST  http://api.1pay.vn/bank-charging/service/v2

xác thực giao dịch đã được hoàn thành.

Tham số Mô tả
access_key Đại diện cho sản phẩm của merchant khai báo trong hệ thống 1pay.vn
command Mã lệnh nhận giá trị: get_transaction_detail
trans_ref Mã giao dịch
signature Chữ ký, merchant có thể sử dụng signature để kiểm soát an ninh.
Signature là một chuỗi string:
access_key=$access_key&command=$command&trans_ref=$trans_ref
được hmac bằng thuật toán SHA256

Là một chuỗi json có chứa các giá trị bao gồm

{"amount":"[giá trị giao dịch]","trans_status":"[trạng thái giao dịch]", "response_time":"[thời gian bắt đầu]", "response_message": "[thông báo kết quả giao dịch]", "response_code":"[kết quả giao dịch]", "order_info":"[mô tả hóa đơn]","order_id":"[Mã hóa đơn]","trans_ref":"[mã số giao dịch]", "request_time":"[thời gian hoàn thành giao dịch]","order_type":"ND"}

Trong đó

Kết quả giao dịch Mô tả
00 Giao dịch thành công.
01 Ngân hàng từ chối thanh toán: thẻ/tài khoản bị khóa.
02 Thông tin thẻ không hợp lệ.
03 Thẻ hết hạn.
04 Lỗi người mua hàng: Quá số lần cho phép. (Sai OTP, quá hạn mức trong ngày).
05 Không có trả lời của Ngân hàng.
06 Lỗi giao tiếp với Ngân hàng.
07 Tài khoản không đủ tiền.
08 Lỗi dữ liệu.
09 Kiểu giao dịch không được hỗ trợ.
10 Giao dịch không thành công.
11 Giao dịch chưa xác thực OTP.
12 Giao dịch không thành công, số tiền giao dịch vượt hạn mức ngày.
13 Thẻ chưa đăng ký Internet Banking
14 Khách hàng nhập sai OTP.
15 Khách hàng nhập sai thông tin xác thực.
16 Khách hàng nhập sai tên chủ thẻ.
17 Khách hàng nhập sai số thẻ.
18 Khách hàng nhập sai ngày phát hành thẻ.
19 Khách hàng nhập sai ngày hết hạn thẻ.
20 OTP hết thời gian hiệu lực.
21 Quá thời gian thực hiện request (7 phút) hoặc OTP timeout.
22 Khách hàng chưa xác thực thông tin thẻ.
23 Thẻ không đủ điều kiện thanh toán (Thẻ/Tài khoản không hợp lệ hoặc TK không đủ số dư).
24 Giao dịch vượt quá hạn mức một lần thanh toán của ngân hàng.
25 Giao dịch vượt quá hạn mức của ngân hàng.
26 Giao dịch chờ xác nhận từ Ngân hàng.
27 Khách hàng nhập sai thông tin bảo mật thẻ.
28 Giao dịch không thành công do quá thời gian quy định.
29 Lỗi xử lý giao dịch tại hệ thống Ngân hàng.
99 Không xác định.

  File ProcessBank.java


package service;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONObject;

@WebServlet("/ProcessBank")
public class ProcessBank extends HttpServlet {
  private static final long serialVersionUID = 1L;
  private String payUrl="";

    public ProcessBank() {
        super();
    }
    
  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  }

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // Get param
    String soTien = request.getParameter("amount"); // >=10000vnd
    String orderId = request.getParameter("order_id");
    String orderInfo = request.getParameter("order_info");
    String accKey = ""; // access key do 1pay cung cap
    String command = "request_transaction";
    String returnUrl = "http://localhost:8080/TestBank/CommitRequest";
    try {
      sendPost(accKey, soTien, command, orderId, orderInfo, returnUrl);
      response.sendRedirect(payUrl);
    } catch (Exception e) {
      e.printStackTrace();
    }
    
  }
  
  private void sendPost(String access_key, String amount, String command,
      String order_id, String order_info, String return_url) throws Exception {
    String url = "http://api.1pay.vn/bank-charging/service/v2";
    String secretKey =""; // secret key do 1pay cung cap
    String signature = generateSignature(access_key, amount, command, order_id, order_info, return_url, secretKey);
    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    con.setRequestMethod("POST");
    con.setRequestProperty("User-Agent", "Mozilla/5.0");
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
    String urlParameters = "access_key="+access_key+"&amount="+amount+"&command="+command+"&order_id="+order_id
        +"&order_info="+order_info+"&return_url="+return_url+"&signature="+signature;
    
    con.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(urlParameters);
    wr.flush();
    wr.close();
    
    int responseCode = con.getResponseCode();
    System.out.println("URL : " + url);
    System.out.println("Post parameters : " + urlParameters);
    System.out.println("Response Code : " + responseCode);
    BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
    String inputLine;
    StringBuffer response  = new StringBuffer();
    while ((inputLine = in.readLine())!=null) {
      response.append(inputLine);
    }
    in.close();
    String json = response.toString();
    System.out.println(json);
    JSONObject jObj = new JSONObject(json);
    payUrl = jObj.getString("pay_url");
    System.out.println("\nRedirect to URL:"+payUrl);
  }
  
  public String generateSignature(String access_key, String amount,
      String command, String order_id, String order_info,
      String return_url, String secret) {
    String urlParameters = "";
    String signature = "";
    if ((access_key != null) && (amount != null) && (command != null)
        && (order_id != null) && (order_info != null)
        && (return_url != null)) {
      urlParameters = "access_key="+access_key+"&amount="+amount+"&command="+command+"&order_id="+order_id
          +"&order_info="+order_info+"&return_url="+return_url;
      signature = hmacDigest(urlParameters, secret, "HmacSHA256");
      System.out.println("Signature:"+signature);
    }
    return signature;
  }
  
  public static String hmacDigest(String msg, String keyString, String algo) {
    String digest = "";
    try {
      if (keyString != null && keyString.length() > 0) {
        SecretKeySpec key = new SecretKeySpec(
            (keyString).getBytes("UTF-8"), algo);
        Mac mac = Mac.getInstance(algo);
        mac.init(key);
        byte[] bytes = mac.doFinal(msg.getBytes("ASCII"));
        StringBuffer hash = new StringBuffer();
        for (int i = 0; i < bytes.length; i++) {
          String hex = Integer.toHexString(0xFF & bytes[i]);
          if (hex.length() == 1) {
            hash.append('0');
          }
          hash.append(hex);
        }
        digest = hash.toString();
      }
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    } catch (InvalidKeyException e) {
      e.printStackTrace();
    }
    return digest;
  }

}
                                    

  File CommitRequest.java

  
package service;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.json.JSONObject;

@WebServlet("/CommitRequest")
public class CommitRequest extends HttpServlet {
  private static final long serialVersionUID = 1L;
  private String json ="";

    public CommitRequest() {
        super();
    }

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // Get param
    String accKey = request.getParameter("access_key");
    String command = "close_transaction";
    String trans_ref = request.getParameter("trans_ref");
        String responseCode = request.getParameter("response_code");
        if (responseCode.equals("00")) {
          try {
              sendPost(accKey, command, trans_ref);

              JSONObject jObj = new JSONObject(json);
              String response_code = jObj.getString("response_code");

              if (response_code.equals("00")) {
                  // Merchant xử lý dữ liệu và lưu lại log giao dịch tại đây.
              } else {
                  // Thông tin không hợp lệ, log lại để theo dõi.
              }
          } catch (Exception e) {
              e.printStackTrace();
          }
        }
  }

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  }
  
  public static String hmacDigest(String msg, String keyString, String algo) {
    String digest = "";
    try {
      if (keyString != null && keyString.length() > 0) {
        SecretKeySpec key = new SecretKeySpec(
            (keyString).getBytes("UTF-8"), algo);
        Mac mac = Mac.getInstance(algo);
        mac.init(key);
        byte[] bytes = mac.doFinal(msg.getBytes("ASCII"));
        StringBuffer hash = new StringBuffer();
        for (int i = 0; i < bytes.length; i++) {
          String hex = Integer.toHexString(0xFF & bytes[i]);
          if (hex.length() == 1) {
            hash.append('0');
          }
          hash.append(hex);
        }
        digest = hash.toString();
      }
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    } catch (InvalidKeyException e) {
      e.printStackTrace();
    }
    return digest;
  }
  
  public String generateSignature(String access_key, String command,
      String trans_ref, String secret) {
    String urlParameters = "";
    String signature = "";
    if ((access_key != null) && (command != null) && (trans_ref != null)) {
      urlParameters = "access_key="+access_key+"&command="+command+"&trans_ref="+trans_ref;
      signature = hmacDigest(urlParameters, secret, "HmacSHA256");
      System.out.println("Signature:" + signature);
    }
    return signature;
  }
  
  private void sendPost(String access_key, String command, String trans_ref)
      throws Exception {
    String url = "http://api.1pay.vn/bank-charging/service/v2";
    String secretKey = ""; // secret key do 1pay cung cap
    String signature = generateSignature(access_key, command, trans_ref,
        secretKey);
    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();
    con.setRequestMethod("POST");
    con.setRequestProperty("User-Agent", "Mozilla/5.0");
    con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
    String urlParameters = "access_key="+access_key+"&command="+command+"&trans_ref="+trans_ref+"&signature="+signature;

    con.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(urlParameters);
    wr.flush();
    wr.close();

    int responseCode = con.getResponseCode();
    System.out.println("URL : " + url);
    System.out.println("Post parameters : " + urlParameters);
    System.out.println("Response Code : " + responseCode);
    BufferedReader in = new BufferedReader(new InputStreamReader(
        con.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();
    while ((inputLine = in.readLine()) != null) {
      response.append(inputLine);
    }
    in.close();
    json = response.toString();
    System.out.println(json);
  }

}
                                    
  File form_bank.php
    
   <form method="post" action="bank.php" id="form">
<table width="100%" border="0" cellpadding="3" cellspacing="3">
    <tr>
      <td colspan="2" align="center">
          <h2>Bank Charging</h2>
        </td> 
    </tr>
   
    <tr>
      
      <td align="right">
          Amount :
        </td>
        <td>
                <input type="number" id="amount" name="amount" placeholder="=> 10.000"/>
        </td>
    </tr>
    <tr><td align="right">
          Order id :
        </td>
        <td>
        <!--Please INSERT value for order_id -->
            <input type="text" value="" readonly id="order_id" name="order_id" placeholder="<= 50 characters " />
        </td>
    </tr>
    <tr><td align="right">
          Import order info :
        </td>
        <td>
          <input type="text" id="order_info" name="order_info" placeholder=" order info " />
        </td>
    </tr>
     <tr>
      <td align="right">
          
        </td>
        <td>
          <input type="submit" value="Submit" />
        </td>
    </tr>
</table>
</form>
                                              
  File bank.php
    
   function execPostRequest($url, $data)
   {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
   }

   $access_key = "";           // require your access key from 1pay
   $secret = "";               // require your secret key from 1pay
   $return_url = "https://localhost/bank_result.php"; 

   $command = 'request_transaction';
   $amount = $_POST['amount'];   // >10000
   $order_id = $_POST['order_id'];  
   $order_info = $_POST['order_info']; 
   
   $data = "access_key=".$access_key."&amount=".$amount."&command=".$command."&order_id=".$order_id
   ."&order_info=".$order_info."&return_url=".$return_url;
   $signature = hash_hmac("sha256", $data, $secret);
    $data1 = "access_key=".$access_key."&amount=".$amount."&command=".$command."&order_id=".urlencode($order_id)
   ."&order_info=".urlencode($order_info)."&return_url=".urlencode($return_url);
   $data1.= "&signature=".$signature;
   $json_bankCharging = execPostRequest('http://api.1pay.vn/bank-charging/service/v2', $data);
    //Ex: {"pay_url":"http://api.1pay.vn/bank-charging/sml/nd/order?token=LuNIFOeClp9d8SI7XWNG7O%2BvM8GsLAO%2BAHWJVsaF0%3D", "status":"init", "trans_ref":"16aa72d82f1940144b533e788a6bcb6"}
   $decode_bankCharging=json_decode($json_bankCharging,true);  // decode json
   $pay_url = $decode_bankCharging["pay_url"];
   header("Location: $pay_url");
                                              
  File bank_result.php
      
  function execPostRequest($url, $data1)
  {
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, $url);
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_POSTFIELDS, $data1);
   curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   $result = curl_exec($ch);
   curl_close($ch);
   return $result;
  } 
        //Ex url: http://api.1pay.vn/bank-charging/bank_result.jsp/v2?access_key=l6apnlfseia0ooa12gwp&amount=10000&card_name=Ng%C3%A2n+h%C3%A0ng+TMCP+Ngo%E1%BA%A1i+th%C6%B0%C6%A1ng+Vi%E1%BB%87t+Nam&card_type=VCB&order_id=001&order_info=test+dich+vu&order_type=ND&request_time=2014-12-30T17%3A50%3A11Z&response_code=00&response_message=Giao+dich+thanh+cong&response_time=2014-12-30T17%3A52%3A12Z&signature=eb7aef260a18c835582964e840d63f68b9f84d9704bac7b16c8ff7f1ac9bd0d8&trans_ref=44df289349c74a7d9690ad27ed217094&trans_status=finish
  
  
  $trans_ref = isset($_GET["trans_ref"]) ? $_GET["trans_ref"] : NULL;
  $response_code = isset($_GET["response_code"]) ? $_GET["response_code"] : NULL;

  $access_key = "";           // require your access key from 1pay
  $secret = "";               // require your secret key from 1pay
  $return_url = "https://localhost/bank_result.php"; // returl url

  if($response_code == "00")
  {
   $command = "close_transaction";

   $data = "access_key=".$access_key."&command=".$command."&trans_ref=".$trans_ref;
   $signature = hash_hmac("sha256", $data, $secret);
   $data.= "&signature=" . $signature;
   
   $json_bankCharging = execPostRequest('http://api.1pay.vn/bank-charging/service/v2', $data);

   $decode_bankCharging=json_decode($json_bankCharging,true);  // decode json
   // Ex: {"amount":10000,"trans_status":"close","response_time": "2014-12-31T00:52:12Z","response_message":"Giao dịch thành công","response_code":"00","order_info":"test dich vu","order_id":"001","trans_ref":"44df289349c74a7d9690ad27ed217094", "request_time":"2014-12-31T00:50:11Z","order_type":"ND"}
   
   $response_message = $decode_bankCharging["response_message"];
   $response_code = $decode_bankCharging["response_code"];
   $amount = $decode_bankCharging["amount"];

   if($response_code == "00")
   {
    echo $response_message."-".$amount;
   }
            else
                echo $response_message;
  }
  else
   echo $response_message;