码迷,mamicode.com
首页 > 微信 > 详细

asp.net core 微信支付工具类(H5支付,扫码支付,公众号支付,app支付)之2-H5支付

时间:2018-06-21 00:08:45      阅读:275      评论:0      收藏:0      [点我收藏+]

标签:app   oca   密钥   微信api   and   var   sum   单位   localtion   

  上一篇说到微信扫码支付,今天来分享下微信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支付

标签:app   oca   密钥   微信api   and   var   sum   单位   localtion   

原文地址:https://www.cnblogs.com/jomzhang/p/9206427.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!