public static PaymentCallback ProcessNotify(RenderContext context) { var body = context.Request.Body; var data = JsonHelper.Deserialize <CallbackRequest>(body); // https://developer.squareup.com/reference/square/objects/LaborShiftCreatedWebhookObject var status = new PaymentStatus(); if (data.Data.Object.Status == "OPEN") { status = PaymentStatus.Pending; } if (data.Data.Object.Status == "CLOSED") { status = PaymentStatus.Paid; } var result = new PaymentCallback { // to do 该字段不是guid,无法转换赋值 // "merchant_id": "6SSW7HV8K2ST5", //RequestId = data.MerchantID, RawData = body, Status = status }; return(result); }
public PaymentCallback Notify(RenderContext context) { var body = context.Request.Body; var request = JsonConvert.DeserializeObject <WebhookCallback>(body); var result = new PaymentCallback { Status = ConvertStatus(request.Topic), RawData = body, CallbackResponse = new Callback.CallbackResponse { StatusCode = 204 } }; request.Links.TryGetValue("resource", out var transfer); if (transfer != null && !string.IsNullOrEmpty(transfer.Href.ToString()) && transfer.Href.ToString().Contains("transfers")) { var storedRequest = PaymentManager.GetRequestByReferece(transfer.Href.ToString(), context); if (storedRequest != null) { result.RequestId = storedRequest.Id; } } return(result); }
public Task <ProcessOrderResponse> ProcessPaymentCallback(PaymentCallback paymentCallback, string orderId, string contactId, string marketId, string cartName) { var result = ProcessOrder(paymentCallback, paymentCallback.TransactionInfo, orderId, Guid.Parse(contactId), marketId, cartName); return(Task.FromResult(result)); }
public PaymentCallback Notify(RenderContext context) { var response = new PaymentCallback { RawData = context.Request.Body, CallbackResponse = new Callback.CallbackResponse { StatusCode = 204 } }; try { var body = context.Request.Body; var notification = JsonHelper.Deserialize <Smart2PayNotification>(body); if (notification.Payment.MerchantTransactionId == null || !Guid.TryParse(notification.Payment.MerchantTransactionId, out var requestId) || PaymentManager.GetRequest(requestId, context) == null) { return(response); } response.Status = ConvertStatus(notification.Payment.Status.Info); } catch (Exception ex) { Kooboo.Data.Log.Instance.Exception.WriteException(ex); } return(response); }
public PaymentCallback Notify(RenderContext context) { var forms = context.Request.Forms; var data = new BraintreeAPI(Setting).Parse(forms["bt_signature"], forms["bt_payload"]); var result = new PaymentCallback(); if (data != null) { var transactions = data.Subject.Subscription.Transactions; for (int i = 0; i < transactions.Length; i++) { var strPaymentRequestId = transactions[i].Transaction.OrderId; Guid paymentRequestId; if (Guid.TryParse(strPaymentRequestId, out paymentRequestId)) { result.RequestId = paymentRequestId; if (string.Equals(data.kind, "transaction_settled", StringComparison.OrdinalIgnoreCase)) { result.Status = PaymentStatus.Paid; } else { result.Status = PaymentStatus.Cancelled; } } } } return(result); }
public async Task <ActionResult <PaymentCallbackResponse> > PaymentCallback(PaymentCallback paymentCallback) { PaymentCallbackResponse paymentCallbackResponse = new PaymentCallbackResponse(); paymentCallbackResponse.transaction_id = paymentCallback.transaction_id; paymentCallbackResponse.successful = true; return(new OkObjectResult(paymentCallback)); }
// Adyen requires response body "[accepted]" for notifications. https://docs.adyen.com/development-resources/notifications#accept-notifications public PaymentCallback Notify(RenderContext context) { //var callbackUrl = PaymentHelper.GetCallbackUrl(this, nameof(Notify), Context); var body = context.Request.Body; var paymentCallback = new PaymentCallback { RawData = body, CallbackResponse = new Callback.CallbackResponse { StatusCode = 200, Content = "[accepted]", ContentType = "text/plain" } }; try { if (IsNotifyAuthorized(context)) { var notification = JsonHelper.Deserialize <AdyenNotification>(FixDateTimeFormat(body)); // JSON and HTTP POST notifications always contain a single NotificationRequestItem object. var notifyItem = notification.NotificationItems[0].NotificationRequestItem; // check signiture if (!string.IsNullOrWhiteSpace(Setting.HmacKey)) { if (!new AdyenSignatureValidator(Setting.HmacKey).Validate(notifyItem)) { return(paymentCallback); } } if (!Guid.TryParse(notifyItem.MerchantReference, out var guid) || PaymentManager.GetRequest(guid, context) == null) { return(paymentCallback); } paymentCallback.Status = ConvertStatus(notifyItem.EventCode, notifyItem.Success); } else { paymentCallback.CallbackResponse.StatusCode = 401; paymentCallback.CallbackResponse.Content = "Unauthorized."; } } catch (Exception ex) { Kooboo.Data.Log.Instance.Exception.WriteException(ex); } return(paymentCallback); }
public PaymentCallback CreateTransfer(RenderContext context) { var fundingSourceResponse = JsonConvert.DeserializeObject <AddFundingSourceResponse>(context.Request.Body); PaymentCallback response = null; var fundingSourceLink = fundingSourceResponse.Links.FundingSource.Href; if (fundingSourceLink != null) { var dwollaApi = new DwollaApi(Setting); var webhookApi = PaymentHelper.GetCallbackUrl(this, nameof(Notify), context); var isNeedSubscribe = true; var webhookSubscriptionList = dwollaApi.GetWebhookSubscription().Result; foreach (var subscription in webhookSubscriptionList.Embedded.WebhookSubscriptions) { if (subscription.Url == webhookApi) { isNeedSubscribe = false; } } if (isNeedSubscribe) { var issubscribed = dwollaApi.CreateWebhookSubscription(webhookApi, "kooboodwollasecret").Result; } var request = new CreateTransferRequest() { Links = new Dictionary <string, Link> { { "source", new Link { Href = fundingSourceLink } }, { "destination", new Link { Href = new Uri(dwollaApi.ApiBaseAddress + "/funding-sources/" + Setting.FundingSourceId) } } }, Amount = fundingSourceResponse.Money }; var createTransferResult = dwollaApi.CreateTransfer(request).Result; if (createTransferResult.Status == "Created") { response = new PaymentCallback(); var storedRequest = PaymentManager.GetRequest(fundingSourceResponse.RequestId, context); storedRequest.ReferenceId = createTransferResult.TransferURL.ToString(); PaymentManager.UpdateRequest(storedRequest, context); } } return(response); }
public static PaymentCallback ProcessNotify(RenderContext context) { var body = context.Request.Body; var data = JsonHelper.Deserialize <CallbackRequest>(body); if (data.Data == null || data.Data.Object == null || data.Data.Object.Payment == null) { return(null); } PaymentRequest paymentRequest; Guid paymentRequestId; if (data.Data.Object.Payment.ReferenceId != null && Guid.TryParse(data.Data.Object.Payment.ReferenceId, out paymentRequestId)) { paymentRequest = PaymentManager.GetRequest(paymentRequestId, context); } else { paymentRequest = PaymentManager.GetRequestByReferece(data.Data.Object.Payment.OrderId, context); } if (paymentRequest == null) { return(null); } // https://developer.squareup.com/reference/square/objects/LaborShiftCreatedWebhookObject var status = new PaymentStatus(); if (data.Data.Object.Payment.Status == "COMPLETED") { status = PaymentStatus.Pending; } if (data.Data.Object.Payment.Status == "APPROVED") { status = PaymentStatus.Paid; } var result = new PaymentCallback { RequestId = paymentRequest.Id, RawData = body, Status = status }; return(result); }
public PaymentCallback CreateTransaction(RenderContext context) { decimal amount; PaymentCallback res = null; try { amount = Convert.ToDecimal(context.Request.GetValue("amount")); var nonce = context.Request.GetValue("nonce"); var orderId = context.Request.GetValue("orderId"); var request = new TransactionRequest { Transaction = new TransactionRequestChildren { Amount = amount, PaymentMethodNonce = nonce, Options = new TransactionOptionsRequest { SubmitForSettlement = true }, OrderId = orderId } }; var result = new BraintreeAPI(Setting).Sale(request); var strPaymentRequestId = orderId; Guid paymentRequestId; if (Guid.TryParse(strPaymentRequestId, out paymentRequestId)) { if (result != null && result.Transaction.Status.Equals("submitted_for_settlement", StringComparison.OrdinalIgnoreCase)) { res = new PaymentCallback(); var paymentRequest = PaymentManager.GetRequest(paymentRequestId, context); paymentRequest.ReferenceId = result.Transaction.Id; PaymentManager.UpdateRequest(paymentRequest, context); } } } catch (FormatException e) { Kooboo.Data.Log.Instance.Exception.WriteException(e); } return(res); }
private void FailCallback(PaymentCallback result, string msg) { var root = new XElement("xml"); root.Add(new XElement("return_code", "FAIL")); root.Add(new XElement("return_msg", msg)); var xml = new XDocument(root); root.Add(new XElement("sign", MakeSign(xml, Setting.Key))); result.CallbackResponse = new CallbackResponse() { Content = xml.ToString(), ContentType = "Application/Xml" }; }
public PaymentCallback Notify(RenderContext context) { var body = context.Request.Body; var signi = context.Request.Headers.Get("Stripe-Signature"); var stripeEvent = EventUtility.ConstructEvent(body, signi, Setting.WebhookSigningSecret); var result = new PaymentCallback { Status = ConvertStatus(stripeEvent.Type), RawData = body, CallbackResponse = new Callback.CallbackResponse { StatusCode = 204 }, }; return(result); }
public PaymentCallback NofityUrl(RenderContext context) { var result = new PaymentCallback(); var headers = context.Request.Headers["x-qualpay-webhook-signature"]; if (Validate(Setting.WebHookKey, headers, context.Request.Body)) { if (this.Setting == null) { return(null); } var eventType = DataHelper.GetValue("event", context.Request.Body); var purchaseId = DataHelper.GetValue("data.purchase_id", context.Request.Body); var transationId = DataHelper.GetValue("data.pg_id", context.Request.Body); if (string.IsNullOrEmpty(purchaseId)) { return(null); } var requestId = DataHelper.GenerateRequestId(purchaseId); result.RequestId = requestId; if (string.Equals(eventType, CheckoutSuccessEvent)) { var request = PaymentManager.GetRequest(requestId, context); request.ReferenceId = transationId; PaymentManager.UpdateRequest(request, context); result.Status = PaymentStatus.Pending; } else { result.Status = PaymentStatus.NotAvailable; } if (string.Equals(eventType, TransactionUpdatedEvent)) { string code = DataHelper.GetValue("tran_status", context.Request.Body); result.Status = ConvertStatus(code); } return(result); } return(null); }
private void SuccessCallback(PaymentCallback result, Guid RequestId) { var root = new XElement("xml"); root.Add(new XElement("return_code", "SUCCESS")); root.Add(new XElement("return_msg", "OK")); var xml = new XDocument(root); root.Add(new XElement("sign", MakeSign(xml, Setting.Key))); result.CallbackResponse = new CallbackResponse() { Content = xml.ToString(), ContentType = "Application/Xml" }; result.RequestId = RequestId; }
private async Task <HttpResponseMessage> ResendWithCookie(string instanceId, PaymentCallback paymentCallback) { _logger.Information($"Resending post request for order {paymentCallback.OrderId} to instance {instanceId} to url {Request.RequestUri}"); var httpRequestMessage = new HttpRequestMessage { Method = HttpMethod.Post, RequestUri = Request.RequestUri, Headers = { { nameof(HttpRequestHeader.Authorization), instanceId }, { nameof(HttpRequestHeader.Cookie), $"{_cookieName}={instanceId}" } }, Content = new StringContent(JsonConvert.SerializeObject(paymentCallback), Encoding.UTF8, "application/json") }; return(await _client.SendAsync(httpRequestMessage) .ConfigureAwait(false)); }
protected PaymentCallback NofityUrl(RenderContext context) { var result = new PaymentCallback(); var headers = context.Request.Headers["x-qualpay-webhook-request"]; if (Validate(Setting.WebHookKey, headers, context.Request.Body)) { if (this.Setting == null) { return(null); } var eventType = DataHelper.GetValue("event", context.Request.Body); var purchaseIds = DataHelper.GetValue("data.transactions.purchase_id", context.Request.Body); if (string.IsNullOrEmpty(purchaseIds)) { return(null); } var purchaseArray = purchaseIds.Split(','); result.RequestId = DataHelper.GenerateRequestId(purchaseArray[0]); if (string.Equals(eventType, CheckoutSuccessEvent)) { result.Status = PaymentStatus.Pending; } else { result.Status = PaymentStatus.NotAvailable; } if (string.Equals(eventType, TransactionUpdatedEvent)) { string code = DataHelper.GetValue("tran_status", context.Request.Body); result.Status = ConvertStatus(code); } return(result); } return(null); }
public PaymentCallback Notify(RenderContext context) { var body = context.Request.Body; var requestId = context.Request.Get("secretToken"); Guid.TryParse(requestId, out var id); var data = JsonHelper.Deserialize <CallbackRequest>(body); var result = new PaymentCallback { RequestId = id, RawData = body, CallbackResponse = new Callback.CallbackResponse { StatusCode = 204 }, Status = ConvertStatus(data.Session.Status) }; return(result); }
public PaymentCallback Notify(RenderContext context) { var body = context.Request.Body; var signi = context.Request.Headers.Get("Stripe-Signature"); var stripeEvent = EventUtility.ConstructEvent(body, signi, Setting.WebhookSigningSecret); var result = new PaymentCallback { Status = ConvertStatus(stripeEvent.Type), RawData = body, CallbackResponse = new Callback.CallbackResponse { StatusCode = 204 }, }; if (stripeEvent.Type == lib.Events.CheckoutSessionCompleted) { var session = stripeEvent.Data.Object as Session; result.RequestId = new Guid(session.ClientReferenceId); } return(result); }
public async Task <IHttpActionResult> Callback(string contactId, string marketId, string cartName, string orderId, [FromBody] PaymentCallback paymentCallback) { try { if (paymentCallback.ShippingDetails != null && paymentCallback.UserDetails != null) { _logger.Information($"Handling express callback for {orderId}"); return(Content(await _responseFactory.HandleExpressCallback(orderId, contactId, marketId, cartName, paymentCallback), string.Empty)); } _logger.Information($"Handling checkout callback for {orderId}"); return(Content(await _responseFactory.HandleCallback(orderId, contactId, marketId, cartName, paymentCallback), string.Empty)); } catch (Exception ex) { _logger.Error($"{ex.Message} {ex.StackTrace}"); return(InternalServerError(ex)); } }
public virtual async Task <HttpStatusCode> HandleExpressCallback(string orderId, string contactId, string marketId, string cartName, PaymentCallback paymentCallback) { await _vippsOrderCreator.ProcessPaymentCallback(paymentCallback, orderId, contactId, marketId, cartName); return(HttpStatusCode.OK); }
public PaymentCallback Notify(RenderContext context) { string postdata = context.Request.Body; var result = new PaymentCallback(); if (context.Request.Method == "GET") { result.RawData = context.Request.RawRelativeUrl; } else { result.RawData = postdata; } WxPayData data = new WxPayData(); try { data.FromXml(postdata); } catch (WxPayException ex) { //若签名错误,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", ex.Message); // Log.Error(this.GetType().ToString(), "Sign check error : " + res.ToXml()); // page.Response.Write(res.ToXml()); // page.Response.End(); result.CallbackResponse = new CallbackResponse() { Content = res.ToXml(), ContentType = "Application/Xml" }; return(result); } // Log.Info(this.GetType().ToString(), "Check sign success"); // return data; //检查支付结果中transaction_id是否存在 if (!data.IsSet("transaction_id")) { //若transaction_id不存在,则立即返回结果给微信支付后台 WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "支付结果中微信订单号不存在"); // Log.Error(this.GetType().ToString(), "The Pay result is error : " + res.ToXml()); // page.Response.Write(res.ToXml()); // page.Response.End(); result.CallbackResponse = new CallbackResponse() { Content = res.ToXml(), ContentType = "Application/Xml" }; return(result); } var obj = data.GetValue("out_trade_no"); Guid RequestId; if (obj == null || !System.Guid.TryParse(obj.ToString(), out RequestId)) { WxPayData res = new WxPayData(); res.SetValue("return_code", "FAIL"); res.SetValue("return_msg", "订单查询失败"); result.CallbackResponse = new CallbackResponse() { Content = res.ToXml(), ContentType = "Application/Xml" }; return(result); } else { WxPayData res = new WxPayData(); res.SetValue("return_code", "SUCCESS"); res.SetValue("return_msg", "OK"); result.CallbackResponse = new CallbackResponse() { Content = res.ToXml(), ContentType = "Application/Xml" }; result.RequestId = RequestId; var objcode = data.GetValue("result_code"); if (objcode != null) { string code = objcode.ToString().ToUpper(); if (code == "SUCCESS") { result.Status = PaymentStatus.Paid; } if (code == "FAIL") { result.Status = PaymentStatus.Rejected; } //业务结果 result_code 是 String(16) SUCCESS SUCCESS/ FAIL } return(result); } }
public async Task <IHttpActionResult> Callback(string contactId, string marketId, string cartName, string orderId, [FromBody] PaymentCallback paymentCallback) { try { var requestInstanceId = GetRequestInstanceId(); var currentInstanceId = _vippsOrderSynchronizer.GetInstanceId(); _logger.Information($"Request instance id is: '{requestInstanceId}'. Current instance id id: '{currentInstanceId}'. Order id: '{orderId}'"); ValidateCookieIfExists(currentInstanceId); if (!string.IsNullOrEmpty(currentInstanceId) && requestInstanceId != currentInstanceId) { var response = await ResendWithCookie(currentInstanceId, paymentCallback).ConfigureAwait(false); return(ResponseMessage(response)); } HttpStatusCode result; if (paymentCallback.ShippingDetails != null && paymentCallback.UserDetails != null) { _logger.Information($"Handling express callback for {orderId}"); result = await _responseFactory.HandleExpressCallback(orderId, contactId, marketId, cartName, paymentCallback) .ConfigureAwait(false); } else { _logger.Information($"Handling checkout callback for {orderId}"); result = await _responseFactory.HandleCallback(orderId, contactId, marketId, cartName, paymentCallback) .ConfigureAwait(false); } return(Content(result, string.Empty)); } catch (Exception ex) { _logger.Error($"{ex.Message} {ex.StackTrace}"); return(InternalServerError(ex)); } }
public async Task <ProcessOrderResponse> ProcessPaymentCallback(PaymentCallback paymentCallback, string orderId, string contactId, string marketId, string cartName) { return(await ProcessOrder(paymentCallback, paymentCallback.TransactionInfo, orderId, Guid.Parse(contactId), marketId, cartName)); }
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); }
public PaymentCallback Notify(RenderContext context) { var result = new PaymentCallback(); if (context.Request.Method == "GET") { result.RawData = context.Request.RawRelativeUrl; } else { result.RawData = context.Request.Body; } var response = XDocument.Parse(result.RawData).Element("xml"); try { CheckSign(response); } catch (Exception ex) { FailCallback(result, ex.Message); return(result); } //检查支付结果中transaction_id是否存在 if (response.Element("transaction_id") == null) { FailCallback(result, "支付结果中微信订单号不存在"); return(result); } var obj = response.Element("out_trade_no"); Guid RequestId; if (obj == null || !System.Guid.TryParse(obj.Value.ToString(), out RequestId)) { FailCallback(result, "订单查询失败"); return(result); } else { SuccessCallback(result, RequestId); var objcode = response.Element("result_code"); if (objcode != null) { string code = objcode.Value.ToUpper(); if (code == "SUCCESS") { result.Status = PaymentStatus.Paid; } if (code == "FAIL") { result.Status = PaymentStatus.Rejected; } //业务结果 result_code 是 String(16) SUCCESS SUCCESS/ FAIL } return(result); } }