public Task <Response <PlaceAnOrderInfoResponse> > StrokePay([FromBody] StrokePayRequest request)
 {
     return(this.strokeService.StrokePay(request));
 }
Пример #2
0
        /// <summary>
        /// 行程支付
        /// </summary>
        /// <param name="request">The request.</param>
        /// <returns>Task&lt;Response&lt;PlaceAnOrderInfoResponse&gt;&gt;.</returns>
        /// <exception cref="NotImplementedException"></exception>
        public async Task <Response <PlaceAnOrderInfoResponse> > StrokePay(StrokePayRequest request)
        {
            var userId   = contextAccessor.UserId();
            var userInfo = await this.strokeContext.Users.FirstOrDefaultAsync(x => x.Id == userId);

            if (userInfo == null)
            {
                throw new Exception("获取用户信息失败");
            }

            if (string.IsNullOrEmpty(userInfo.Cphone))
            {
                return(new Response <PlaceAnOrderInfoResponse>
                {
                    Code = 200,
                    Message = "手机号未绑定"
                });
            }
            var strokeInfo = await this.strokeContext.Strokes.FirstOrDefaultAsync(x => x.Id == request.StrokeId);

            if (strokeInfo == null)
            {
                throw new Exception("获取行程信息失败");
            }
            #region 添加订单
            long shareUser = 0;
            long.TryParse(request.ShareCode, out shareUser);

            long fromSource = 0;
            long.TryParse(request.From, out fromSource);
            Logger.LogDebug($"用户来源-from:{fromSource},分享用户:{shareUser}");
            var orderInfo = this.strokeContext.Orders.Add(new Order
            {
                OrderNo     = DateTime.Now.ToString("yyyyMMddHHmmssffff"),
                UserId      = userId,
                StrokeId    = strokeInfo.Id,
                Title       = strokeInfo.Title,
                City        = strokeInfo.City,
                Destination = strokeInfo.Destination,
                ImageUrl    = strokeInfo.ImageUrl,
                NumberDay   = strokeInfo.NumberDay,
                From        = (UserFrom)fromSource,
                ShareUser   = shareUser,
                OrderStatus = OrderStatus.NoPaid,
                Price       = strokeInfo.Price,
                TotalAmount = strokeInfo.SpecialPrice,
                Payment     = PaymentType.WeChat,
                Remark      = "",
                TotalCount  = 1
            });
            #endregion
            this.strokeContext.SaveChanges();

            //支付
            var weChatPay = new WeChatPayRequest
            {
                Body       = HttpUtility.UrlEncode(orderInfo.Entity.Title),
                TotalFee   = orderInfo.Entity.TotalAmount,
                SuccessUrl = request.SuccessUrl,
                FailedUrl  = request.FaildUrl,
                NotifyUrl  = this.weChatOptions.HostUrl + "/api/Payment/WeChatpayNotify",
                SignType   = "MD5",
                OrderIds   = orderInfo.Entity.Id.ToString()
            };


            //获取微信公众号中,微信js   支付信息
            var result = GetJsPayRedirect(weChatPay, PaymentType.WeChat);
            Logger.LogDebug($"支付链接-----{result}");
            return(new Response <PlaceAnOrderInfoResponse>
            {
                Data = new PlaceAnOrderInfoResponse
                {
                    OutTradeNo = orderInfo.Entity.Id.ToString(),
                    PaymentType = PaymentType.WeChat,
                    WeChatAmount = orderInfo.Entity.TotalAmount,
                    MwebUrl = result
                }
            });
        }