V2InvoiceOpenRequestDemo.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. using System;
  2. using System.Collections.Generic;
  3. using BasePaySdk;
  4. using BasePaySdk.Request;
  5. using Newtonsoft.Json;
  6. using Newtonsoft.Json.Linq;
  7. namespace BasePayDemo
  8. {
  9. /**
  10. * 发票开具 - 示例
  11. *
  12. * @author sdk-generator
  13. * @Description
  14. */
  15. public class V2InvoiceOpenRequestDemo
  16. {
  17. public static void V2InvoiceOpenRequestDemoTest()
  18. {
  19. // 1. 数据初始化
  20. InitMerConfig.init();
  21. // 2.组装请求参数
  22. V2InvoiceOpenRequest request = new V2InvoiceOpenRequest();
  23. // 请求流水号
  24. request.setReqSeqId(DateTime.Now.ToString("yyy-MM-dd HH.mm.ss.fff"));
  25. // 请求时间
  26. request.setReqDate(DateTime.Now.ToString("yyyyMMdd"));
  27. // 渠道号汇付商户号为空时,必传;<font color="green">示例值:6666000109812124</font>
  28. // request.setChannelId("test");
  29. // 发票类型
  30. request.setIvcType("1");
  31. // 开票类型
  32. request.setOpenType("0");
  33. // 购方单位名称
  34. request.setBuyerName("张三");
  35. // 含税合计金额(元)
  36. request.setOrderAmt("70.00");
  37. // 冲红原因open_type=1时必填01:开票有误02:销货退回03:服务终止04:销售转让
  38. // request.setRedApplyReason("test");
  39. // 冲红申请来源open_type=1时必填01:销方02:购方
  40. // request.setRedApplySource("test");
  41. // 原发票代码openType=1时必填;参见[发票右上角](https://paas.huifu.com/open/doc/api/#/fp/api_fp_yanglitu.md);<font color="green">示例值:144032209110</font>
  42. request.setOriIvcCode("90222082");
  43. // 原发票号码openType=1时必填;参见[发票右上角](https://paas.huifu.com/open/doc/api/#/fp/api_fp_yanglitu.md);<font color="green">示例值:20685767</font>
  44. request.setOriIvcNumber("150000020026");
  45. // 开票商品信息
  46. request.setGoodsInfos(getGoodsInfosRc());
  47. // 开票人信息
  48. request.setPayerInfo(getPayerInfo());
  49. // 设置非必填字段
  50. Dictionary<string, object> extendInfoMap = getExtendInfos();
  51. request.setExtendInfo(extendInfoMap);
  52. try {
  53. // 3. 发起API调用
  54. // 调用接口,使用默认商户配置时可省略配置key
  55. Dictionary<string, Object> result = null;
  56. result = BasePayClient.postRequest(request,null);
  57. // 使用指定配置调用接口
  58. // result = BasePayClient.postRequest(request,null,"merchantKey2");
  59. Console.WriteLine(JsonConvert.SerializeObject(result));
  60. }
  61. catch (Exception ex) {
  62. Console.WriteLine(ex);
  63. }
  64. }
  65. /**
  66. * 非必填字段
  67. * @return
  68. */
  69. private static Dictionary<string, object> getExtendInfos() {
  70. // 设置非必填字段
  71. Dictionary<string, object> extendInfoMap = new Dictionary<string, object>();
  72. // 汇付商户号
  73. extendInfoMap.Add("huifu_id", "6666000107430944");
  74. // 外部商户号
  75. extendInfoMap.Add("ext_mer_id", "");
  76. // 税控盘编号
  77. extendInfoMap.Add("tax_device_id", "661919694739");
  78. // 购方单位识别号
  79. extendInfoMap.Add("buyer_no", "");
  80. // 购方单位地址
  81. extendInfoMap.Add("buyer_address", "");
  82. // 购方单位电话
  83. extendInfoMap.Add("buyer_tel", "");
  84. // 购方开户行名称
  85. extendInfoMap.Add("buyer_bank_name", "");
  86. // 购方银行账号
  87. extendInfoMap.Add("buyer_acct_no", "");
  88. // 购方企业类型
  89. extendInfoMap.Add("buyer_ent_type", "");
  90. // 收票人手机号
  91. extendInfoMap.Add("rec_ivc_phone", "");
  92. // 收票人邮件
  93. extendInfoMap.Add("rec_ivc_email", "test@126.com");
  94. // 备注
  95. extendInfoMap.Add("resv", "备注");
  96. // 特殊票种标识
  97. extendInfoMap.Add("special_flag", "00");
  98. // 红字信息表编号
  99. extendInfoMap.Add("red_info_number", "");
  100. // 开票结果异步通知地址
  101. extendInfoMap.Add("callback_url", "virgo://http://192.168.85.157:30031/sspm/testVirgo");
  102. return extendInfoMap;
  103. }
  104. private static string getGoodsInfosRc() {
  105. Dictionary<string, object> obj = new Dictionary<string, object>();
  106. // 发票行性质
  107. obj.Add("ivc_nature", "0");
  108. // 商品序号ivc_type&#x3D;1 红票必填,要与开具的蓝票商品一致;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:备注&lt;/font&gt;
  109. obj.Add("goods_serial_num", "");
  110. // 商品名称goodsCode不为空时必填;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:&lt;/font&gt;
  111. obj.Add("goods_name", "预付卡");
  112. // 税率goodsCode不为空时必填,最多三位小数;&lt;font color&#x3D;&quot;green&quot;&gt;示例值:0.130&lt;/font&gt;
  113. obj.Add("tax_rate", "0.03");
  114. // 金额(元)
  115. obj.Add("trans_amt", "70.00");
  116. // 商品id
  117. obj.Add("goods_id", "");
  118. // 商品税收分类编码
  119. obj.Add("goods_code", "6010000000000000000");
  120. // 规格型号
  121. obj.Add("goods_model", "");
  122. // 计量单位
  123. obj.Add("goods_unit", "");
  124. // 优惠政策标识
  125. obj.Add("preferential_flag", "0");
  126. // 零税率标示
  127. obj.Add("zero_tax_rate_flag", "");
  128. // 增值税特殊管理
  129. obj.Add("add_tax_spec_manage", "");
  130. // 含税标识
  131. obj.Add("is_price_con_tax", "1");
  132. // 商品数量
  133. obj.Add("goods_count", "7");
  134. // 单价
  135. obj.Add("goods_price", "10");
  136. // 折扣金额(元)
  137. obj.Add("sale_amt", "");
  138. JArray objList = new JArray();
  139. objList.Add(JToken.FromObject(obj));
  140. return JsonConvert.SerializeObject(objList);
  141. }
  142. private static string getPayerInfo() {
  143. Dictionary<string, object> obj = new Dictionary<string, object>();
  144. // 开票人
  145. obj.Add("payer_name", "开票人");
  146. // 收款人
  147. obj.Add("payee", "收款人");
  148. // 复核人
  149. obj.Add("reviewer", "复核");
  150. return JsonConvert.SerializeObject(obj);
  151. }
  152. }
  153. }