InvoiceTool.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237
  1. package com.idea.invoice.tool;
  2. import com.baiwang.bop.client.IBopClient;
  3. import com.baiwang.bop.client.impl.BopRestClient;
  4. import com.baiwang.bop.request.impl.bizinfo.CompanySearchRequest;
  5. import com.baiwang.bop.request.impl.invoice.common.InvoiceDetails;
  6. import com.baiwang.bop.request.impl.invoice.impl.FormatfileBuildRequest;
  7. import com.baiwang.bop.request.impl.invoice.impl.FormatfileQueryRequest;
  8. import com.baiwang.bop.request.impl.invoice.impl.InvoiceOpenRequest;
  9. import com.baiwang.bop.respose.entity.FormatfileBuildResponse;
  10. import com.baiwang.bop.respose.entity.FormatfileQueryResponse;
  11. import com.baiwang.bop.respose.entity.InvoiceOpenResponse;
  12. import com.baiwang.bop.respose.entity.bizinfo.CompanySearchResponse;
  13. import com.baiwang.bop.respose.entity.bizinfo.CompanySearchResult;
  14. import com.baiwang.bop.utils.ToolUtils;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. // 发票工具
  18. public class InvoiceTool {
  19. // 授权信息
  20. private static String url = "http://sandbox-openapi.baiwang.com/router/rest"; //接口地址
  21. private static String appKey = "1000886"; //appKey
  22. private static String appSecret = "739df182-8ced-454e-8a89-ebacc0a1d0c5"; //appScrect
  23. private static String userSalt = "e6dcfccba146417b828ef8c075c66234"; //用户盐值
  24. private static String username = "admin_3000000139924";//开发者账号用户名
  25. private static String password = "Aa123456";//开发者账号密码
  26. // 云抬头 获取
  27. public static List<CompanySearchResult> companySearch(String companyName) {
  28. try {
  29. String token = ToolUtils.getToken(url, appKey, appSecret, username, password, userSalt);
  30. CompanySearchRequest request = new CompanySearchRequest();
  31. request.setCompanyName(companyName);//沙箱环境只能获取“百望股份”相关信息
  32. request.setAccuracy("");
  33. request.setSort("{\"frequency\": 0}");
  34. IBopClient client = new BopRestClient(url, appKey, appSecret);
  35. CompanySearchResponse response = client.execute(request, token, CompanySearchResponse.class);
  36. return response.getResult();
  37. }
  38. catch (Exception e) {
  39. System.out.println(e);
  40. }
  41. return null;
  42. }
  43. // 版式文件生成
  44. public static void formatfileBuild(String invoiceCode, String invoiceNo, String buyerEmail) {
  45. try {
  46. String token = ToolUtils.getToken(url, appKey, appSecret, username, password, userSalt);
  47. FormatfileBuildRequest request = new FormatfileBuildRequest();
  48. // request.setSellerTaxNo("913202146816282140");
  49. request.setSellerTaxNo("91500000747150430A");
  50. request.setSerialNo("");
  51. // request.setInvoiceCode("050003521106");
  52. // request.setInvoiceNo("54092179");
  53. request.setInvoiceCode(invoiceCode);
  54. request.setInvoiceNo(invoiceNo);
  55. request.setPushType("1");
  56. request.setBuyerPhone("");
  57. // request.setBuyerEmail("comma.liu@qq.com");
  58. request.setBuyerEmail(buyerEmail);
  59. //同步请求
  60. IBopClient client = new BopRestClient(url, appKey, appSecret);
  61. FormatfileBuildResponse response = client.execute(request, token, FormatfileBuildResponse.class);
  62. }
  63. catch (Exception e) {
  64. System.out.println(e);
  65. }
  66. }
  67. // 版式文件查询
  68. public static void invoiceFormatQuery(){
  69. try {
  70. String token = ToolUtils.getToken(url, appKey, appSecret, username, password, userSalt);
  71. FormatfileQueryRequest request = new FormatfileQueryRequest();
  72. request.setInvoiceQueryType("0");
  73. request.setSellerTaxNo("91500000747150430A");
  74. request.setSerialNo("");
  75. request.setInvoiceCode("011000100011");
  76. request.setInvoiceNo("00203622");
  77. request.setReturnType("3");//返回H5发票提取链接
  78. //同步请求
  79. IBopClient client = new BopRestClient(url, appKey, appSecret);
  80. FormatfileQueryResponse response = client.execute(request, token, FormatfileQueryResponse.class);
  81. System.out.println(response.toString());
  82. } catch (Exception e) {
  83. System.out.println(e);
  84. }
  85. }
  86. //企业资料:销方参数
  87. private static String sellerTaxNo = "91500000747150430A";//91500000747150430A
  88. private static String deviceType = "1";//设备类型固定值税盘/核心板/uk
  89. private static String serialNo = "wuxi-"+System.currentTimeMillis()+"-001";//请求流水号,全局唯一
  90. private static String invoiceTypeCode = "026";//票种代码,纸质专票004,纸质普票007,电子普票026,电子专票028
  91. // private static String invoiceTerminalCode = "410123456730";//设备终端代码
  92. private static String invoiceTerminalCode = "410123456730";//设备终端代码
  93. // 发票开具
  94. public static InvoiceOpenResponse invoiceOpenTax(InvoiceModel model){
  95. String token = "";
  96. try {
  97. //获取token
  98. token = ToolUtils.getToken(url, appKey, appSecret, username, password, userSalt);
  99. InvoiceOpenRequest request = new InvoiceOpenRequest();
  100. //销方资料
  101. request.setSellerTaxNo(sellerTaxNo);
  102. //接口信息初始化
  103. request.setSerialNo(serialNo);
  104. request.setDeviceType(deviceType);
  105. request.setOrganizationCode("");
  106. request.setInvoiceSpecialMark("00");//特殊票种标记:00普通发票
  107. request.setInvoiceTypeCode(invoiceTypeCode);
  108. request.setInvoiceTerminalCode(invoiceTerminalCode);
  109. //购方资料
  110. // request.setBuyerTaxNo("91320213MA1TBCFU9A");
  111. // request.setBuyerName("无锡全新百旺");
  112. // request.setBuyerAddressPhone("深圳市福田区香蜜湖街道东海社区红荔西路8089号深业中城6号楼A单元34010755-61886688");
  113. // request.setBuyerBankAccount("中国银行无锡南长街支行123456789987654321");
  114. request.setBuyerTaxNo(model.getBuyerTaxNo());
  115. request.setBuyerName(model.getBuyerName());
  116. request.setBuyerAddressPhone(model.getBuyerAddressPhone());
  117. request.setBuyerBankAccount(model.getBuyerBankAccount());
  118. //根据企业财务规定设置,备注字段限制180字符,6行
  119. request.setDrawer("赶企网络信息技术");
  120. request.setChecker("");
  121. // request.setPayee("收款人");
  122. request.setPayee(model.getPayeeUser());
  123. // NANJING/TAICANG-PARANAGUA/MANZANILLO/SANTOS//NKAB20054900//NKAB20056600/NKAB20056601/NKAB20056602/NKAB20056800//NKAB20056801/NKAB20056802/NKAB20056803/GAL00135438//GAL00135709
  124. request.setRemarks("");//备注行
  125. //发票性质设置:保留
  126. request.setInvoiceType("0");//发票类型:0蓝字;1红字
  127. request.setInvoiceListMark("0");//清单标志:0无清单;1带清单
  128. request.setTaxationMode("0");
  129. request.setSignatureParameter("0000004282000000");
  130. request.setTaxDiskNo("");
  131. request.setTaxDiskKey("");
  132. request.setTaxDiskPassword("");
  133. request.setGoodsCodeVersion("");
  134. request.setConsolidatedTaxRate("");
  135. request.setNotificationNo("");
  136. request.setRedInfoNo("");
  137. request.setOriginalInvoiceCode("");
  138. request.setOriginalInvoiceNo("");
  139. request.setDeductibleAmount("");
  140. //根据发票行明细自动计算
  141. //request.setInvoiceTotalPrice("28.57");//商品合计金额
  142. //request.setInvoiceTotalTax("1.43");//商品合计税额
  143. //request.setInvoiceTotalPriceTax("30.00");//商品价税合计
  144. //request.setAutoSplit(true); /** AutoSplit=true时,返回为list,见下方Response示例 **/
  145. //商品明细列表,票面显示8行,超过8行显示“详见清单”
  146. List<InvoiceDetails> invoiceDetailsList = new ArrayList<InvoiceDetails>();
  147. //========================第一行明细,按简征收==============================
  148. InvoiceDetails invoiceDetails1 = new InvoiceDetails();
  149. invoiceDetails1.setGoodsLineNo("1");//明细行号,依次递增,票面显示8行明细,超出8行开具清单发票
  150. invoiceDetails1.setGoodsLineNature("0");//发票行性质
  151. invoiceDetails1.setGoodsCode("304050202020000000001");//税收编码
  152. invoiceDetails1.setGoodsExtendCode("");
  153. // invoiceDetails1.setGoodsName("停车费");//商品名称
  154. invoiceDetails1.setGoodsName(model.getGoodsName());
  155. invoiceDetails1.setGoodsTaxItem("");
  156. invoiceDetails1.setGoodsSpecification("");//规格型号
  157. invoiceDetails1.setGoodsUnit("人");//计量单位
  158. invoiceDetails1.setGoodsQuantity("");//数量
  159. invoiceDetails1.setGoodsPrice("");//商品单价
  160. // invoiceDetails1.setGoodsTotalPrice("30");//商品金额:30
  161. invoiceDetails1.setGoodsTotalPrice(model.getGoodsTotalPrice());
  162. //invoiceDetails1.setGoodsTotalTax("");//商品税额:1.43,含税模式下,自动计算
  163. invoiceDetails1.setGoodsTaxRate("0.05");//税率
  164. invoiceDetails1.setGoodsDiscountLineNo("");
  165. invoiceDetails1.setPriceTaxMark("1");//0不含税;1含税
  166. //商品行税收分类编码设置:由企业财务和百望公司共同确定
  167. invoiceDetails1.setPreferentialMark("1");//是否使用优惠政策
  168. invoiceDetails1.setVatSpecialManagement("按5%简易征收");//特殊征收方式字段
  169. invoiceDetails1.setFreeTaxMark("");//零税率标识
  170. //附加封装好的明细行
  171. invoiceDetailsList.add(invoiceDetails1);
  172. //========================第二行明细,正常税率==============================
  173. // InvoiceDetails invoiceDetails2 = new InvoiceDetails();
  174. // invoiceDetails2.setGoodsLineNo("2");//明细行号,依次递增,票面显示8行明细,超出8行开具清单发票
  175. // invoiceDetails2.setGoodsLineNature("0");//发票行性质
  176. // invoiceDetails2.setGoodsCode("307020102000000000001");//税收编码
  177. // invoiceDetails2.setGoodsExtendCode("");
  178. // invoiceDetails2.setGoodsName("报名费");//商品名称
  179. // invoiceDetails2.setGoodsTaxItem("");
  180. // invoiceDetails2.setGoodsSpecification("");//规格型号
  181. // invoiceDetails2.setGoodsUnit("单位");//计量单位
  182. // invoiceDetails2.setGoodsQuantity("1");//数量
  183. // invoiceDetails2.setGoodsPrice("880");//商品单价
  184. // invoiceDetails2.setGoodsTotalPrice("880");//商品金额:30
  185. // //invoiceDetails2.setGoodsTotalTax("");//商品税额:1.43
  186. // invoiceDetails2.setGoodsTaxRate("0.03");//税率
  187. // invoiceDetails2.setGoodsDiscountLineNo("");
  188. // invoiceDetails2.setPriceTaxMark("1");//0不含税;1含税
  189. // //商品行税收分类编码设置:由企业财务和百望公司共同确定
  190. // invoiceDetails2.setPreferentialMark("0");//是否使用优惠政策
  191. // invoiceDetails2.setVatSpecialManagement("");//特殊征收方式字段
  192. // invoiceDetails2.setFreeTaxMark("");//零税率标识
  193. // invoiceDetailsList.add(invoiceDetails2);
  194. // //========================第三行明细,免税商品==============================
  195. // InvoiceDetails invoiceDetails3 = new InvoiceDetails();
  196. // invoiceDetails3.setGoodsLineNo("1");//明细行号,依次递增,票面显示8行明细,超出8行开具清单发票
  197. // invoiceDetails3.setGoodsLineNature("0");//发票行性质
  198. // invoiceDetails3.setGoodsCode("3079900000000000000");//税收编码
  199. // invoiceDetails3.setGoodsExtendCode("");
  200. // invoiceDetails3.setGoodsName("物业管理费");//商品名称
  201. // invoiceDetails3.setGoodsTaxItem("");
  202. // invoiceDetails3.setGoodsSpecification("");//规格型号
  203. // invoiceDetails3.setGoodsUnit("");//计量单位
  204. // invoiceDetails3.setGoodsQuantity("");//数量
  205. // invoiceDetails3.setGoodsPrice("");//商品单价
  206. // invoiceDetails3.setGoodsTotalPrice("1");//商品金额:30
  207. // //invoiceDetails3.setGoodsTotalTax("");//商品税额:1.43
  208. // invoiceDetails3.setGoodsTaxRate("0");//税率
  209. // invoiceDetails3.setGoodsDiscountLineNo("");
  210. // invoiceDetails3.setPriceTaxMark("1");//0不含税;1含税
  211. // //商品行税收分类编码设置:由企业财务和百望公司共同确定
  212. // invoiceDetails3.setPreferentialMark("1");//是否使用优惠政策
  213. // invoiceDetails3.setVatSpecialManagement("免税");//特殊征收方式字段
  214. // invoiceDetails3.setFreeTaxMark("1");//零税率标识
  215. // invoiceDetailsList.add(invoiceDetails3);
  216. //
  217. request.setInvoiceDetailsList(invoiceDetailsList);
  218. IBopClient client = new BopRestClient(url, appKey, appSecret);
  219. InvoiceOpenResponse response = client.execute(request, token, InvoiceOpenResponse.class);
  220. System.out.println("我是返回"+response.toString());
  221. return response;
  222. } catch (Exception e) {
  223. System.out.println(e);
  224. }
  225. return null;
  226. }
  227. }