微信扫码支付回调操作

微信扫码支付回调可以分为两个部分(特别说明,本文所涉及的方法是直接调用微信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);// "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;
        }





  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
PHP微信扫码支付Demo是一个用PHP语言编写的示例程序,用于演示如何使用微信支付扫码支付功能。 首先,我们需要在微信商户平台注册一个商户号,并获取到支付相关的参数,包括APPID、商户号、密钥等等。 然后,我们需要搭建一个简单的PHP后台服务器,用于处理支付请求和回调。我们可以使用框架如Laravel或使用原生PHP来实现。 接下来,我们需要创建一个简单的页面,提供给用户进行支付。页面上需要包含一个二维来展示支付链接。 在PHP代中,我们需要首先获取到用户在前端输入的支付金额和订单号等信息。然后,通过调用微信支付接口的方式,生成一个微信支付的二维链接。我们可以使用PHP内置的cURL库来发送请求,并获取到返回的结果。 接下来,我们将支付链接生成的二维显示在前端页面上,供用户进行扫码支付。我们可以使用一些开源的PHP二维生成库来生成二维图片。 当用户扫码支付后,微信服务器会回调我们之前在后台配置的回调URL。我们需要编写相应的代来处理这个回调请求,并验证回调的合法性。在回调处理中,我们需要根据微信服务器返回的支付结果更新订单状态或进行其他业务逻辑的处理。 最后,我们可以在前端页面上添加一些样式和交互效果,例如显示支付成功或失败的提示信息,并提供订单查询的功能。 通过以上步骤,我们就可以实现一个简单的PHP微信扫码支付Demo。当然,这只是个简单的示例,实际应用中还需要考虑更多的安全性和异常处理等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值