Exemple #1
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 #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 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);
        }