C# .net 微信扫码Native支付模式二以及成功回调

本文档详细介绍了如何在后端实现微信支付的二维码生成和扫码支付的回调处理。首先,需要下载微信官方SDK并配置相关参数。接着,通过ThoughtWorks.QRCode库生成二维码图片。最后,展示了扫码支付回调的处理代码,包括接收微信POST数据、验证支付状态并返回相应XML。
摘要由CSDN通过智能技术生成
1.下载官方工具类

微信官方文档地址
SDK与DEMO下载

2.解压复制 lib,business 文件夹到自己的项这两个文件夹
3.后端进行配置
  1. 修改 lib=》DemoConfig 基本信息必须配置项

  2. 配置二维码的参数 business=》NativePay.cs配置二维码的参数3. 返回链接生成二维码返回前端
    安装生成二维码的包

    ThoughtWorks.QRCode 
    

    生成二维码两种方式,流,图片

    //示例一
    public FileResult paymentInformation(){
             string pay = WxPayAPI.NativePay.GetPayUrl(out_trade_no,productId,total_fee, body, attach, goods_tag);
               //初始化二维码生成工具
               QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
               qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
               qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
               qrCodeEncoder.QRCodeVersion = 0;
               qrCodeEncoder.QRCodeScale = 4;
               //将字符串生成二维码图片 pay接口返回的url
               Bitmap image = qrCodeEncoder.Encode(pay, Encoding.Default);
               //保存为PNG到内存流 
               MemoryStream ms = new MemoryStream();
               image.Save(ms, ImageFormat.Png);
               //保存为PNG到内存流
               return File(ms.ToArray(), "image/png");
    }
    
    //示例二
    public void paymentInformation(){
           string pay = WxPayAPI.NativePay.GetPayUrl(out_trade_no,productId,total_fee, body, attach, goods_tag);
                //初始化二维码生成工具
                QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();
                qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE;
                qrCodeEncoder.QRCodeErrorCorrect = QRCodeEncoder.ERROR_CORRECTION.M;
                qrCodeEncoder.QRCodeVersion = 0;
                qrCodeEncoder.QRCodeScale = 4;
                //将字符串生成二维码图片
                Bitmap image = qrCodeEncoder.Encode(pay, Encoding.Default);
                //保存为PNG到内存流 
                MemoryStream ms = new MemoryStream();
                image.Save(ms, ImageFormat.Png);
                //输出二维码图片
                Response.BinaryWrite(ms.GetBuffer());
                Response.End();
    }
    
4.扫码支付回调
 public async Task<string> PayNotifyUrl()
        {

            try
            {
                //接收从微信后台POST过来的数据
                Stream s = Request.InputStream;
                byte[] buffer = new byte[Request.InputStream.Length];
                await s.ReadAsync(buffer, 0, buffer.Length); /
                string xml = System.Text.Encoding.UTF8.GetString(buffer);
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.LoadXml(xml);
                string return_code = xmlDoc.DocumentElement.GetElementsByTagName("return_code")[0].InnerText;
                string out_trade_no = xmlDoc.DocumentElement.GetElementsByTagName("out_trade_no")[0].InnerText;//商户订单号
                string transaction_id = xmlDoc.DocumentElement.GetElementsByTagName("transaction_id")[0].InnerText;//微信支付订单号
                string nonce_str = xmlDoc.DocumentElement.GetElementsByTagName("nonce_str")[0].InnerText;//随机字符串
                string total_fee = xmlDoc.DocumentElement.GetElementsByTagName("total_fee")[0].InnerText; //金额
                string attach = xmlDoc.DocumentElement.GetElementsByTagName("attach")[0].InnerText;
                //业务逻辑 
                
                //微信支付成功回调
                if (return_code.ToUpper() == "SUCCESS")
                {
                    return "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
                }
                else
                {
                    return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[ERROR]]></return_msg></xml>"; //回调失败返回给微信
                }
            }
            catch (Exception)
            {
               
                return "<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[ERROR]]></return_msg></xml>"; //回调失败返回给微信
            }
        }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值