/// <summary>
        /// 原生支付 模式二
        /// 根据统一订单返回的code_url生成支付二维码。该模式链接较短,生成的二维码打印到结账小票上的识别率较高。
        /// 注意:code_url有效期为2小时,过期后扫码不能再发起支付
        /// </summary>
        /// <returns></returns>
        public ActionResult NativeByCodeUrl()
        {
            //创建支付应答对象
            //RequestHandler packageReqHandler = new RequestHandler(null);

            var sp_billno = SystemTime.Now.ToString("HHmmss") + TenPayV3Util.BuildRandomStr(26);
            var nonceStr  = TenPayV3Util.GetNoncestr();

            //商品Id,用户自行定义
            string productId = SystemTime.Now.ToString("yyyyMMddHHmmss");

            //创建请求统一订单接口参数
            //packageReqHandler.SetParameter("appid", TenPayV3Info.AppId);
            //packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId);
            //packageReqHandler.SetParameter("nonce_str", nonceStr);
            //packageReqHandler.SetParameter("body", "test");
            //packageReqHandler.SetParameter("out_trade_no", sp_billno);
            //packageReqHandler.SetParameter("total_fee", "1");
            //packageReqHandler.SetParameter("spbill_create_ip", HttpContext.UserHostAddress()?.ToString());
            //packageReqHandler.SetParameter("notify_url", TenPayV3Info.TenPayV3Notify);
            //packageReqHandler.SetParameter("trade_type", TenPayV3Type.NATIVE.ToString());
            //packageReqHandler.SetParameter("product_id", productId);

            //string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key);
            //packageReqHandler.SetParameter("sign", sign);

            //string data = packageReqHandler.ParseXML();
            var xmlDataInfo = new TenPayV3UnifiedorderRequestData(TenPayV3Info.AppId,
                                                                  TenPayV3Info.MchId,
                                                                  "test",
                                                                  sp_billno,
                                                                  1,
                                                                  HttpContext.UserHostAddress()?.ToString(),
                                                                  TenPayV3Info.TenPayV3Notify,
                                                                  TenPay.TenPayV3Type.NATIVE,
                                                                  null,
                                                                  TenPayV3Info.Key,
                                                                  nonceStr,
                                                                  productId: productId);
            //调用统一订单接口
            var result = TenPayV3.Unifiedorder(xmlDataInfo);
            //var unifiedorderRes = XDocument.Parse(result);
            //string codeUrl = unifiedorderRes.Element("xml").Element("code_url").Value;
            string    codeUrl = result.code_url;
            BitMatrix bitMatrix;

            bitMatrix = new MultiFormatWriter().encode(codeUrl, BarcodeFormat.QR_CODE, 600, 600);
            var bw = new ZXing.BarcodeWriterPixelData();

            var pixelData = bw.Write(bitMatrix);

            using (var bitmap = new System.Drawing.Bitmap(pixelData.Width, pixelData.Height, System.Drawing.Imaging.PixelFormat.Format32bppRgb))
            {
                using (var ms = new MemoryStream())
                {
                    var bitmapData = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, pixelData.Width, pixelData.Height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb);
                    try
                    {
                        // we assume that the row stride of the bitmap is aligned to 4 byte multiplied by the width of the image
                        System.Runtime.InteropServices.Marshal.Copy(pixelData.Pixels, 0, bitmapData.Scan0, pixelData.Pixels.Length);
                    }
                    finally
                    {
                        bitmap.UnlockBits(bitmapData);
                    }
                    bitmap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

                    return(File(ms, "image/png"));
                }
            }
        }
        /// <summary>
        /// 退款申请接口
        /// </summary>
        /// <returns></returns>
        public ActionResult Refund()
        {
            try
            {
                WeixinTrace.SendCustomLog("进入退款流程", "1");

                string nonceStr = TenPayV3Util.GetNoncestr();

                string outTradeNo = HttpContext.Session.GetString("BillNo");

                WeixinTrace.SendCustomLog("进入退款流程", "2 outTradeNo:" + outTradeNo);


                string outRefundNo = "OutRefunNo-" + SystemTime.Now.Ticks;
                int    totalFee    = int.Parse(HttpContext.Session.GetString("BillFee"));
                int    refundFee   = totalFee;
                string opUserId    = TenPayV3Info.MchId;
                var    notifyUrl   = "https://sdk.weixin.senparc.com/TenPayV3/RefundNotifyUrl";
                var    dataInfo    = new TenPayV3RefundRequestData(TenPayV3Info.AppId, TenPayV3Info.MchId, TenPayV3Info.Key,
                                                                   null, nonceStr, null, outTradeNo, outRefundNo, totalFee, refundFee, opUserId, null, notifyUrl: notifyUrl);

                #region 旧方法
                //var cert = @"D:\cert\apiclient_cert_SenparcRobot.p12";//根据自己的证书位置修改
                //var password = TenPayV3Info.MchId;//默认为商户号,建议修改
                //var result = TenPayV3.Refund(dataInfo, cert, password);
                #endregion

                #region 新方法(Senparc.Weixin v6.4.4+)
                var result = TenPayV3.Refund(dataInfo);//证书地址、密码,在配置文件中设置,并在注册微信支付信息时自动记录
                #endregion

                WeixinTrace.SendCustomLog("进入退款流程", "3 Result:" + result.ToJson());


                return(Content(string.Format("退款结果:{0} {1}。您可以刷新当前页面查看最新结果。", result.result_code, result.err_code_des)));
                //return Json(result, JsonRequestBehavior.AllowGet);
            }
            catch (Exception ex)
            {
                WeixinTrace.WeixinExceptionLog(new WeixinException(ex.Message, ex));

                throw;
            }


            #region 原始方法

            //RequestHandler packageReqHandler = new RequestHandler(null);

            //设置package订单参数
            //packageReqHandler.SetParameter("appid", TenPayV3Info.AppId);		 //公众账号ID
            //packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId);	     //商户号
            //packageReqHandler.SetParameter("out_trade_no", "124138540220170502163706139412"); //填入商家订单号
            ////packageReqHandler.SetParameter("out_refund_no", "");                //填入退款订单号
            //packageReqHandler.SetParameter("total_fee", "");                    //填入总金额
            //packageReqHandler.SetParameter("refund_fee", "100");                //填入退款金额
            //packageReqHandler.SetParameter("op_user_id", TenPayV3Info.MchId);   //操作员Id,默认就是商户号
            //packageReqHandler.SetParameter("nonce_str", nonceStr);              //随机字符串
            //string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key);
            //packageReqHandler.SetParameter("sign", sign);	                    //签名
            ////退款需要post的数据
            //string data = packageReqHandler.ParseXML();

            ////退款接口地址
            //string url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
            ////本地或者服务器的证书位置(证书在微信支付申请成功发来的通知邮件中)
            //string cert = @"D:\cert\apiclient_cert_SenparcRobot.p12";
            ////私钥(在安装证书时设置)
            //string password = TenPayV3Info.MchId;
            //ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
            ////调用证书
            //X509Certificate2 cer = new X509Certificate2(cert, password, X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);

            //#region 发起post请求
            //HttpWebRequest webrequest = (HttpWebRequest)HttpWebRequest.Create(url);
            //webrequest.ClientCertificates.Add(cer);
            //webrequest.Method = "post";

            //byte[] postdatabyte = Encoding.UTF8.GetBytes(data);
            //webrequest.ContentLength = postdatabyte.Length;
            //Stream stream;
            //stream = webrequest.GetRequestStream();
            //stream.Write(postdatabyte, 0, postdatabyte.Length);
            //stream.Close();

            //HttpWebResponse httpWebResponse = (HttpWebResponse)webrequest.GetResponse();
            //StreamReader streamReader = new StreamReader(httpWebResponse.GetResponseStream());
            //string responseContent = streamReader.ReadToEnd();
            //#endregion

            //// var res = XDocument.Parse(responseContent);
            ////string openid = res.Element("xml").Element("out_refund_no").Value;
            //return Content("申请成功:<br>" + HttpUtility.RequestUtility.HtmlEncode(responseContent));

            #endregion
        }
        public ActionResult JsApi(int productId, int hc)
        {
            try
            {
                //获取产品信息
                var products = ProductModel.GetFakeProductList();
                var product  = products.FirstOrDefault(z => z.Id == productId);
                if (product == null || product.GetHashCode() != hc)
                {
                    return(Content("商品信息不存在,或非法进入!1002"));
                }

                //var openId = User.Identity.Name;
                var openId = HttpContext.Session.GetString("OpenId");

                string sp_billno = Request.Query["order_no"];
                if (string.IsNullOrEmpty(sp_billno))
                {
                    //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                    sp_billno = string.Format("{0}{1}{2}", TenPayV3Info.MchId /*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"),
                                              TenPayV3Util.BuildRandomStr(6));
                }
                else
                {
                    sp_billno = Request.Query["order_no"];
                }

                var timeStamp = TenPayV3Util.GetTimestamp();
                var nonceStr  = TenPayV3Util.GetNoncestr();

                var body        = product == null ? "test" : product.Name;
                var price       = product == null ? 100 : (int)(product.Price * 100);//单位:分
                var xmlDataInfo = new TenPayV3UnifiedorderRequestData(TenPayV3Info.AppId, TenPayV3Info.MchId, body, sp_billno, price, HttpContext.UserHostAddress()?.ToString(), TenPayV3Info.TenPayV3Notify, TenPay.TenPayV3Type.JSAPI, openId, TenPayV3Info.Key, nonceStr);

                var result = TenPayV3.Unifiedorder(xmlDataInfo); //调用统一订单接口
                                                                 //JsSdkUiPackage jsPackage = new JsSdkUiPackage(TenPayV3Info.AppId, timeStamp, nonceStr,);
                var package = string.Format("prepay_id={0}", result.prepay_id);

                ViewData["product"] = product;

                ViewData["appId"]     = TenPayV3Info.AppId;
                ViewData["timeStamp"] = timeStamp;
                ViewData["nonceStr"]  = nonceStr;
                ViewData["package"]   = package;
                ViewData["paySign"]   = TenPayV3.GetJsPaySign(TenPayV3Info.AppId, timeStamp, nonceStr, package, TenPayV3Info.Key);

                //临时记录订单信息,留给退款申请接口测试使用
                HttpContext.Session.SetString("BillNo", sp_billno);
                HttpContext.Session.SetString("BillFee", price.ToString());

                return(View());
            }
            catch (Exception ex)
            {
                var msg = ex.Message;
                msg += "<br>" + ex.StackTrace;
                msg += "<br>==Source==<br>" + ex.Source;

                if (ex.InnerException != null)
                {
                    msg += "<br>===InnerException===<br>" + ex.InnerException.Message;
                }
                return(Content(msg));
            }
        }
        public ActionResult NativeNotifyUrl()
        {
            ResponseHandler resHandler = new ResponseHandler(null);

            //返回给微信的请求
            RequestHandler res = new RequestHandler(null);

            string openId    = resHandler.GetParameter("openid");
            string productId = resHandler.GetParameter("product_id");

            if (openId == null || productId == null)
            {
                res.SetParameter("return_code", "FAIL");
                res.SetParameter("return_msg", "回调数据异常");
            }

            //创建支付应答对象
            //RequestHandler packageReqHandler = new RequestHandler(null);

            var sp_billno = SystemTime.Now.ToString("HHmmss") + TenPayV3Util.BuildRandomStr(26);//最多32位
            var nonceStr  = TenPayV3Util.GetNoncestr();

            //创建请求统一订单接口参数
            //packageReqHandler.SetParameter("appid", TenPayV3Info.AppId);
            //packageReqHandler.SetParameter("mch_id", TenPayV3Info.MchId);
            //packageReqHandler.SetParameter("nonce_str", nonceStr);
            //packageReqHandler.SetParameter("body", "test");
            //packageReqHandler.SetParameter("out_trade_no", sp_billno);
            //packageReqHandler.SetParameter("total_fee", "1");
            //packageReqHandler.SetParameter("spbill_create_ip", HttpContext.UserHostAddress()?.ToString());
            //packageReqHandler.SetParameter("notify_url", TenPayV3Info.TenPayV3Notify);
            //packageReqHandler.SetParameter("trade_type", TenPayV3Type.NATIVE.ToString());
            //packageReqHandler.SetParameter("openid", openId);
            //packageReqHandler.SetParameter("product_id", productId);

            //string sign = packageReqHandler.CreateMd5Sign("key", TenPayV3Info.Key);
            //packageReqHandler.SetParameter("sign", sign);

            //string data = packageReqHandler.ParseXML();

            var xmlDataInfo = new TenPayV3UnifiedorderRequestData(TenPayV3Info.AppId, TenPayV3Info.MchId, "test", sp_billno, 1, HttpContext.UserHostAddress()?.ToString(), TenPayV3Info.TenPayV3Notify, TenPay.TenPayV3Type.JSAPI, openId, TenPayV3Info.Key, nonceStr);


            try
            {
                //调用统一订单接口
                var result = TenPayV3.Unifiedorder(xmlDataInfo);
                //var unifiedorderRes = XDocument.Parse(result);
                //string prepayId = unifiedorderRes.Element("xml").Element("prepay_id").Value;

                //创建应答信息返回给微信
                res.SetParameter("return_code", result.return_code);
                res.SetParameter("return_msg", result.return_msg ?? "OK");
                res.SetParameter("appid", result.appid);
                res.SetParameter("mch_id", result.mch_id);
                res.SetParameter("nonce_str", result.nonce_str);
                res.SetParameter("prepay_id", result.prepay_id);
                res.SetParameter("result_code", result.result_code);
                res.SetParameter("err_code_des", "OK");

                string nativeReqSign = res.CreateMd5Sign("key", TenPayV3Info.Key);
                res.SetParameter("sign", nativeReqSign);
            }
            catch (Exception)
            {
                res.SetParameter("return_code", "FAIL");
                res.SetParameter("return_msg", "统一下单失败");
            }

            return(Content(res.ParseXML()));
        }
示例#5
0
        public ActionResult JsApi(string code, string state)
        {
            if (string.IsNullOrEmpty(code))
            {
                return(Content("您拒绝了授权!"));
            }

            if (!state.Contains("|"))
            {
                //这里的state其实是会暴露给客户端的,验证能力很弱,这里只是演示一下
                //实际上可以存任何想传递的数据,比如用户ID,并且需要结合例如下面的Session["OAuthAccessToken"]进行验证
                return(Content("验证失败!请从正规途径进入!1001"));
            }
            try
            {
                //获取产品信息
                var          stateData = state.Split('|');
                int          productId = 0;
                ProductModel product   = null;
                if (int.TryParse(stateData[0], out productId))
                {
                    int hc = 0;
                    if (int.TryParse(stateData[1], out hc))
                    {
                        var products = ProductModel.GetFakeProductList();
                        product = products.FirstOrDefault(z => z.Id == productId);
                        if (product == null || product.GetHashCode() != hc)
                        {
                            return(Content("商品信息不存在,或非法进入!1002"));
                        }
                        ViewData["product"] = product;
                    }
                }

                //通过,用code换取access_token
                var openIdResult = OAuthApi.GetAccessToken(TenPayV3Info.AppId, TenPayV3Info.AppSecret, code);
                if (openIdResult.errcode != ReturnCode.请求成功)
                {
                    return(Content("错误:" + openIdResult.errmsg));
                }

                string sp_billno = Request["order_no"];
                if (string.IsNullOrEmpty(sp_billno))
                {
                    //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                    sp_billno = string.Format("{0}{1}{2}", TenPayV3Info.MchId /*10位*/, DateTime.Now.ToString("yyyyMMddHHmmss"),
                                              TenPayV3Util.BuildRandomStr(6));
                }
                //else
                //{
                //    sp_billno = Request["order_no"];
                //}

                var timeStamp = TenPayV3Util.GetTimestamp();
                var nonceStr  = TenPayV3Util.GetNoncestr();

                var body        = product == null ? "test" : product.Name;
                var price       = product == null ? 100 : product.Price * 100;
                var xmlDataInfo = new TenPayV3UnifiedorderRequestData(TenPayV3Info.AppId, TenPayV3Info.MchId, body, sp_billno, price, Request.UserHostAddress, TenPayV3Info.TenPayV3Notify, TenPayV3Type.JSAPI, openIdResult.openid, TenPayV3Info.Key, nonceStr);

                var result = TenPayV3.Unifiedorder(xmlDataInfo);//调用统一订单接口

                //JsSdkUiPackage jsPackage = new JsSdkUiPackage(TenPayV3Info.AppId, timeStamp, nonceStr,);
                var package = string.Format("prepay_id={0}", result.prepay_id);

                ViewData["appId"]     = TenPayV3Info.AppId;
                ViewData["timeStamp"] = timeStamp;
                ViewData["nonceStr"]  = nonceStr;
                ViewData["package"]   = package;
                ViewData["paySign"]   = TenPayV3.GetJsPaySign(TenPayV3Info.AppId, timeStamp, nonceStr, package, TenPayV3Info.Key);

                return(View());
            }
            catch (Exception ex)
            {
                var msg = ex.Message;
                msg += "<br>" + ex.StackTrace;
                msg += "<br>==Source==<br>" + ex.Source;

                if (ex.InnerException != null)
                {
                    msg += "<br>===InnerException===<br>" + ex.InnerException.Message;
                }
                return(Content(msg));
            }
        }
        /// <summary>
        /// H5支付
        /// </summary>
        /// <param name="productId"></param>
        /// <param name="hc"></param>
        /// <returns></returns>
        public ActionResult H5Pay(int productId, int hc)
        {
            {
                try
                {
                    //获取产品信息
                    var products = ProductModel.GetFakeProductList();
                    var product  = products.FirstOrDefault(z => z.Id == productId);
                    if (product == null || product.GetHashCode() != hc)
                    {
                        return(Content("商品信息不存在,或非法进入!1002"));
                    }

                    string openId = null;//此时在外部浏览器,无法或得到OpenId

                    string sp_billno = Request.Query["order_no"];
                    if (string.IsNullOrEmpty(sp_billno))
                    {
                        //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                        sp_billno = string.Format("{0}{1}{2}", TenPayV3Info.MchId /*10位*/, SystemTime.Now.ToString("yyyyMMddHHmmss"),
                                                  TenPayV3Util.BuildRandomStr(6));
                    }
                    else
                    {
                        sp_billno = Request.Query["order_no"];
                    }

                    var timeStamp = TenPayV3Util.GetTimestamp();
                    var nonceStr  = TenPayV3Util.GetNoncestr();

                    var body  = product == null ? "test" : product.Name;
                    var price = product == null ? 100 : (int)product.Price * 100;
                    //var ip = Request.Params["REMOTE_ADDR"];
                    var xmlDataInfo = new TenPayV3UnifiedorderRequestData(TenPayV3Info.AppId, TenPayV3Info.MchId, body, sp_billno, price, HttpContext.UserHostAddress()?.ToString(), TenPayV3Info.TenPayV3Notify, TenPay.TenPayV3Type.MWEB /*此处无论传什么,方法内部都会强制变为MWEB*/, openId, TenPayV3Info.Key, nonceStr);

                    var result = TenPayV3.Html5Order(xmlDataInfo); //调用统一订单接口
                                                                   //JsSdkUiPackage jsPackage = new JsSdkUiPackage(TenPayV3Info.AppId, timeStamp, nonceStr,);

                    /*
                     * result:{"device_info":"","trade_type":"MWEB","prepay_id":"wx20170810143223420ae5b0dd0537136306","code_url":"","mweb_url":"https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx20170810143223420ae5b0dd0537136306\u0026package=1505175207","appid":"wx669ef95216eef885","mch_id":"1241385402","sub_appid":"","sub_mch_id":"","nonce_str":"juTchIZyhXvZ2Rfy","sign":"5A37D55A897C854F64CCCC4C94CDAFE3","result_code":"SUCCESS","err_code":"","err_code_des":"","return_code":"SUCCESS","return_msg":null}
                     */
                    //return Json(result, JsonRequestBehavior.AllowGet);

                    var package = string.Format("prepay_id={0}", result.prepay_id);

                    ViewData["product"] = product;

                    ViewData["appId"]     = TenPayV3Info.AppId;
                    ViewData["timeStamp"] = timeStamp;
                    ViewData["nonceStr"]  = nonceStr;
                    ViewData["package"]   = package;
                    ViewData["paySign"]   = TenPayV3.GetJsPaySign(TenPayV3Info.AppId, timeStamp, nonceStr, package, TenPayV3Info.Key);

                    //设置成功页面(也可以不设置,支付成功后默认返回来源地址)
                    var returnUrl =
                        string.Format("https://sdk.weixin.senparc.com/TenpayV3/H5PaySuccess?productId={0}&hc={1}",
                                      productId, hc);

                    var mwebUrl = result.mweb_url;
                    if (!string.IsNullOrEmpty(returnUrl))
                    {
                        mwebUrl += string.Format("&redirect_url={0}", returnUrl.AsUrlData());
                    }

                    ViewData["MWebUrl"] = mwebUrl;

                    //临时记录订单信息,留给退款申请接口测试使用
                    HttpContext.Session.SetString("BillNo", sp_billno);
                    HttpContext.Session.SetString("BillFee", price.ToString());

                    return(View());
                }
                catch (Exception ex)
                {
                    var msg = ex.Message;
                    msg += "<br>" + ex.StackTrace;
                    msg += "<br>==Source==<br>" + ex.Source;

                    if (ex.InnerException != null)
                    {
                        msg += "<br>===InnerException===<br>" + ex.InnerException.Message;
                    }
                    return(Content(msg));
                }
            }
        }
示例#7
0
        public ActionResult SubmitPreSaleOrder(PreSaleOrderViewModel preSaleOrderViewModel)
        {
            var jsonResult = new JsonResult();

            if (!string.IsNullOrEmpty(preSaleOrderViewModel.InviteCode))
            {
                preSaleOrderViewModel.InviteCode = preSaleOrderViewModel.InviteCode.Replace(" ", "");
            }
            var preSaleOrder = new PreSaleOrder
            {
                OrderId         = preSaleOrderViewModel.OrderId,//OrderService.GetNewOrderId(),
                UserId          = this.UserInfo.UserId,
                ProductId       = preSaleOrderViewModel.PreSaleProduct.ProductId,
                Price           = preSaleOrderViewModel.PreSaleProduct.Price,
                Count           = preSaleOrderViewModel.Count,
                ProvinceId      = preSaleOrderViewModel.ProvinceId,
                CityId          = preSaleOrderViewModel.CityId,
                Code            = preSaleOrderViewModel.AreaId,
                Address         = preSaleOrderViewModel.Address,
                Status          = 0,
                CreateTime      = DateTime.Now,
                Receiver        = preSaleOrderViewModel.UserName,
                Phone           = preSaleOrderViewModel.Phone,
                TotalMoney      = preSaleOrderViewModel.Count * preSaleOrderViewModel.PreSaleProduct.Price,
                ExpressDelivery = string.Empty,
                InviteCode      = preSaleOrderViewModel.InviteCode
            };



            var result = PreSaleOrderService.SubmitPreSaleOrder(preSaleOrder);

            if (result > 0)
            {
                #region 微信支付所需数据计算
                var timeStamp = TenPayV3Util.GetTimestamp();
                var nonceStr  = TenPayV3Util.GetNoncestr();
                var openId    = this.UserInfo.WxOpenId;
                var pre_id    = WeixinPay.WeixinPayApi.Unifiedorder(preSaleOrderViewModel.PreSaleProduct.Name,
                                                                    preSaleOrder.OrderId, preSaleOrder.Price * preSaleOrder.Count, Request.UserHostAddress, openId);
                if (pre_id == "ERROR" || pre_id == "FAIL")
                {
                    return(Content("ERROR"));
                }
                var package = "prepay_id=" + pre_id;

                var req = new RequestHandler(null);
                req.SetParameter("appId", AppId);
                req.SetParameter("timeStamp", timeStamp);
                req.SetParameter("nonceStr", nonceStr);
                req.SetParameter("package", package);
                req.SetParameter("signType", "MD5");
                var paySign = req.CreateMd5Sign("key", PayKey);


                #endregion

                preSaleOrderViewModel.NonceStr  = nonceStr;
                preSaleOrderViewModel.TimeStamp = timeStamp;
                preSaleOrderViewModel.Package   = package;
                preSaleOrderViewModel.AppId     = AppId;
                preSaleOrderViewModel.PaySign   = paySign;
            }
            else
            {
                preSaleOrderViewModel.OrderId = 0;
            }

            jsonResult.Data = preSaleOrderViewModel;
            return(jsonResult);
        }
        public IActionResult Unifiedorder(UnidiedorderData udata)
        {
            using (_dbContext)
            {
                var response = ResponseModelFactory.CreateResultInstance;

                var stu = _dbContext.StudentBill.FirstOrDefault(x => x.StudentBillUuid == udata.BillGuid);


                if (stu == null)
                {
                    response.SetFailed("未查找到对应缴费信息");
                    return(Ok(response));
                }
                if (stu.OrderMoney >= stu.AmountPayable)
                {
                    response.SetFailed("已缴费");
                    return(Ok(response));
                }

                //时间戳
                string timeStamp = TenPayV3Util.GetTimestamp();
                //随机字符串
                string nonceStr = TenPayV3Util.GetNoncestr();
                string appid    = "wx0bf342f51437ca67";

                //获取学校绑定商户信息
                var school = _dbContext.School.FirstOrDefault(x => x.SchoolUuid == udata.Guid);
                if (school == null)
                {
                    response.SetFailed("未查找到对应学校");
                    return(Ok(response));
                }
                if (school.Yard == null || school.Secretkey == null)
                {
                    response.SetFailed("未查找到对应学校商户信息");
                    return(Ok(response));
                }


                //商户号
                string mch_id = school.Yard;                                                 //"1600884893";
                //商户支付秘钥
                string partnerKey = AES.AesDecrypt(school.Secretkey, HaiKan3.Utils.AES.Key); //"ew6QCdWiDfcif902EbC07dh0icTuM5le";
                //签名
                string sign      = "";
                string sign_type = "MD5";

                //商品描述
                string body = udata.Body;
                //商户订单号
                string out_trade_no = "";
                //标价金额(单位:分)
                int total_fee = udata.Totalfee;
                //终端IP
                //string spbill_create_ip = "183.158.56.51"; //Request.HttpContext.Connection.RemoteIpAddress.ToString();
                string spbill_create_ip = Request.HttpContext.Connection.RemoteIpAddress.ToString();
                _logger.LogInformation("ip:" + spbill_create_ip);
                //通知地址
                string notify_url = "http://msz-b.jiulong.yoruan.com/test/PayCallBack";
                //string notify_url = "http://msz-b.jiulong.yoruan.com/api/v1/student/StudentBill/PayCallBack";
                //交易类型
                string trade_type = "JSAPI";
                //预支付id
                string prepayId = "";
                //微信调用支付的签名
                string paySign = "";
                //用户openid
                string     openid = udata.Openid;
                Store_Info info   = new Store_Info()
                {
                    address   = "xxxxxx",
                    area_code = "330185",
                    id        = "MSZzf" + appid,
                    name      = "码上知支付商城",
                };
                TenPayV3UnifiedorderRequestData_SceneInfo sceneInfo = new TenPayV3UnifiedorderRequestData_SceneInfo(false);
                sceneInfo.store_info = info;

                //生成订单号
                out_trade_no = DateTime.Now.ToString("yyyyMMddHHmmss") + TenPayV3Util.BuildRandomStr(14);
                _logger.LogInformation("订单号:" + out_trade_no);


                TenPayV3UnifiedorderRequestData requestData = new TenPayV3UnifiedorderRequestData(appid, mch_id, body, out_trade_no, total_fee, spbill_create_ip, notify_url, Senparc.Weixin.TenPay.TenPayV3Type.JSAPI, openid, partnerKey, nonceStr, null, DateTime.Now, DateTime.Now.AddHours(2), null, null, "CNY", null, null, false, sceneInfo, null);

                var urlFormat = ReurnPayApiUrl("https://api.mch.weixin.qq.com/{0}pay/unifiedorder");
                var data      = requestData.PackageRequestHandler.ParseXML();//获取XML
                _logger.LogInformation("xml:" + data);
                var str = PostXmlMethod.PostXmla(urlFormat, data);
                _logger.LogInformation("postxml:" + str);

                DataSet       ds     = new DataSet();
                StringReader  stream = new StringReader(str);     //读取字符串为数据量
                XmlTextReader reader = new XmlTextReader(stream); //对XML的数据流的只进只读访问
                ds.ReadXml(reader);                               //把数据读入DataSet

                if (ds.Tables[0].Rows.Count > 0)
                {
                    if (ds.Tables[0].Rows[0]["return_code"].ToString() == "SUCCESS")
                    {
                        _logger.LogInformation("成功");
                        _logger.LogInformation("timeStamp:" + timeStamp + "; nonceStr:" + nonceStr + "; prepayId:" + ds.Tables[0].Rows[0]["prepay_id"].ToString() + "; paySign:" + ds.Tables[0].Rows[0]["sign"].ToString() + "; partnerKey:" + partnerKey);
                        response.SetData(new { appid = ds.Tables[0].Rows[0]["appid"].ToString(), timeStamp, nonceStr, prepayId = ds.Tables[0].Rows[0]["prepay_id"].ToString(), sign_type, paySign = ds.Tables[0].Rows[0]["sign"].ToString(), sjcode = Electroniccode.getString(32), key = partnerKey, outtradeno = out_trade_no });
                        BillState bill = new BillState()
                        {
                            BillUuid  = Guid.NewGuid(),
                            BillNum   = out_trade_no,
                            Appid     = appid,
                            MchId     = mch_id,
                            Money     = total_fee,
                            Key       = partnerKey,
                            SbillUuid = udata.BillGuid,
                        };
                        _logger.LogInformation("订单记录:" + JsonConvert.SerializeObject(bill));
                        _dbContext.BillState.Add(bill);
                        _dbContext.SaveChanges();
                        return(Ok(response));
                    }
                    else
                    {
                        response.SetFailed(ds.Tables[0].Rows[0]["return_msg"].ToString());
                        _logger.LogInformation("异常");
                        _logger.LogInformation(ds.Tables[0].Rows[0]["return_msg"].ToString());
                        return(Ok(response));
                    }
                }
                else
                {
                    response.SetFailed("订单信息为空");
                    return(Ok(response));
                }
            }
        }
示例#9
0
        /// <summary>
        /// 支付页面
        /// </summary>
        /// <returns></returns>
        public ActionResult Pay(long?orderId, string act = "pay")
        {
            try
            {
                var orderPayViewModel = new OrderPayViewModel();
                orderPayViewModel.Action = act;

                if (orderId.HasValue)
                {
                    var orderModel = OrderService.GetOrder(this.UserInfo.UserId, orderId.Value);

                    if (orderModel != null)
                    {
                        var productModel = ProductService.GetProductById(orderModel.ProductId);

                        if (productModel != null)
                        {
                            orderPayViewModel.Name       = productModel.Name;
                            orderPayViewModel.SheepType  = productModel.SheepType;
                            orderPayViewModel.OrderId    = orderId.Value;
                            orderPayViewModel.Price      = productModel.Price;
                            orderPayViewModel.Count      = orderModel.ProductCount;
                            orderPayViewModel.TotalPrice = productModel.Price * orderModel.ProductCount;
                            orderPayViewModel.StartTime  = productModel.StartTime;
                            orderPayViewModel.EndTime    = productModel.EndTime;
                            orderPayViewModel.ImgUrl     = productModel.ImgUrl;
                            orderPayViewModel.PayType    = orderModel.PayType;
                            if (act.ToLower() == "redeem")
                            {
                                orderPayViewModel.Action    = "redeem";
                                orderPayViewModel.Principal = orderPayViewModel.TotalPrice;
                                orderPayViewModel.Earing    = productModel.Earning * orderPayViewModel.Count;
                            }
                            else if (act.ToLower() == "pay")
                            {
                                if (!productModel.CanSale)
                                {
                                    return(RedirectToAction("OrderList", "Home", new { tab = 3 }));
                                }
                                orderPayViewModel.Action = "pay";
                                #region 微信支付



                                var userid = this.UserInfo.UserId;
                                var openId = this.UserInfo.WxOpenId;
                                var order  = OrderService.GetOrderViewModel(userid, orderId.Value);
                                if (string.IsNullOrEmpty(order.ProductName) || order.OrderId == 0 || order.TotalMoney == 0M)
                                {
                                    return(Content("ERROR"));
                                }
                                var timeStamp = TenPayV3Util.GetTimestamp();
                                var nonceStr  = TenPayV3Util.GetNoncestr();

                                var pre_id = WeixinPay.WeixinPayApi.Unifiedorder(order.ProductName, order.OrderId, order.TotalMoney, Request.UserHostAddress, openId);
                                if (pre_id == "ERROR" || pre_id == "FAIL")
                                {
                                    return(Content("ERROR"));
                                }
                                var package = "prepay_id=" + pre_id;

                                var req = new RequestHandler(null);
                                req.SetParameter("appId", AppId);
                                req.SetParameter("timeStamp", timeStamp);
                                req.SetParameter("nonceStr", nonceStr);
                                req.SetParameter("package", package);
                                req.SetParameter("signType", "MD5");
                                var paySign = req.CreateMd5Sign("key", PayKey);

                                //绑定页面数据
                                ViewBag.TimeStamp = timeStamp;
                                ViewBag.NonceStr  = nonceStr;
                                ViewBag.PaySign   = paySign;
                                ViewBag.Package   = package;
                                ViewBag.AppId     = AppId;
                                ViewBag.OrderId   = order.OrderId;
                                ViewBag.Uid       =
                                    DotNet.Common.CryptographyHelper.Base64Encrypt(this.UserInfo.UserId.ToString());
                                OrderService.InsertOrderPay(new OrderPayModel()
                                {
                                    PayId      = pre_id,
                                    OrdeId     = order.OrderId,
                                    UserId     = order.UserId,
                                    Status     = 0,
                                    CreateTime = DateTime.Now
                                });

                                #endregion
                            }
                        }
                    }
                }
                return(View(orderPayViewModel));
            }
            catch (Exception e)
            {
                logger.Error(e);
                throw;
            }
        }
示例#10
0
        public ReJson DoWXAppPayOrder(string ordernum)
        {
            //获取订单
            Order entity = Order.Find(Order._.OrderNum == ordernum);

            if (entity == null)
            {
                //reJson.code = 40000;
                //reJson.message = "系统找不到本订单!";
                //return reJson;

                return(new ReJson(40000, "系统找不到本订单!"));
            }
            //判断订单状态
            if (entity.OrderStatus == Utils.OrdersState[3])
            {
                //reJson.code = 40000;
                //reJson.message = "已完成订单不允许支付!";
                //return reJson;
                return(new ReJson(40000, "已完成订单不允许支付!"));
            }
            if (entity.PaymentStatus != Utils.PaymentState[0])
            {
                //reJson.code = 40000;
                //reJson.message = "当前订单支付状态不允许支付!";
                //return reJson;
                return(new ReJson(40000, "当前订单支付状态不允许支付!"));
            }
            //获取用户并判断是否是已经注册用户
            Member my = Member.FindById(entity.UId);

            if (my == null || string.IsNullOrEmpty(my.WeixinAppOpenId))
            {
                //reJson.code = 40000;
                //reJson.message = "用户状态错误,无法使用本功能!";
                //return reJson;
                return(new ReJson(40000, "用户状态错误,无法使用本功能!"));
            }
            //开始生成支付订单
            OnlinePayOrder model = OnlinePayOrder.Find(OnlinePayOrder._.OrderNum == entity.OrderNum);

            if (model == null)
            {
                model               = new OnlinePayOrder();
                model.OrderId       = entity.Id;
                model.OrderNum      = entity.OrderNum;
                model.PayId         = 1;
                model.PaymentNotes  = "微信支付";
                model.PaymentStatus = Utils.PaymentState[0];
                model.PayOrderNum   = Utils.GetOrderNum();//在线支付订单的订单号
                model.PayType       = "微信支付";
                model.TotalPrice    = entity.TotalPay;
                model.TotalQty      = entity.TotalQty;
                model.UId           = entity.UId;
                model.Ip            = Utils.GetIP();
                model.IsOK          = 0;
                model.AddTime       = DateTime.Now;
                model.Insert();
            }


            //写入日志
            OrderLog log = new OrderLog();

            log.AddTime  = DateTime.Now;
            log.OrderId  = entity.Id;
            log.OrderNum = entity.OrderNum;
            log.UId      = entity.UId;
            log.Actions  = "用户使用微信支付;支付订单号:" + model.PayOrderNum;
            log.Insert();

            Core.Config cfg        = Core.Config.GetSystemConfig();
            string      appId      = cfg.WXAppId;     // ConfigurationManager.AppSettings["WeixinAppId"];
            string      appSecrect = cfg.WXAppSecret; // ConfigurationManager.AppSettings["WeixinAppSecrect"];
            string      wxmchId    = cfg.MCHId;       // ConfigurationManager.AppSettings["WeixinMCHId"];
            string      wxmchKey   = cfg.MCHKey;      // ConfigurationManager.AppSettings["WeixinMCHKey"];



            TenPayV3Info TenPayV3Info = new TenPayV3Info(appId, appSecrect, wxmchId, wxmchKey, "", "", Utils.GetServerUrl() + "/wxpayment/notify", Utils.GetServerUrl() + "/wxpayment/notify");

            TenPayV3Info.TenPayV3Notify = Utils.GetServerUrl() + "/wxpayment/notify";
            XTrace.WriteLine("微信支付异步通知地址:" + TenPayV3Info.TenPayV3Notify);
            //创建支付应答对象
            RequestHandler packageReqHandler = new RequestHandler(null);
            var            sp_billno         = DateTime.Now.ToString("HHmmss") + TenPayV3Util.BuildRandomStr(26);//最多32位
            var            nonceStr          = TenPayV3Util.GetNoncestr();
            string         rtimeStamp        = Utils.GetTimeStamp();

            //创建请求统一订单接口参数
            var xmlDataInfo = new TenPayV3UnifiedorderRequestData(TenPayV3Info.AppId, TenPayV3Info.MchId, entity.Title, model.OrderNum, (int)(entity.TotalPay * 100), Utils.GetIP(), TenPayV3Info.TenPayV3Notify, Senparc.Weixin.TenPay.TenPayV3Type.JSAPI, my.WeixinAppOpenId, TenPayV3Info.Key, nonceStr);

            //返回给微信的请求
            RequestHandler res = new RequestHandler(null);

            try
            {
                //调用统一订单接口
                var result = TenPayV3.Unifiedorder(xmlDataInfo);
                XTrace.WriteLine("微信支付统一下单返回:" + JsonConvert.SerializeObject(result));

                if (result.return_code == "FAIL")
                {
                    //reJson.code = 40005;
                    //reJson.message = result.return_msg;
                    //return reJson;
                    return(new ReJson(40005, result.return_msg));
                }
                string nativeReqSign = res.CreateMd5Sign("key", TenPayV3Info.Key);
                //https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3
                //paySign = MD5(appId=wxd678efh567hg6787&nonceStr=5K8264ILTKCH16CQ2502SI8ZNMTM67VS&package=prepay_id=wx2017033010242291fcfe0db70013231072&signType=MD5&timeStamp=1490840662&key=qazwsxedcrfvtgbyhnujmikolp111111)
                string paySign = Utils.MD5($"appId={TenPayV3Info.AppId}&nonceStr={nonceStr}&package=prepay_id={result.prepay_id}&signType=MD5&timeStamp={rtimeStamp}&key={TenPayV3Info.Key}").ToUpper();

                string package = $"prepay_id={result.prepay_id}";

                dynamic detail = new { timeStamp = rtimeStamp, nonceStr = nonceStr, package = package, signType = "MD5", paySign = paySign };

                //reJson.code = 0;
                //reJson.message = "下单成功!";
                //reJson.detail = detail;
                //return reJson;
                return(new ReJson(0, "下单成功!", detail));
            }
            catch (Exception ex)
            {
                res.SetParameter("return_code", "FAIL");
                res.SetParameter("return_msg", "统一下单失败");
                XTrace.WriteLine($"统一下单失败:{ex.Message}");

                //reJson.code = 40005;
                //reJson.message = "统一下单失败,请联系管理员!";
                return(new ReJson(40005, "统一下单失败,请联系管理员!"));
            }
        }
 string GetNonceStr(WeChatUnifiedorderParamter paramter)
 {
     return(string.IsNullOrWhiteSpace(paramter.NonceStr) ? TenPayV3Util.GetNoncestr() : paramter.NonceStr);
 }
示例#12
0
        public ActionResult ajaxorder(OrdersEntity ordersEntity)
        {
            try
            {
                string city = ordersEntity.City;
                if (city.Contains("-"))
                {
                    string[] area = ordersEntity.City.Split('-');
                    if (area.Length > 0)
                    {
                        ordersEntity.Province = area[0]; //省
                        ordersEntity.City     = area[1]; //市
                        ordersEntity.Country  = area[2]; //市
                    }
                }
                else
                {
                    string[] area = ordersEntity.City.Split(' ');
                    if (area.Length > 0)
                    {
                        ordersEntity.Province = area[0]; //省
                        ordersEntity.City     = area[1]; //市
                    }
                }

                //创建订单表
                string payType = ordersEntity.PayType;
                if (payType == "alipay")
                {
                    payType = "支付宝";
                }
                else
                {
                    if (ordersEntity.PC == 1)
                    {
                        payType = "微信扫码";
                    }
                    else
                    {
                        payType = "微信H5";
                    }
                }
                ordersEntity.PayType = payType;
                ordersEntity         = ordersbll.SaveForm(ordersEntity);

                var sp_billno = ordersEntity.OrderSn;
                var nonceStr  = TenPayV3Util.GetNoncestr();

                //商品Id,用户自行定义
                string productId = ordersEntity.TelphoneID.ToString();

                H5Response root = null;

                if (payType == "支付宝")
                {
                    try
                    {
                        DefaultAopClient client = new DefaultAopClient(WeixinConfig.serviceUrl, WeixinConfig.aliAppId, WeixinConfig.privateKey, "json", "1.0",
                                                                       WeixinConfig.signType, WeixinConfig.payKey, WeixinConfig.charset, false);

                        // 组装业务参数model
                        AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
                        model.Body           = "支付宝购买靓号";                                        // 商品描述
                        model.Subject        = productId;                                        // 订单名称
                        model.TotalAmount    = ordersEntity.Price.ToString();                    // 付款金额"0.01"
                        model.OutTradeNo     = sp_billno;                                        // 外部订单号,商户网站订单系统中唯一的订单号
                        model.ProductCode    = "QUICK_WAP_WAY";
                        model.QuitUrl        = "https://mwd.gzjxwlkj.cn:8023/webapp/mwd2/index"; // 支付中途退出返回商户网站地址
                        model.TimeoutExpress = "90m";
                        AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
                        //设置支付完成同步回调地址
                        request.SetReturnUrl(WeixinConfig.return_url);
                        //设置支付完成异步通知接收地址
                        request.SetNotifyUrl(WeixinConfig.notify_url);
                        // 将业务model载入到request
                        request.SetBizModel(model);

                        AlipayTradeWapPayResponse response = null;
                        try
                        {
                            response = client.pageExecute(request, null, "post");
                            //Response.Write(response.Body);

                            H5PayData h5PayData = new H5PayData();
                            h5PayData.form = response.Body;
                            root           = new H5Response {
                                code = true, status = true, msg = "\u652f\u4ed8\u5b9d\u63d0\u4ea4\u6210\u529f\uff01", data = h5PayData
                            };
                        }
                        catch (Exception exp)
                        {
                            throw exp;
                        }
                    }
                    catch (Exception ex)
                    {
                        //return Json(new { Result = false, msg = "缺少参数" });
                    }
                }
                else
                {
                    //0 手机(H5支付)  1 电脑(扫码Native支付),2微信浏览器(JSAPI)
                    //pc端返回二维码,否则H5
                    if (payType == "微信扫码")
                    {
                        //创建请求统一订单接口参数
                        var xmlDataInfo = new TenPayV3UnifiedorderRequestData(WeixinConfig.AppID2,
                                                                              tenPayV3Info.MchId,
                                                                              "扫码支付靓号",
                                                                              sp_billno,
                                                                              Convert.ToInt32(ordersEntity.Price * 100),
                                                                              //1,
                                                                              Request.UserHostAddress,
                                                                              tenPayV3Info.TenPayV3Notify,
                                                                              TenPayV3Type.NATIVE,
                                                                              null,
                                                                              tenPayV3Info.Key,
                                                                              nonceStr,
                                                                              productId: productId);
                        //调用统一订单接口
                        var result = TenPayV3.Unifiedorder(xmlDataInfo);
                        if (result.return_code == "SUCCESS")
                        {
                            H5PayData h5PayData = new H5PayData()
                            {
                                appid         = WeixinConfig.AppID2,
                                code_url      = result.code_url,//weixin://wxpay/bizpayurl?pr=lixpXgt-----------扫码支付
                                mch_id        = WeixinConfig.MchId,
                                nonce_str     = result.nonce_str,
                                prepay_id     = result.prepay_id,
                                result_code   = result.result_code,
                                return_code   = result.return_code,
                                return_msg    = result.return_msg,
                                sign          = result.sign,
                                trade_type    = "NATIVE",
                                trade_no      = sp_billno,
                                payid         = ordersEntity.Id.ToString(),
                                wx_query_href = "https://shop.jnlxsm.net/webapp/mwd2/queryWx/" + ordersEntity.Id,
                                wx_query_over = "https://shop.jnlxsm.net/webapp/mwd2/paymentFinish/" + ordersEntity.Id
                            };

                            root = new H5Response {
                                code = true, status = true, msg = "\u5fae\u4fe1\u626b\u7801\u63d0\u4ea4\u6210\u529f\uff01", data = h5PayData
                            };
                        }
                        else
                        {
                            root = new H5Response {
                                code = false, status = false, msg = result.return_msg
                            };
                        }
                    }
                    else
                    {
                        var xmlDataInfoH5 = new TenPayV3UnifiedorderRequestData(WeixinConfig.AppID2, tenPayV3Info.MchId, "H5购买靓号", sp_billno,
                                                                                // 1,
                                                                                Convert.ToInt32(ordersEntity.Price * 100),
                                                                                Request.UserHostAddress, tenPayV3Info.TenPayV3Notify, TenPayV3Type.MWEB /*此处无论传什么,方法内部都会强制变为MWEB*/, null, tenPayV3Info.Key, nonceStr);

                        var resultH5 = TenPayV3.Html5Order(xmlDataInfoH5); //调用统一订单接口
                        LogHelper.AddLog(resultH5.ResultXml);              //记录日志
                        if (resultH5.return_code == "SUCCESS")
                        {
                            H5PayData h5PayData = new H5PayData()
                            {
                                appid         = WeixinConfig.AppID2,
                                mweb_url      = resultH5.mweb_url,//H5访问链接
                                mch_id        = WeixinConfig.MchId,
                                nonce_str     = resultH5.nonce_str,
                                prepay_id     = resultH5.prepay_id,
                                result_code   = resultH5.result_code,
                                return_code   = resultH5.return_code,
                                return_msg    = resultH5.return_msg,
                                sign          = resultH5.sign,
                                trade_type    = "H5",
                                trade_no      = sp_billno,
                                payid         = ordersEntity.Id.ToString(),
                                wx_query_href = "https://shop.jnlxsm.net/webapp/mwd2/queryWx/" + ordersEntity.Id,
                                wx_query_over = "https://shop.jnlxsm.net/webapp/mwd2/paymentFinish/" + ordersEntity.Id
                            };

                            root = new H5Response {
                                code = true, status = true, msg = "\u5fae\u4fe1\u0048\u0035\u63d0\u4ea4\u6210\u529f\uff01", data = h5PayData
                            };
                        }
                        else
                        {
                            root = new H5Response {
                                code = false, status = false, msg = resultH5.return_msg
                            };
                        }
                    }
                }

                LogHelper.AddLog(JsonConvert.SerializeObject(root));//记录日志

                return(Content(JsonConvert.SerializeObject(root)));
            }
            catch (Exception ex)
            {
                LogHelper.AddLog(ex.Message);//记录日志
                throw;
            }
        }
示例#13
0
        /// <summary>
        /// 最新接口调用
        /// 2014-11-24
        /// </summary>
        /// <param name="ttFee">支付金额(单位元)</param>
        /// <param name="busiBody">订单内容</param>
        /// <param name="out_trade_no">订单号</param>
        /// <param name="code"></param>
        protected void WxPayDataV3(decimal ttFee, string busiBody, string out_trade_no, string code)
        {
            BLL.wx_payment_wxpay   wxPayBll    = new BLL.wx_payment_wxpay();
            Model.wx_payment_wxpay paymentInfo = wxPayBll.GetModelByWid(wid);

            BLL.wx_userweixin   uwBll    = new BLL.wx_userweixin();
            Model.wx_userweixin uwEntity = uwBll.GetModel(wid);

            // logBll.AddLog(wid,"【微支付】微信预定", "paypage.aspx WxPayDataV3", "211 wid:" + wid, 1);

            //先设置基本信息
            string MchId = paymentInfo.mch_id;      // "1218574001";//

            string partnerKey = paymentInfo.paykey; // 商户支付密钥Key。登录微信商户后台,进入栏目【账户设置】【密码安全】【API 安全】【API 密钥】

            string notify_url = "http://" + HttpContext.Current.Request.Url.Authority + "/api/payment/wxpay/notify_url.aspx";

            WXLogs.AddLog(wid, "【微支付】微信预定", "paypage.aspx WxPayDataV3", "uwEntity.AppId: " + uwEntity.AppId + "| uwEntity.AppSecret;" + uwEntity.AppSecret + "|code:" + code, 1);


            string timeStamp = "";
            string nonceStr  = "";
            string paySign   = "";

            string sp_billno = out_trade_no;
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

            if (null == sp_billno)
            {
                //生成订单10位序列号,此处用时间和随机数生成,商户根据自己调整,保证唯一
                sp_billno = DateTime.Now.ToString("HHmmss") + TenPayV3Util.BuildRandomStr(28);
            }


            //创建支付应答对象
            OneGulp.WeChat.MP.TenPayLibV3.RequestHandler packageReqHandler = new OneGulp.WeChat.MP.TenPayLibV3.RequestHandler(null);
            //初始化
            packageReqHandler.Init();
            //packageReqHandler.SetKey(""/*TenPayV3Info.Key*/);

            timeStamp = TenPayV3Util.GetTimestamp();
            nonceStr  = TenPayV3Util.GetNoncestr();

            //设置package订单参数
            packageReqHandler.SetParameter("appid", uwEntity.AppId);                      //公众账号ID
            packageReqHandler.SetParameter("mch_id", MchId);                              //商户号
            packageReqHandler.SetParameter("nonce_str", nonceStr);                        //随机字符串
            packageReqHandler.SetParameter("body", busiBody);                             //商品描述
            packageReqHandler.SetParameter("attach", wid + "|" + busiBody);
            packageReqHandler.SetParameter("out_trade_no", sp_billno);                    //商家订单号
            packageReqHandler.SetParameter("total_fee", ((int)(ttFee * 100)).ToString()); //商品金额,以分为单位(money * 100).ToString()
            packageReqHandler.SetParameter("spbill_create_ip", Request.UserHostAddress);  //用户的公网ip,不是商户服务器IP
            packageReqHandler.SetParameter("notify_url", notify_url);                     //接收财付通通知的URL
            packageReqHandler.SetParameter("trade_type", TenPayV3Type.JSAPI.ToString());  //交易类型
            packageReqHandler.SetParameter("openid", openid);                             //用户的openId

            string sign = packageReqHandler.CreateMd5Sign("key", partnerKey);

            packageReqHandler.SetParameter("sign", sign);                           //签名

            string data = packageReqHandler.ParseXML();

            var result = TenPayV3Helper.Unifiedorder(data);

            var res = XDocument.Parse(result);

            prepayId = res.Element("xml").Element("prepay_id").Value;

            //设置支付参数
            OneGulp.WeChat.MP.TenPayLibV3.RequestHandler paySignReqHandler = new OneGulp.WeChat.MP.TenPayLibV3.RequestHandler(null);
            paySignReqHandler.SetParameter("appId", uwEntity.AppId);
            paySignReqHandler.SetParameter("timeStamp", timeStamp);
            paySignReqHandler.SetParameter("nonceStr", nonceStr);
            paySignReqHandler.SetParameter("package", string.Format("prepay_id={0}", prepayId));
            paySignReqHandler.SetParameter("signType", "MD5");
            paySign = paySignReqHandler.CreateMd5Sign("key", partnerKey);

            packageValue  = "";
            packageValue += " \"appId\": \"" + uwEntity.AppId + "\", ";
            packageValue += " \"timeStamp\": \"" + timeStamp + "\", ";
            packageValue += " \"nonceStr\": \"" + nonceStr + "\", ";
            packageValue += " \"package\": \"" + string.Format("prepay_id={0}", prepayId) + "\", ";
            packageValue += " \"signType\": \"MD5\", ";
            packageValue += " \"paySign\": \"" + paySign + "\"";
        }