Exemplo n.º 1
0
        private static PaymentStatusResponse GetPaidStatus(PaymentStatusResponse result, string orderStatus)
        {
            if (orderStatus.Equals("failed", StringComparison.OrdinalIgnoreCase) ||
                orderStatus.Equals("gateway_rejected", StringComparison.OrdinalIgnoreCase) ||
                orderStatus.Equals("settlement_declined", StringComparison.OrdinalIgnoreCase))
            {
                result.Status = PaymentStatus.NotAvailable;
            }

            if (orderStatus.Equals("authorized", StringComparison.OrdinalIgnoreCase) ||
                orderStatus.Equals("submitted_for_settlement", StringComparison.OrdinalIgnoreCase))
            {
                result.Status = PaymentStatus.Pending;
            }

            if (orderStatus.Equals("settled", StringComparison.OrdinalIgnoreCase))
            {
                result.Status = PaymentStatus.Paid;
            }

            return(result);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Get data FromMySQL where Payment Pending
        /// </summary>
        /// <param name="ConString"></param>
        public static void GetdataFromMySQL(string ConString)
        {
            int    ID              = 0;
            int    TenantId        = 0;
            string InvoiceNo       = string.Empty;
            string Date            = string.Empty;
            string CustomerName    = string.Empty;
            string MobileNumber    = string.Empty;
            string TokenId         = string.Empty;
            string Alias           = string.Empty;
            string StoreCode       = string.Empty;
            string CompanayName    = string.Empty;
            string apiResponse     = string.Empty;
            string apitokenRes     = string.Empty;
            string ShippingAddress = string.Empty;
            string PinCode         = string.Empty;
            string City            = string.Empty;
            string State           = string.Empty;
            string Country         = string.Empty;
            string DeliveryType    = string.Empty;

            PaymentStatusResponse paymentapiResponse = new PaymentStatusResponse();

            MySqlConnection con = null;

            try
            {
                DataTable dt = new DataTable();

                IConfiguration config = new ConfigurationBuilder().AddJsonFile("appsettings.json", true, true).Build();

                string ClientAPIURL = config.GetSection("MySettings").GetSection("ClientAPIURL").Value;
                string clientAPIUrlForGenerateToken = config.GetSection("MySettings").GetSection("clientAPIUrlForGenerateToken").Value;
                string TerminalId    = config.GetSection("MySettings").GetSection("TerminalId").Value;
                string Client_Id     = config.GetSection("MySettings").GetSection("Client_Id").Value;
                string Client_Secret = config.GetSection("MySettings").GetSection("Client_Secret").Value;
                string Grant_Type    = config.GetSection("MySettings").GetSection("Grant_Type").Value;
                string Scope         = config.GetSection("MySettings").GetSection("Scope").Value;

                con = new MySqlConnection(ConString);
                MySqlCommand cmd = new MySqlCommand("SP_PHYGetPaymentDetails", con)
                {
                    CommandType = System.Data.CommandType.StoredProcedure
                };
                cmd.Connection.Open();
                MySqlDataAdapter da = new MySqlDataAdapter(cmd);
                da.Fill(dt);
                cmd.Connection.Close();
                if (dt.Rows.Count > 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        DataRow dr = dt.Rows[i];
                        ID              = Convert.ToInt32(dr["ID"]);
                        TenantId        = Convert.ToInt32(dr["TenantId"]);
                        InvoiceNo       = Convert.ToString(dr["InvoiceNo"]);
                        Date            = Convert.ToDateTime(dr["Date"]).ToString("yyyy-MM-dd HH:mm:ss");
                        CustomerName    = Convert.ToString(dr["CustomerName"]);
                        MobileNumber    = Convert.ToString(dr["MobileNumber"]);
                        TokenId         = Convert.ToString(dr["TokenId"]);
                        Alias           = Convert.ToString(dr["Alias"]);
                        StoreCode       = Convert.ToString(dr["StoreCode"]);
                        CompanayName    = Convert.ToString(dr["ProgramCode"]);
                        ShippingAddress = Convert.ToString(dr["ShippingAddress"]);
                        PinCode         = Convert.ToString(dr["PinCode"]);
                        City            = Convert.ToString(dr["City"]);
                        State           = Convert.ToString(dr["State"]);
                        Country         = Convert.ToString(dr["Country"]);
                        DeliveryType    = Convert.ToString(dr["DeliveryType"]);

                        var dtOffset = DateTimeOffset.Parse(Date, CultureInfo.InvariantCulture);

                        string apiReq = "Client_Id=" + Client_Id + "&Client_Secret=" + Client_Secret + "&Grant_Type=" + Grant_Type + "&Scope=" + Scope;

                        apitokenRes = CommonService.SendApiRequestToken(clientAPIUrlForGenerateToken + "connect/token", apiReq);
                        HSResponseGenerateToken hSResponseGenerateToken = new HSResponseGenerateToken();
                        hSResponseGenerateToken = JsonConvert.DeserializeObject <HSResponseGenerateToken>(apitokenRes);

                        PaymentStatusRequest paymentStatus = new PaymentStatusRequest
                        {
                            tokenId     = TokenId,
                            programCode = CompanayName,
                            storeCode   = StoreCode,
                            //billDateTime = dtOffset.ToString("yyyy-MM-dd'T'HH:mm:ss.249'Z'"),
                            billDateTime  = dtOffset.ToString("dd-MMM-yyyy hh:mm:ss"),
                            terminalId    = TerminalId,
                            merchantTxnID = InvoiceNo,
                            mobile        = MobileNumber.TrimStart('0')
                        };
                        string apiReqpayment = JsonConvert.SerializeObject(paymentStatus);

                        if (!string.IsNullOrEmpty(hSResponseGenerateToken.access_token))
                        {
                            apiResponse        = CommonService.SendApiRequest(ClientAPIURL + "/api/GetPaymentStatus", apiReqpayment, hSResponseGenerateToken.access_token);
                            paymentapiResponse = JsonConvert.DeserializeObject <PaymentStatusResponse>(apiResponse);
                        }
                        if (paymentapiResponse.returnCode == "0" && paymentapiResponse.tokenStatus.Contains("Success"))
                        {
                            if (ShippingAddress != "" && PinCode != "" && City != "" && State != "" && Country != "" && DeliveryType != "Pickup")
                            {
                                UpdateResponse(ID, /*paymentapiResponse.status*/ "PaymentDetails", ConString);
                            }
                            else
                            {
                                UpdatePaymentResponse(ID, /*paymentapiResponse.status*/ "PaymentDetails", DeliveryType, ConString);
                            }

                            //CommonService.SmsWhatsUpDataSend(TenantId, 0, CompanayName, ID, ClientAPIURL, "PaymentStatus", ConString, hSResponseGenerateToken.access_token);
                        }
                        else
                        {
                            ExLogger(ID, InvoiceNo, Date, StoreCode, paymentapiResponse.returnMessage, paymentapiResponse.tokenStatus, ConString);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ExLogger(ID, InvoiceNo, Date, StoreCode, ex.Message, ex.StackTrace, ConString);
            }
            finally
            {
                if (con != null)
                {
                    con.Close();
                }
                GC.Collect();
            }
        }
        public PaymentStatusResponse checkStatus(PaymentRequest request)
        {
            PaymentStatusResponse result = new PaymentStatusResponse();

            return(result);
        }
Exemplo n.º 4
0
        public async Task <PaymentStatusResponse> CheckPaymentAsync(CheckPaymentRequest request)
        {
            var integrationProperties = await _partnerIntegrationPropertiesFetcherService.FetchPropertiesAsync(request.PartnerId);

            if (integrationProperties.ErrorCode != IntegrationPropertiesErrorCode.None)
            {
                return new PaymentStatusResponse
                       {
                           ErrorCode = _mapper.Map <CheckIntegrationErrorCode>(integrationProperties.ErrorCode),
                       }
            }
            ;

            var client = new PayrexxIntegrationClient(
                integrationProperties.ApiBaseUrl,
                integrationProperties.InstanceName,
                integrationProperties.ApiKey);

            try
            {
                var paymentStatus = await client.Api.GetPaymentGatewayAsync(int.Parse(request.PaymentId));

                var result = new PaymentStatusResponse {
                    ErrorCode = CheckIntegrationErrorCode.None
                };
                if (paymentStatus.Status != "success")
                {
                    result.PaymentStatus = PaymentStatus.NotFound;
                    return(result);
                }

                switch (paymentStatus.Data[0].Status)
                {
                case "waiting":
                    result.PaymentStatus = PaymentStatus.Pending;
                    break;

                case "confirmed":
                    result.PaymentStatus = PaymentStatus.Success;
                    break;

                case "authorized":
                case "reserved":
                    result.PaymentStatus = PaymentStatus.Processing;
                    break;

                default:
                    throw new NotSupportedException($"Payment status {paymentStatus.Data[0].Status} is not supported");
                }
                return(result);
            }
            catch (Exception e)
            {
                _log.Warning(null, exception: e);
                return(new PaymentStatusResponse
                {
                    ErrorCode = CheckIntegrationErrorCode.Fail,
                });
            }
        }
    }
Exemplo n.º 5
0
        public void ThreeDSecureTokenizationWithRecurringPayment()
        {
            PayOnClient threeDSecureClient     = new PayOnClient(EntityId_ThreeDPayment, UserId, Password, BaseUrl, TestMode);
            PayOnClient recurringPaymentClient = new PayOnClient(EntityId_Recurring, UserId, Password, BaseUrl, TestMode);

            CardAccount[] cardAccounts = TestData.GetTestPaymentCardAccounts();

            foreach (var cardAccount in cardAccounts)
            {
                int idx = Array.FindIndex(cardAccounts, x => x == cardAccount) + 1;
                Log($"\nTest card: {idx}/{cardAccounts.Count()}: {cardAccount.Number}");

                PaymentRequest request = new PaymentRequest
                {
                    PaymentBrand       = cardAccount.PaymentBrand,
                    Amount             = "1.00",
                    Currency           = "ZAR",
                    Card               = cardAccount,
                    PaymentType        = "DB",
                    RecurringType      = "INITIAL",
                    CreateRegistration = true,
                    ShopperResultUrl   = "https://newco/payment/confirm",
                    Timestamp          = DateTime.Now.ToIso8601String()
                };

                Log("3D Secure Request with Tokenization", JsonConvert.SerializeObject(request));
                PaymentResponse response = threeDSecureClient.RequestPayment(request);
                Log("3D Secure Response with Tokenization", JsonConvert.SerializeObject(response));

                string registrationId = response.RegistrationId;

                Assert.NotNull(registrationId);

                // If ACS is required
                if (response.Result.GetResultStatus() == ResultStatus.Pending)
                {
                    PaymentStatusResponse paymentResult = RequestPaymentStatus(threeDSecureClient, cardAccount, response.Redirect);
                    Assert.Equal(ResultStatus.Approved, paymentResult?.Result?.GetResultStatus());
                }
                else
                {
                    Assert.Equal(ResultStatus.Approved, response.Result.GetResultStatus());
                }

                // Recurring transaction
                RegistrationRequest recurringRequest = new RegistrationRequest
                {
                    PaymentBrand       = cardAccount.PaymentBrand,
                    Amount             = "123.45",
                    Currency           = "ZAR",
                    RecurringType      = "REPEATED",
                    PaymentType        = "DB",
                    CreateRegistration = false,
                    RegistrationId     = registrationId
                };

                Log("Initial Recurring Registration Request", JsonConvert.SerializeObject(recurringRequest));
                RegistrationResponse recurringResponse = recurringPaymentClient.RequestRegistration(recurringRequest);
                Log("Repeat Recurring Registration Response", JsonConvert.SerializeObject(recurringResponse));

                Assert.Equal(ResultStatus.Approved, recurringResponse.Result.GetResultStatus());
            }
        }
Exemplo n.º 6
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);
        }