protectedvoidPage_Load(objectsender, EventArgs e)
{try{stringip=GetWebClientIp();//获取客户端IPString xmlData=GetPostStr();//获取请求数据DBHelper.WriteLog("WX-Callback","xmlData:"+ xmlData, ip);if(String.IsNullOrWhiteSpace(xmlData))
{this.Response.Write("请求数据不能为空!");//返回微信服务器return;
}//把数据重新返回给客户端DataSet ds=newDataSet();
StringReader stram=newStringReader(xmlData);
XmlTextReader datareader=newXmlTextReader(stram);
ds.ReadXml(datareader);if(ds.Tables[0].Rows[0]["return_code"].ToString()=="SUCCESS")
{stringwx_appid="";//微信开放平台审核通过的应用APPIDstringwx_mch_id="";//微信支付分配的商户号stringwx_nonce_str="";//随机字符串,不长于32位stringwx_sign="";//签名,详见签名算法stringwx_result_code="";//SUCCESS/FAILstringwx_return_code="";stringwx_openid="";//用户在商户appid下的唯一标识stringwx_is_subscribe="";//用户是否关注公众账号,Y-关注,N-未关注,仅在公众账号类型支付有效stringwx_trade_type="";//APPstringwx_bank_type="";//银行类型,采用字符串类型的银行标识,银行类型见银行列表stringwx_fee_type="";//货币类型,符合ISO4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型stringwx_transaction_id="";//微信支付订单号stringwx_out_trade_no="";//商户系统的订单号,与请求一致。stringwx_time_end="";//支付完成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。其他详见时间规则intwx_total_fee=-1;//订单总金额,单位为分intwx_cash_fee=-1;//现金支付金额订单现金支付金额,详见支付金额#region数据解析,注意signstr组合排序,从小到大排列,最后添加key密钥//列 是否存在stringsignstr="";//需要前面的字符串//wx_appidif(ds.Tables[0].Columns.Contains("appid"))
{
wx_appid=ds.Tables[0].Rows[0]["appid"].ToString();if(!string.IsNullOrEmpty(wx_appid))
{
signstr +="appid="+ wx_appid;
}
}//wx_bank_typeif(ds.Tables[0].Columns.Contains("bank_type"))
{
wx_bank_type=ds.Tables[0].Rows[0]["bank_type"].ToString();if(!string.IsNullOrEmpty(wx_bank_type))
{
signstr +="&bank_type="+ wx_bank_type;
}
}//wx_cash_feeif(ds.Tables[0].Columns.Contains("cash_fee"))
{
wx_cash_fee=Convert.ToInt32(ds.Tables[0].Rows[0]["cash_fee"].ToString());
signstr +="&cash_fee="+ wx_cash_fee;
}//wx_fee_typeif(ds.Tables[0].Columns.Contains("fee_type"))
{
wx_fee_type=ds.Tables[0].Rows[0]["fee_type"].ToString();if(!string.IsNullOrEmpty(wx_fee_type))
{
signstr +="&fee_type="+ wx_fee_type;
}
}//wx_is_subscribeif(ds.Tables[0].Columns.Contains("is_subscribe"))
{
wx_is_subscribe=ds.Tables[0].Rows[0]["is_subscribe"].ToString();if(!string.IsNullOrEmpty(wx_is_subscribe))
{
signstr +="&is_subscribe="+ wx_is_subscribe;
}
}//wx_mch_idif(ds.Tables[0].Columns.Contains("mch_id"))
{
wx_mch_id=ds.Tables[0].Rows[0]["mch_id"].ToString();if(!string.IsNullOrEmpty(wx_mch_id))
{
signstr +="&mch_id="+ wx_mch_id;
}
}//wx_nonce_strif(ds.Tables[0].Columns.Contains("nonce_str"))
{
wx_nonce_str=ds.Tables[0].Rows[0]["nonce_str"].ToString();if(!string.IsNullOrEmpty(wx_nonce_str))
{
signstr +="&nonce_str="+ wx_nonce_str;
}
}//wx_openidif(ds.Tables[0].Columns.Contains("openid"))
{
wx_openid=ds.Tables[0].Rows[0]["openid"].ToString();if(!string.IsNullOrEmpty(wx_openid))
{
signstr +="&openid="+ wx_openid;
}
}//wx_out_trade_noif(ds.Tables[0].Columns.Contains("out_trade_no"))
{
wx_out_trade_no=ds.Tables[0].Rows[0]["out_trade_no"].ToString();if(!string.IsNullOrEmpty(wx_out_trade_no))
{
signstr +="&out_trade_no="+ wx_out_trade_no;
}
}//wx_result_codeif(ds.Tables[0].Columns.Contains("result_code"))
{
wx_result_code=ds.Tables[0].Rows[0]["result_code"].ToString();if(!string.IsNullOrEmpty(wx_result_code))
{
signstr +="&result_code="+ wx_result_code;
}
}//wx_return_codeif(ds.Tables[0].Columns.Contains("return_code"))
{
wx_return_code=ds.Tables[0].Rows[0]["return_code"].ToString();if(!string.IsNullOrEmpty(wx_return_code))
{
signstr +="&return_code="+ wx_return_code;
}
}//wx_signif(ds.Tables[0].Columns.Contains("sign"))
{
wx_sign=ds.Tables[0].Rows[0]["sign"].ToString();
}//wx_time_endif(ds.Tables[0].Columns.Contains("time_end"))
{
wx_time_end=ds.Tables[0].Rows[0]["time_end"].ToString();if(!string.IsNullOrEmpty(wx_time_end))
{
signstr +="&time_end="+ wx_time_end;
}
}//wx_total_feeif(ds.Tables[0].Columns.Contains("total_fee"))
{
wx_total_fee=Convert.ToInt32(ds.Tables[0].Rows[0]["total_fee"].ToString());
signstr +="&total_fee="+ wx_total_fee;
}//wx_trade_typeif(ds.Tables[0].Columns.Contains("trade_type"))
{
wx_trade_type=ds.Tables[0].Rows[0]["trade_type"].ToString();if(!string.IsNullOrEmpty(wx_trade_type))
{
signstr +="&trade_type="+ wx_trade_type;
}
}//wx_transaction_idif(ds.Tables[0].Columns.Contains("transaction_id"))
{
wx_transaction_id=ds.Tables[0].Rows[0]["transaction_id"].ToString();if(!string.IsNullOrEmpty(wx_transaction_id))
{
signstr +="&transaction_id="+ wx_transaction_id;
}
}#endregion//追加key 密钥signstr +="&key="+ System.Web.Configuration.WebConfigurationManager.AppSettings["wx_key"].ToString();stringmd5=System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(signstr,"MD5").ToUpper();//签名正确if(wx_sign==md5)
{//签名正确,更新本地数据库订单状态boolsuccess=DBHelper.UpdateOrderState(wx_out_trade_no, wx_transaction_id, wx_total_fee);if(success)
{
DBHelper.WriteLog("WX-Callback","回调更改订单状态成功!", ip);this.Response.Write(this.CreateResult(true,""));//返回微信服务器}else{stringrefData="out_trade_no="+ wx_out_trade_no +",total_fee="+ wx_total_fee.ToString();
DBHelper.WriteLog("WX-Callback","回调更改订单状态失败!"+ refData, ip);this.Response.Write(this.CreateResult(false,"更改订单状态失败"));//返回微信服务器}
}else{
DBHelper.WriteLog("WX-Callback","回调接口发现签名错误!", ip);this.Response.Write(this.CreateResult(false,"回调接口发现签名错误!"));//返回微信服务器}
}else{this.Response.Write(this.CreateResult(false,"回调函数发现微信接口返回FAIL"));//返回微信服务器}
}catch(Exception ex)
{this.Response.Write(ex.Message);
}
}//