项目需求:学校学生网上缴费项目,刚来公司实习网上百度了各种资料,感谢很多大神避免了很多大坑。
本次扫码支付为:电脑生成二维码,手机微信扫码进行付款。建议开发前下载官方demo熟悉及后续有用到里面代码:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
1.微信公众平台→支付配置→支付授权目录(授权目录就是指你要进行支付的目录)添加你的项目发布文件网址,手上暂无公司微信公众平台账号,百度上下有什么详细说明就不再说明了。
2.新建MVC项目→新建文件夹Resources将官方demo中的business和lib文件夹复制过来
3.打开lib文件夹里的config,在这里配置基础信息和支付回调地址
4.新建WxPay页面,此页面展示付款二维码,采用了jquery.qrcode.min.js生成二维码,贴部分重要代码
<script language="java script"> $(function () { GetWXQRCode(); }); function GetWXQRCode() { //$('#QRCode').css('display', ''); //去除隐藏 //$('#paytitle').html('微信支付'); $('#tradeno').html(''); $('#paymoney').html(''); $.ajax({ type: "post", url: "/StudentIndex/GetWXQRCode", data: { time: new Date(), productId: "考试费用", idcard: '@ViewBag.idcard', }, success: function (json) { if (json.result) { $("#QRCode").qrcode(json.str); //生成二维码 $("#tradeno").html(json.no); //订单编号 $('#paymoney').html(json.money); } else { $("#QRCode").html("二维码生成失败"); } }, error: function (json) { $("#QRCode").html("二维码生成错误"); } }) } <div class="i_ma"> <div class="i_name"> 微信支付 <p>WeChat Payment</p> </div> <div class="space_hx"> </div> <div>订单编号:<p id="tradeno"></p></div> <div>考试费用:<p id="paymoney"></p></div> <div id="QRCode"> </div> </div> <div class="space_hx"> </div>
5.控制器内添加生成二维码方法,这里面的idcard是学生身份证,添加到附加数据内便于后面查询订单时判断是谁缴了费
//生成微信支付二维码 [HttpPost] public ActionResult GetWXQRCode(string idcard) { object objResult = ""; string tradeno; string paymoney; string strProductID = Request.Form["productId"]; //商品ID string strQRCodeStr = GetWXPayUrl(strProductID, idcard, out tradeno, out paymoney); //Session["outtradeno"] = outtradeno; if (!string.IsNullOrWhiteSpace(strProductID)) { objResult = new { result = true, str = strQRCodeStr, no = tradeno, money = paymoney }; } else { objResult = new { result = false }; } return Json(objResult); } //生成直接微信支付url,支付url有效期为10分钟,模式二 public string GetWXPayUrl(string productId, string idcard, out string out_trade_no, out string money) { WxPayData data = new WxPayData(); data.SetValue("body", "分类考试学费");//商品描述 data.SetValue("attach", idcard);//附加数据 out_trade_no = WxPayApi.GenerateOutTradeNo(); //Session["out_trade_no"] = out_trade_no; data.SetValue("out_trade_no", out_trade_no);//随机字符串 string total = Convert.ToInt32((context.receiptInfoModel.OrderBy(x => x.ID).FirstOrDefault().PayMoney * 100)).ToString(); money = context.receiptInfoModel.OrderBy(x => x.ID).FirstOrDefault().PayMoney + "元"; data.SetValue("total_fee", total);//总金额 data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间 data.SetValue("time_expire", DateTime.