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);
        }
Exemplo n.º 2
0
        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));
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
        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);
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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);
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
        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"
            };
        }
Exemplo n.º 12
0
        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);
        }
Exemplo n.º 13
0
        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);
        }
Exemplo n.º 14
0
        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);
        }
Exemplo n.º 17
0
        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);
        }
Exemplo n.º 18
0
        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));
            }
        }
Exemplo n.º 20
0
        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);
        }
Exemplo n.º 21
0
        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));
            }
        }
Exemplo n.º 23
0
 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));
 }
Exemplo n.º 24
0
        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);
        }
Exemplo n.º 25
0
        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);
            }
        }