public void OrderqueryTest()
        {
            var result = TenPay.Orderquery("[appId]", "[package]", "[timesTamp]", "[app_Signature]", "[sign_Method]");

            Console.Write(result);
            Assert.IsNotNull(result);
        }
        public void NativePayTest()
        {
            var result = TenPay.NativePay("[appId]", "[timesTamp]", "[nonceStr]", "[productId]", "[sign]");

            Console.Write(result);
            Assert.IsNotNull(result);
        }
        public void DelivernotifyTest()
        {
            var result = TenPay.Delivernotify("[appId]", "[openId]", "[transId]", "[out_Trade_No]", "[deliver_TimesTamp]", "[deliver_Status]", "[deliver_Msg]", "[app_Signature]", "sha1");

            Console.Write(result);
            Assert.IsNotNull(result);
        }
예제 #4
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="sender"></param>
    /// <param name="e"></param>
    protected void Button3_Click(object sender, EventArgs e)
    {
        TenPay tenPay = new TenPay();

        string price = "10000";

        decimal total      = decimal.Parse(price);                 //订单支付金额
        decimal supperates = 0.001M;                               //支付费率
        decimal paySXF     = FourToFiveNum(total * supperates, 2); //支付手续费
        decimal actPrice   = total - paySXF;                       //收款账号金额

        string orderId = DateTime.Now.Ticks.ToString();

        TenPayParam tenPayParam = new TenPayParam();

        tenPayParam.Bus_Args = "261065527^" + 1 + "^1|465853660^" + 1 + "^4|" + "[email protected]^" + 2 + "^4";

        tenPayParam.Bus_Desc = "12345^深圳-上海^1^fady^庄^13800138000";///业务描述,特定格式的字符串,格式为:PNR^航程^机票张数^机票销售商在机票平台的id^联系人姓名^联系电话
        //tenPayParam.Bus_Desc = "测试";
        tenPayParam.Desc            = "在线充值";
        tenPayParam.Orderid         = orderId;
        tenPayParam.Total_Tee       = total.ToString();
        tenPayParam.UserHostAddress = Page.Request.UserHostAddress;
        tenPayParam.Total_Tee       = "4";
        string strFromValue = new PbProject.Logic.Pay.TenPay().SplitPayRequest(tenPayParam);

        Response.Write(strFromValue);
    }
예제 #5
0
        /***
         * 退款查询完整业务流程逻辑
         * @param refund_id 微信退款单号(优先使用)
         * @param out_refund_no 商户退款单号
         * @param transaction_id 微信订单号
         * @param out_trade_no 商户订单号
         * @return 退款查询结果(xml格式)
         */
        public static string Run(string refund_id, string out_refund_no, string transaction_id, string out_trade_no)
        {
            Log.Info("RefundQuery", "RefundQuery is processing...");

            WxPayData data = new WxPayData();

            if (!string.IsNullOrEmpty(refund_id))
            {
                data.SetValue("refund_id", refund_id);//微信退款单号,优先级最高
            }
            else if (!string.IsNullOrEmpty(out_refund_no))
            {
                data.SetValue("out_refund_no", out_refund_no);//商户退款单号,优先级第二
            }
            else if (!string.IsNullOrEmpty(transaction_id))
            {
                data.SetValue("transaction_id", transaction_id);//微信订单号,优先级第三
            }
            else
            {
                data.SetValue("out_trade_no", out_trade_no);//商户订单号,优先级最低
            }

            WxPayData result = TenPay.RefundQuery(data);//提交退款查询给API,接收返回数据

            Log.Info("RefundQuery", "RefundQuery process complete, result : " + result.ToXml());
            return(result.ToPrintStr());
        }
예제 #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", TenPay.GenerateOutTradeNo());     //随机生成商户退款单号
            data.SetValue("op_user_id", WxPayConfig.GetConfig().GetMchID()); //操作员,默认为商户号

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

            Log.Info("Refund", "Refund process complete, result : " + result.ToXml());
            return(result.ToPrintStr());
        }
예제 #7
0
    protected void Page_Load(object sender, EventArgs e)
    {
        TenPayParam tenPayParam = new TenPayParam();

        tenPayParam.Orderid         = getParameter("orderid");         //订单号
        tenPayParam.Total_Tee       = getParameter("total_tee");       //商品金额
        tenPayParam.UserHostAddress = getParameter("userhostaddress"); //ip
        tenPayParam.Attach          = getParameter("attach");
        tenPayParam.Bus_Args        = getParameter("busargs");         //分账明细
        tenPayParam.Bus_Desc        = getParameter("busdesc");
        tenPayParam.Desc            = "机票支付";
        string banktype = getParameter("banktype");

        if (string.IsNullOrEmpty(banktype))
        {
            tenPayParam.BankType = "0";
        }
        else
        {
            tenPayParam.BankType = banktype;
        }
        string msgShow = new TenPay().SplitPayRequest(tenPayParam);

        OnErrorNew(msgShow, false);
        //}

        Response.Write(msgShow);
    }
예제 #8
0
        public void TenPayNotify()
        {
            TenPay pay = new TenPay();

            pay.Notify();
            CancelLayout();
            CancelView();
        }
예제 #9
0
        public void TenPayReceive()
        {
            CancelLayout();
            TenPay pay = new TenPay();

            pay.Receive();
            RenderView("PayResult");
        }
예제 #10
0
        /***
         * 下载对账单完整业务流程逻辑
         * @param bill_date 下载对账单的日期(格式:20140603,一次只能下载一天的对账单)
         * @param bill_type 账单类型
         *      ALL,返回当日所有订单信息,默认值
         *      SUCCESS,返回当日成功支付的订单
         *      REFUND,返回当日退款订单
         *      REVOKED,已撤销的订单
         * @return 对账单结果(xml格式)
         */
        public static string Run(string bill_date, string bill_type)
        {
            Log.Info("DownloadBill", "DownloadBill is processing...");

            WxPayData data = new WxPayData();

            data.SetValue("bill_date", bill_date);        //账单日期
            data.SetValue("bill_type", bill_type);        //账单类型
            WxPayData result = TenPay.DownloadBill(data); //提交下载对账单请求给API,接收返回结果

            Log.Info("DownloadBill", "DownloadBill process complete, result : " + result.ToXml());
            return(result.ToPrintStr());
        }
예제 #11
0
        public ActionResult Native()
        {
            string sp_billno = Request["order_no"];
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

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

            sp_billno = TenPayInfo.PartnerId + sp_billno;


            RequestHandler outParams = new RequestHandler(null);

            outParams.Init();
            string productid = sp_billno;
            string timeStamp = TenPayUtil.GetTimestamp();
            string nonceStr  = TenPayUtil.GetNoncestr();

            RequestHandler Params = new RequestHandler(null);

            Params.SetParameter("appid", TenPayInfo.AppId);
            Params.SetParameter("appkey", TenPayInfo.AppKey);
            Params.SetParameter("noncestr", nonceStr);
            Params.SetParameter("timestamp", timeStamp);
            Params.SetParameter("productid", productid);
            string sign = Params.CreateSHA1Sign();

            Params.SetParameter("sign", sign);

            var parm = TenPay.NativePay(TenPayInfo.AppId, timeStamp, nonceStr, productid, sign);

            parm             = QRCode.QRfromGoogle(parm);
            ViewData["parm"] = parm;
            return(View());
        }
예제 #12
0
        ///  <summary>
        /// 二维码支付
        ///  </summary>
        ///  <param name="order"></param>
        ///  <param name="spbillCreateIp"></param>
        /// <returns></returns>
        public string TenPayV3QrCodeInfo(Order order, string spbillCreateIp)
        {
            var appId = SiteConfig.AppId;  //AppId
            var mchId = SiteConfig.MCHID;  //mchId
            var key   = SiteConfig.MCHKEY; //key
            //var serviceKey = SiteConfig.SERVICEMCHKEY;
            //var serviceMchId = SiteConfig.SERVICEMCHID;
            //var serviceAppId = SiteConfig.SERVICEAPPID;
            var tenPayV3Notify = "{0}/TenPayResult".With(SiteConfig.DomainName);

            var tenPay = new TenPay(appId, mchId, key, tenPayV3Notify);

            var body    = order.Description;
            var codeUrl = order.PrepayCodeUrl;

            //订单是否失效
            if (order.GetPayOrderTime == null ||
                DateTime.Compare(order.GetPayOrderTime.Value.AddHours(2), DateTime.Now) < 0)
            {
                try
                {
                    //获取微信预支付订单
                    string prepayId;

                    //判断订单模式
                    codeUrl = tenPay.GetCodeUrl(order.OrderNumber, body,
                                                spbillCreateIp, order.TotalPrice, out prepayId);

                    //记录微信的订单号
                    order.PrepayId      = prepayId;
                    order.PrepayCodeUrl = codeUrl;
                    //TODO:获取预支付订单时间【只有两个小时的有效期】
                    order.GetPayOrderTime = DateTime.Now;
                    SaveObject(order);
                }
                catch (Exception ex)
                {
                    LogUtility.Order.Error("支付失败:{0}".With(ex.Message), ex);
                    throw ex;
                }
            }
            return(codeUrl);
        }
예제 #13
0
        /***
         * 订单查询完整业务流程逻辑
         * @param transaction_id 微信订单号(优先使用)
         * @param out_trade_no 商户订单号
         * @return 订单查询结果(xml格式)
         */
        public static string Run(string transaction_id, string out_trade_no)
        {
            Log.Info("OrderQuery", "OrderQuery 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);
            }

            WxPayData result = TenPay.OrderQuery(data);//提交订单查询请求给API,接收返回数据

            Log.Info("OrderQuery", "OrderQuery process complete, result : " + result.ToXml());
            return(result.ToPrintStr());
        }
예제 #14
0
        public ActionResult Delivernotify()
        {
            string timeStamp    = "";
            string appSignature = "";
            //string appId, string openId, string transId, string out_Trade_No, string deliver_TimesTamp, string deliver_Status, string deliver_Msg, string app_Signature,
            string sp_billno = Request["order_no"];
            //当前时间 yyyyMMdd
            string date = DateTime.Now.ToString("yyyyMMdd");

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

            sp_billno = TenPayInfo.PartnerId + sp_billno;

            //调起微信支付签名
            timeStamp = TenPayUtil.GetTimestamp();

            //设置支付参数
            RequestHandler paySignReqHandler = new RequestHandler(null);

            paySignReqHandler.SetParameter("appid", TenPayInfo.AppId);
            paySignReqHandler.SetParameter("openId", TenPayInfo.AppKey);
            paySignReqHandler.SetParameter("transId", "111112222233333");
            paySignReqHandler.SetParameter("deliver_TimesTamp", timeStamp);
            paySignReqHandler.SetParameter("out_Trade_No", sp_billno);
            paySignReqHandler.SetParameter("deliver_Status", "1");
            paySignReqHandler.SetParameter("deliver_Msg", "ok");
            appSignature = paySignReqHandler.CreateSHA1Sign();
            var result = TenPay.Delivernotify(TenPayInfo.AppId, "oX99MDgNcgwnz3zFN3DNmo8uwa-w", "111112222233333", sp_billno,
                                              timeStamp, "1", "ok", appSignature, "sha1");

            ViewData["message"] = result.errcode;
            return(View());
        }
예제 #15
0
        public void GotoPay(string PayWay, decimal total, string pname, int docId, int chargeType)
        {
            OrderService   os        = Context.GetService <OrderService>();
            AccountService accs      = Context.GetService <AccountService>();
            U_UserInfo     logonUser = base.GetUser();
            decimal        orderId   = Utils.TmmUtils.GenOrderId();

            DDocInfo     doc    = new DDocInfo();
            TOrder       order  = new TOrder();
            TOrderDetail detail = new TOrderDetail();

            int orderType = 0;  //订单类型

            if (chargeType == 1)
            {
                doc       = os.DDocInfoBll.Get(docId);
                orderType = (int)OrderType.DownDocOrder;
            }
            else if (chargeType == 0)
            {
                //如果是直接充值,这里虚拟一个doc对象,来作为订单的商品
                doc = new DDocInfo()
                {
                    DocId = -1,
                    Title = "直接充值:" + total.ToString(),
                    Price = total
                };
                orderType = (int)OrderType.DirectCharge;
            }


            detail = new TOrderDetail()
            {
                DocId      = doc.DocId,
                DocTitle   = doc.Title,
                GoodsCount = 1,
                Price      = doc.Price,
                OrderId    = orderId
            };
            order = new TOrder()
            {
                OrderType    = orderType,
                OrderId      = orderId,
                UserId       = logonUser.UserId,
                Email        = logonUser.Email,
                Total        = detail.Price * detail.GoodsCount,
                Ip           = Context.Request.UserHostAddress,
                Status       = (int)OrderStatus.NewOrder,
                CreateTime   = DateTime.Now,
                PayWay       = Helper.FormatHelper.GetPayWay(PayWay),
                OrderDetails = new List <TOrderDetail>()
                {
                    detail
                }
            };
            os.TOrderBll.SaveOrder(order);



            TOrder o = os.TOrderBll.Get(orderId);


            decimal amount = 0;//除扣除账户余额外还需要支付金额

            amount = total;

            //if (total > minfo.Amount)
            //{
            //    amount = total - minfo.Amount;
            //}
            //else {
            //    //账户支付
            //}

            #region 转至支付接口
            if (PayWay.ToLower() == "tenpay")
            {
                TenPay pay = new TenPay();
                pay.UserId = logonUser.UserId;
                pay.Send(orderId.ToString(), amount.ToString(), pname);
            }

            if (PayWay.ToLower() == "chinabank")
            {
                ChinaBankPay pay = new ChinaBankPay();
                pay.Send(orderId.ToString(), amount.ToString(), pname);

                // Response.Write("ChinaBank");
            }
            if (PayWay.ToLower() == "alipay")
            {
                AliPay pay = new AliPay();
                pay.Send(orderId.ToString(), amount.ToString(), pname, logonUser.UserId);

                // Response.Write("ChinaBank");
            }
            if (PayWay.ToLower() == "useraccount")
            {
                MAccount minfo = accs.MAccountBll.GetByUserId(logonUser.UserId);    //账户

                if (o.Total <= minfo.Amount && (o.Status == (int)OrderStatus.NewOrder))
                {
                    //ms.MAccount.AccountExpend(o.OrderId);
                    ////ms.MOrder.UpdateOrder2Paid(o.OrderId, 0, "账户支付", (int)Models.MOrderStateInfo.己付款);
                    //Web.Common.OrderCallBack oCallBack = new MamShare.Mall.Web.Common.OrderCallBack(
                    //            o.UserId, o.OrderId, 0, (int)Models.MOrderStateInfo.己付款, "账户支付");
                    //oCallBack.Update2Paid();

                    //Hashtable p = new Hashtable();
                    //p.Add("OrderId", o.OrderId);
                    //RedirectToAction("payok.do", p);
                    os.MAccountBll.AccountExpend(o.OrderId, Utils.TmmUtils.IPAddress());    //账户花销
                    Common.OrderCallBack oCallBack = new TMM.Core.Common.OrderCallBack();
                    oCallBack.UserId    = o.UserId;
                    oCallBack.OrderId   = o.OrderId;
                    oCallBack.PayWay    = 0;
                    oCallBack.Status    = (int)OrderStatus.IsPaied;
                    oCallBack.PayDetail = "账户支付";
                    oCallBack.GotoUrl   = "/my/purchase.do";

                    oCallBack.ExecAfterPaid();
                }
                else
                {
                    Redirect("NetPay.do?orderid=" + o.OrderId);
                }
            }
            #endregion
            RenderView("pay");
        }