C#微信H5支付 非微信内浏览器H5支付 浏览器微信支付

微信开发者文档

微信H5支付官方文档   请阅读清楚  最起码把所有参数看一遍  这个地方也可以看看



微信案例

http://wxpay.wxutil.com/mch/pay/h5.v2.php,请在微信外浏览器打开。



 <button type="button" οnclick="pay()">支 付</button>
        //判断是否是微信浏览器的函数
        function isWeiXin() {
            //window.navigator.userAgent属性包含了浏览器类型、版本、操作系统类型、浏览器引擎类型等信息,这个属性可以用来判断浏览器类型
            var ua = window.navigator.userAgent.toLowerCase();
            //通过正则表达式匹配ua中是否含有MicroMessenger字符串
            if (ua.match(/MicroMessenger/i) == 'micromessenger') {
                return true;
            } else {
                return false;
            }
        }
          function pay() {
            if (isWeiXin()) {
                $(".instructions_box").removeClass("dn");
            } else {
                if ($("#total_fee").val() > 0) {
                    var postData = {
                        //自行传参到后台
                    };

                    $.ajax({
                        url: "后台地址",
                        data: postData,
                        type: 'post',
                        success: function (data) {
                            if (data != null) {
                                $('.weui-mask').toggleClass('weui-mask--visible');
                                $('.weui-dialog').toggleClass('weui-dialog--visible');
                                window.location.href = data;
                            }
                        }
                    })
                } else {
                    $.toast("金额输入有误", "forbidden");
                }
            }
        }
        /// <summary>
        /// 微信支付
        /// </summary>
        /// <returns></returns>
        public ActionResult WechatPay()
        {
            int pId = Convert.ToInt32(Request["pid"]);
            project p = pManage.GetModel(pId);//获取商品

            var url = System.Configuration.ConfigurationManager.AppSettings["url"];
            var appId = System.Configuration.ConfigurationManager.AppSettings["AppId"];//公众号id
            var mch_id = System.Configuration.ConfigurationManager.AppSettings["mch_id"];//商户号
            var nonceStr = WechatPayCommon.CreateNonce_str();//随机字符串
            var body = p.name;//商品名称
            var detail = p.depict;//商品描述
            var out_trade_no = Guid.NewGuid().ToString("N");//商户系统内部的订单号,32个字符内、可包含字母
            var total_fee = Math.Round(Convert.ToDecimal(Request["total_fee"]) * 100, 0);//收钱总额  分为单位 前台传过来后需要处理成分
            var spbill_create_ip = WechatPayCommon.GetWebClientIp();//终端ip
            var time_start = DateTime.Now.ToString("yyyyMMddHHmmss");//订单生成时间
            var time_expire = DateTime.Now.AddHours(1).ToString("yyyyMMddHHmmss");//默认1个小时订单过期,开发者可自定义其他超时机制,原则上微信订单超时时间不超过2小时
            var notify_url = string.Format("{0}/Pay/Notify", esluo);//接收微信支付异步通知回调地址,不可带参,与下面的Notify对应,开发者可自定义其他url地址
            var trade_type = "MWEB";//交易类型H5支付的交易类型为MWEB
            var scene_info = "{\"h5_info\": {\"type\":\"Wap\",\"wap_url\": \"" + esluo + "\",\"wap_name\": \"" + body + "\"}}";
            var partnerKey = System.Configuration.ConfigurationManager.AppSettings["PartnerKey"];//API密钥

            var returnXML = "";
            var paramaterXml = "";
            var content = WechatPayCommon.UnifiedOrder(
                              appId, mch_id, nonceStr,
                              body, detail, out_trade_no, total_fee, spbill_create_ip, time_start, time_expire,
                              notify_url, trade_type, partnerKey, out returnXML, out paramaterXml);

            LogWriter.Default.WriteInfo("returnXML:" + returnXML.ToString());//记录请求关键信息到日志中去
            LogWriter.Default.WriteInfo("paramaterXml:" + paramaterXml.ToString());//记录请求关键信息到日志中去
            LogWriter.Default.WriteInfo("content:" + content);//记录请求关键信息到日志中去

            var timestamp = Util.CreateTimestamp();
            var prepay_id = content.prepay_id.Value;
            var sign = WechatPayCommon.SignPay(appId, timestamp.ToString(), nonceStr, prepay_id, partnerKey);//签名
            var isUnifiedOrderSuccess = false;
            var return_code = "";
            var return_msg = "";
            var mweb_url = "";
            if (content.return_code.Value == "SUCCESS" && content.result_code.Value == "SUCCESS")
            {
                trade_type = content.trade_type.Value;
                prepay_id = content.prepay_id.Value;
                mweb_url = content.mweb_url.Value;
                isUnifiedOrderSuccess = true;
            }
            else
            {
                return_code = content.return_code.Value;
                return_msg = content.return_msg.Value;
                isUnifiedOrderSuccess = false;
            }
            if (!isUnifiedOrderSuccess)
            {
                return RedirectToAction("Failed", new { msg = return_msg });
            }

            tpay_payrecord c = new tpay_payrecord();//支付记录
            c.name = p.name;
            c.out_trade_no = out_trade_no;
            c.pid = p.id;
            c.time_start = DateTime.Now;
            c.spbill_create_ip = spbill_create_ip;
            c.pay_fee = Convert.ToDecimal(Request["total_fee"]);
            c.remark = Request["remark"];
            c.state = 9;
            cManage.Add(c);

            //=============1.会刷新当前页=================
            //return Json(mweb_url, JsonRequestBehavior.AllowGet);
            //=============2.带参数据延时=================
            var resultUrl = string.Format(mweb_url + "&redirect_url={0}/Pay/Result?no=" + c.out_trade_no, url);
            return Json(resultUrl, JsonRequestBehavior.AllowGet);
            //=============3.不带参去结果页=================
            //var resultUrl = string.Format(mweb_url + "&redirect_url={0}/Pay/Result", url);
            //return Json(resultUrl, JsonRequestBehavior.AllowGet);
        }
//微信支付帮助类   
public class WechatPayCommon
{

        private static string[] strs = new string[]
                                 {
                                  "a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",
                                  "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"
                                 };
        /// <summary>
        /// 创建随机字符串
        /// </summary>
        /// <returns></returns>
        public static string CreateNonce_str()
        {
            Random r = new Random();
            var sb = new StringBuilder();
            var length = strs.Length;
            for (int i = 0; i < 15; i++)
            {
                sb.Append(strs[r.Next(length - 1)]);
            }
            return sb.ToString();
        }

        /// <summary>
        /// 获取终端IP地址
        /// </summary>
        /// <returns></returns>
        public static string GetWebClientIp()
        {
            string userIP = "";
            try
            {
                if (System.Web.HttpContext.Current == null
            || System.Web.HttpContext.Current.Request == null
            || System.Web.HttpContext.Current.Request.ServerVariables == null)
                    return "";
                string CustomerIP = "";
                //CDN加速后取到的IP simone 090805
                CustomerIP = System.Web.HttpContext.Current.Request.Headers["Cdn-Src-Ip"];
                if (!string.IsNullOrEmpty(CustomerIP))
                {
                    return CustomerIP;
                }
                CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                if (!String.IsNullOrEmpty(CustomerIP))
                {
                    return CustomerIP;
                }
                if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_VIA"] != null)
                {
                    CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                    if (CustomerIP == null)
                        CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }
                else
                {
                    CustomerIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                }
                if (string.Compare(CustomerIP, "unkn
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值