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); }
/// <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); }
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, }); } } }
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()); } }
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); }