Example #1
0
        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");
        }