C# MVC 微信支付教程系列之公众号支付代码

2019-12-30 15:34:35于海丽


/// <summary>
  /// 获取code
  /// </summary>
  /// <returns></returns>
  [HttpPost]
  public ActionResult getCode()
  {
   object objResult = "";
   if (Session["url"] != null)
   {
    objResult = Session["url"].ToString();
   }
   else
   {
    objResult = "url为空。";
   }
   return Json(objResult);
  } 

他就会返回url到前端,前端通过js去访问那个网址,那个网址就是微信端获取到我们的信息之后,给我们按照规则再返回一个url,这rul就是我们后面需要后去的code的url。这个code对我们至关重要,因为后面我们要做跟支付有关的工作,都用到的。有了code,我们才能拿到openid和access_token。具体看代码逻辑也可以明了。

好,走到这一步,我们已经知道openid和access_token了,这个时候,我们就负责处理前端的东西。

前端,我就一个金额输入框,然后一个提交,实际应用中,我们肯定还需要传入商品的参数,我这里面就不写那些多余的了,后续你们自己加进去就可以了。这里面在点击提交的时候,会调用微信的环境,看下面的代码:


 //初始化微信支付环境
  function fCharge() {
   if (typeof WeixinJSBridge == "undefined") {
    if (document.addEventListener) {
     document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
    } else if (document.attachEvent) {
     document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
     document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
    }
   } else {
    fPostCharge();
   }
  } 

他会初始化一下环境,如果初始化成功,代表,这个页面是在微信客户端里面运行的,那么我们就给他运行我们真正的充值代码提交,所以,就会执行:fPostCharge();

提交之后,就会进入后台,后台需要组织我们前台需要用到的参数,其中包括如下:


/// <summary>
  /// 充值
  /// </summary>
  /// <returns></returns>
  [HttpPost]
  public ActionResult MeterRecharge()
  {
   object objResult = "";
   string strTotal_fee = Request.Form["totalfee"];
   string strFee = (double.Parse(strTotal_fee) * 100).ToString();

   //若传递了相关参数,则调统一下单接口,获得后续相关接口的入口参数
   jsApiPay.openid = Session["openid"].ToString();
   jsApiPay.total_fee = int.Parse(strFee);

   //JSAPI支付预处理
   try
   {
    string strBody = "南宫萧尘微信支付";//商品描述
    WxPayData unifiedOrderResult = jsApiPay.GetUnifiedOrderResult(strBody);
    WxPayData wxJsApiParam = jsApiPay.GetJsApiParameters();//获取H5调起JS API参数

    ModelForOrder aOrder = new ModelForOrder()
    {
     appId = wxJsApiParam.GetValue("appId").ToString(),
     nonceStr = wxJsApiParam.GetValue("nonceStr").ToString(),
     packageValue = wxJsApiParam.GetValue("package").ToString(),
     paySign = wxJsApiParam.GetValue("paySign").ToString(),
     timeStamp = wxJsApiParam.GetValue("timeStamp").ToString(),
     msg = "成功下单,正在接入微信支付."
    };
    objResult = aOrder;
   }
   catch (Exception ex)
   {
    ModelForOrder aOrder = new ModelForOrder()
    {
     appId = "",
     nonceStr = "",
     packageValue = "",
     paySign = "",
     timeStamp = "",
     msg = "下单失败,请重试,多次失败,请联系管理员."
    };
    objResult = aOrder;
   }
   return Json(objResult);
  }