public async Task <string> HandlePaymentCallbackAsync(Func <PaymentCallbackResponse, Task> handle, string input) { var r = new PaymentCallbackResponse(); var xml = XDocument.Parse(input); var root = xml.Element("jdpay"); var result = root.Element("result"); r.Success = result.Element("code").Value == "000000"; r.Message = result.Element("desc").Value; if (r.Success) { var encryptStr = root.Element("encrypt").Value; var key = Convert.FromBase64String(_options.JdPay.Key); var inputStr = SecretUtil.Des3DecryptEcb(key, Encoding.UTF8.GetString(Convert.FromBase64String(encryptStr))); xml = XDocument.Parse(inputStr); root = xml.Element("jdpay"); var status = root.Element("status").Value; r.Success = status == "2"; var orderId = root.Element("tradeNum").Value; r.OrderId = Convert.ToInt64(orderId); var signNode = root.Element("sign"); var sign = signNode.Value; signNode.Remove(); if (!CheckSign(sign, root.ToString())) { throw new SettleException("京东支付异步回调验签失败"); } } await handle.Invoke(r); return("success"); }