分享

18.2.3 使用支付宝实现在线支付(3)

 androidHung 2014-10-17

18.2.3  使用支付宝实现在线支付(3)

3.获取支付成功后的返回信息

用户在使用支付宝付款后,跳转到的页面将不受网站的控制,而是转到支付宝或银行的验证页面。在付款成功之后,将返回到指定的页面中,实现的操作步骤如下所示。

(1)在网站中添加一个名称为Alipay_Return的Web窗体。

(2)在Web窗体中不需要添加任何的控件。进入代码窗口中,在Web窗体的Load事件下,添加获取返回数据信息的程序代码,其具体实现代码如下:

说明:如果需要按要求显示成功信息,也可以根据网站的需求和用户的需要设计获取支付成功信息的Web页面。

  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.     string alipayNotifyURL = "https:    //www.alipay.com/cooperate/  
  4.     gateway.do?";  
  5.     string key = "";                //partner 的对应交易安全校验码(必须填写)  
  6.     string _input_charset = "utf-8";  
  7.     string partner = "";            //partner合作伙伴id(必须填写)  
  8.     alipayNotifyURLalipayNotifyURL = alipayNotifyURL + "service=notify_verify" +   
  9.     "&partner=" + partner + "&notify_id=" + Request. QueryString[  
  10.     "notify_id"];  
  11.     //获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的  
  12.     string responseTxt = Get_Http(alipayNotifyURL, 120000);  
  13.     int i;  
  14.     NameValueCollection coll;  
  15.     coll = Request.QueryString;  
  16.     String[] requestarr = coll.AllKeys;  
  17.    //进行排序  
  18.    string[] Sortedstr = BubbleSort(requestarr);  
  19.    //构造待md5摘要字符串   
  20.    StringBuilder prestr = new StringBuilder();  
  21.    for (i = 0; i < Sortedstr.Length; i++)  
  22.    {  
  23.      if (Request.Form[Sortedstr[i]] != "" && Sortedstr[i] != "sign" &&   
  24.      Sortedstr[i] != "sign_type")  
  25.      {  
  26.          if (i == Sortedstr.Length - 1)  
  27.          {  
  28.              prestr.Append(Sortedstr[i] + "=" + Request.QueryString  
  29.              [Sortedstr[i]]);  
  30.          }  
  31.          else  
  32.          {  
  33.              prestr.Append(Sortedstr[i] + "=" + Request.QueryString  
  34.              [Sortedstr[i]] + "&");  
  35.          }  
  36.      }  
  37.     }  
  38.    prestr.Append(key);  
  39.    //生成Md5摘要  
  40.    string mysign = GetMD5(prestr.ToString(), _input_charset);  
  41.    string sign = Request.QueryString["sign"];  
  42.      if (mysign == sign && responseTxt == "true")     
  43.                                         //验证支付发过来的消息,签名是否正确  
  44.      {  
  45.         //更新自己数据库的订单语句,请自己填写一下  
  46.         Response.Write("success");      //返回给支付宝消息,成功  
  47.          //如果您申请了支付宝的购物券功能,请在返回的信息中不要做金额的判断,否则会校  
  48.            验通不过,出现调单。如果您需要获取买家所使用购物券的金额,请获取返回信息的             
  49.            这个字段discount的值,取绝对值,就是买家使用购物券的金额。即原订单的总金  
  50.            额=买家付款返回的金额total_fee +|discount|   
  51.       }  
  52.      else  
  53.      {  
  54.         Response.Write("fail");  
  55.      }  

【代码解析】代码中分别用到了GetMD5()、BubbleSort()和Get_Http()这3个方法,通过调用这3个方法返回支付成功的数据信息。

GetMD5()方法的具体实现代码如下:

  1. public static string GetMD5(string s, string _input_charset)  
  2. {  
  3.    /// <summary> 
  4.    /// 与ASP兼容的MD5加密算法  
  5.    /// </summary> 
  6.    MD5 md5 = new MD5CryptoServiceProvider();  
  7.    byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_ charset).  
  8.    GetBytes(s));  
  9.    StringBuilder sb = new StringBuilder(32);  
  10.    for (int i = 0; i < t.Length; i++)  
  11.    {  
  12.       sb.Append(t[i].ToString("x").PadLeft(2, '0'));  
  13.    }  
  14.    return sb.ToString();            //返回数值  

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多