zoukankan      html  css  js  c++  java
  • .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();
            }

      /// <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);

            }

      public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/html";
                context.Response.Write("支付宝消息返回到了我的商户网站的这个页面 ");


                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("支付失败");
                }
            }

    转载自:https://blog.csdn.net/u014297475/article/details/52419202

  • 相关阅读:
    GO语言(golang)官方网站!
    Android官方网站!
    如何使用Gmail的别名功能?
    函数指针
    单例 ------ JAVA实现
    网络通信方案 ------ 以太网通信软硬件实现方案
    nginx的启动和关闭
    FineReport软件
    nginx的MainLine version、Stable version、Legacy versions
    linux常用命令
  • 原文地址:https://www.cnblogs.com/yoga21/p/9225041.html
Copyright © 2011-2022 走看看