.NET微信扫码支付接入的示例分析
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍.NET微信扫码支付接入的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!Step1:肯定是产生商户订单号,然后传给微信后台,由微信去组成二维码字符串,然
千家信息网最后更新 2026年11月03日.NET微信扫码支付接入的示例分析
这篇文章主要介绍.NET微信扫码支付接入的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
Step1:肯定是产生商户订单号,然后传给微信后台,由微信去组成二维码字符串,然后返给你,你再把字符串做成图片;
////// 获取二维码 /// /// ///public string GetCodeUrl(string orderNumber) { var result = string.Empty; if (!string.IsNullOrEmpty(orderNumber)) { var matchedItem = db.OrderInfoForProducts.FirstOrDefault(x => x.OrderNumber == orderNumber); if (matchedItem != null && matchedItem.IsPaid == false) { WxPayData data = new WxPayData(); data.SetValue("body", "productBody");//商品描述 data.SetValue("attach", "attach data");//附加数据 data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());//随机字符串 data.SetValue("total_fee", price);//总金额 data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间 data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间 data.SetValue("goods_tag", "tag");//商品标记 data.SetValue("trade_type", "NATIVE");//交易类型 data.SetValue("product_id", WxPayApi.GenerateOutTradeNo());//商品ID result = WxPayApi.UnifiedOrder(data).GetValue("code_url").ToString();//调用统一下单接口 } } return result; }
在这里,我是把公司的商户订单号放在了attach字段上,因为公司的商户订单号比较长,超过了32位。out_trade_no与product_id字段最多32位,请慎重!
微信中的价格不能带小数,所以0.01元要写成100。
Step2: 成功返回二维码字符串之后就可以在生成图片了,我这边使用了ThoughtWorks.QRCode.dll来生成图片:
////// 根据字符串得到相应的二维码 /// /// /// /// ///public static Image CreateQRCodeImage(string qrInfo, string productName, string version) { try { if (!string.IsNullOrEmpty(qrInfo)) { QRCodeEncoder encoder = new QRCodeEncoder { QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE, QRCodeScale = 4, QRCodeVersion = 0, QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M }; //编码方式(注意:BYTE能支持中文,ALPHA_NUMERIC扫描出来的都是数字) //大小(值越大生成的二维码图片像素越高) //版本(注意:设置为0主要是防止编码的字符串太长时发生错误) //错误效验、错误更正(有4个等级) Image image = encoder.Encode(qrInfo, Encoding.GetEncoding("utf-8")); string filename = $"{productName}_{version}.png"; var userLocalPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); var docPath = Path.Combine(userLocalPath, @"Your Product\QRCode"); if (!Directory.Exists(docPath)) { Directory.CreateDirectory(docPath); } string filepath = Path.Combine(docPath, filename); using (FileStream fs = new FileStream(filepath, FileMode.OpenOrCreate, FileAccess.Write)) { image.Save(fs, System.Drawing.Imaging.ImageFormat.Png); fs.Close(); image.Dispose(); } return image; } } catch (Exception) { return null; } return null; }
Step3: 当用户扫完二维码之后,微信会发起回调,这时候我们就可以处理自己的业务逻辑了。这里我的UpdatePayStatus返回的是一个空页面
////// 回调函数 /// public ActionResult UpdatePayStatus() { //接收从微信后台POST过来的数据 System.IO.Stream s = Request.InputStream; int count = 0; byte[] buffer = new byte[1024]; StringBuilder builder = new StringBuilder(); while ((count = s.Read(buffer, 0, 1024)) > 0) { builder.Append(Encoding.UTF8.GetString(buffer, 0, count)); } s.Flush(); s.Close(); s.Dispose(); //转换数据格式并验证签名 WxPayData data = new WxPayData(); try { data.FromXml(builder.ToString()); } catch (WxPayException ex) { //若签名错误,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", ex.Message); LogEntity signErrorLog = new LogEntity(); signErrorLog.errorMessage = ex.Message; LogHelper.WriteLog(signErrorLog, null); Response.Write(res.ToXml()); Response.End(); } ProcessNotify(data); return View(); } ////// 处理回调数据 /// /// public void ProcessNotify(WxPayData data) { WxPayData notifyData = data; //检查支付结果中transaction_id是否存在 if (!notifyData.IsSet("transaction_id")) { //若transaction_id不存在,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "支付结果中微信订单号不存在"); LogEntity orderLog = new LogEntity(); orderLog.errorMessage = "支付结果中微信订单号不存在"; LogHelper.WriteLog(orderLog, null); Response.Write(res.ToXml()); 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", "订单查询失败"); LogEntity orderqueryLog = new LogEntity(); orderqueryLog.errorMessage = "订单查询失败"; LogHelper.WriteLog(orderqueryLog, null); Response.Write(res.ToXml()); Response.End(); } //查询订单成功 else { WxPayData res = new WxPayData(); res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); SetPaymentResult(data); //这里的参数是 data !!! 不是 res !!! Response.Write(res.ToXml()); Response.End(); } } ////// 商户后台更新 /// /// private void SetPaymentResult(WxPayData res) { var isSucessFlagOne = res.GetValue("return_code").ToString(); var isSuccessFlagTwo = res.GetValue("result_code").ToString(); if (isSucessFlagOne == "SUCCESS" && isSuccessFlagTwo == "SUCCESS") { //自己的业务逻辑 !!!! } } //查询订单 private bool QueryOrder(string transaction_id) { WxPayData req = new WxPayData(); 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; } }
以上是".NET微信扫码支付接入的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
订单
支付
后台
字符
字符串
结果
二维
二维码
查询
订单号
商户
图片
数据
错误
商品
交易
示例
分析
接入
成功
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网科技公司
互联网科技图片
科技互联网龙头
互联网科技财经
碳银互联网科技
安徽鑫晟辉互联网科技
狮子座互联网科技培训
互联网前沿科技
互联网金融和金融科技
互联网科技公司需要的职位
央行互联网金融科技公司
南平创想时代互联网科技有限公司
本届互联网博览会上的黑科技
东莞新华互联网科技学校
高科技互联网套路
互联网第三次科技革命特征
互联网科技平台产品运营
中国科技和美国互联网
科技互联网专业务虚会材料
银川新华互联网科技学校招聘
新华互联网科技
互联网络科技有限公司
互联网金融科技委员会
新兴科技互联网创新大赛颁奖典礼
银川新华互联网科技学校联系电话
深圳艾果互联网通讯科技
互联网第三次科技革命特征
江苏互联网智能科技软件
科技信息时代互联网发展
互联网科技创业计划的风险分析