MVC 接入微信扫码(Native)支付

MVC 接入微信扫码(Native)支付

一、效果图

在这里插入图片描述

二、前期准备

1:商户/服务商接入
2:微信支付配置参数:APPID:绑定支付的APPID(必须配置)、MCHID:商户号(必须配置)、KEY:商户支付密钥;
3:SDK下载后引入自己的项目当中;

三、调起微信支付

/// <summary>
/// 拉起支付
/// </summary>
/// <param name="Amount">付款金额</param>
/// <returns></returns>
public JsonMessage PCWxPayment(string Amount)
{
	int PayAmount = 0;
	PayAmount = int.Pase(10 * decimal.Pase(Amount));
    //生成订单号
    string out_trade_no = WxPayApi.GenerateOutTradeNo();
    var jobject =PCWxPayment(ReceiveObj.ToString());
    string url = "";
    if (jobject["Msg"].ToString() == "成功")
    {
        url = jobject["Data"].ToString();
    }
    
    #region 下单成功保存订单业务流程
    
    #endregion 
    
    //初始化二维码生成工具
    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(url, Encoding.Default);
    //保存为PNG到内存流  
    MemoryStream ms = new MemoryStream();
    image.Save(ms, ImageFormat.Jpeg);
    var data = new
    {
        Code = true,
        Msg = "操作成功",
        Url= File(ms.ToArray(), "image/png"),
        Type = "1",
    };
    return Content(data.ToJson());
}
public JsonMessage PCWxPayment(string out_trade_no,int PayAmount)
{
    JsonMessage jsonMessage = new JsonMessage();
    try
    {
        WxPayData data = new WxPayData();
        data.SetValue("body", "test");//商品描述
        data.SetValue("attach", "test");//附加数据
        data.SetValue("out_trade_no", out_trade_no);//随机字符串
        data.SetValue("total_fee", PayAmount);//总金额
        data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));//交易起始时间
        data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));//交易结束时间
        data.SetValue("goods_tag", "jjj");//商品标记
        data.SetValue("trade_type", "NATIVE");//交易类型
        data.SetValue("product_id", "123");//商品ID

        WxPayData result = WxPayApi.UnifiedOrder(data);//调用统一下单接口
        string url = result.GetValue("code_url").ToString();//获得统一下单接口返回的二维码链接

        jsonMessage.Code = MsgCode.成功;
        jsonMessage.Data = url;
        jsonMessage.Msg = "成功";
        return jsonMessage;
    }
    catch (Exception ex)
    {
        jsonMessage.Code = MsgCode.异常;
        jsonMessage.Msg = "系统错误";
        return jsonMessage;
    }
}

四、支付回调

/// <summary>
/// 支付回调
/// </summary>
/// <returns></returns>
[Route("PCWxPaymentCallback")]
public JsonMessage PCWxPaymentCallback()
{
    var request = System.Web.HttpContext.Current.Request;
    var dataBody = "";
    long? length = request.ContentLength;
    if (length != null && length > 0)
    {
        StreamReader streamReader = new StreamReader(request.InputStream, Encoding.UTF8);
        dataBody = streamReader.ReadToEndAsync().Result;
    }
    return paymentCallbackApp.PCWxPaymentCallback(dataBody);
}
public JsonMessage PCWxPaymentCallback(string ReceiveJson)
{
    JsonMessage jsonMessage = new JsonMessage();
    try
    {
        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(ReceiveJson);

        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")
        {
            #region 更新订单状态业务流程
            
            #endregion
        }
        else
        {
            jsonMessage.Code = MsgCode.参数错误;
            jsonMessage.Msg = "参数错误";
            return jsonMessage;
        }

        jsonMessage.Code = MsgCode.成功;
        jsonMessage.Msg = "操作成功";
        return jsonMessage;
    }
    catch (Exception ex)
    {
        jsonMessage.Code = MsgCode.异常;
        jsonMessage.Msg = "系统错误";
        return jsonMessage;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值