1. 程式人生 > >asp.net core 微信支付工具類(H5支付,掃碼支付,公眾號支付,app支付)之2-H5支付

asp.net core 微信支付工具類(H5支付,掃碼支付,公眾號支付,app支付)之2-H5支付

IV app支付 tno 方式 quest ces sys net ota

  上一篇說到微信掃碼支付,今天來分享下微信H5支付,適用場景為手機端非微信瀏覽器調用微信H5支付驚醒網站支付業務處理。申請開通微信H5支付工作不多做介紹,直接上代碼。

  首先是微信支付業務類(WxPayService)中的方法,傳上必要的參數,該方法將會構造請求XML字符串到微信api接口,H5支付用到的是返回XML參數的mweb_url的值,控制器中的Aciton方法調用該業務層方法得到mweb_url的值,此時,前端ajax調用控制器返回mweb_url值,直接將window.localtion.href=mweb_url若手機有安裝微信即可喚起微信進行支付。H5支付註意當支付喚起時候前端應做個定時請求後臺訂單狀態是否支付並做相應的跳轉處理。

  

     /// <summary>
        /// 獲取H5方式的手機微信支付地址,異常返回""
        /// </summary>
        /// <param name="out_trade_no">訂單號</param>
        /// <param name="body">描述</param>
        /// <param name="total_fee">總價</param>
        /// <param name="ip">客戶IP</param>
        /// <returns></returns>
        public string GetWxH5PayUrl(string out_trade_no, string body, string total_fee, string ip)
        {
            Senparc.Weixin.MP.TenPayLibV3.RequestHandler packageReqHandler = new Senparc.Weixin.MP.TenPayLibV3.RequestHandler();
            #region 構造請求參數
            packageReqHandler.SetParameter("appid", wxPayConfig.appid);//APPID
            packageReqHandler.SetParameter("mch_id", wxPayConfig.mchid);//商戶號
            packageReqHandler.SetParameter("nonce_str", Senparc.Weixin.MP.TenPayLibV3.TenPayV3Util.GetNoncestr());
            packageReqHandler.SetParameter("body", body);
            packageReqHandler.SetParameter("out_trade_no", out_trade_no);//訂單號
            packageReqHandler.SetParameter("total_fee", (int)(Convert.ToDecimal(total_fee) * 100) + ""); //金額,以分為單位
            packageReqHandler.SetParameter("spbill_create_ip", ip);//IP
            packageReqHandler.SetParameter("notify_url", wxPayConfig.notify_url); //回調地址
            packageReqHandler.SetParameter("trade_type", "MWEB");//這個不可以改。固定為Mweb
            packageReqHandler.SetParameter("sign", packageReqHandler.CreateMd5Sign("key", wxPayConfig.key));//商戶API密鑰 
            #endregion

            //將參數轉為xml字符串
            string data = packageReqHandler.ParseXML();
            //發起post異步請求,獲取返回的內容
            var result = PostWithStringFile(wxPayConfig.api_url, data);
            Log.Info("【GetWxH5PayUrl】訂單:" + out_trade_no + ",請求得到的xml:" + result, "微信支付");

            var res = System.Xml.Linq.XDocument.Parse(result);
            try
            {
                string mweb_url = res.Element("xml").Element("mweb_url").Value;
                Log.Info("【GetWxH5PayUrl】訂單:" + out_trade_no + ",請求得到的url:" + mweb_url, "微信支付");
                return mweb_url;
            }
            catch (Exception ex)
            {
                Log.Info("【GetWxH5PayUrl】訂單:" + out_trade_no + ",異常:" + ex.ToString(), "微信支付");
                return "";
            }
        }

  這裏有用到上一篇介紹的Senparc.Weixin.MP和我封裝的方法PostWithStringFile(),這裏就不重復貼出,最後完成時候我將貼上本人使用的微信支付業務類和前端調用例子

asp.net core 微信支付工具類(H5支付,掃碼支付,公眾號支付,app支付)之2-H5支付