Exemple #1
0
        public WeixinTradeService()
        {
            string certPath = HttpRuntime.AppDomainAppPath.ToString() + WeixinConfig.SSLCERT_PATH;

            weixinPayApi = new WeixinPayApi(WeixinConfig.IP, WeixinConfig.APPID, WeixinConfig.MCHID, certPath, WeixinConfig.SSLCERT_PASSWORD, WeixinConfig.KEY, WeixinConfig.REPORT_LEVENL);
            _weixinKey   = WeixinConfig.KEY;
        }
        /// <summary>
        /// 确认结算
        /// </summary>
        /// <param name="orderId"></param>
        /// <returns></returns>
        public JsonResult ConfirmOrderPayReturn(long orderId, int userId, int pageIndex, int pageSize)
        {
            var status  = OrderStatus.Complete.GetHashCode();
            var order   = OrderService.GetOrder(userId, orderId);
            var user    = UserService.GetUserByUserId(userId);
            var product = ProductService.GetProductById(order.ProductId);
            Result <DotNet.Common.Collections.PagedList <OrderManageViewModel> > orderList = new Result <Common.Collections.PagedList <OrderManageViewModel> >();
            var isSuccess = false;
            var msg       = "";

            if (order.Status == OrderStatus.WaitingConfirm.GetHashCode() && product.EndTime.AddDays(product.EarningDay) < DateTime.Now)
            {
                if (order.PayType == 0)
                {
                    //调取微信企业支付接口
                    var refundPrincipal = order.Price * order.ProductCount; //购买本金
                    var descPrincipal   = string.Format("羊客【{0}】结算本金", product.Name);
                    var payResult       = WeixinPayApi.QYPaySplit(user.WxOpenId, orderId, refundPrincipal, descPrincipal, payUpperLimit);

                    var refundBonus    = product.Earning * order.ProductCount;
                    var descBonus      = string.Format("羊客【{0}】结算收益", product.Name);
                    var payResultBonus = WeixinPayApi.QYPaySplit(user.WxOpenId, orderId, refundBonus, descBonus, payUpperLimit);

                    if (payResult && payResultBonus)
                    {
                        isSuccess = true;
                    }
                    else
                    {
                        msg = "微信企业支付接口出现异常";
                    }
                    orderList = ChangeOrderStatus(orderId, userId, pageIndex, pageSize, status);
                }
                else
                {
                    //线下支付,直接修改订单状态
                    orderList = ChangeOrderStatus(orderId, userId, pageIndex, pageSize, status);
                    isSuccess = true;
                }
            }
            else
            {
                msg       = "订单状态不是【待确认结算】或订单尚未达到结算期";
                orderList = OrderService.GetOrderList(pageIndex, pageSize);
            }

            var result = new
            {
                IsSuccess = isSuccess,
                Message   = msg,
                PageIndex = orderList.Data.PageIndex,
                PageSize  = orderList.Data.PageSize,
                List      = orderList.Data.ToList(),
                Count     = orderList.Data.TotalCount,
                PageNo    = orderList.Data.TotalCount % orderList.Data.PageSize != 0 ?
                            (orderList.Data.TotalCount / orderList.Data.PageSize) + 1 : orderList.Data.TotalCount / orderList.Data.PageSize
            };

            return(Json(result, JsonRequestBehavior.AllowGet));
        }
        /// <summary>
        /// 确认结算AJAX
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public JsonResult ConfirmOrderRefund(int id, int userId)
        {
            var success = true;
            var msg     = "";
            var paylog  = WeiXinService.GetPayLogById(id);

            if (paylog.Id > 0)
            {
                //企业支付
                var payCode      = paylog.OrderId.ToString() + paylog.Id.ToString();
                var payResultMsg = "";
                var payResult    = WeixinPayApi.QYPay(paylog.WxOpenId, payCode, paylog.Amount, paylog.Description, out payResultMsg);
                if (payResult == "SUCCESS")
                {
                    success = true;
                    //更新paylog状态
                    WeiXinService.WeixinPayLogUpdateStatus(id, 1);
                    //确认是否都处于结算完成状态
                    var hasUnRefund = WeiXinService.WeixinPayLogCheckStatus(paylog.OrderId, 0);//返回是否还有状态为0的数据
                    //如果没有状态为0的数据,修改订单状态为已完成
                    if (!hasUnRefund)
                    {
                        var orderStatus = OrderStatus.Complete.GetHashCode();
                        OrderService.UpdateOrderStatus(userId, paylog.OrderId, orderStatus);
                    }
                }
                else
                {
                    success = false;
                    msg     = "企业支付接口调取失败,请稍后重试。原因:" + payResultMsg;
                }
            }
            else
            {
                success = false;
                msg     = "结算记录不存在";
            }
            var result = new
            {
                IsSuccess = success,
                Message   = msg
            };

            return(Json(result));
        }