Thursday, March 1, 2012

Integrated NganLuong to website


Phần 1: Hướng dẫn đăng ký tài khoản và Merchant Site NganLuong.vn
Bước 1: đăng ký tài khoản ngân lượng
Bước 2: kích hoạt tài khoản

Bước 3: sau khi nhấp vào link kích hoạt yêu cầu nhập mã kích hoạt mà ngân lượng gửi vào số điện thoại cho bạn

Kích hoạt thành công
Bước 4: sau khi kích hoạt thành công ví điện tử bạn hãy đăng nhập
Sau khi đăng nhập bạn tiến hành tích hợp thanh toán

Bước 5: bạn chọn vào tích hợp nâng cao | và chọn vào đăng ký merchant Site
Bước 6: điền đầy đủ thông tin của bạn
Giao diện đăng ký thành công xuất hiện nếu không có lỗi

Phần 2: Hướng dẫn lập trình tích hợp ngân lượng vào website của bạn (với sourcecode có sẵn)
Bước 1: tạo 1 class PaymentController.cs
Bạn copy hết đoạn code dưới đây vào trong class (phần chữ in nghiêng)
using System;
using System.Collections.Generic;

using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.IO;
using System.Collections;

/// <summary>
/// Summary description for DataProvider
/// </summary>
public class PaymentController
{
    public PaymentController()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    private String nganluong_url = "https://www.nganluong.vn/checkout.php";

    private String merchant_site_code = "000-000";    //thay mã merchant site mà bạn đã đăng ký vào đây

    private String secure_pass = "xxx-xxx";     //thay mật khẩu giao tiếp giữa website của bạn với NgânLượng.vn mà bạn đã đăng ký vào đây
    #region GetMD5Hash
    public String GetMD5Hash(String input)
    {

        System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider();

        byte[] bs = System.Text.Encoding.UTF8.GetBytes(input);

        bs = x.ComputeHash(bs);

        System.Text.StringBuilder s = new System.Text.StringBuilder();

        foreach (byte b in bs)
        {

            s.Append(b.ToString("x2").ToLower());

        }

        String md5String = s.ToString();

        return md5String;
    }
    #endregion GetMD5Hash
    #region BuildCheckoutUrl
    public String BuildCheckoutUrl(String return_url, String receiver, String transaction_info, String order_code, String price)
    {
        // Tạo biến secure code
        String secure_code = "";

        secure_code += this.merchant_site_code;

        secure_code += " " + HttpUtility.UrlEncode(return_url).ToLower();

        secure_code += " " + receiver;

        secure_code += " " + transaction_info;

        secure_code += " " + order_code;

        secure_code += " " + price;

        secure_code += " " + this.secure_pass;

        // Tạo mảng băm
        Hashtable ht = new Hashtable();

        ht.Add("merchant_site_code"this.merchant_site_code);

        ht.Add("return_url"HttpUtility.UrlEncode(return_url).ToLower());

        ht.Add("receiver", receiver);

        ht.Add("transaction_info", transaction_info);

        ht.Add("order_code", order_code);

        ht.Add("price", price);

        ht.Add("secure_code"this.GetMD5Hash(secure_code));

        // Tạo url redirect
        String redirect_url = this.nganluong_url;

        if (redirect_url.IndexOf("?") == -1)
        {
            redirect_url += "?";
        }
        else if (redirect_url.Substring(redirect_url.Length - 1, 1) != "?" && redirect_url.IndexOf("&") == -1)
        {
            redirect_url += "&";
        }

        String url = "";

        // Duyệt các phần tử trong mảng băm ht1 để tạo redirect url
        IDictionaryEnumerator en = ht.GetEnumerator();

        while (en.MoveNext())
        {
            if (url == "")
                url += en.Key.ToString() + "=" + en.Value.ToString();
            else
                url += "&" + en.Key.ToString() + "=" + en.Value.ToString();
        }

        String rdu = redirect_url + url;

        return rdu;
    }
    #endregion BuildCheckoutUrl
    #region VerifyPaymentUrl
    public Boolean VerifyPaymentUrl(String transaction_info, String order_code, String price, String payment_id, String payment_type, Stringerror_text, String secure_code)
    {
        // Tạo mã xác thực từ chủ web
        String str = "";

        str += " " + transaction_info;

        str += " " + order_code;

        str += " " + price;

        str += " " + payment_id;

        str += " " + payment_type;

        str += " " + error_text;

        str += " " + this.merchant_site_code;

        str += " " + this.secure_pass;

        // Mã hóa các tham số
        String verify_secure_code = "";

        verify_secure_code = this.GetMD5Hash(str);

        // Xác thực mã của chủ web với mã trả về từ nganluong.vn
        if (verify_secure_code == secure_code) return true;

        return false;
    }
    #endregion VerifyPaymentUrl
}

Bước 2: trong button xác nhận đặt hàng bạn đưa đoạn code này vào
//bạn nên mã hóa mã hóa đơn
Session["OrderID"] = SecurityProvider.Encrypt(lblMaHoaDon.Text, true);
Gọi hàm ThanhToanNganLuong();
ThanhToanNganLuong();

#region thanh toan ngan luong

    private void ThanhToanNganLuong()
    {
        PaymentController payment = new PaymentController();
        if (string.IsNullOrEmpty(Request.Form["submit"]))
        {
            //khai báo url trả về
            string return_url = "http://aspnet.webvn.biz/DatHangThanhCong.aspx?order_code=" + Session["OrderID"];
            //khai báo địa chỉ email nhận tiền
            string receiver = "quochung211187@gmail.com";
            //khai báo thông tin giao dịch
            this.Response.Write("Kết quả thanh toán không hợp lệ");
            string transaction_info = "";
            //khai báo mã sản phẩm, mã đơn hàng, mã giỏ hàng
            string order_code = SecurityProvider.Encrypt(lblMaHoaDon.Text, true);
            //khai báo tổng số tiền thanh toán
            string price = litTongThanhTien.Text;
            //gửi thông tin giao dịch đến nganluong.vn

            string url = payment.BuildCheckoutUrl(return_url, receiver, transaction_info, order_code, price);
            Response.Redirect(url);

        }

        if (this.Request.QueryString["process"] == "complete")
        {
            //lấy thông tin giao dịch
            string transaction_info = this.Request.QueryString["transaction_info"];
            //lấy mã sản phẩm, mã đơn hàng, giỏ hàng giao dịch
            string order_code = this.Request.QueryString["order_code"];
            //lấy tổng số tiền thanh toán
            string price = this.Request.QueryString["price"];
            //lấy mã giao dịch thanh toán tại nganluong.vn
            string payment_id = this.Request.QueryString["payment_id"];
            //lấy loại giao dịch tại nganluong.vn (1=thanh toán ngay, 2=thanh toán tạm giữ)
            string payment_type = this.Request.QueryString["payment_type"];
            //lấy thông tin chi tiết về lỗi trong quá trình thanh toán
            string error_text = this.Request.QueryString["error_text"];
            //lấy mã kiểm tra tính hợp lệ của đầu vào
            string secure_code = this.Request.QueryString["secure_code"];
            //xử lý đầu vào

            bool veri = payment.VerifyPaymentUrl(transaction_info, order_code, price, payment_id, payment_type, error_text, secure_code);
            if (veri == false)
            {
                //tham số gửi về không hợp lệ, có sự can thiệp từ bên ngoài
                this.Response.Write("Kết quả thanh toán không hợp lệ");
            }
            else
            {
                if (!string.IsNullOrEmpty(error_text))
                {
                    //có lỗi trong quá trình thanh toán
                    Response.Write("Có lỗi: " + error_text + "! Hãy thực hiện lại!");
                }
                else
                {
                    //thanh toán thành công
                    this.Response.Write("Thanh toán thành công");
                }

            }



        }
    }
    #endregion thanh toan ngan luong
Bước 3: build project và tiến hành thử nghiệm thanh toán

Phần 3: Tiến hành thử nghiệm thanh toán

Bước 1: Chọn xác nhận đặt hàng với nganluong
Bước 2: có 2 lựa chọn thanh toán
Thanh toán tạm giữ và thanh toán toán ngay
ü      Thanh toán tạm giữ:
Điền mã xác nhận mà ngân lượng gửi về điện thoại cho bạn

Tài khoản của người bán khi nhận số tiền thanh toán từ người mua sẽ được tạm giữ

Người bán sẽ tiến hành xác nhận giao hàng
 Người mua tiếp tục phê chuẩn đã nhận được hàng khi đó tiền sẽ được nganluong xác nhận chuyển vào tài khoản người bán và người mua cũng nhận được mail thông báo

Người mua đăng nhập vào ngân lượng và chọn vào link phê chuẩn
Điền mã xác minh vào
Người bán sẽ kiểm tra lại và thấy kết quả giao dich thành công

ü      thanh toán toán ngay: trường hợp này  bạn nên cân nhắc và sau khi thanh toán tiền sẽ trực tiếp gửi vào tài khoản người bán

0 comments:

Post a Comment