/// <summary>
        /// 支付回调通知处理
        /// </summary>
        /// <param name="inputStream"></param>
        /// <returns></returns>
        public PayNotifyOutput PayNotifyHandler(Stream inputStream)
        {
            PayNotifyOutput result = null;
            var             data   = PostInput(inputStream);

            try
            {
                result = XmlHelper.DeserializeObject <PayNotifyOutput>(data);
            }
            catch (Exception ex)
            {
                LoggerAction?.Invoke("Error", "解析支付回调参数出错:" + data + "  Exception:" + ex.ToString());
                throw;
            }
            return(result);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     处理支付回调参数
        /// </summary>
        /// <param name="inputStream">输入流</param>
        /// <param name="payHandlerFunc">支付处理逻辑函数</param>
        /// <returns>处理结果</returns>
        public Task <string> PayNotifyHandler(Stream inputStream, Action <PayNotifyOutput, string> payHandlerFunc)
        {
            PayNotifyOutput result    = null;
            var             data      = weChatPayHelper.PostInput(inputStream);
            var             outPutXml = string.Empty;
            var             error     = string.Empty;

            try
            {
                result = XmlHelper.DeserializeObject <PayNotifyOutput>(data);
            }
            catch (Exception ex)
            {
                WeChatPayHelper.LoggerAction?.Invoke("Error", "解析支付回调参数出错:" + data + "  Exception:" + ex);
                outPutXml = string.Format(Fail_Xml_Tpl, "解析支付回调参数出错");
                error     = ex.ToString();
            }

            if (!string.IsNullOrWhiteSpace(outPutXml))
            {
            }
            else if (string.IsNullOrWhiteSpace(result?.TransactionId))
            {
                error     = "支付结果中微信订单号不存在";
                outPutXml = string.Format(Fail_Xml_Tpl, error);
            }
            else if (!result.IsSuccess())
            {
                outPutXml = string.Format(Fail_Xml_Tpl, "回调处理失败");
                error     = $"回调处理失败:ErrCode:{result.ErrCode} \nErrCodeDes:{result.ErrCodeDes}";
            }
            //查询订单,判断订单真实性
            else if (!QueryOrder(result.TransactionId))
            {
                error     = "订单不存在";
                outPutXml = string.Format(Fail_Xml_Tpl, error);
            }

            payHandlerFunc?.Invoke(result, error);

            return(Task.FromResult(!string.IsNullOrWhiteSpace(outPutXml)
                ? outPutXml
                : "<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>"));
        }