瑞宏网开票接口示例程序
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. var https = require("https");
  2. var jsrsasign = require('jsrsasign');
  3. var urlencode = require('urlencode');
  4. // 签名使用的私钥(瑞宏网提供)
  5. var privateKeyPem = "请向瑞宏网工作人员索取";
  6. // 销售方纳税人识别号
  7. var taxpayerCode = "请向瑞宏网工作人员索取";
  8. /**
  9. * 生成签名
  10. * @param privateKeyPem 签名使用的私钥(瑞宏网提供)
  11. * @param digestString 需要签名的字符串
  12. */
  13. var getSign = function(privateKeyPem, digestString) {
  14. var prvKey = jsrsasign.KEYUTIL.getKeyFromPlainPrivatePKCS8PEM("-----BEGIN PRIVATE KEY-----" + privateKeyPem);
  15. var sig = new jsrsasign.KJUR.crypto.Signature({"alg": "MD5withRSA"});
  16. sig.init(prvKey); // 设置key
  17. var signHex = sig.signString(digestString); // 签名
  18. return jsrsasign.hex2b64(signHex); // 得到签名Hex,并转成base64string
  19. };
  20. // 请求数据
  21. var requestData = {
  22. serialNo: "15244572079331206",
  23. postTime: "2017-11-01 09:42:00",
  24. order: {
  25. account: ".",
  26. address: ".",
  27. email: "test@chinaeinv.cn",
  28. tel: "18600000000",
  29. orderNo: "zbss000000002"
  30. },
  31. invoice: {
  32. taxpayerCode: taxpayerCode,
  33. customerName: "abc",
  34. customerCode: "370212350288104",
  35. drawer: "abc",
  36. totalAmount: "0.01",
  37. customerAddress: "abc",
  38. customerTel: "12345678",
  39. customerBankName: "abc",
  40. customerBankAccount: "984484121854121",
  41. payee: "abc",
  42. reviewer: "abc",
  43. items: [
  44. {
  45. amount: "0.01",
  46. code: "zbss00000000101",
  47. name: "abc",
  48. price: "0.01",
  49. quantity: "1",
  50. taxRate: "0.17",
  51. uom: "abc",
  52. type: "0",
  53. spec: "abc",
  54. catalogCode: "1020202000000000000"
  55. }
  56. ]
  57. },
  58. notices: [
  59. {
  60. type: "email",
  61. value: "hongpujun@chinaeinv.cn"
  62. },
  63. {
  64. type: "sms",
  65. value: "18660243735"
  66. }
  67. ]
  68. };
  69. // 请求数据的字符串格式
  70. var requestString = JSON.stringify(requestData);
  71. // 签名字符串
  72. var sign = getSign(privateKeyPem, requestString);
  73. // http请求参数
  74. var options = {
  75. host: 'www.chinaeinv.com', // 瑞宏网域名
  76. port: 943, // 瑞宏网端口(测试环境:943,生产环境:443)
  77. path: '/igs/api/invoiceApi.jspa?appCode=PTTEST13&cmdName=chinaeinv.api.invoice.v3.kp_async&sign=' + urlencode(urlencode(sign)), // 注意签名字段需要要两次urlencode,以避免加号变空格
  78. method:'POST',
  79. headers:{
  80. 'Content-Type': 'application/json',
  81. 'Content-Length': Buffer.byteLength(requestString)
  82. }
  83. }
  84. // 发送 HTTPS POST 请求
  85. var req = https.request(options, function(res) {
  86. console.log("请求报文: ", requestString);
  87. console.log("签名:", sign);
  88. console.log("statusCode: ", res.statusCode);
  89. var _data='';
  90. res.on('data', function(chunk){
  91. _data += chunk;
  92. });
  93. res.on('end', function(){
  94. console.log("响应报文:",_data)
  95. });
  96. });
  97. req.write(requestString);
  98. req.end;