Esempio n. 1
0
        public IPaymentResponse Charge(PaymentRequest request)
        {
            HiddenFormResponse res = new HiddenFormResponse();

            if (this.Setting == null)
            {
                return(null);
            }
            var dic = new AopDictionary();

            dic.Add("subject", request.Name);
            if (request.Description != null)
            {
                dic.Add("body", request.Description);
            }

            dic.Add("out_trade_no", request.Id.ToString("N"));
            dic.Add("product_code", "FAST_INSTANT_TRADE_PAY");//fix value

            var amount = Math.Round(request.TotalAmount, 2);

            dic.Add("total_amount", amount);
            dic.Add("time_expire", DateTime.Now.AddMinutes(10));

            string notifurl  = PaymentHelper.GetCallbackUrl(this, nameof(Notify), Context);
            string returnurl = request.ReturnUrl ?? PaymentHelper.EnsureHttpUrl(this.Setting.ReturnUrl, Context);

            res.html = AlipayApi.Pay(dic, this.Setting, returnurl, notifurl);

            return(res);
        }
Esempio n. 2
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);
        }