|
|
- using System;
- using System.Collections.Generic;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Text;
-
- namespace WxPayAPI
- {
- /// <summary>
- /// 回调处理基类
- /// 主要负责接收微信支付后台发送过来的数据,对数据进行签名验证
- /// 子类在此类基础上进行派生并重写自己的回调处理过程
- /// </summary>
- public class Notify
- {
- public Page page {get;set;}
- public Notify(Page page)
- {
- this.page = page;
- }
-
- /// <summary>
- /// 接收从微信支付后台发送过来的数据并验证签名
- /// </summary>
- /// <returns>微信支付后台返回的数据</returns>
- public WxPayData GetNotifyData()
- {
- //接收从微信后台POST过来的数据
- System.IO.Stream s = page.Request.InputStream;
- int count = 0;
- byte[] buffer = new byte[1024];
- StringBuilder builder = new StringBuilder();
- while ((count = s.Read(buffer, 0, 1024)) > 0)
- {
- builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
- }
- s.Flush();
- s.Close();
- s.Dispose();
-
- Log.Info(this.GetType().ToString(), "Receive data from WeChat : " + builder.ToString());
-
- //转换数据格式并验证签名
- WxPayData data = new WxPayData();
- try
- {
- data.FromXml(builder.ToString());
- }
- catch(WxPayException ex)
- {
- //若签名错误,则立即返回结果给微信支付后台
- WxPayData res = new WxPayData();
- res.SetValue("return_code", "FAIL");
- res.SetValue("return_msg", ex.Message);
- Log.Error(this.GetType().ToString(), "Sign check error : " + res.ToXml());
- page.Response.Write(res.ToXml());
- page.Response.End();
- }
-
- Log.Info(this.GetType().ToString(), "Check sign success");
- return data;
- }
-
- //派生类需要重写这个方法,进行不同的回调处理
- public virtual void ProcessNotify()
- {
-
- }
- }
- }
|