微信扫码支付回调操作
2016-12-26 18:12
381 查看
微信扫码支付回调可以分为两个部分(特别说明,本文所涉及的方法是直接调用微信SDK,所贴的代码只是处理业务的方法。),微信SDKX下载地址:
1、轮询订单状态
轮询订单状态就是时刻监听用户的支付状态,比如扫码成功,支付成功等状态。具体状态说详见微信支付订单查询接口文档说明。这里我就简单的说下我实现的逻辑
2、微信异步通知
微信异步通知,当用户支付成功,微信请求异步通知地址,返回处理结果。
1、轮询订单状态
轮询订单状态就是时刻监听用户的支付状态,比如扫码成功,支付成功等状态。具体状态说详见微信支付订单查询接口文档说明。这里我就简单的说下我实现的逻辑
// / <summary> /// 查询订单状态 /// </summary> /// <param name="orderId"></param> /// <returns></returns> public JsonResult GetStatus(string orderId) { LogHelper.AddLog("OrderController.GetStatus 微信扫码支付 开始进入 orderID:" + orderId); string msg; KKTJ.WxPay.WxHelper.DD_JYJLBTool tool = new KKTJ.WxPay.WxHelper.DD_JYJLBTool(); Entity.DD_JYJLB mod = tool.GetNewEntiyByDDID(orderId); KKTJ.WxPay.WxHelper.WxPayData result = KKTJ.WxPay.WxHelper.OrderQuery.Run("", mod.JYJLBH);// "D201601291827160001"); LogHelper.AddLog("OrderController.GetStatus 交易流水号:" + mod.JYJLBH); string return_code = result.GetValue("return_code").ToString();//当返回状态return_code为SUCCESS,才会有数据返回。 string result_code = result.GetValue("result_code").ToString(); string total_fee = result.GetValue("total_fee") == null ? "" : result.GetValue("total_fee").ToString();//微信返回金额 if (return_code == "SUCCESS" && result_code == "SUCCESS") //当返回状态return_code和result_code为SUCCESS,才会有数据回。 { #region ===判断支付状态==== try { LogHelper.AddLog("OrderController.GetStatus return_code == SUCCESS && result_code == SUCCESS 交易流水号:" + mod.JYJLBH); string resultState = result.GetValue("trade_state").ToString(); LogHelper.AddLog("OrderController.GetStatus trade_state " + resultState); if (resultState == "SUCCESS") { //处理你的业务逻辑 } return Json(new { flag = true, returnValue = model_jb.DDLY, returnMsg = "SUCCESS" }); #endregion } } } } catch (Exception ex) { LogHelper.AddErrorLog("GetStatus():" + ex.Message + "报错行数:" + ex.StackTrace + ex.ToString()); return Json(new { flag = false, returnValue = "FAIL", returnMsg = "失败" }); } #endregion } return Json(new { flag = false, returnValue = "FAIL", returnMsg = "失败" }); }
/*** * 订单查询完整业务流程逻辑 * @param transaction_id 微信订单号(优先使用) * @param out_trade_no 商户订单号 * @return 订单查询结果(xml格式) */ public static WxPayData Run(string transaction_id, string out_trade_no) { WxPayData data = new WxPayData(); if (!string.IsNullOrEmpty(transaction_id))//如果微信订单号存在,则以微信订单号为准 { data.SetValue("transaction_id", transaction_id); } else//微信订单号不存在,才根据商户订单号去查单 { data.SetValue("out_trade_no", out_trade_no); } WxPayData result = WxPayApi.OrderQuery(data);//提交订单查询请求给API,接收返回数据 return result; }
2、微信异步通知
微信异步通知,当用户支付成功,微信请求异步通知地址,返回处理结果。
/// <summary> /// 微信支付通知 /// </summary> /// <returns></returns> public ActionResult WeiXinNotify() { ResultNotify resultNotify = new ResultNotify(this); string str = resultNotify.ProcessNotify(); return Content(str); }
public override string ProcessNotify() { //LogHelper.AddErrorLog("微信异步回调页面开始,ProcessNotify"); WxPayData notifyData = GetNotifyData(); string strReturn = string.Empty; //检查支付结果中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()); strReturn = res.ToXml(); //page.Response.Write(res.ToXml()); //page.Response.End(); } string transaction_id = notifyData.GetValue("transaction_id").ToString(); //查询订单,判断订单真实性 if (!QueryOrder(transaction_id)) { //若订单查询失败,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单查询失败"); Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml()); strReturn = res.ToXml(); //page.Response.Write(res.ToXml()); //page.Response.End(); } //查询订单成功 else { //LogHelper.AddErrorLog("订单支付成功"); WxPayData res = new WxPayData(); try { //处理你的业务逻辑 } catch { res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单查询失败"); Log.Error(this.GetType().ToString(), "Order query failure : " + res.ToXml()); } } //LogHelper.AddErrorLog("微信异步回调页面结束"); return strReturn; }
相关文章推荐
- 微信扫码支付notify_url回调接收通知问题
- JAVA微信扫码支付模式二功能实现以及回调
- JAVA微信扫码支付模式二功能实现以及回调
- JAVA微信扫码支付模式二功能实现以及回调
- c#微信扫码支付,完整版。包括回调
- 微信扫码支付电脑版完整版含回调PHP带支付成功跳转功能
- JAVA微信扫码支付模式二功能实现以及回调
- 微信扫码支付后续操作
- JAVA微信扫码支付模式二功能实现以及回调
- JAVA微信扫码支付模式二功能实现以及回调
- JAVA微信扫码支付模式二功能实现以及回调
- JAVA微信扫码支付模式二功能实现以及回调
- C# 微信扫码支付 回调页面
- 微信扫码支付native包含回调PHP完整版2018
- 微信扫码支付模式二功能实现,回调,记录充值,整个完整流程,java开发
- 微信扫码支付模式二回调附源码
- JAVA微信扫码支付模式二线上支付功能实现以及回调
- 微信扫码支付回调验签失败,请教大神解答
- JAVA微信扫码支付模式二功能实现以及回调
- 微信扫码支付模式二【无法回调】解决方案