public void Test4()
        {
            var data    = "{}";//json请求数据
            var request = new AlipayData();

            request.FromJson(data);

            var config = new AlipayConfig
            {
                NotifyUrl    = "",
                AppId        = "",
                PrivateKey   = "",
                AliPublicKey = "",
                QuitUrl      = ""
            };
            var response = AlipayClient.Notify(request, config);

            if (string.IsNullOrEmpty(response.OutTradeNo))
            {
                Assert.Fail();
            }
            else
            {
                Assert.Pass();
            }
        }
Exemple #2
0
        public AlipayData Query(string id, OrderType outTradeNo)
        {
            AlipayTradeQueryRequest request = new AlipayTradeQueryRequest();
            var requstData = "{\"" + (outTradeNo == OrderType.OutTradeNo ? "out_trade_no" : "trade_no") + "\":\"" + id + "\"}";

            //string.Format(, outTradeNo == OrderType.OutTradeNo ? "out_trade_no" : "trade_no",id);
            request.BizContent = requstData;
            var response   = _aopClient.Execute(request);
            var alipayData = new AlipayData();

            if (response.IsError)
            {
                LogHelper.Logger.Error("查询订单失败:" + response.Msg + "," + response.SubMsg);
                if (response.Code == "40004")
                {
                    alipayData.SetValue("trade_status", "NOPAY");
                    alipayData.SetValue(outTradeNo == OrderType.OutTradeNo ? "out_trade_no" : "trade_no", id);
                    return(alipayData);
                }

                throw new Exception("查询订单失败,原因" + response.Msg);
            }
            alipayData.SetValue("trade_status", response.TradeStatus);
            alipayData.SetValue("trade_no", response.TradeStatus);
            alipayData.SetValue("out_trade_no", response.OutTradeNo);
            alipayData.SetValue("buyer_logon_id", response.BuyerLogonId);
            alipayData.SetValue("total_amount", response.TotalAmount);
            alipayData.SetValue("receipt_amount", response.ReceiptAmount);
            alipayData.SetValue("buyer_pay_amount", response.BuyerPayAmount);
            return(alipayData);
        }
Exemple #3
0
        /// <summary>
        /// 支付成功回调
        /// </summary>
        /// <param name="request"></param>
        /// <param name="config"></param>
        /// <returns></returns>
        public static AlipayNotifyResponse Notify(AlipayData request, AlipayConfig config)
        {
            var response = request.ToObject <AlipayNotifyResponse>();

            //签名校验
            if (!AlipaySignature.RSACheckV1(request.GetValues(), config.AliPublicKey, response.Charset, response.SignType, config.KeyFromFile))
            {
                throw new Exception("签名校验失败");
            }
            return(response);
        }
        public bool AlipayCallBack(AlipayData alipayData)
        {
            var userPayInfo = _uerPayOrderInfoRepository.Get(alipayData.GetValue("out_trade_no"));

            if (userPayInfo == null)
            {
                LogHelper.Logger.Error(string.Format("数据库中不存在单号为{0}的订单", alipayData.GetValue("out_trade_no")));
                return(false);
            }
            if (!VerifyOrder(alipayData, userPayInfo))
            {
                return(false);
            }
            var tradeStatus   = alipayData.GetValue("trade_status");
            var transactionId = string.Empty;

            if (alipayData.IsSet("trade_no"))
            {
                transactionId = alipayData.GetValue("trade_no");
            }
            if (tradeStatus.Equals("TRADE_SUCCESS") || tradeStatus.Equals("TRADE_FINISHED"))
            {
                //支付金额
                return(_purchaseServiceRepository.CompleteServiceOrder(new CompleteServiceOrder()
                {
                    OrderID = alipayData.GetValue("out_trade_no"),
                    Cost = Convert.ToDouble(alipayData.GetValue("invoice_amount")),
                    NewID = OrderHelper.GenerateNewId(),
                    PayExtendInfo = alipayData.ToJson(),
                    PayState = tradeStatus,
                    PayOrderID = transactionId,
                    Remarks = "支付宝手机网页支付",
                }) == 0);
            }
            //超时关闭
            else if (tradeStatus.Equals("TRADE_CLOSED"))
            {
                LogHelper.Logger.Debug("订单超时关闭");
                return(_purchaseServiceRepository.UpdateServiceOrder(new UpdateServiceOrder()
                {
                    ID = alipayData.GetValue("out_trade_no"),
                    PayExtendInfo = alipayData.ToJson(),
                    PayState = tradeStatus,
                    PayOrderID = transactionId,
                    State = 3,
                }) == 0);
            }
            else
            {
                return(false);
            }
        }
Exemple #5
0
        public PaymentStatusResponse checkStatus(PaymentRequest request)
        {
            PaymentStatusResponse result = new PaymentStatusResponse();

            if (request == null || request.Id == default(Guid) || this.Setting == null)
            {
                return(result);
            }

            try
            {
                var dic = new AopDictionary();
                dic.Add("out_trade_no", request.Id.ToString("N"));
                var response    = AlipayApi.Query(dic, this.Setting);
                var data        = new AlipayData();
                var res         = data.FromJson(response, Setting);
                var trade_state = res["trade_status"];
                //交易状态:WAIT_BUYER_PAY(交易创建,等待买家付款)、TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、TRADE_SUCCESS(交易支付成功)、TRADE_FINISHED(交易结束,不可退款)

                if (trade_state != null)
                {
                    result.HasResult = true;
                    var code = trade_state.ToString().ToUpper();
                    if (code == "TRADE_SUCCESS" || code == "TRADE_FINISHED")
                    {
                        result.Status = PaymentStatus.Paid;
                    }
                    else if (code == "TRADE_CLOSED")
                    {
                        result.Status = PaymentStatus.Cancelled;
                    }
                    else if (code == "WAIT_BUYER_PAY")
                    {
                        result.Status = PaymentStatus.Pending;
                    }
                }
            }
            catch (Exception ex)
            {
                Kooboo.Data.Log.Instance.Exception.WriteException(ex);
            }

            return(result);
        }
 private bool VerifyOrder(AlipayData alipayData, UserPayOrderInfo payOrder)
 {
     if (Convert.ToDecimal(alipayData.GetValue("invoice_amount")) != payOrder.Cost)
     {
         LogHelper.Logger.Error("用户支付的金额与订单预付款金额不一致,交易失败");
         return(false);
     }
     if (!AliPayConfig.PID.Equals(alipayData.GetValue("seller_id")))
     {
         LogHelper.Logger.Error("seller_id不一致,交易失败");
         return(false);
     }
     if (!AliPayConfig.APPID.Equals(alipayData.GetValue("app_id")))
     {
         LogHelper.Logger.Error("app_id不一致,交易失败");
         return(false);
     }
     return(true);
 }
        public HttpResponseMessage WapPay()
        {
            LogHelper.Logger.Debug("回调支付宝支付接口");
            var response   = Request.CreateResponse(HttpStatusCode.OK);
            var alipayData = new AlipayData();

            foreach (var key in HttpContext.Current.Request.Form.AllKeys)
            {
                alipayData.SetValue(key, HttpContext.Current.Request.Form[key]);
            }
            var signVerify = alipayData.SignVerified();

            if (!signVerify)
            {
                Logger.Error("签名失败,这可能是假冒的回调");
                response.Content = new StringContent("fail", Encoding.UTF8, "text/html");
                return(response);
            }

            response.Content = _alipayPurchaseService.AlipayCallBack(alipayData) ? new StringContent("success", Encoding.UTF8, "text/html") : new StringContent("fail", Encoding.UTF8, "text/html");
            return(response);
        }
Exemple #8
0
        public IPaymentResponse Charge(PaymentRequest request)
        {
            if (Setting == null)
            {
                return(null);
            }

            var biz = new AopDictionary();

            biz.Add("subject", request.Name);
            biz.Add("out_trade_no", request.Id.ToString("N"));
            biz.Add("total_amount", Math.Round(request.TotalAmount, 2));

            var sys = new AopDictionary();

            sys.Add("method", "alipay.trade.app.pay");
            sys.Add("format", "json");
            sys.Add("version", "1.0");
            sys.Add("charset", "UTF-8");
            sys.Add("sign_type", Setting.SignType);
            sys.Add("app_id", Setting.APPId);
            sys.Add("timestamp", DateTime.UtcNow.AddHours(8).ToString("yyyy-MM-dd HH:mm:ss"));
            sys.Add("alipay_sdk", "alipay-easysdk-net-2.0.0");
            sys.Add("biz_content", JsonHelper.Serialize(biz));
            sys.Add("notify_url", PaymentHelper.GetCallbackUrl(this, nameof(Notify), Context));
            var data = new AlipayData();
            var sign = data.RSASign(sys, Setting.PrivateKey, "UTF-8", Setting.SignType);

            sys.Add("sign", sign);

            return(new StringResponse
            {
                requestId = request.Id,
                Content = BuildQueryString(sys)
            });
        }
Exemple #9
0
        public PaymentCallback Notify(RenderContext context)
        {
            var dic = GetRequestPost(context);

            if (dic.Count > 0)
            {
                var  data         = new AlipayData();
                bool signVerified = data.RSACheckV1(dic, this.Setting.PublicKey, this.Setting.Charset); //调用SDK验证签名
                if (signVerified)
                {
                    var  strPaymentRequestId = context.Request.GetValue("out_trade_no");
                    Guid paymentRequestId;
                    if (Guid.TryParse(strPaymentRequestId, out paymentRequestId))
                    {
                        var paymentRequest = PaymentManager.GetRequest(paymentRequestId, context);

                        decimal totalAmount = 0;//total amount
                        decimal.TryParse(context.Request.Get("total_amount"), out totalAmount);
                        var subject       = context.Request.Get("subject");
                        var paymentStatus = context.Request.Get("trade_status");

                        if (paymentRequest == null || this.Setting == null)
                        {
                            return(null);
                        }

                        var callback = new PaymentCallback()
                        {
                            RequestId = paymentRequestId,
                        };

                        if (totalAmount == Math.Round(paymentRequest.TotalAmount, 2) || subject == paymentRequest.Name)
                        {
                            if (paymentStatus == TradeStatus.TRADE_CLOSED)
                            {
                                callback.Status = PaymentStatus.Cancelled;
                            }
                            else if (paymentStatus == TradeStatus.TRADE_SUCCESS || paymentStatus == TradeStatus.TRADE_FINISHED)
                            {
                                callback.Status = PaymentStatus.Paid;
                            }
                            else if (paymentStatus == TradeStatus.WAIT_BUYER_PAY)
                            {
                                callback.Status = PaymentStatus.Pending;
                            }
                        }
                        else
                        {
                            callback.Status = PaymentStatus.NotAvailable;
                            //怎么让kooboo的前端打印输出“fail”
                        }

                        return(callback);
                    }
                    else
                    {
                        return(null);
                        //怎么让kooboo的前端打印输出“fail”
                    }
                }
            }

            return(null);
        }
Exemple #10
0
        public PaymentStatusResponse checkStatus(PaymentRequest request)
        {
            PaymentStatusResponse result = new PaymentStatusResponse();

            if (request == null || request.Id == default(Guid) || this.Setting == null)
            {
                return(result);
            }

            try
            {
                var biz = new AopDictionary();
                biz.Add("out_trade_no", request.Id.ToString("N"));

                var dic = new AopDictionary();
                dic.Add("app_id", Setting.APPId);
                dic.Add("method", "alipay.trade.query");
                dic.Add("charset", "utf-8");
                dic.Add("alipay_sdk", "alipay-easysdk-net-2.0.0");
                dic.Add("sign_type", Setting.SignType);
                dic.Add("timestamp", DateTime.UtcNow.AddHours(8).ToString("yyyy-MM-dd HH:mm:ss"));
                dic.Add("version", "1.0");
                dic.Add("biz_content", JsonHelper.Serialize(biz));

                var data = new AlipayData();
                var sign = data.RSASign(dic, Setting.PrivateKey, "UTF-8", Setting.SignType);
                dic.Add("sign", sign);

                var response        = HttpService.DoPost(Setting.ServerUrl, dic, "UTF-8");
                var jobject         = JsonHelper.Deserialize <JObject>(response);
                var rsaCheckContent = AlipaySignature.RSACheckContent(AlipayData.GetSignSourceData(response), jobject.Value <string>("sign"), Setting.PublicKey,
                                                                      "UTF-8", Setting.SignType);
                if (!rsaCheckContent)
                {
                    throw new AliPayException("sign check fail: check Sign and Data Fail!");
                }
                var res         = jobject["alipay_trade_query_response"];
                var trade_state = res["trade_status"];
                //交易状态:WAIT_BUYER_PAY(交易创建,等待买家付款)、TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、TRADE_SUCCESS(交易支付成功)、TRADE_FINISHED(交易结束,不可退款)

                if (trade_state != null)
                {
                    result.HasResult = true;
                    var code = trade_state.ToString().ToUpper();
                    if (code == "TRADE_SUCCESS" || code == "TRADE_FINISHED")
                    {
                        result.Status = PaymentStatus.Paid;
                    }
                    else if (code == "TRADE_CLOSED")
                    {
                        result.Status = PaymentStatus.Cancelled;
                    }
                    else if (code == "WAIT_BUYER_PAY")
                    {
                        result.Status = PaymentStatus.Pending;
                    }
                }
            }
            catch (Exception ex)
            {
                Kooboo.Data.Log.Instance.Exception.WriteException(ex);
            }

            return(result);
        }