设为首页 加入收藏

TOP

C# MVC微信扫码支付(三)
2019-09-17 18:34:06 】 浏览:75
Tags:MVC 支付
req.SetValue(
"transaction_id", transaction_id); WxPayData res = WxPayApi.OrderQuery(req); if (res.GetValue("return_code").ToString() == "SUCCESS" && res.GetValue("result_code").ToString() == "SUCCESS") { return true; } else { return false; } } //微信支付完成添加记录 tradeno:订单号 public void AddWayPayRecord(string tradeno, string tranid, string idcard) { lock (wxlock)//线程同步 { WxPayOrderModel wxpayOrderModel = context.wxpayOrderModel.FirstOrDefault(x => x.OrderNo == tradeno && x.OrderType == "微信" && x.StudentCard == idcard && x.Status == 0); if (wxpayOrderModel != null) { wxpayOrderModel.Status = 1; context.Entry(wxpayOrderModel).State = System.Data.EntityState.Modified; context.SaveChanges(); StudentModel studentModel = context.studentModel.Where(a => a.identityCard == wxpayOrderModel.StudentCard).FirstOrDefault(); PayModel payModel = context.payModel.FirstOrDefault(x => x.studentid == studentModel.candidateNum); Random rd = new Random(); if (payModel == null) { PayModel paymodel = new PayModel(); paymodel.paycount = context.receiptInfoModel.OrderBy(x => x.ID).FirstOrDefault().PayMoney; paymodel.ordernumber = tradeno; paymodel.paytime = DateTime.Now; paymodel.PayOddNum = tranid; context.payModel.Add(paymodel); context.SaveChanges(); } } } }

7.这时候页面也接收到微信返回的数据同时也添加到数据库中,页面上得给用户一个友好提示,告诉他支付成功了。在wxpay页面里加个ajax实时轮询数据库

        $(function () {
            setInterval(GetWxPayResult, 2000);
            function GetWxPayResult() {
                var no = $("#tradeno").text();
                $.ajax({
                    url: "/StudentIndex/WxPayResult",
                    type: "post",
                    data: {
                        idcard: '@ViewBag.idcard',
                        tradeno:no,
                    },
                    success: function (json) {
                        if (json.result) {
                            document.location.href = "/StudentIndex/WxPayisOK?idcard=@ViewBag.idcard"+"&&tradeno="+no;
                        }
                        else {
                        }
                    },
                    error: function (json) {
                        alert("错误");
                    }
                })
            }
        })

同时控制器里需要加上对应的方法,判断支付成功后跳转到一个新的页面wxpayisok

        //ajax轮询支付结果
        public ActionResult WxPayResult(string idcard, string tradeno)
        {
            object data = "";
            StudentModel studentModel = context.studentModel.FirstOrDefault(x => x.identityCard == idcard);
            PayModel model = context.payModel.FirstOrDefault(x => x.studentid == studentModel.candidateNum);
            if (model != null)
            {
                data = new { result = true };
            }
            return Json(data);
        }

        //支付完成
        public ActionResult WxPayisOK(string idcard, string tradeno)
        {
            StudentModel studentModel = context.studentModel.FirstOrDefault(x => x.identityCard == idcard);
            PayModel model = context.payModel.FirstOrDefault(x => x.studentid == studentModel.candidateNum);

            if (model != null)
            {
                return Content("<Script>alert('缴费成功!');window.location.href='/StudentIndex/StudentIndex';</Script>");
            }
            else
            {
                return Content("<Script>alert('缴费失败!请保留好支付凭证前往缴费处申请退款');window.location.href='/StudentIndex/StudentIndex';</Script>");
            }
        }

结尾:第一次写博客有些乱,微信支付安全性还需要提高,项目部署也没经过大批量测试,就直接上线。

到现在也经历过两次几千人的缴费,一分钟缴费好几次,也碰到过网络延迟问题缴费成功后没及时更新数据库和一个浏览器打开两次微信支付界面导致两次缴费只算一次的各种问题。

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇第39章 引用令牌 - Identity Serv.. 下一篇.NetCore WebApi——基于JWT的简..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目