public override void ProcessNotify(out WxPayData data) { if (GetNotifyData(out data)) { //检查支付结果中transaction_id是否存在 if (!data.IsSet("transaction_id")) { //若transaction_id不存在,则立即返回结果给微信支付后台 data = new WxPayData(); data.SetValue("return_code", "FAIL"); data.SetValue("return_msg", "支付结果中微信订单号不存在"); Log.Error(this.GetType().ToString(), "The Pay result is error : " + data.ToXml()); return; } string transaction_id = data.GetValue("transaction_id").ToString(); //查询订单,判断订单真实性 if (!QueryOrder(transaction_id)) { //若订单查询失败,则立即返回结果给微信支付后台 data = new WxPayData(); data.SetValue("return_code", "FAIL"); data.SetValue("return_msg", "订单查询失败"); Log.Error(this.GetType().ToString(), "Order query failure : " + data.ToXml()); } //查询订单成功 else { string mhtOrderNo = data.GetValue("out_trade_no").ToString(); decimal total_fee = StringHelper.ToDecimal(data.GetValue("total_fee")); if (!string.IsNullOrEmpty(mhtOrderNo)) { int result = 0; RechargeInfo model = new RechargeInfo(); model.OrderId = mhtOrderNo; model.FOrderId = ""; model.Cash = total_fee; model.PayMobile = ""; _rechargeService.Completed(model, out result); //1:成功 0:失败 if (result != (int)ErrorMessage.成功) { //失败 data = new WxPayData(); data.SetValue("return_code", "FAIL"); data.SetValue("return_msg", "订单查询失败"); Log.Error(this.GetType().ToString(), "Order query failure : " + data.ToXml()); return; } } //成功 data.SetValue("return_code", "SUCCESS"); data.SetValue("return_msg", "OK"); Log.Info(this.GetType().ToString(), "order query success : " + data.ToXml()); } } }
public override void ProcessNotify(out WxPayData data) { if (GetNotifyData(out data)) { //Log.Info(this.GetType().ToString(), "ProcessNotify() out_trade_no = " + data.GetValue("out_trade_no").ToString()); //Log.Info(this.GetType().ToString(), "ProcessNotify() isset openid = " + data.IsSet("openid")); //Log.Info(this.GetType().ToString(), "ProcessNotify() openid = " + data.GetValue("openid").ToString()); //Log.Info(this.GetType().ToString(), "ProcessNotify() isset product_id = " + data.IsSet("product_id")); //Log.Info(this.GetType().ToString(), "ProcessNotify() product_id = " + data.GetValue("product_id").ToString()); //检查openid和product_id是否返回 if (!data.IsSet("openid") || !data.IsSet("product_id")) { data = new WxPayData(); data.SetValue("return_code", "FAIL"); data.SetValue("return_msg", "回调数据异常"); Log.Info(this.GetType().ToString(), "The data WeChat post is error : " + data.ToXml()); return; } //调统一下单接口,获得下单结果 string openid = data.GetValue("openid").ToString(); string product_id = data.GetValue("product_id").ToString(); WxPayData unifiedOrderResult = new WxPayData(); try { unifiedOrderResult = UnifiedOrder(openid, product_id); } catch //若在调统一下单接口时抛异常,立即返回结果给微信支付后台 { data = new WxPayData(); data.SetValue("return_code", "FAIL"); data.SetValue("return_msg", "统一下单失败"); Log.Error(this.GetType().ToString(), "UnifiedOrder failure : " + data.ToXml()); return; } //若下单失败,则立即返回结果给微信支付后台 if (!unifiedOrderResult.IsSet("appid") || !unifiedOrderResult.IsSet("mch_id") || !unifiedOrderResult.IsSet("prepay_id")) { data = new WxPayData(); data.SetValue("return_code", "FAIL"); data.SetValue("return_msg", "统一下单失败"); Log.Error(this.GetType().ToString(), "UnifiedOrder failure : " + data.ToXml()); return; } #region string mhtOrderNo = data.GetValue("out_trade_no").ToString(); decimal total_fee = StringHelper.ToDecimal(data.GetValue("total_fee")); if (!string.IsNullOrEmpty(mhtOrderNo)) { int result = 0; RechargeInfo model = new RechargeInfo(); model.OrderId = mhtOrderNo; model.FOrderId = ""; model.Cash = total_fee; model.PayMobile = ""; _rechargeService.Completed(model, out result); //1:成功 0:失败 if (result != (int)ErrorMessage.成功) { data = new WxPayData(); data.SetValue("return_code", "FAIL"); data.SetValue("return_msg", "统一下单失败"); Log.Error(this.GetType().ToString(), "UnifiedOrder failure : " + data.ToXml()); return; } } #endregion //统一下单成功,则返回成功结果给微信支付后台 data = new WxPayData(); data.SetValue("return_code", "SUCCESS"); data.SetValue("return_msg", "OK"); data.SetValue("appid", WxPayConfig.APPID); data.SetValue("mch_id", WxPayConfig.MCHID); data.SetValue("nonce_str", WxPayApi.GenerateNonceStr()); data.SetValue("prepay_id", unifiedOrderResult.GetValue("prepay_id")); data.SetValue("result_code", "SUCCESS"); data.SetValue("err_code_des", "OK"); data.SetValue("sign", data.MakeSign()); Log.Info(this.GetType().ToString(), "UnifiedOrder success , send data to WeChat : " + data.ToXml()); } }