欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

诺诺开票

最编程 2024-05-25 08:35:24
...
1 /// <summary> 2 /// 申请诺诺电子发票 3 /// </summary> 4 /// <param name="applySource">1:支付完自动开票;2:手动选择小订单开票</param> 5 /// <returns></returns> 6 public async Task ApplyEInvoice(string orderNo, Guid invoiceTitleId, int applySource) 7 { 8 try 9 { 10 var orderDetailList = await _orderDetailRepository.GetListAsync(f => f.OrderNo == orderNo); 11 if (applySource == 2) 12 { 13 orderDetailList = await _orderDetailRepository.GetListAsync(f => f.OrderDetailNo == orderNo); 14 } 15 if (orderDetailList != null) 16 { 17 var invoiceTitle = await _invoiceTitleRepository.GetAsync(invoiceTitleId); 18 if (invoiceTitle != null) 19 { 20 foreach (var orderDetail in orderDetailList) 21 { 22 var fpkjModel = _fpkjRequestOptions.Value; 23 fpkjModel.buyerName = invoiceTitle.Name; 24 fpkjModel.buyerTaxNum = invoiceTitle.TaxNumber; 25 fpkjModel.buyerTel = invoiceTitle.Mobile; 26 fpkjModel.buyerAddress = invoiceTitle.Address; 27 fpkjModel.buyerAccount = invoiceTitle.Bank + invoiceTitle.BankNumber; 28 fpkjModel.orderNo = orderDetail.OrderDetailNo; 29 fpkjModel.invoiceDate = orderDetail.CreationTime.ToString("yyyy-MM-dd HH:mm:ss"); 30 fpkjModel.buyerPhone = invoiceTitle.SendPhoneNumber; //购方手机(pushMode为1或2时,此项必填 31 fpkjModel.email = invoiceTitle.SendEmailAddress; //推送邮箱 推送邮箱(pushMode为0或2时,此项为必填,同时受企业资质是否必填控制) 32 fpkjModel.pushMode = "2"; //推送方式:-1;不推送;0;邮箱;1;手机(默认); 2;邮箱、手机 33 fpkjModel.invoiceType = "1"; //蓝票 34 fpkjModel.invoiceLine = "pc"; //电子发票(普通发票)-即数电普票(电子) 35 fpkjModel.invoiceDetail = new List<InvoiceDetail>() 36 { 37 new InvoiceDetail() 38 { 39 taxIncludedAmount = orderDetail.OrderAmount.ToString(), 40 withTaxFlag = "1", 41 num = "1" 42 }, 43 }; 44 45 //string str = await _openInvoiceManager.GetEInvoiceTokenAsync(); 46 //var pxResponseResult = JsonConvert.DeserializeObject<PxResponseResult<JYEInvoiceTokenResponse>>(str); 47 //var tokenInfo = pxResponseResult.Data; 48 49 (string invoiceSerialNum, string message) openInvoiceResponse = _openInvoiceManager.OpenInvoice(fpkjModel, fpkjModel.salerTaxNum); 50 Logger.LogInformation("申请诺诺电子发票:流水号:" + openInvoiceResponse.invoiceSerialNum + ",描述:" + openInvoiceResponse.message); 51 if (!string.IsNullOrEmpty(openInvoiceResponse.invoiceSerialNum) || openInvoiceResponse.message == "订单编号或流水号不能重复") 52 { 53 var openInvoice = await _openInvoiceRepository.FirstOrDefaultAsync(f => f.OrderNo == orderDetail.OrderDetailNo); 54 if (openInvoice == null) 55 { 56 OpenInvoiceRecord openInvoiceRecord = new OpenInvoiceRecord() 57 { 58 InvoiceNature = invoiceTitle.InvoiceNature, 59 InvoiceStatus = (EnumInvoiceStatus)20, 60 OrderNo = orderDetail.OrderDetailNo, 61 PayAmount = orderDetail.OrderAmount, 62 PurchaserInvoiceTitle = invoiceTitle.Name, 63 PurchaserIdTaxpayer = invoiceTitle.TaxNumber, 64 PurchaserAddressMobile = invoiceTitle.Mobile, 65 PurchaserBank = invoiceTitle.Bank, 66 PurchaserBankNumber = invoiceTitle.BankNumber, 67 UserEmail = invoiceTitle.SendEmailAddress, 68 UserMobile = invoiceTitle.SendPhoneNumber, 69 SerialNo = openInvoiceResponse.invoiceSerialNum 70 }; 71 openInvoice = await _openInvoiceRepository.InsertAsync(openInvoiceRecord, true); 72 } 73 74 //查询发票:提交成功后,返回是开票提交成功,会立即返回开票流水号,这里电子票的状态不是最终状态,如果使用流水号查询开票信息,有可能是开票中状态 75 var query = QueryInvoiceAsync(openInvoice, fpkjModel.salerTaxNum); 76 } 77 } 78 } 79 else 80 { 81 Logger.LogInformation("申请诺诺电子发票:未查询到发票抬头信息"); 82 } 83 } 84 else 85 { 86 Logger.LogInformation("申请诺诺电子发票:未查询到订单信息"); 87 } 88 } 89 catch (Exception ex) 90 { 91 Logger.LogInformation("申请诺诺电子发票:" + ex.Message); 92 } 93 } 94 95 /// <summary> 96 /// 查询发票,完善发票信息 97 /// </summary> 98 private async Task QueryInvoiceAsync(OpenInvoiceRecord invoice, string taxNum) 99 { 100 // 等待 5 秒钟 101 await Task.Delay(TimeSpan.FromSeconds(10)); 102 Logger.LogInformation($"查询发票信息:{JsonConvert.SerializeObject(invoice)}"); 103 string fpckMsg = "查询发票信息"; 104 while (!string.IsNullOrEmpty(fpckMsg)) 105 { 106 List<string> serialNos = new List<string>(); 107 if (!string.IsNullOrEmpty(invoice.SerialNo)) 108 { 109 serialNos.Add(invoice.SerialNo); 110 } 111 List<string> orderNos = new List<string>() 112 { 113 invoice.OrderNo 114 }; 115 116 (List<InvoicePdf> pdfList, string msg) fpInfoList = _openInvoiceManager.QueryInvoice( 117 new FpcxRequest() 118 { 119 serialNos = serialNos, 120 orderNos = orderNos 121 }, 122 taxNum); 123 fpckMsg = fpInfoList.msg; 124 125 if (fpInfoList.pdfList != null && string.IsNullOrEmpty(fpckMsg)) 126 { 127 Logger.LogInformation($"查询发票信息:pdfList:{JsonConvert.SerializeObject(fpInfoList.pdfList)}"); 128 InvoicePdf invoicePdf = fpInfoList.pdfList.FirstOrDefault<InvoicePdf>(); 129 if (!string.IsNullOrEmpty(invoicePdf.URL)) 130 { 131 invoice.InvoiceUrl = invoicePdf.URL; 132 invoice.InvoiceCode = invoicePdf.FPDM; 133 invoice.InvoiceNo = invoicePdf.FPHM; 134 invoice.SerialNo = invoicePdf.FPLSH; 135 invoice.CheckCode = invoicePdf.JYM; 136 invoice.InvoiceStatus = (EnumInvoiceStatus)2; 137 invoice.InvoiceTime = DateTimeHelper.StampToDateTime(invoicePdf.KPRQ.ToString()); 138 139 var temp = await _openInvoiceRepository.UpdateAsync(invoice); 140 if (temp != null) 141 { 142 return; 143 } 144 } 145 } 146 else 147 { 148 Logger.LogInformation($"查询发票信息:描述:{fpInfoList.msg},{JsonConvert.SerializeObject(fpInfoList.pdfList)}"); 149 } 150 } 151 }