Beispiel #1
0
 public async Task ExecuteAsync(HttpContext context)
 {
     try
     {
         var body = (await context.Request.ReadFormAsync()).AsNameValueCollection();
         if (body?.Count == 0)
         {
             throw new ArgumentNullException(nameof(body));
         }
         var request = new AppPayRequest();
         request.AddParameters(new AppPayModel()
         {
             Body       = body.Get("Body"),
             OutTradeNo = body.Get("Out_Trade_No"),
             TotalFee   = int.Parse(body.Get("Total_Amount"))
         });
         await context.Response.WriteAsync((await _client.ExecuteAsync(request)).ToJson());
     }
     catch (System.Exception ex)
     {
         context.Response.StatusCode = StatusCodes.Status500InternalServerError;
         await context.Response.WriteAsync(ex.Message);
     }
     context.Response.ContentType = "application/json; charset=UTF-8";
     await context.Response.Body.FlushAsync();
 }
        public async Task <OkObjectResult> AppPay(string Body, string Out_Trade_No, int Total_Amount)
        {
            var request = new AppPayRequest();

            request.AddParameters(new AppPayModel()
            {
                Body       = Body,
                OutTradeNo = Out_Trade_No,
                TotalFee   = Total_Amount
            });
            return(Ok(await _client.ExecuteAsync(request)));
        }
Beispiel #3
0
        public async Task AppPayTest()
        {
            var gateway = GetService <IGateway>();
            var request = new AppPayRequest(new AppPayModel
            {
                OutTradeNo  = "abc001",
                TotalAmount = 0.01,
                Subject     = "spear_pay",
                Body        = "test"
            });
            var resp = await gateway.Execute(request);

            Print(resp);
        }
Beispiel #4
0
        public ActionResult AppPay(string out_trade_no, int total_amount, string body)
        {
            var request = new AppPayRequest();

            request.AddGatewayData(new AppPayModel()
            {
                Body        = body,
                TotalAmount = total_amount,
                OutTradeNo  = out_trade_no
            });

            var response = _gateway.Execute(request);

            return(Json(response));
        }
Beispiel #5
0
        public IActionResult AppPay(string order_id, int total_amount, string body)
        {
            var request = new AppPayRequest();

            request.AddGatewayData(new AppPayModel()
            {
                Body        = body,
                TotalAmount = total_amount,
                OrderId     = order_id
            });

            var response = _gateway.Execute(request);

            return(Json(response));
        }
Beispiel #6
0
        public void TestAppPay()
        {
            var request = new AppPayRequest();

            request.AddGatewayData(new AppPayModel()
            {
                TotalAmount = 1,
                Subject     = "支付宝手机APP支付测试",
                OutTradeNo  = _outTradeNo
            });

            var response = _alipayGateway.Execute(request);

            _output.WriteLine(response.OrderInfo);
            Assert.NotNull(response.OrderInfo);
        }
Beispiel #7
0
 public AppPayResponse(AppPayRequest request)
 {
     OrderInfo = request.GatewayData.ToUrl();
 }
Beispiel #8
0
        public object PayMerchScanDyna(AppPayRequest param)
        {
            try
            {
                int    cid     = param.CID;
                var    storeId = param.StoreId;
                string mapcid  = string.Empty;
                //查询门店支付授权
                var authorization = GetCompanyPayInfo(cid, storeId, PayConst.QCTAPICODE_A, out mapcid);//26=主扫支付apicode
                if (!authorization.Successed)
                {
                    throw new MessageException(authorization.Message);
                }
                var payStoreId = authorization.Data.ToString();//中转第三方门店号
                //验证用户信息
                if (!string.IsNullOrEmpty(param.MemberId))
                {
                    var veriMemberIntegral = VeriMemberIntegral(param.MemberId, param.UseIntegral);
                    if (!veriMemberIntegral.Successed)
                    {
                        throw new MessageException(veriMemberIntegral.Message);
                    }
                }
                if (param.PayToken.Length == 0 || param.PayToken.Length > 128)
                {
                    throw new MessageException("扫码二维码有误!");
                }

                string out_trade_no   = new AppPayOrderSn(cid, storeId).ToString();
                string create_date    = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                var    pay_notify_url = Pharos.Utility.Config.GetAppSettings("qctpaynotifyurl");//回调地址
                var    goods_name     = "";
                //var goods_desc = "";

                //判断用户积分使用
                #region 积分记录
                IntegralFlows reduceIntegral = new IntegralFlows()
                {
                    CompanyId      = cid,
                    StoreId        = storeId,
                    FlowSN         = out_trade_no,
                    Amount         = param.TotalAmount,
                    Integral       = -param.UseIntegral,
                    DiscountAmount = param.DiscountAmount,
                    CardSN         = param.CardSN,
                    Received       = param.Received,
                    Remark         = "",
                    State          = 0,
                    CreateDate     = DateTime.Now,
                    MemberId       = param.MemberId,
                    Alias          = param.Alias
                };
                IntegralFlows addIntegral = new IntegralFlows()
                {
                    CompanyId      = cid,
                    StoreId        = storeId,
                    FlowSN         = out_trade_no,
                    Amount         = param.TotalAmount,
                    Integral       = param.GetIntegral,
                    DiscountAmount = param.DiscountAmount,
                    CardSN         = param.CardSN,
                    Received       = param.Received,
                    Remark         = "",
                    State          = 0,
                    CreateDate     = DateTime.Now,
                    MemberId       = param.MemberId,
                    Alias          = param.Alias
                };
                IntegralFlowsService.Add(reduceIntegral, false);
                IntegralFlowsService.Add(addIntegral);
                #endregion

                var reqParams = new SortedDictionary <string, object>();

                reqParams.Add("charset", PayConst.CHARSET);
                reqParams.Add("method", PayConst.QCTTRADE_PAY_MERCHSCAN);
                reqParams.Add("mch_id", mapcid);
                reqParams.Add("store_id", payStoreId);
                reqParams.Add("device_id", param.Device_id);
                reqParams.Add("sign_type", PayConst.SIGNTYPE);
                reqParams.Add("version", PayConst.VERSION);
                reqParams.Add("out_trade_no", out_trade_no);
                reqParams.Add("create_date", create_date);
                reqParams.Add("total_amount", param.Received);
                reqParams.Add("buyer_pay_token", param.PayToken);
                reqParams.Add("pay_notify_url", pay_notify_url);
                reqParams.Add("buyer_mobile", "");
                reqParams.Add("goods_name", goods_name);
                reqParams.Add("goods_desc", param.Remark);
                //签名
                String sign = PayHelper.Sign(reqParams, authorization.Message);
                reqParams.Add("sign", sign);
                var obj    = HttpClient.PayPost(Pharos.Utility.Config.GetAppSettings("qctscanpayurl"), reqParams);
                var result = JsonConvert.DeserializeObject <JObject>(obj);
                if (result.Property("return_code").Value.ToString() == "00000")
                {
                    int state  = 0;
                    var rstate = result.Property("pay_status", true);
                    switch (rstate)
                    {
                    default:
                    case "NOTPAY":
                        break;

                    case "PAYSUCCESS":
                        state = 1;
                        break;

                    case "PAYFAIL":
                        state = 2;
                        break;

                    case "PAYCANCEL":
                        state = 3;
                        break;

                    case "PAYTIMEOUT":
                        state = 4;
                        break;
                    }
                    AppPaymentRecords record = new AppPaymentRecords()
                    {
                        CompanyId      = cid,
                        StoreId        = storeId,
                        OrderSN        = out_trade_no,
                        TotalAmount    = param.TotalAmount,
                        DiscountAmount = param.DiscountAmount,
                        Received       = param.Received,
                        ApiCode        = PayConst.QCTAPICODE_A,
                        PayChannel     = result.Property("pay_channel", true),
                        State          = state,
                        CreateDate     = DateTime.Now,
                        CreateUser     = param.MemberId,
                        ReturnData     = obj,
                        Alias          = param.Alias,
                        UserCode       = param.UserCode,
                        Remark         = param.Remark
                    };
                    AppPaymentRecordsService.Add(record);
                    //成功
                    if (state == 1)
                    {
                        //更新会员积分信息
                        var diffIntegral = param.GetIntegral - param.UseIntegral;
                        if (diffIntegral != 0)
                        {
                            UpdateMemberIntegral(param.MemberId, diffIntegral);
                        }

                        return(result.Property("receipt_amount", true));
                    }
                    else
                    {//状态不成功
                        return(result.Property("pay_status", true));
                    }
                }
                else
                {
                    //失败
                    var errmsg = result.Property("return_msg").Value.ToString();
                    if (errmsg.Contains("支付渠道数据非法"))
                    {
                        errmsg = "请扫描微信或支付宝付款码!";
                    }
                    throw new MessageException(errmsg);
                }
            }
            catch (Exception ex)
            {
                throw new MessageException(ex.Message);
            }
        }
Beispiel #9
0
        public object PayBuyerScanDyna(AppPayRequest param)
        {
            try
            {
                int    cid     = param.CID;
                var    storeId = param.StoreId;
                string mapcid  = string.Empty;
                //查询门店支付授权
                var authorization = GetCompanyPayInfo(cid, storeId, PayConst.QCTAPICODE_P, out mapcid);
                if (!authorization.Successed)
                {
                    throw new MessageException(authorization.Message);
                }

                var payStoreId = authorization.Data.ToString();//中转第三方门店号
                if (!string.IsNullOrEmpty(param.MemberId))
                {
                    var veriMemberIntegral = VeriMemberIntegral(param.MemberId, param.UseIntegral);
                    if (!veriMemberIntegral.Successed)
                    {
                        throw new MessageException(veriMemberIntegral.Message);
                    }
                }
                string out_trade_no = new AppPayOrderSn(cid, storeId).ToString();

                string create_date    = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                var    pay_notify_url = Pharos.Utility.Config.GetAppSettings("qctpaynotifyurl");//回调地址
                var    goods_name     = "";
                //var goods_desc = "";

                var reqParams = new SortedDictionary <string, object>();

                reqParams.Add("charset", PayConst.CHARSET);
                reqParams.Add("method", PayConst.QCTTRADE_PAY_BUYERSCAN_DYNA);
                reqParams.Add("mch_id", mapcid);
                reqParams.Add("store_id", payStoreId);
                reqParams.Add("device_id", param.Device_id);
                reqParams.Add("sign_type", PayConst.SIGNTYPE);
                reqParams.Add("version", PayConst.VERSION);
                reqParams.Add("out_trade_no", out_trade_no);
                reqParams.Add("create_date", create_date);
                reqParams.Add("total_amount", param.Received);
                reqParams.Add("pay_notify_url", pay_notify_url);
                reqParams.Add("buyer_mobile", "");
                reqParams.Add("goods_name", goods_name);
                reqParams.Add("goods_desc", param.Remark);
                //签名
                String sign = PayHelper.Sign(reqParams, authorization.Message);
                reqParams.Add("sign", sign);
                var obj    = HttpClient.PayPost(Pharos.Utility.Config.GetAppSettings("qctpayurl"), reqParams);
                var result = JsonConvert.DeserializeObject <JObject>(obj);
                if (result.Property("return_code").Value.ToString() == "00000")
                {
                    //成功

                    //支付交易记录
                    AppPaymentRecords record = new AppPaymentRecords()
                    {
                        CompanyId      = cid,
                        StoreId        = storeId,
                        OrderSN        = out_trade_no,
                        TotalAmount    = param.TotalAmount,
                        DiscountAmount = param.DiscountAmount,
                        Received       = param.Received,
                        ApiCode        = PayConst.QCTAPICODE_P,
                        State          = 0,
                        CreateDate     = DateTime.Now,
                        CreateUser     = param.MemberId,
                        Alias          = param.Alias,
                        UserCode       = param.UserCode,
                        Remark         = param.Remark
                    };
                    AppPaymentRecordsService.Add(record, false);
                    //积分交易记录
                    //消耗
                    IntegralFlows reduceIntegral = new IntegralFlows()
                    {
                        CompanyId      = cid,
                        StoreId        = storeId,
                        FlowSN         = out_trade_no,
                        Amount         = param.TotalAmount,
                        Integral       = -param.UseIntegral,
                        DiscountAmount = param.DiscountAmount,
                        CardSN         = param.CardSN,
                        Received       = param.Received,
                        Remark         = "",
                        State          = 0,
                        CreateDate     = DateTime.Now,
                        MemberId       = param.MemberId,
                        Alias          = param.Alias
                    };
                    //获取
                    IntegralFlows addIntegral = new IntegralFlows()
                    {
                        CompanyId      = cid,
                        StoreId        = storeId,
                        FlowSN         = out_trade_no,
                        Amount         = param.TotalAmount,
                        Integral       = param.GetIntegral,
                        DiscountAmount = param.DiscountAmount,
                        CardSN         = param.CardSN,
                        Received       = param.Received,
                        Remark         = "",
                        State          = 0,
                        CreateDate     = DateTime.Now,
                        MemberId       = param.MemberId,
                        Alias          = param.Alias
                    };

                    //保存积分记录
                    IntegralFlowsService.Add(reduceIntegral, false);
                    IntegralFlowsService.Add(addIntegral);


                    return(new { OrderSN = out_trade_no, PayUrl = result.Property("pay_token").Value.ToString() });
                }
                else
                {
                    //失败
                    var errmsg = result.Property("return_msg").Value.ToString();
                    throw new MessageException(errmsg);
                }
            }
            catch (MessageException ex)
            {
                throw new MessageException(ex.Message);
            }
            catch (Exception ex)
            {
                throw new MessageException("支付失败,请稍后重试!");
            }
        }
Beispiel #10
0
        public async Task <JsonResult> Create([FromForm] string token, [FromForm] int courseId)
        {
            DataResult dr = new DataResult();

            try
            {
                if (courseId < 10000)
                {
                    dr.code = "201";
                    dr.msg  = "参数错误";
                    return(Json(dr));
                }

                UserEntity userEntity = this.GetUserByToken(token);

                CourseEntity courseEntity = courseOrderBLL.ActionDal.ActionDBAccess.Queryable <CourseEntity>().InSingle(courseId);

                if (courseEntity == null)
                {
                    dr.code = "201";
                    dr.msg  = "不存在该课程";
                    return(Json(dr));
                }

                CourseOrderEntity courseOrderEntity = new CourseOrderEntity()
                {
                    courseId   = courseEntity.courseId,
                    createDate = DateTime.Now,
                    modifyDate = DateTime.Now,
                    orderNo    = "WX" + userEntity.userId.ToString() + DateTime.Now.ToString("yyyyMMddHHmmss"),
                    orderTotal = courseEntity.price,
                    payChannel = "",
                    payDate    = Helper.ConvertHelper.DEFAULT_DATE,
                    payNo      = "",
                    realTotal  = 0,
                    state      = 1,
                    userId     = userEntity.userId
                };

                CourseOrderEntity courseOrder = await courseOrderBLL.ActionDal.ActionDBAccess.Insertable(courseOrderEntity).ExecuteReturnEntityAsync();

                if (courseOrder == null)
                {
                    dr.code = "201";
                    dr.msg  = "创建订单失败";
                    return(Json(dr));
                }

                CoursePayResult coursePayResult = new CoursePayResult();
                coursePayResult.courseOrderEntity = courseOrder;

                var request = new AppPayRequest();
                request.AddGatewayData(new AppPayModel()
                {
                    Body        = "购买课程" + courseEntity.name,
                    TotalAmount = Convert.ToInt32(courseOrder.orderTotal * 100),
                    OutTradeNo  = courseOrder.orderNo
                });

                var response = _gateway.Execute(request);
                coursePayResult.payResult = response.OrderInfo;

                dr.code = "200";
                dr.msg  = "成功";
                dr.data = coursePayResult;
            }
            catch (Exception ex)
            {
                dr.code = "999";
                dr.msg  = ex.Message;
            }
            return(Json(dr));
        }
Beispiel #11
0
 public AppPayResponse(AppPayRequest request)
 {
     OrderInfo = request.ToUrl();
 }
Beispiel #12
0
        async Task <RequestPaymentResponseDTO> AppPay(RequestPaymentRequestDTO model)
        {
            var orderDTO = await _orderServiceProxy.GetById(model.OrderId);

            if (orderDTO == null)
            {
                return(null);
            }

            var request = new AppPayRequest();

            var body   = "";
            var orgStr = (orderDTO.OrderItems.FirstOrDefault()?.Title ?? "-");

            if (orgStr.Length > 20)
            {
                body = orgStr.Substring(0, 20);
            }
            else
            {
                body = orgStr;
            }

            request.AddGatewayData(new AppPayModel()
            {
                Body        = body,
                OutTradeNo  = orderDTO.OrderNo,
                TotalAmount = (int)(orderDTO.PayAmount * 100)
            });

            IGateway gateway = null;

            var organizationId = "";

            organizationId = orderDTO.OrganizationId ?? "";
            WeChatAppConfiguration appConfig = null;

            if (!string.IsNullOrEmpty(organizationId))
            {
                appConfig = _wechatAppConfigurationRepository.GetFiltered(o => o.OrganizationId == organizationId).FirstOrDefault();
            }

            if (appConfig != null)
            {
                var wechatpayMerchant = new PaySharp.Wechatpay.Merchant
                {
                    AppId           = appConfig.AppId,
                    MchId           = appConfig.MchId,
                    Key             = appConfig.Key,
                    AppSecret       = appConfig.AppSecret,
                    SslCertPath     = appConfig.SslCertPath,
                    SslCertPassword = appConfig.SslCertPassword,
                    NotifyUrl       = appConfig.NotifyUrl
                };

                gateway = new WechatpayGateway(wechatpayMerchant);
            }
            else
            {
                gateway = _gateways.Get <WechatpayGateway>();
            }

            var response = gateway.Execute(request);

            var ns   = Guid.NewGuid().ToString().Replace("-", "").Substring(0, 20);
            var ts   = GetTimeStamp();
            var pkg  = $"prepay_id={response?.PrepayId}";
            var sign = GetSign(((WechatpayGateway)gateway).Merchant.AppId, ns, response?.PrepayId, ts.ToString(), ((WechatpayGateway)gateway).Merchant.Key);

            var result = new RequestPaymentResponseDTO
            {
                NonceStr  = ns,
                Package   = "Sign=WXPay",//pkg,
                PaySign   = sign,
                TimeStamp = ts.ToString(),
                AppId     = response?.AppId,
                PartnerId = response?.MchId,
                PrepayId  = response?.PrepayId
            };

            return(result);
        }