欢迎访问张朋的技术分享社区
当前位置: 首页 > 技术分享  > C#

下载微信支付对账单

2018/11/2 15:40:34 人评论

public JsonResult GetPayResult(string d1) { WxPayData inputObj = new WxPayData(); inputObj.SetValue("bill_date", d1); inputObj.SetValue("bill_type", "SUCCESS");//201809zp 原先是ALL返…

 public JsonResult GetPayResult(string d1)

        {

            WxPayData inputObj = new WxPayData();

            inputObj.SetValue("bill_date", d1);

            inputObj.SetValue("bill_type", "SUCCESS");// 原先是ALL返回所有订单(不含待买家支付状态的订单,但是退款的订单会产生2条记录,一个是原SUCCESS的和REFUND的) 以下注意ALL与SUCCESS返回的数据字段不一样

            WxPayData payData = WxPayApi.DownloadBill(inputObj);

            if (payData.GetValues().ContainsKey("return_code"))

            {

                return Json(payData.ToJson());

            }

            else

            {

                string bill_data = payData.GetValues()["result"].ToString();

                string[] _bill_data = bill_data.Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);

                WxPayResult result = new WxPayResult();

                //交易时间,公众账号ID,商户号,子商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,企业红包金额,

                //微信退款单号,商户退款单号,退款金额,企业红包退款金额,退款类型,退款状态,商品名称,商户数据包,手续费,费率

                //result.Header = _bill_data[0];

                foreach (var item in _bill_data[0].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))

                {

                    if (item == "交易时间" || item == "用户标识" || item == "微信订单号" || item == "商户订单号" || item == "总金额")

                    {

                        result.Header += item + ",";

                    }

                }

                result.Header = result.Header.TrimEnd(new char[] { ',' });

                result.PayBills = new List<PayBill>();

                //交易时间,公众账号ID,商户号,子商户号,设备号,微信订单号,商户订单号,用户标识,交易类型,交易状态,付款银行,货币种类,总金额,企业红包金额,微信退款单号,商户退款单号,退款金额,企业红包退款金额,退款类型,退款状态,商品名称,商户数据包,手续费,费率

                //总交易单数,总交易额,总退款金额,总企业红包退款金额,手续费总金额

                //foreach (var _bill in _bill_data)

                decimal delFee = 0;

                int delOrder = 0;

                for (int i = 1; i < _bill_data.Length - 2; i++)

                {

                    var _bill = _bill_data[i];

                    string[] _b = _bill.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

                    //目前只处理body=XX支付的账单               

                    if (_b[14].TrimStart('`') == "XX支付" && _b[9].TrimStart('`') == "SUCCESS")

                    {

                        PayBill _paybill = new PayBill();

                        _paybill.Time_End = _b[0].TrimStart('`');

                        _paybill.OpenId = _b[7].TrimStart('`');

                        _paybill.TradeId = _b[5].TrimStart('`');

                        if (_b[6].TrimStart('`').Contains("F"))

                        {

                            string[] spliteFlowNo = _b[6].TrimStart('`').Split('F');

                            _paybill.FlowNo = spliteFlowNo[0];

                        }

                        else

                        {

                            _paybill.FlowNo = _b[6].TrimStart('`');

                        }

                        _paybill.TotalFee = _b[12].TrimStart('`');

                        result.PayBills.Add(_paybill);

                    }

                    else

                    {

                        //从微信返回的总金额中

                        delOrder++;//不参与计算的订单数

                        delFee += Convert.ToDecimal(_b[12].TrimStart('`'));//不参与计算的支付金额

                    }

                }

                //汇总值赋值

                result.PayTotal = new PayTotal();

                result.PayTotal.TotalBill = new PayTotalBill();

                result.PayTotal.TotalHeader = _bill_data[_bill_data.Length - 2];

                string[] _total = _bill_data[_bill_data.Length - 1].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);

                if (delOrder > 0)

                {

                    result.PayTotal.TotalBill.zjyds = Convert.ToString(Convert.ToInt32(_total[0].TrimStart('`')) - delOrder);

                    result.PayTotal.TotalBill.zjye = Convert.ToString((Convert.ToDecimal(_total[1].TrimStart('`')) - delFee));

                }

                else

                {

                    result.PayTotal.TotalBill.zjyds = _total[0].TrimStart('`');

                    result.PayTotal.TotalBill.zjye = _total[1].TrimStart('`');

                }

                result.PayTotal.TotalBill.ztke = _total[2].TrimStart('`');

                result.PayTotal.TotalBill.zqyhbtkje = _total[3].TrimStart('`');

                result.PayTotal.TotalBill.sxfzje = _total[4].TrimStart('`');

                //目前实际上客户不会微信商户后台和在线支付退款 所以暂不考虑退款产生的对账问题

                return Json(result);

            }

        }


附件下载

相关技术

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?