在線支付(模擬支付寶)

    簡介:爲了減少學習成本,這裏使用第三方的一個支付寶模擬平臺!完成在線支付的學習。在真實使用支付寶接口對接時,原理基本都差很少!下面開始正文部分html

測試平臺網址:http://paytest.rupeng.cn/服務器

 

    注:這裏只是一個模擬支付寶的虛擬平臺,數據並不是真實數據。也不是真正的支付寶頁面。僅供學習測試在線支付接口時使用!post

一.接口文檔:學習

網關地址:http://paytest.rupeng.cn/AliPay/PayGate.ashx測試

網關參數說明:
partner:          商戶編號
return_url:      回調商戶地址(經過商戶網站的哪一個頁面來通知支付成功!)
subject:          商品名稱
body:             商品描述
out_trade_no:訂單號!!!(由商戶網站生成,支付寶不確保正確性,只負責轉發。)
total_fee:       總金額
seller_email:  賣家郵箱
sign:             數字簽名。爲按順序鏈接 總金額、 商戶編號、訂單號、商品名稱、商戶密鑰的MD5值。網站

回調商戶接口地址參數說明:url

out_trade_no:  訂單號。給PayGate.ashx傳過去的out_trade_no再傳回來
returncode:     返回碼,字符串。ok爲支付成功,error爲支付失敗。
total_fee:       支付金額
sign:             數字簽名。爲按順序鏈接 訂單號、返回碼、支付金額、商戶密鑰爲新字符串的MD5值。
spa

二.使用方法:code

1.客戶端html文件,提交獲取用戶輸入的數據orm

 

<body>
    <form action="payhandler.ashx" method="post">
    <label for="tbname">商品名稱</label><input type="text" name="tbname" id="tbname" /><br />
    <label for="tbms" >商品描述</label><input type="text" name="tbms" id="tbms" /><br />
    <label for="tbnum">訂單號</label><input type="text" name="tbnum" id="tbnum" /><br />
    <label for="tbmoney">總金額</label><input type="text" name="tbmoney" id="tbmoney" /><br />
    <label for="tbmail">賣家郵箱</label><input type="text" name="tbmail" id="tbmail" /><br />        
    <input type="submit" id="btnpay" value="支付" />
        </form>
</body>

2.這裏的參數經過表單提交服務器,服務器獲取這些數據。處理好參數向支付寶發送請求

 

 1 public void ProcessRequest(HttpContext context)
 2 {
 3     context.Response.ContentType = "text/plain";
 4     string partner = "2";
 5     string subject = context.Request["tbname"];//商品名稱
 6     string body = context.Request["tbms"];       //商品描述
 7     string out_trade_no = context.Request["tbnum"];//訂單號
 8     string total_fee =context.Request["tbmoney"]; //總金額
 9     string seller_email = context.Request["tbmail"];//賣家郵箱
10     string return_url = "http://localhost:13702/returnHandler.ashx";//回調地址
11     string key = "abc123";
12     string sign = CalcMD5(total_fee + partner + out_trade_no + subject + key);
13     //重定向到支付的頁面
14     context.Response.Redirect("http://paytest.rupeng.cn/AliPay/PayGate.ashx?partner=" + partner + "&return_url=" + context.Server.UrlEncode(return_url) + "&subject=" + context.Server.UrlEncode(subject) +
15         "&body=" + context.Server.UrlEncode(body) + "&out_trade_no=" + context.Server.UrlEncode(out_trade_no) + "&total_fee=" + total_fee + "&seller_email=" + context.Server.UrlEncode(seller_email)
16         + "&sign=" + sign);     
17 }

3.支付平臺處理請求,當看到這個界面時,表示請求的參數一切正常,能夠完成支付了

   注:這裏的用戶名密碼,沒有作任何判斷,可任意輸入

4.在回掉地址中,完成用戶支付以後的邏輯代碼

 

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "text/plain";
    string out_trade_no = context.Request["out_trade_no"];//訂單號
    string returncode = context.Request["returncode"];       //返回碼
    string total_fee = context.Request["total_fee"];//支付金額
    string sign = context.Request["sign"]; //總金額
    if(sign!=CalcMD5(out_trade_no+returncode+total_fee+"abc123"))//防止用戶隨意篡改數據
    {
        context.Response.Write("數據校驗失敗");
        return;
    }
    if (returncode == "ok")
    {
        context.Response.Write("支付成功,支付的金額爲" + total_fee);
    }
    else
    {
        Console.WriteLine("支付失敗");
    }
}
相關文章
相關標籤/搜索