Ejemplo n.º 1
0
        /// <summary>
        /// 刷卡支付
        /// </summary>
        public static MicropayResponseModel Micropay(MicropayModel requestModel)
        {
            WxPayData data = new WxPayData();

            data.SetValue("auth_code", requestModel.auth_code);           //授权码
            data.SetValue("body", requestModel.body);                     //商品描述
            data.SetValue("total_fee", requestModel.total_fee);           //总金额
            data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo()); //产生随机的商户订单号
            data.SetValue("device_info", requestModel.device_info);
            LogUtil.WriteWxpayLog("刷卡支付请求", "请求参数", data.ToJson());
            WxPayData result = WxPayApi.Micropay(data, 10); //提交被扫支付,接收返回结果

            //如果提交被扫支付接口调用失败,则抛异常
            if (!result.IsSet("return_code") || result.GetValue("return_code").ToString() == ReturnCode.FAIL)
            {
                string returnMsg = result.IsSet("return_msg") ? result.GetValue("return_msg").ToString() : "";
                //Log.Error("MicroPay", "Micropay API interface call failure, result : " + result.ToXml());
                throw new WxPayException("微信接口调用出错 : " + returnMsg);
            }
            LogUtil.WriteWxpayLog("刷卡支付响应", "响应参数", result.ToJson());
            //签名验证
            result.CheckSign();
            MicropayResponseModel responseModel = LitJson.JsonMapper.ToObject <MicropayResponseModel>(result.ToJson());

            responseModel.out_trade_no = responseModel.out_trade_no ?? data.GetValue("out_trade_no").ToString();
            //if (responseModel.return_code == ReturnCode.FAIL) throw new WxPayException(responseModel.return_msg);
            return(responseModel);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 微信申请退款接口
        /// </summary>
        /// <param name="requestModel">请求参数</param>
        /// <returns></returns>
        public static RefundResponseModel Refund(RefundModel requestModel)
        {
            WxPayData data = new WxPayData();

            if (!string.IsNullOrEmpty(requestModel.transaction_id))//微信订单号存在的条件下,则已微信订单号为准
            {
                data.SetValue("transaction_id", requestModel.transaction_id);
            }
            else//微信订单号不存在,才根据商户订单号去退款
            {
                data.SetValue("out_trade_no", requestModel.out_trade_no);
            }
            data.SetValue("total_fee", requestModel.total_fee);            //订单总金额
            data.SetValue("refund_fee", requestModel.refund_fee);          //退款金额
            data.SetValue("out_refund_no", WxPayApi.GenerateOutTradeNo()); //随机生成商户退款单号
            data.SetValue("op_user_id", WxPayConfig.MCHID);                //操作员,默认为商户号
            LogUtil.WriteWxpayLog("申请退款请求", "请求参数", data.ToJson());
            WxPayData result = WxPayApi.Refund(data);                      //提交退款申请给API,接收返回数据

            LogUtil.WriteWxpayLog("申请退款响应", "响应参数", result.ToJson());
            RefundResponseModel response = LitJson.JsonMapper.ToObject <RefundResponseModel>(result.ToJson());

            //Log.Info("OrderQuery", "OrderQuery process complete, result : " + result.ToXml());
            return(response);
        }
        /// <summary>
        /// 调用统一下单,获得下单结果,失败时抛异常WxPayException
        /// </summary>
        /// <param name="body"></param>
        /// <param name="attach"></param>
        /// <param name="goods_tag"></param>
        /// <param name="appID"></param>
        /// <param name="mchID"></param>
        /// <param name="key"></param>
        /// <returns>统一下单结果</returns>
        public WxPayData GetUnifiedOrderResult(string body, string attach, string goods_tag, string appID = WxPayConfig.APPID, string mchID = WxPayConfig.MCHID, string key = WxPayConfig.KEY)
        {
            //统一下单
            WxPayData data = new WxPayData();

            data.SetValue("body", body);
            data.SetValue("attach", attach);
            data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo(mchID));
            data.SetValue("total_fee", total_fee);
            data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
            data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
            data.SetValue("goods_tag", goods_tag);
            data.SetValue("trade_type", "JSAPI");
            data.SetValue("openid", openid);

            WxPayData result = WxPayApi.UnifiedOrder(data, 6, appID, mchID, key);

            if (!result.IsSet("appid") || !result.IsSet("prepay_id") || result.GetValue("prepay_id").ToString() == "")
            {
                Log.Error(this.GetType().ToString(), "UnifiedOrder response error!");
                throw new WxPayException("UnifiedOrder response error!");
            }

            unifiedOrderResult = result;
            return(result);
        }
Ejemplo n.º 4
0
        public JsonResult CreateOrder(string prodId, string num)
        {
            string userOpenId = base.getUserOpenIdFromCookie();
            string res        = "fail";

            if (!string.IsNullOrEmpty(userOpenId))
            {
                try
                {
                    string salesNo = WxPayApi.GenerateOutTradeNo();// Guid.NewGuid().ToString();
                    OrderBiz.CreateNew().createOrder(prodId, num, userOpenId, salesNo);
                    res = salesNo;
                }
                catch (Exception e)
                {
                    res = "fail";
                    _Apilog.WriteLog("ProductsController/CreateOrder 异常: " + e.Message);
                }
            }
            else
            {
                _Apilog.WriteLog("ProductsController/CreateOrder 用户userOpenId 为空: " + prodId + " " + num);
            }
            return(Json(res));
        }
Ejemplo n.º 5
0
        /**
         * 生成直接支付url,支付url有效期为2小时,模式二
         * @param productId 商品ID
         * @return 模式二URL
         * g公众账号id,商户号,随机字符串,签名,商品描述,商户订单号,总金额,终端ip,通知地址,交易类型
         */
        public string GetPayUrl(string productId)
        {
            Log.Info(this.GetType().ToString(), "Native pay mode 2 url is producing...");

            WxPayData data = new WxPayData();

            data.SetValue("appid", WxPayConfig.APPID);
            data.SetValue("mch_id", WxPayConfig.MCHID);
            data.SetValue("device_info", "iphone4s");
            data.SetValue("nonce_str", WxPayApi.GenerateNonceStr());
            data.SetValue("body", "好油菜充值");                                                       //商品描述
            data.SetValue("detail", "好油菜充值");                                                     //商品描述
            data.SetValue("attach", "北京好油菜");                                                     //附加数据
            data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());                         //随机字符串
            data.SetValue("total_fee", 1);                                                        //总金额
            data.SetValue("spbill_create_ip", "123.12.12.123");                                   //总金额
            data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));                 //交易起始时间
            data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss")); //交易结束时间
            data.SetValue("goods_tag", "jjj");                                                    //商品标记
            data.SetValue("notify_url", "http://www.warmwood.com/");                              //通知地址
            data.SetValue("trade_type", "NATIVE");                                                //交易类型
            data.SetValue("product_id", productId);                                               //商品ID
            //  data.SetValue("limit_pay", productId);//指定支付方式
            // data.SetValue("openid", productId);//用户标识
            data.SetValue("sign", data.MakeSign());                    //签名

            WxPayData result = WxPayApi.UnifiedOrder(data);            //调用统一下单接口
            string    url    = result.GetValue("code_url").ToString(); //获得统一下单接口返回的二维码链接

            Log.Info(this.GetType().ToString(), "Get native pay mode 2 url : " + url);
            return(url);
        }
Ejemplo n.º 6
0
        /***
         * 申请退款完整业务流程逻辑
         * @param transaction_id 微信订单号(优先使用)
         * @param out_trade_no 商户订单号
         * @param total_fee 订单总金额
         * @param refund_fee 退款金额
         * @return 退款结果(xml格式)
         */
        public static string Run(string transaction_id, string out_trade_no, string total_fee, string refund_fee)
        {
            Log.Info("Refund", "Refund is processing...");

            WxPayData data = new WxPayData();

            if (!string.IsNullOrEmpty(transaction_id))//微信订单号存在的条件下,则已微信订单号为准
            {
                data.SetValue("transaction_id", transaction_id);
            }
            else//微信订单号不存在,才根据商户订单号去退款
            {
                data.SetValue("out_trade_no", out_trade_no);
            }

            data.SetValue("total_fee", int.Parse(total_fee));              //订单总金额
            data.SetValue("refund_fee", int.Parse(refund_fee));            //退款金额
            data.SetValue("out_refund_no", WxPayApi.GenerateOutTradeNo()); //随机生成商户退款单号
            data.SetValue("op_user_id", WxPayConfig.MCHID);                //操作员,默认为商户号

            WxPayData result = WxPayApi.Refund(data);                      //提交退款申请给API,接收返回数据

            Log.Info("Refund", "Refund process complete, result : " + result.ToXml());
            return(result.ToPrintStr());
        }
        public JsonResult GetPaySign(string openid, string revenueFee, string totalFee, Guid personVguid, Guid pushContentVguid, int revenueType)
        {
            var revenueReceivable = decimal.Parse(revenueFee);            //获取司机支付应付金额
            var totalFeeDouble    = double.Parse(totalFee);
            //double totalFeeInt = tatol + driverPayfee;   //包含手续费的总钱数
            var    totalFeeInt    = (int)Math.Round(totalFeeDouble * 100);
            string nonceStr       = WxPayApi.GenerateNonceStr();                       //随机字符串,不长于32位
            string outTradeNo     = WxPayApi.GenerateOutTradeNo();                     //订单号:32个字符内、不得重复
            string spbillCreateIp = WxPayConfig.GetIP(System.Web.HttpContext.Current); //用户端IP
            double total_fee      = totalFeeInt;                                       //订单金额(单位:分),整数
            string trade_type     = "JSAPI";                                           //JSAPI,NATIVE,APP,WAP

            #region 调用统一支付接口获得prepay_id(预支付交易会话标识)
            WxPayData wxPayData = new WxPayData();
            wxPayData.SetValue("appid", WxPayConfig.APPID);            //appid
            wxPayData.SetValue("body", WxPayConfig.BODY);              //支付描述
            wxPayData.SetValue("mch_id", WxPayConfig.MCHID);           //商户id
            wxPayData.SetValue("nonce_str", nonceStr);                 //随机字符串
            wxPayData.SetValue("notify_url", WxPayConfig.NOTIFY_URL);  //回调地址
            wxPayData.SetValue("openid", openid);                      //openid
            wxPayData.SetValue("out_trade_no", outTradeNo);            //订单号
            wxPayData.SetValue("spbill_create_ip", spbillCreateIp);    //客户端ip地址
            wxPayData.SetValue("total_fee", total_fee.ToString());     //订单金额(单位:分),整数
            wxPayData.SetValue("trade_type", trade_type);              //交易类型
            wxPayData.SetValue("sign", wxPayData.MakeSign());          //签名
            string data     = wxPayData.ToXml();
            string prepayId = WeChatTools.UnifiedOrder(data);
            #endregion
            #region 支付参数
            string timeStamp = WxPayApi.GenerateTimeStamp();
            nonceStr = WxPayApi.GenerateNonceStr();
            WxPayData wxPaySign = new WxPayData();
            wxPaySign.SetValue("appId", WxPayConfig.APPID);
            wxPaySign.SetValue("timeStamp", timeStamp);
            wxPaySign.SetValue("nonceStr", nonceStr);
            wxPaySign.SetValue("package", string.Format("prepay_id={0}", prepayId));
            wxPaySign.SetValue("signType", "MD5");
            string paysign = wxPaySign.MakeSign();
            wxPaySign.SetValue("paySign", paysign);
            #endregion

            var paymentHistoryInfo = new Business_PaymentHistory_Information();
            paymentHistoryInfo.RevenueReceivable = revenueReceivable;
            paymentHistoryInfo.PaymentPersonnel  = personVguid;
            paymentHistoryInfo.PaymentAmount     = decimal.Parse(totalFee);
            paymentHistoryInfo.VGUID             = Guid.NewGuid();
            paymentHistoryInfo.RevenueType       = revenueType;
            paymentHistoryInfo.WeChatPush_VGUID  = pushContentVguid;
            paymentHistoryInfo.Remarks           = outTradeNo; //商户订单号
            paymentHistoryInfo.CreateDate        = DateTime.Now;
            paymentHistoryInfo.CreateUser        = "******";
            paymentHistoryInfo.PayDate           = DateTime.Now;
            paymentHistoryInfo.PaymentStatus     = "3";
            bool addsuccess = _weChatRevenueLogic.AddPaymentHistory(paymentHistoryInfo);

            return(Json(new { success = addsuccess, data = wxPaySign.GetValues() }, JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 拼享惠商家提现
        /// </summary>
        /// <param name="aid"></param>
        /// <param name="storeId"></param>
        /// <param name="userId"></param>
        /// <param name="account"></param>
        /// <param name="accountName"></param>
        /// <param name="cash"></param>
        /// <param name="drawCashWay"></param>
        /// <returns>0失败 1成功</returns>
        public int PxhAddApply(PinStore store, int userId, string account, string accountName, int cash, int drawCashWay, int serviceFee, int applyType, int xwkjUserId = 0)
        {
            string filed   = string.Empty;
            string useCash = string.Empty;

            if (applyType == (int)DrawCashApplyType.拼享惠平台交易)
            {
                filed       = "cash";
                store.cash -= cash;
                useCash     = store.cashStr;
            }
            else
            {
                filed             = "qrcodecash";
                store.qrcodeCash -= cash;
                useCash           = store.qrcodeCashStr;
            }
            TransactionModel tran = new TransactionModel();

            MySqlParameter[] pone = null;
            tran.Add(PinStoreBLL.SingleModel.BuildUpdateSql(store, filed, out pone), pone);
            int code = 0;
            XcxAppAccountRelation xcx = XcxAppAccountRelationBLL.SingleModel.GetModel(store.aId);

            if (xcx == null)
            {
                log4net.LogHelper.WriteError(GetType(), new Exception($"拼享惠申请提现失败:小程序信息错误 aid:{store.aId}"));
                return(code);
            }
            string        partner_trade_no = WxPayApi.GenerateOutTradeNo();
            DrawCashApply apply            = new DrawCashApply()
            {
                Aid              = store.aId,
                appId            = xwkjUserId == 0 ? xcx.AppId : WebSiteConfig.GongZhongAppId,
                userId           = xwkjUserId == 0 ? userId : xwkjUserId,
                partner_trade_no = partner_trade_no,
                applyMoney       = cash,
                serviceMoney     = serviceFee,
                cashMoney        = cash - serviceFee,
                useCash          = useCash,
                AddTime          = DateTime.Now,
                remark           = "拼享惠商户申请提现",
                hostIP           = Utility.WebHelper.GetIP(),
                applyType        = applyType,
                account          = account,
                accountName      = accountName,
                drawCashWay      = drawCashWay,
                OrderId          = userId,
            };

            tran.Add(BuildAddSql(apply));
            code = base.ExecuteTransactionDataCorect(tran.sqlArray, tran.ParameterArray) ? 1 : 0;
            return(code);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 用户拼团成功返现
        /// </summary>
        /// <param name="id">提现账号id(PlatUserCash)</param>
        /// <param name="drawcashmoney">提现金额(分)</param>
        /// <returns></returns>
        public string PxhUserApplyDrawCash(PinGoodsOrder order, int userId, string appid)
        {
            PinGoodsOrderBLL pinGoodsOrderBLL = new PinGoodsOrderBLL();
            TransactionModel tran             = new TransactionModel();

            if (userId <= 0)
            {
                return("用户ID不能为0");
            }
            if (order.returnMoney <= 0)
            {
                return("返现金额不能为0");
            }
            if (string.IsNullOrEmpty(appid))
            {
                return("appid不能为空");
            }

            int           serviceFee       = 0;//服务费
            string        partner_trade_no = WxPayApi.GenerateOutTradeNo();
            DrawCashApply apply            = new DrawCashApply()
            {
                Aid              = order.aid,
                appId            = appid,
                partner_trade_no = partner_trade_no,
                userId           = userId,
                applyMoney       = order.returnMoney,
                serviceMoney     = serviceFee,
                cashMoney        = order.returnMoney - serviceFee,
                useCash          = "0",
                BeforeApplyMoney = 0,
                AddTime          = DateTime.Now,
                remark           = "拼享惠拼团成功用户申请返现",
                hostIP           = WebHelper.GetIP(),
                state            = 0,
                drawState        = (int)DrawCashState.未开始提现,
                applyType        = (int)DrawCashApplyType.拼享惠用户返现,
                drawCashWay      = (int)DrawCashWay.微信提现,
                OrderId          = order.id,
            };

            tran.Add(base.BuildAddSql(apply));

            order.isReturnMoney = 1;
            tran.Add(pinGoodsOrderBLL.BuildUpdateSql(order, "isReturnMoney"));

            if (!base.ExecuteTransactionDataCorect(tran.sqlArray))
            {
                return("申请提现失败");
            }
            return("");
        }
Ejemplo n.º 10
0
        private static void SDK_Pay(HttpContext context)
        {
            JS_SDKModel model = new JS_SDKModel();

            try
            {
                var       total_fee  = Convert.ToInt32(Math.Round(Convert.ToDecimal(context.Request["total_fee"]), 2) * 100);
                var       openid     = context.Request["openid"];
                WxPayData jsApiParam = new WxPayData();
                //构造需要用SHA1算法加密的数据
                WxPayData data = new WxPayData();
                data.SetValue("body", "test");
                data.SetValue("attach", "test");
                data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());
                data.SetValue("total_fee", total_fee);
                data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
                data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
                data.SetValue("goods_tag", "test");
                data.SetValue("trade_type", "JSAPI");
                data.SetValue("openid", openid);

                WxPayData result = WxPayApi.UnifiedOrder(data);


                model.appId = WeChatConfig.AppId;
                WxPayData signData = new WxPayData();
                signData.SetValue("appId", model.appId);
                signData.SetValue("timeStamp", WxPayApi.GenerateTimeStamp());
                signData.SetValue("nonceStr", WxPayApi.GenerateNonceStr());
                signData.SetValue("package", "prepay_id=" + result.GetValue("prepay_id").ToString());
                signData.SetValue("signType", "MD5");
                signData.SetValue("paySign", signData.MakeSign());

                model.nonceStr  = signData.GetValue("nonceStr").ToString();
                model.package   = signData.GetValue("package").ToString();
                model.paySign   = signData.GetValue("paySign").ToString();
                model.timeStamp = signData.GetValue("timeStamp").ToString();
                model.status    = 1;
                model.msg       = "成功";
            }
            catch (Exception ex)
            {
                model.status = 0;
                model.msg    = ex.Message;
            }
            context.Response.Write(JsonConvert.SerializeObject(model));
        }
Ejemplo n.º 11
0
        public JsonResult CreateOrderFromShopcart(string prodIds)
        {
            string userOpenId = base.getUserOpenIdFromCookie();
            string res        = "fail";

            if (!string.IsNullOrEmpty(userOpenId))
            {
                try
                {
                    //订单付款页面用户回退购物车页面,然后再创单时实际没有商品,规避此类垃圾数据
                    string[] prods     = prodIds.Split(',');
                    bool     prodExist = false;
                    for (int i = 0; i < prods.Length; i++)
                    {
                        shoppingcart checkResult = ShopCartBiz.CreateNew().checkProdExistInCarts(userOpenId, prods[i]);
                        if (checkResult != null)
                        {
                            prodExist = true;
                            break;
                        }
                    }

                    if (prodExist)
                    {
                        string salesNo = WxPayApi.GenerateOutTradeNo();// Guid.NewGuid().ToString();
                        OrderBiz.CreateNew().createOrderFromShopcart(prodIds, userOpenId, salesNo);
                        res = salesNo;
                    }
                    else
                    {
                        res = "noProds";
                    }
                }
                catch (Exception e)
                {
                    res = "fail";
                    _Apilog.WriteLog("ProductsController/CreateOrderFromShopcart 异常: " + e.Message);
                }
            }
            else
            {
                _Apilog.WriteLog("ProductsController/CreateOrderFromShopcart 用户userOpenId 为空: " + prodIds);
            }
            return(Json(res));
        }
Ejemplo n.º 12
0
        public (string, string) CreateOrder(string openId, IOrderBase order, string notifyurl)
        {
            JsApiPay jsApiPay   = new JsApiPay();
            var      outTradeNo = WxPayApi.GenerateOutTradeNo();
            var      orderDict  = new Dictionary <string, string>();

            orderDict.Add("fee", order.Fee.ToString());
            orderDict.Add("name", order.Name);
            orderDict.Add("notify_url", notifyurl);
            orderDict.Add("openid", openId);
            orderDict.Add("tag", order.Tag);
            orderDict.Add("desc", order.Desc);
            orderDict.Add("out_trade_no", outTradeNo);
            var wxPayData = jsApiPay.GetUnifiedOrderResult(orderDict);


            return(GetJsApiParameters(wxPayData), outTradeNo);
        }
Ejemplo n.º 13
0
        public JsonResult WxPay(string money, string tradetitle = "订单支付")
        {
            var result = new ReturnMessage(false)
            {
                Message = "订单支付失败!"
            };

            try
            {
                if (string.IsNullOrWhiteSpace(money))
                {
                    result.Message = "请输入金额";
                    return(Json(result));
                }
                if (LoginUser == null)
                {
                    result.Message = "获取当前用户信息失败";
                    return(Json(result));
                }
                var      openid   = LoginUser.OpenId;
                JsApiPay jsApiPay = new JsApiPay(this);
                jsApiPay.openid    = openid;
                jsApiPay.total_fee = (int)(Converter.ParseDecimal(money) * 100);//Converter.ParseDecimal(money, 0) * 100;//单位为分 所以在此*100
                //JSAPI支付预处理
                var tradeNo = WxPayApi.GenerateOutTradeNo();
                Log.Debug(this.GetType().Name, "用户订单支付!openid:" + LoginUser.OpenId);
                WxPayData unifiedOrderResult = jsApiPay.GetUnifiedOrderResult(tradeNo, "订单支付", "订单支付", openid, jsApiPay.total_fee, "ticket");
                WriteDebug("aaa");
                var appid = unifiedOrderResult.GetValue("appid").ToString();
                WriteDebug("bbb" + appid);
                var prepayid = unifiedOrderResult.GetValue("prepay_id").ToString();
                var param    = jsApiPay.GetJsApiParameters(appid, prepayid);
                result.IsSuccess          = true;
                result.Message            = "支付成功!";
                result.ResultData["data"] = new { tradeNo = tradeNo, param = param };
            }
            catch (Exception ex)
            {
                ex.Data["Method"] = "PurseController>>WxPay";
                new ExceptionHelper().LogException(ex);
            }
            return(Json(result));
        }
Ejemplo n.º 14
0
        public (Stream, string) NativeCreateOrder(string openId, IOrderBase order, string notifyUrl)
        {
            NativePay nativePay  = new NativePay();
            var       outTradeNo = WxPayApi.GenerateOutTradeNo();

            var orderDict = new Dictionary <string, string>();

            orderDict.Add("fee", order.Fee.ToString());
            orderDict.Add("name", order.Name);
            orderDict.Add("notify_url", notifyUrl);
            orderDict.Add("tag", order.Tag ?? String.Empty);
            orderDict.Add("desc", order.Desc ?? String.Empty);
            orderDict.Add("out_trade_no", outTradeNo);
            orderDict.Add("productId", order.Id.ToString());

            var payUrl = nativePay.GetPayUrl(orderDict);

            return(MakeQRCode(payUrl), outTradeNo);
        }
Ejemplo n.º 15
0
        private WxPayData UnifiedOrder(string openId, string productId)
        {
            //统一下单
            WxPayData req = new WxPayData();

            req.SetValue("body", "test");
            req.SetValue("attach", "test");
            req.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());
            req.SetValue("total_fee", 1);
            req.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
            req.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
            req.SetValue("goods_tag", "test");
            req.SetValue("trade_type", "NATIVE");
            req.SetValue("openid", openId);
            req.SetValue("product_id", productId);
            WxPayData result = WxPayApi.UnifiedOrder(req);

            return(result);
        }
Ejemplo n.º 16
0
        /**
         * 生成直接支付url,支付url有效期为2小时,模式二
         * @param productId 商品ID
         * @return 模式二URL
         */
        public string GetPayUrl(string productId)
        {
            WxPayData data = new WxPayData();

            data.SetValue("body", "广东雅达电子股份有限公司");                                                //商品描述
            data.SetValue("attach", "附加信息,用于后台或者存入数据库,做自己的判断");                                   //附加数据
            data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());                         //随机字符串
            data.SetValue("total_fee", 1);                                                        //总金额
            data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));                 //交易起始时间
            data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss")); //交易结束时间
            data.SetValue("goods_tag", "商品的备忘,可以自定义");                                            //商品标记
            data.SetValue("trade_type", "NATIVE");                                                //交易类型
            data.SetValue("product_id", productId);                                               //商品ID

            WxPayData result = WxPayApi.UnifiedOrder(data);                                       //调用统一下单接口
            string    url    = result.GetValue("code_url").ToString();                            //获得统一下单接口返回的二维码链接

            return(url);
        }
Ejemplo n.º 17
0
        public Order WxPayNoMoneyOrder(string productCode, string userCode, string peopleCount, DateTime dateTime, decimal money, string orderCode = "", string couponCode = "")
        {
            IProductInfoService _productInfoService = new ProductInfoService();
            DateTime            now = DateTime.Now;

            IOrderService     _orderService     = new OrderService();
            IUserStoreService _userStoreService = new UserStoreService();


            var   userSotre = _userStoreService.GetUserStorebyUserCode(userCode);
            var   tempOrder = _orderService.GetOrderByCode(orderCode);
            Order order     = new Order();

            if (tempOrder != null && tempOrder.UserCode == userCode)
            {
                order.CreateTime = tempOrder.CreateTime;
                order.OrderCode  = tempOrder.OrderCode;
                order.OrderNO    = tempOrder.OrderNO;
            }
            else
            {
                order.OrderCode  = Guid.NewGuid().ToString();
                order.OrderNO    = WxPayApi.GenerateOutTradeNo().ToString();
                order.CreateTime = now;
            }
            order.Money = money;
            int ss = 0;

            if (int.TryParse(peopleCount, out ss))
            {
                order.Number = ss;
            }
            order.PayTime               = DateTime.Now;
            order.StoreCode             = userSotre.MembershipCardStore;
            order.UserCode              = userCode;
            order.ProductCode           = productCode;
            order.ExperienceVoucherCode = couponCode;
            order.AppointmentTime       = dateTime;
            LogHelper.WriteLog("订单编码OrderCode " + order.OrderCode);
            LogHelper.WriteLog("订单号OrderNO " + order.OrderNO);
            _orderService.InsertOrder(order);
            return(order);
        }
Ejemplo n.º 18
0
        public static bool WxPayRefundRequest(string trade_no, int total_fee, string out_refund_no, out string response)
        {
            response = string.Empty;
            if (string.IsNullOrEmpty(out_refund_no))
            {
                out_refund_no = WxPayApi.GenerateOutTradeNo();
            }
            string    url       = "https://api.mch.weixin.qq.com/secapi/pay/refund";
            string    wx_appid  = PaymentConfig.WeiXinConfig.MobileAppID;
            string    wx_mch_id = PaymentConfig.WeiXinConfig.MobileMCHID;
            WxPayData data      = new WxPayData();

            data.SetValue("out_trade_no", trade_no);
            data.SetValue("total_fee", total_fee);                                  //订单总金额
            data.SetValue("refund_fee", total_fee);                                 //退款金额
            data.SetValue("out_refund_no", out_refund_no);                          //随机生成商户退款单号
            data.SetValue("op_user_id", wx_mch_id);                                 //操作员,默认为商户号
            data.SetValue("appid", wx_appid);                                       //公众账号ID
            data.SetValue("mch_id", wx_mch_id);                                     //商户号
            data.SetValue("nonce_str", Guid.NewGuid().ToString().Replace("-", "")); //随机字符串
            data.SetValue("sign", data.MakeAPPSign());                              //签名

            string xml = data.ToXml();

            response = HttpService.Post(xml, url, true, 6, SSLCERT_PATH: PaymentConfig.WeiXinConfig.MobileSSLCERT_PATH, SSLCERT_PASSWORD: PaymentConfig.WeiXinConfig.MobileSSLCERT_PASSWORD);//调用HTTP通信接口提交数据到API
            WxPayData result = new WxPayData();

            result.FromXml(response);
            if (result.IsSet("return_code"))
            {
                if (result.GetValue("return_code").ToString().Equals("SUCCESS"))
                {
                    return(true);
                }
                return(false);
            }
            else
            {
                response = result.GetValue("return_msg").ToString();
            }
            return(false);
        }
Ejemplo n.º 19
0
        public ActionResult wxPay(string total_fee, string sb)
        {
            string guid = Request["userId"];
            var    user = Common.CacheHelper.Get(guid) as PersonalUser;

            if (user == null)
            {
                return(Json(new { success = "false", str = "您还没登陆,请先登陆后操作!" }, JsonRequestBehavior.AllowGet));
            }
            string xml      = null;
            string trade_no = WxPayApi.GenerateOutTradeNo();

            try
            {
                xml = new WXPay()
                {
                    body         = "爽赞网(爽币)充值",                           //费用名称,这会显示
                    detail       = "爽赞网",                                 //微信名称
                    attach       = string.Format("{0},{1}", user.Id, sb), //自定义数据,这里给充值数量和用户ID
                    out_trade_no = trade_no,                              //商户订单号
                    total_fee    = int.Parse(total_fee) * 100
                                                                          // total_fee=1  用户测试数据
                }.pay();
                if (xml.IsNullOrEmpty())
                {
                    return(Json(new { success = "false", str = "微信下单超时失败!" }, JsonRequestBehavior.AllowGet));
                }

                XElement xe = XElement.Parse(xml);
                if (xe.Element("code_url") == null)
                {
                    LogHelper.WriteLog(xml);
                    return(Json(new { success = "false", str = "微信统一下单失败!" }, JsonRequestBehavior.AllowGet));
                }
                return(Json(new { success = "true", trade_no = trade_no, url = xe.Element("code_url").Value }, JsonRequestBehavior.AllowGet));
            }
            catch (Exception e)
            {
                LogHelper.WriteLog(xml + "\r\n" + e.ToString());
                return(Json(new { success = "false", str = "微信下单失败!" }, JsonRequestBehavior.AllowGet));
            }
        }
Ejemplo n.º 20
0
        public int InsertTopupOrder(string userCode, string prepayid, string typeCode, decimal?money = 0)
        {
            DynamicParameters paras = new DynamicParameters();

            paras.Add("@TopupOrderCode", Guid.NewGuid().ToString(), System.Data.DbType.String);
            paras.Add("@UserCode", userCode, System.Data.DbType.String);
            paras.Add("@RecordsOfConsumptionCode", Guid.NewGuid().ToString(), System.Data.DbType.String);
            paras.Add("@WallePrCode", prepayid, System.Data.DbType.String);
            paras.Add("@OutTradeNo", WxPayApi.GenerateOutTradeNo().ToString(), System.Data.DbType.String);
            paras.Add("@PayDatetime", null, System.Data.DbType.DateTime);
            paras.Add("@RechargeTypeCode", typeCode, System.Data.DbType.String);
            paras.Add("@RecordsMoney", money, System.Data.DbType.String);
            paras.Add("@CreateTime", null, System.Data.DbType.DateTime);
            string sql = @"insert into [dbo].[TopupOrder](TopupOrderCode,UserCode,RecordsOfConsumptionCode,
                    WallePrCode,OutTradeNo,PayDatetime,RechargeTypeCode,RecordsMoney,CreateTime)
                    values(@TopupOrderCode,@UserCode,@RecordsOfConsumptionCode,@WallePrCode,
                    @OutTradeNo,@PayDatetime,@RechargeTypeCode,@RecordsMoney,@CreateTime)";

            return(DapperSqlHelper.ExcuteNonQuery <Order>(sql, paras, false));
        }
Ejemplo n.º 21
0
        public string GeneratePrepayId()
        {
            //统一下单
            WxPayData data = new WxPayData();

            data.SetValue("body", "test");
            data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());
            data.SetValue("total_fee", total_fee);
            data.SetValue("trade_type", "APP");

            WxPayData result = WxPayApi.UnifiedOrder(data);

            if (!result.IsSet("appid") || !result.IsSet("prepay_id") || result.GetValue("prepay_id").ToString() == "")
            {
                Log.Error(this.GetType().ToString(), "UnifiedOrder response error!");
                throw new WxPayException("UnifiedOrder response error!");
            }

            return(result.GetValue("prepay_id").ToString());
        }
Ejemplo n.º 22
0
        private void Pay_Click(object sender, RoutedEventArgs e)
        {
            NativePay nativePay = new NativePay();
            //生成扫码支付模式二url
            //string tmp = priceTB.Text.Trim();
            //double price = 0.01;
            //double.TryParse(tmp, out price);

            int totalFee = 1;

            string out_trade_no = WxPayApi.GenerateOutTradeNo();

            WxPayData data = new WxPayData();

            data.SetValue("body", "张裕DIY流程演示用");                                                  //商品描述
            data.SetValue("attach", "张裕DIY流程演示用");                                                //附加数据
            data.SetValue("out_trade_no", out_trade_no);                                          //随机字符串
            data.SetValue("total_fee", totalFee);                                                 //总金额
            data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));                 //交易起始时间
            data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss")); //交易结束时间
            data.SetValue("goods_tag", "jjj");                                                    //商品标记
            data.SetValue("trade_type", "NATIVE");                                                //交易类型
            data.SetValue("product_id", "123456789");                                             //商品ID

            WxPayData result = WxPayApi.UnifiedOrder(data);                                       //调用统一下单接口
            string    url    = result.GetValue("code_url").ToString();                            //获得统一下单接口返回的二维码链接



            //string url2 = nativePay.GetPayUrl("123456789", totalFee);

            //string ss = HttpUtility.UrlEncode(url2);

            //CreateQrCode(url2);

            QrCodeDisplay dis = new WeChatDemo.QrCodeDisplay(out_trade_no);

            dis.Owner = this;
            dis.SetQR(url);
            dis.Show();
        }
Ejemplo n.º 23
0
        }                                               //H5调起JS API参数
        protected void Page_Load(object sender, EventArgs e)
        {
            Log.Info(this.GetType().ToString(), "page load");
            if (!IsPostBack)
            {
                string openid    = "oN3xdxP75aDqm6WMHCwNgmR1OLCk";
                string total_fee = "1";
                //检测是否给当前页面传递了相关参数
                if (string.IsNullOrEmpty(openid) || string.IsNullOrEmpty(total_fee))
                {
                    Response.Write("<span style='color:#FF0000;font-size:20px'>" + "页面传参出错,请返回重试" + "</span>");
                    Log.Error(this.GetType().ToString(), "This page have not get params, cannot be inited, exit...");
                    //submit.Visible = false;
                    return;
                }

                //若传递了相关参数,则调统一下单接口,获得后续相关接口的入口参数
                JsApiPay jsApiPay = new JsApiPay(this);
                jsApiPay.openid    = openid;
                jsApiPay.total_fee = int.Parse(total_fee);

                //JSAPI支付预处理
                try
                {
                    var       company            = WebUtil.GetCompany(this.Context);
                    string    body               = company != null ? company.CompanyName : ConfigurationManager.AppSettings["CompanyName"];
                    string    tradeno            = WxPayApi.GenerateOutTradeNo();
                    WxPayData unifiedOrderResult = jsApiPay.GetUnifiedOrderResult(body, tradeno);
                    wxJsApiParam = jsApiPay.GetJsApiParameters();//获取H5调起JS API参数
                    Log.Debug(this.GetType().ToString(), "wxJsApiParam : " + wxJsApiParam);
                    //在页面上显示订单信息
                    result.InnerHtml  = "<span style='color:#00CD00;font-size:20px'>订单详情:</span><br/>";
                    result.InnerHtml += "<span style='color:#00CD00;font-size:20px'>" + unifiedOrderResult.ToPrintStr() + "</span>";
                }
                catch (Exception ex)
                {
                    Response.Write("<span style='color:#FF0000;font-size:20px'>" + "下单失败,请返回重试" + "</span>");
                    //submit.Visible = false;
                }
            }
        }
Ejemplo n.º 24
0
        public ActionResult SubmitRefundApply(string OrderID, string Remark, decimal?Amount)
        {
            string RefundNo   = WxPayApi.GenerateOutTradeNo();
            var    resultData = new RefundService().AddRefundApply(OrderID, RefundNo, SessionTools.UserID, Remark, Amount);

            if (resultData != null && resultData.status > 0)
            {
                // 修改订单状态为退款中
                var resultOrderStatus = new RecordService().RefundOrder(OrderID);
                // 退款申请提交成功后,(修改订单状态为退款中),向管理员发送退款申请验证码
                // 消息携带链接:/User/ValidateRefund?OrderID=&TelePhone=&CodeStr=
                // 管理员点击退款申请信息后,跳转至link,验证通过,管理员输入允许的退款金额
                // 然后调用 POST - /User/RefundAmount 进行退款
                // 退款成功后,修改订单状态、退款单状态、使用券状态
                if (resultOrderStatus != null && resultOrderStatus.status > 0)
                {
                    this.SendCode(OrderID, (int)Code_Type.Refund);
                }
            }
            return(Content(JsonHelper.SerializeObject(resultData)));
        }
Ejemplo n.º 25
0
        /// <summary>
        /// 统一下单
        /// </summary>
        /// <param name="openId"></param>
        /// <param name="productId"></param>
        /// <returns></returns>
        private WxPayData UnifiedOrder(string openId, string productId)
        {
            //TODO 根据productId获取产品信息

            //统一下单
            WxPayData req = new WxPayData();

            req.SetValue("body", "广东雅达电子股份有限公司");
            req.SetValue("attach", "附加信息,用于后台或者存入数据库,做自己的判断");
            req.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());
            req.SetValue("total_fee", 1);
            req.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
            req.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
            req.SetValue("goods_tag", "商品的备忘,可以自定义");
            req.SetValue("trade_type", "NATIVE");
            req.SetValue("openid", openId);
            req.SetValue("product_id", productId);
            WxPayData result = WxPayApi.UnifiedOrder(req);

            return(result);
        }
Ejemplo n.º 26
0
        public JsonResult GetPaySign(string openid)
        {
            string nonceStr       = WxPayApi.GenerateNonceStr();                       //随机字符串,不长于32位
            string outTradeNo     = WxPayApi.GenerateOutTradeNo();                     //订单号:32个字符内、不得重复
            string spbillCreateIp = WxPayConfig.GetIP(System.Web.HttpContext.Current); //用户端IP
            int    total_fee      = 1;                                                 //订单金额(单位:分),整数
            string trade_type     = "JSAPI";                                           //JSAPI,NATIVE,APP,WAP

            #region 调用统一支付接口获得prepay_id(预支付交易会话标识)
            WxPayData wxPayData = new WxPayData();
            wxPayData.SetValue("appid", WxPayConfig.APPID);            //appid
            wxPayData.SetValue("body", WxPayConfig.BODY);              //支付描述
            wxPayData.SetValue("mch_id", WxPayConfig.MCHID);           //商户id
            wxPayData.SetValue("nonce_str", nonceStr);                 //随机字符串
            wxPayData.SetValue("notify_url", WxPayConfig.NOTIFY_URL);  //回调地址
            wxPayData.SetValue("openid", openid);                      //openid
            wxPayData.SetValue("out_trade_no", outTradeNo);            //订单号
            wxPayData.SetValue("spbill_create_ip", spbillCreateIp);    //客户端ip地址
            wxPayData.SetValue("total_fee", total_fee.ToString());     //订单金额(单位:分),整数
            wxPayData.SetValue("trade_type", trade_type);              //交易类型
            wxPayData.SetValue("sign", wxPayData.MakeSign());          //签名
            string data     = wxPayData.ToXml();
            string prepayId = WeChatTools.UnifiedOrder(data);
            #endregion

            #region 支付参数
            string timeStamp = WxPayApi.GenerateTimeStamp();
            nonceStr = WxPayApi.GenerateNonceStr();
            WxPayData wxPaySign = new WxPayData();
            wxPaySign.SetValue("appId", WxPayConfig.APPID);
            wxPaySign.SetValue("timeStamp", timeStamp);
            wxPaySign.SetValue("nonceStr", nonceStr);
            wxPaySign.SetValue("package", string.Format("prepay_id={0}", prepayId));
            wxPaySign.SetValue("signType", "MD5");
            string paysign = wxPaySign.MakeSign();
            wxPaySign.SetValue("paySign", paysign);
            #endregion

            return(Json(new { data = wxPaySign.GetValues(), openid = openid }, JsonRequestBehavior.AllowGet));
        }
Ejemplo n.º 27
0
        public int CreateWxOrder(PinGoodsOrder order, string userName)
        {
            int cityMorderId          = 0; //citymorder表ID
            XcxAppAccountRelation xcx = XcxAppAccountRelationBLL.SingleModel.GetModel(order.aid);

            if (xcx == null)
            {
                return(cityMorderId);
            }

            string      no = WxPayApi.GenerateOutTradeNo();
            CityMorders citymorderModel = new CityMorders
            {
                OrderType      = (int)ArticleTypeEnum.PinOrderPay,
                ActionType     = (int)ArticleTypeEnum.PinOrderPay,
                Addtime        = DateTime.Now,
                payment_free   = order.money,
                trade_no       = no,
                Percent        = 99,//不收取服务费
                userip         = WebHelper.GetIP(),
                FuserId        = order.userId,
                Fusername      = userName,
                orderno        = no,
                payment_status = 0,
                Status         = 0,
                Articleid      = 0,
                CommentId      = order.id,  //订单Id
                MinisnsId      = order.aid, // 订单aId
                TuserId        = order.storeId,
                ShowNote       = $" {xcx.Title}购买商品支付{order.moneyStr}元",
                CitySubId      = 0, //无分销,默认为0
                PayRate        = 1,
                buy_num        = 0, //无
                appid          = xcx.AppId,
            };

            cityMorderId = Convert.ToInt32(new CityMordersBLL().Add(citymorderModel));

            return(cityMorderId);
        }
Ejemplo n.º 28
0
        /// <summary>
        /// 申请退款完整业务流程逻辑
        /// </summary>
        /// <param name="transaction_id">微信订单号</param>
        /// <param name="out_trade_no">商户订单号</param>
        /// <param name="total_fee">订单总金额</param>
        /// <param name="refund_fee">退款金额</param>
        /// <returns> 退款结果(xml格式)</returns>
        public static string Run(string transaction_id, string out_trade_no, int total_fee, int refund_fee, string appID = WxPayConfig.APPID, string mchID = WxPayConfig.MCHID, string key = WxPayConfig.KEY, string sSLCERT_PASSWORD = WxPayConfig.SSLCERT_PASSWORD, string sSLCERT_PATH = WxPayConfig.SSLCERT_PATH)
        {
            Log.Info("Refund", "Refund is processing...");
            WxPayData data = new WxPayData();

            if (!string.IsNullOrEmpty(transaction_id))//微信订单号存在的条件下,则已微信订单号为准
            {
                data.SetValue("transaction_id", transaction_id);
            }
            else//微信订单号不存在,才根据商户订单号去退款
            {
                data.SetValue("out_trade_no", out_trade_no);
            }
            data.SetValue("total_fee", total_fee);                                                          //订单总金额
            data.SetValue("refund_fee", refund_fee);                                                        //退款金额
            data.SetValue("out_refund_no", WxPayApi.GenerateOutTradeNo());                                  //随机生成商户退款单号
            data.SetValue("op_user_id", mchID);                                                             //操作员,默认为商户号
            WxPayData result = WxPayApi.Refund(data, 6, appID, mchID, key, sSLCERT_PASSWORD, sSLCERT_PATH); //提交退款申请给API,接收返回数据

            Log.Info("Refund", "Refund process complete, result : " + result.ToXml());
            return(result.ToPrintStr());
        }
Ejemplo n.º 29
0
        WxPayData GetUnifiedOrderResult()
        {
            string url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
            //统一下单
            WxPayData data = new WxPayData();

            data.SetValue("body", "test");
            data.SetValue("attach", "test");
            data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());
            data.SetValue("notify_url", "http://demo.xmpharos.com/WXNotify.aspx");
            data.SetValue("total_fee", 1);
            data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));
            data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss"));
            data.SetValue("goods_tag", "test");
            data.SetValue("trade_type", "JSAPI");
            data.SetValue("openid", "oAZCps75h8Jyj1a0uyIktHiGHbho");
            data.SetValue("spbill_create_ip", WxPayConfig.IP);       //终端ip
            data.SetValue("appid", "wxbeb2e5a46ca7bf69");            //公众账号ID
            data.SetValue("mch_id", "1240541002");                   //商户号
            data.SetValue("nonce_str", WxPayApi.GenerateNonceStr()); //随机字符串,放置顺序
            //签名
            data.SetValue("sign", data.MakeSign("e10adc3849ba56abbe56e056f2588888"));
            string xml   = data.ToXml();
            var    start = DateTime.Now;

            Log.Debug("WxPayApi", "UnfiedOrder request : " + xml);
            string response = HttpService.Post(xml, url, false, 10);

            Log.Debug("WxPayApi", "UnfiedOrder response : " + response);
            WxPayData result = new WxPayData();

            result.FromXml(response);
            if (!result.IsSet("appid") || !result.IsSet("prepay_id") || result.GetValue("prepay_id").ToString() == "")
            {
                Log.Error(this.GetType().ToString(), "UnifiedOrder response error!");
                throw new Exception("UnifiedOrder response error!");
            }
            return(result);
        }
Ejemplo n.º 30
0
        /// <summary>
        /// 生成直接支付url,支付url有效期为2小时,模式二
        /// </summary>
        /// <param name="productId">商品ID</param>
        /// <param name="body">商品描述</param>
        /// <param name="attach">附加数据</param>
        /// <param name="totalFee">总金额</param>
        /// <param name="goodsTag">商品标记</param>
        /// <returns>模式二URL</returns>
        public string GetPayUrl(string productId, string body, string attach, string totalFee, string goodsTag)
        {
            LogHelper.Info(this.GetType().ToString(), "Native pay mode 2 url is producing...");

            WxPayData data = new WxPayData();

            data.SetValue("body", body);                                                          //商品描述
            data.SetValue("attach", attach);                                                      //附加数据
            data.SetValue("out_trade_no", WxPayApi.GenerateOutTradeNo());                         //随机字符串
            data.SetValue("total_fee", totalFee);                                                 //总金额
            data.SetValue("time_start", DateTime.Now.ToString("yyyyMMddHHmmss"));                 //交易起始时间
            data.SetValue("time_expire", DateTime.Now.AddMinutes(10).ToString("yyyyMMddHHmmss")); //交易结束时间
            data.SetValue("goods_tag", goodsTag);                                                 //商品标记
            data.SetValue("trade_type", "NATIVE");                                                //交易类型
            data.SetValue("product_id", productId);                                               //商品ID

            WxPayData result = WxPayApi.UnifiedOrder(data);                                       //调用统一下单接口
            string    url    = result.GetValue("code_url").ToString();                            //获得统一下单接口返回的二维码链接

            LogHelper.Info(this.GetType().ToString(), "Get native pay mode 2 url : " + url);
            return(url);
        }