CSharp: 用百度API读取增值税发票信息
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);


哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)
浙公网安备 33010602011771号