这是重头戏了,修改订单状态一般就是两个地方,一个是前台轮训后发现微信订单完成后修改状态,另一个就是通知回调那了。
通知回调类,修改了下微信Demo代码,兼容了支付和退款两种情况,觉得放一起不好的,想分成两个接口就拆开就好了
/// <summary>
/// 支付结果通知回调处理类
/// 负责接收微信支付后台发送的支付结果并对订单有效性进行验证,将验证结果反馈给微信支付后台
/// </summary>
public class ResultNotify : Notify
{
public override WxPayData ProcessNotify(HttpContext context)
{
WxPayData notifyData = GetNotifyData(context);
//支付回调
if (notifyData.IsSet("result_code"))
{
#region 验证签名
try
{
notifyData.CheckSign();//验证签名,不通过会抛异常
}
catch (Exception 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());
context.Response.Write(res.ToXml());
return null;
}
#endregion
//检查支付结果中transaction_id是否存在
if (!notifyData.IsSet("transaction_id"))
{
//若transaction_id不存在,则立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue("return_code", "FAIL");
res.SetValue("return_msg", "支付结果中微信订单号不存在");
//Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml());
context.Response.Write(res.ToXml());
}
else
{
string transaction_id = notifyData.GetValue("transaction_id").ToString();
//查询订单,判断订单真实性
if (!QueryPayOrder(transaction_id))
{
//若订单查询失败,则立即返回结果给微信支付后台
WxPayData res = new WxPayData();
res.SetValue(