using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Configuration; using System.Linq; using System.Web; using System.Net; using System.IO; using System.Text; using System.Net.Http; namespace WebApplication1 { /// <summary> /// 百度API读取增值税发票 /// /// </summary> public static class AccessToken { const string API_KEY = "geovindu"; const string SECRET_KEY = "geovindu"; // 百度 private static String clientId = API_KEY;// ConfigurationManager.AppSettings.Get("APIKey"); // 百度 private static String clientSecret = SECRET_KEY;// ConfigurationManager.AppSettings.Get("SecretKey"); /// <summary> /// /// </summary> /// <returns></returns> public static String getAccessToken() { String authHost = "https://aip.baidubce.com/oauth/2.0/token"; HttpClient client = new HttpClient(); List<KeyValuePair<String, String>> paraList = new List<KeyValuePair<string, string>>(); paraList.Add(new KeyValuePair<string, string>("grant_type", "client_credentials")); paraList.Add(new KeyValuePair<string, string>("client_id", clientId)); paraList.Add(new KeyValuePair<string, string>("client_secret", clientSecret)); HttpResponseMessage response = client.PostAsync(authHost, new FormUrlEncodedContent(paraList)).Result; String result = response.Content.ReadAsStringAsync().Result; // Console.WriteLine(result); AccessTokenInfo tokenInfo = JsonConvert.DeserializeObject<AccessTokenInfo>(result); return tokenInfo.access_token; } /// <summary> /// /// </summary> /// <param name="fileurl"></param> /// <returns></returns> public static string vatInvoice(string fileurl) { string token = getAccessToken(); string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token=" + token; Encoding encoding = Encoding.Default; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "post"; request.KeepAlive = true; // 图片的base64编码 string base64 = getFileBase64(fileurl); String str = "image=" + HttpUtility.UrlEncode(base64); byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default); string result = reader.ReadToEnd(); HttpContext.Current.Response.Write("增值税发票识别:"); HttpContext.Current.Response.Write(result); return result; } /// <summary> /// /// </summary> /// <param name="fileurl"></param> /// <returns></returns> public static string vatInvoicePdf(string fileurl) { string token = getAccessToken(); string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token=" + token; Encoding encoding = Encoding.Default; HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "post"; request.KeepAlive = true; // 图片的base64编码 string base64 = getFileBase64(fileurl); String str = "pdf_file=" + HttpUtility.UrlEncode(base64); byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default); string result = reader.ReadToEnd(); HttpContext.Current.Response.Write("增值税发票识别:"); HttpContext.Current.Response.Write(result); return result; } /// <summary> /// /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static String getFileBase64(String fileName) { FileStream filestream = new FileStream(fileName, FileMode.Open); byte[] arr = new byte[filestream.Length]; filestream.Read(arr, 0, (int)filestream.Length); string baser64 = Convert.ToBase64String(arr); filestream.Close(); return baser64; } /// <summary> /// 增值税发票识别 /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static string vatInvoice2(string fileName) { string token = getAccessToken(); string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/vat_invoice?access_token=" + token; Encoding encoding = Encoding.Default; System.Net.HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host); request.Method = "post"; request.KeepAlive = true; // 图片的base64编码 string base64 = getFileBase642(fileName); String str = "image=" + UrlEncode(base64); byte[] buffer = encoding.GetBytes(str); request.ContentLength = buffer.Length; request.GetRequestStream().Write(buffer, 0, buffer.Length); HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); string result = reader.ReadToEnd(); return result; } /// <summary> /// /// </summary> /// <param name="fileName"></param> /// <returns></returns> public static String getFileBase642(String fileName) { FileStream filestream = new FileStream(fileName, FileMode.Open, System.IO.FileAccess.Read, FileShare.ReadWrite); byte[] arr = new byte[filestream.Length]; filestream.Read(arr, 0, (int)filestream.Length); string baser64 = Convert.ToBase64String(arr); filestream.Close(); return baser64; } /// <summary> /// /// </summary> /// <param name="str"></param> /// <returns></returns> public static string UrlEncode(string str) { StringBuilder sb = new StringBuilder(); byte[] byStr = System.Text.Encoding.UTF8.GetBytes(str); //默认System.Text.Encoding.Default.GetBytes(str) for (int i = 0; i < byStr.Length; i++) { sb.Append(@"%" + Convert.ToString(byStr[i], 16)); } return (sb.ToString()); } } /// <summary> /// /// </summary> public class AccessTokenInfo { public string refresh_token { get; set; } public string expires_in { get; set; } public string session_key { get; set; } public string access_token { get; set; } public string scope { get; set; } public string session_secret { get; set; } } }
调用:
var API_KEY = "geovindu"; var SECRET_KEY = "geovindu"; //1 SDK 读取 var client = new Baidu.Aip.Ocr.Ocr(API_KEY, SECRET_KEY); client.Timeout = 60000; // 修改超时时间 string url = Server.MapPath(@"invoice/fapiao.png"); //@"invoice/fapiao.png" var image = File.ReadAllBytes(url); //var result = client.Accurate(image); // Response.Write(result); Response.Write("<br/>"); //2. string token=AccessToken.getAccessToken(); Response.Write(token+"<br/>"); Response.Write("<br/>"); var result2=AccessToken.vatInvoice2(url); Response.Write(result2);