18.2.3 使用支付宝实现在线支付(3)
3.获取支付成功后的返回信息
用户在使用支付宝付款后,跳转到的页面将不受网站的控制,而是转到支付宝或银行的验证页面。在付款成功之后,将返回到指定的页面中,实现的操作步骤如下所示。
(1)在网站中添加一个名称为Alipay_Return的Web窗体。
(2)在Web窗体中不需要添加任何的控件。进入代码窗口中,在Web窗体的Load事件下,添加获取返回数据信息的程序代码,其具体实现代码如下:
说明:如果需要按要求显示成功信息,也可以根据网站的需求和用户的需要设计获取支付成功信息的Web页面。
- protected void Page_Load(object sender, EventArgs e)
- {
- string alipayNotifyURL = "https: //www.alipay.com/cooperate/
- gateway.do?";
- string key = ""; //partner 的对应交易安全校验码(必须填写)
- string _input_charset = "utf-8";
- string partner = ""; //partner合作伙伴id(必须填写)
- alipayNotifyURLalipayNotifyURL = alipayNotifyURL + "service=notify_verify" +
- "&partner=" + partner + "¬ify_id=" + Request. QueryString[
- "notify_id"];
- //获取支付宝ATN返回结果,true是正确的订单信息,false 是无效的
- string responseTxt = Get_Http(alipayNotifyURL, 120000);
- int i;
- NameValueCollection coll;
- coll = Request.QueryString;
- String[] requestarr = coll.AllKeys;
- //进行排序
- string[] Sortedstr = BubbleSort(requestarr);
- //构造待md5摘要字符串
- StringBuilder prestr = new StringBuilder();
- for (i = 0; i < Sortedstr.Length; i++)
- {
- if (Request.Form[Sortedstr[i]] != "" && Sortedstr[i] != "sign" &&
- Sortedstr[i] != "sign_type")
- {
- if (i == Sortedstr.Length - 1)
- {
- prestr.Append(Sortedstr[i] + "=" + Request.QueryString
- [Sortedstr[i]]);
- }
- else
- {
- prestr.Append(Sortedstr[i] + "=" + Request.QueryString
- [Sortedstr[i]] + "&");
- }
- }
- }
- prestr.Append(key);
- //生成Md5摘要
- string mysign = GetMD5(prestr.ToString(), _input_charset);
- string sign = Request.QueryString["sign"];
- if (mysign == sign && responseTxt == "true")
- //验证支付发过来的消息,签名是否正确
- {
- //更新自己数据库的订单语句,请自己填写一下
- Response.Write("success"); //返回给支付宝消息,成功
- //如果您申请了支付宝的购物券功能,请在返回的信息中不要做金额的判断,否则会校
- 验通不过,出现调单。如果您需要获取买家所使用购物券的金额,请获取返回信息的
- 这个字段discount的值,取绝对值,就是买家使用购物券的金额。即原订单的总金
- 额=买家付款返回的金额total_fee +|discount|
- }
- else
- {
- Response.Write("fail");
- }
- }
【代码解析】代码中分别用到了GetMD5()、BubbleSort()和Get_Http()这3个方法,通过调用这3个方法返回支付成功的数据信息。
GetMD5()方法的具体实现代码如下:
- public static string GetMD5(string s, string _input_charset)
- {
- /// <summary>
- /// 与ASP兼容的MD5加密算法
- /// </summary>
- MD5 md5 = new MD5CryptoServiceProvider();
- byte[] t = md5.ComputeHash(Encoding.GetEncoding(_input_ charset).
- GetBytes(s));
- StringBuilder sb = new StringBuilder(32);
- for (int i = 0; i < t.Length; i++)
- {
- sb.Append(t[i].ToString("x").PadLeft(2, '0'));
- }
- return sb.ToString(); //返回数值
- }
联系客服