.net實現支付寶在線支付

 流程參考《實物商品交易服務集成技術文檔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

相關文章
相關標籤/搜索