流程參考《實物商品交易服務集成技術文檔2.0.pdf》
網關地址http://paytest.rupeng.cn/AliPay/PayGate.ashx
網關參數說明:
partner:商戶編號
return_url:回調商戶地址(經過商戶網站的哪一個頁面來通知支付成功!)
subject:商品名稱
body:商品描述
out_trade_no:訂單號!!!(由商戶網站生成,支付寶不確保正確性,只負責轉發。)
total_fee:總金額
seller_email:賣家郵箱
sign:數字簽名。
爲按順序鏈接 (總金額、 商戶編號、訂單號、商品名稱、商戶密鑰)的MD5值。
重定向的url("http://paytest.rupeng.cn/AliPay/PayGate.ashx?partner="
+ partner + "&return_url=" + Server.UrlEncode(return_url)
+ "&subject="
+ Server.UrlEncode(subject)
+ "&body=" + Server.UrlEncode(body)
+ "&out_trade_no=" + out_trade_no
+ "&total_fee=" + total_fee + "&seller_email="
+ Server.UrlEncode(seller_email) + "&sign=" + sign)
回調商戶接口地址參數說明:
out_trade_no :訂單號。給PayGate.ashx傳過去的out_trade_no再傳回來
returncode :返回碼,字符串。ok爲支付成功,error爲支付失敗。
total_fee :支付金額
sign :數字簽名。爲按順序鏈接 (訂單號、返回碼、支付金額、商戶密鑰)爲新字符串的MD5值。
(每一個商戶的密鑰是商戶本身設置的,每一個人的都不同,只有支付寶和商戶知道,因此沒法猜想、假冒)
MD5算法要用如下的,大小寫都不能錯:
/// <summary>
/// 獲得字符串的MD5散列值
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public static String GetMD5(this 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());
}
return s.ToString();
}html
/// <summary>算法
/// 付款
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Unnamed1_Click(object sender, EventArgs e)
{
string partner = "2";//商戶編號
string return_url = "http://localhost:5059/ReturnPage.ashx";//回調商戶地址(經過商戶網站的哪一個頁面來通知支付成功!)
string subject = "飛機"; //商品名稱
string body = "很是大的飛機"; //商品描述
string out_trade_no = "aaabbb888"; //訂單號!(由商戶網站生成,支付寶不確保正確性,只負責轉發。)
string total_fee = "9"; //總金額
string seller_email = "719862911@qq.com";//賣家郵箱
//商戶密鑰 abc123//不要寫到url中
//爲按順序鏈接 (總金額、 商戶編號、訂單號、商品名稱、商戶密鑰)的MD5值。
string sign = CommonHelper.getMD5Str(total_fee + partner + out_trade_no + subject + "abc123");//數字簽名。
Response.Redirect("http://paytest.rupeng.cn/AliPay/PayGate.ashx?partner="
+ partner + "&return_url=" + Server.UrlEncode(return_url) + "&subject=" + Server.UrlEncode(subject) + "&body=" + Server.UrlEncode(body) + "&out_trade_no=" + out_trade_no + "&total_fee=" + total_fee + "&seller_email=" + Server.UrlEncode(seller_email) + "&sign=" + sign);ide
}網站
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/html";
context.Response.Write("支付寶消息返回到了個人商戶網站的這個頁面\r\n");
string out_trade_no = context.Request["out_trade_no"];//訂單號。給PayGate.ashx傳過去的out_trade_no再傳回來
string returncode = context.Request["returncode"];//返回碼,字符串。ok爲支付成功,error爲支付失敗。
string total_fee = context.Request["total_fee"];//支付金額
string sign = context.Request["sign"];//支付寶端返回 的數字簽名
string MySign = CommonHelper.getMD5Str(out_trade_no + returncode + total_fee + "abc123");//爲按順序鏈接 (訂單號、返回碼、支付金額、商戶密鑰)爲新字符串的MD5值。
if (sign!=MySign)
{
//提交的數據 =驗證失敗
context.Response.Write("提交的數據 =驗證失敗");
return;
}
if (returncode=="ok")
{
context.Response.Write("支付成功");
}
else if (returncode == "error")
{
context.Response.Write("支付失敗");
}
}ui
轉載自:https://blog.csdn.net/u014297475/article/details/52419202this