700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 微信扫码支付回调操作

微信扫码支付回调操作

时间:2021-03-20 04:53:18

相关推荐

微信扫码支付回调操作

微信扫码支付回调可以分为两个部分(特别说明,本文所涉及的方法是直接调用微信SDK,所贴的代码只是处理业务的方法。),微信SDKX下载地址:

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);// "D01291827160001");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;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。