当前位置:   article > 正文

上海航信电子发票对接

ecxml.fpkj.bc.e_inv

一、配置文件 (config/invoice.php;发票配置数据由开票平台提供,以下配置数据随机修改过不可用于测试)

 

  1. <?php/** * Created by PhpStorm.
  2. * User: Jason
  3. * Date: 2019/7/1
  4. * Time: 10:16
  5. */
  6. return [
  7. 'DSPTBM' => 'sdf11dfd1MsfdFWegesdfIK', //'电商平台编码'
  8. 'NSRSBH' => '9670101000000090', //'纳税人识别码'
  9. 'NSRMC' => 'XXX官方旗舰店', //'纳税人名称',
  10. 'XHFMC' => 'XXX官方旗舰店', //'销货方名称'
  11. 'XHF_DZ' => '上海市杨浦区控江路XXX号', //'销货方地址',
  12. 'XHF_DH' => '17621251***', //'销货方电话',
  13. 'XHF_YHZH' => '', //'销货方银行账号',
  14. 'KPY' => '财务一', //'开票员',
  15. 'SKY' => '', //'收款员(可选)',
  16. 'HSBZ' => '1',
  17. 'TERMINALCODE' => '0',
  18. 'APPID' => 'ZZS_PT_DZFP',
  19. 'TAXPAYWERID' => '9670101000000090', //'税号',
  20. 'AUTHORIZATIONCODE' => '56301000000090', //'授权码',
  21. 'ENCRYPTCODE' =>'2', //0:不加密 1: 3DES 加密 2:CA
  22. 'INTERFACE_FPKJ' => 'ECXML.FPKJ.BC.E_INV',
  23. 'INTERFACE_FPXZ' => 'ECXML.FPXZ.CX.E_INV',
  24. 'INTERFACE_FPYX' => 'ECXML.EMAILPHONEFPTS.TS.E.INV',
  25. 'REQUESTCODE' => 'sdf11dfd1MsfdFWegesdfIK', //'请求码',
  26. 'RESPONSECODE' => '211', //'响应码',
  27. 'PASSWORD' => '', //'密码',
  28. ///'DATAEXCHANGEID' => '交互码',
  29. 'KJFP' => 'ECXML.FPKJ.BC.E_INV',
  30. 'DOWNLOAD' => 'ECXML.FPXZ.CX.E_INV',
  31. 'EMAIL' => 'ECXML.EMAILPHONEFPTS.TS.E.INV',
  32. 'REGISTERCODE' => '922588450019', //'注册码',
  33. ];

  二、拼装请求数据 (packageinfo.php)

  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Jason
  5. * Date: 2019/7/2
  6. * Time: 10:35
  7. */
  8. class ome_invoice_packageinfo
  9. {
  10. private static $_instance = null;
  11. private $config = [];
  12. public function __construct()
  13. {
  14. $this->config = include ROOT_DIR.'/config/invoice.php';
  15. }
  16. /***
  17. * @param $interface
  18. * @return string
  19. */
  20. public function getXml($interface, $content)
  21. {
  22. $rand = rand(1000000000,9999999999);
  23. $pwd = $rand.base64_encode(md5($rand.$this->config['REGISTERCODE']));
  24. $terminalcode = $this->config['TERMINALCODE'];
  25. $appid = $this->config['APPID'];
  26. $dsptbm = $this->config['DSPTBM'];
  27. $password = $pwd;
  28. $date = date('Y-m-d');
  29. $taxpayerid = $this->config['TAXPAYWERID'];
  30. $authorizationcode = $this->config['AUTHORIZATIONCODE'];
  31. $response = $this->config['RESPONSECODE'];
  32. $dataexchangeid = $this->config['REQUESTCODE'].date('Ymd').substr($rand,0,9);
  33. $str = <<<XML
  34. <?xml version="1.0" encoding="utf-8" ?>
  35. <interface xmlns="" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  36. xsi:schemaLocation="http://www.chinatax.gov.cn/tirip/dataspec/interfaces.xsd"
  37. version="DZFP1.0">
  38. <globalInfo>
  39. <terminalCode>{$terminalcode}</terminalCode>
  40. <appId>{$appid}</appId>
  41. <version>2.0</version>
  42. <interfaceCode>{$interface}</interfaceCode>
  43. <requestCode>{$dsptbm}</requestCode>
  44. <requestTime>{$date}</requestTime>
  45. <responseCode>{$response}</responseCode>
  46. <dataExchangeId>{$dataexchangeid}</dataExchangeId>
  47. <userName>{$dsptbm}</userName>
  48. <passWord>{$password}</passWord>
  49. <taxpayerId>{$taxpayerid}</taxpayerId>
  50. <authorizationCode>{$authorizationcode}</authorizationCode>
  51. </globalInfo>
  52. <returnStateInfo>
  53. <returnCode/>
  54. <returnMessage/>
  55. </returnStateInfo>
  56. <Data>
  57. <dataDescription>
  58. <zipCode>0</zipCode>
  59. <encryptCode>0</encryptCode>
  60. <codeType>0</codeType>
  61. </dataDescription>
  62. <content>
  63. {$content}
  64. </content>
  65. </Data>
  66. </interface>
  67. XML;
  68. return $str;
  69. }
  70. /***
  71. * @param array $config
  72. * @param array $arr
  73. * @return string
  74. */
  75. public function getContent(array $arr)
  76. {
  77. $fpkj = '';
  78. foreach ($this->content_0($config) as $key => $item){
  79. if($item['text']!==''){
  80. $fpkj .= '<'.strtoupper($item['key']).'>'.$item['text'].'</'.$item['key'].'>';
  81. }else{
  82. $fpkj .= '<'.strtoupper($item['key']).'>'.$arr[$item['key']].'</'.$item['key'].'>';
  83. }
  84. }
  85. $xm_size = count($arr['items']);
  86. $fpkj_xm = '';
  87. foreach ($arr['items'] as $num => $value){
  88. $fpkj_xm .= '<FPKJXX_XMXX>';
  89. foreach ($this->content_1($config) as $key=>$item){
  90. if($item['text']!==''){
  91. $fpkj_xm .= '<'.strtoupper($item['key']).'>'.$item['text'].'</'.$item['key'].'>';
  92. }else{
  93. $fpkj_xm .= '<'.strtoupper($item['key']).'>'.$value[$item['key']].'</'.$item['key'].'>';
  94. }
  95. }
  96. $fpkj_xm .= '</FPKJXX_XMXX>';
  97. //津贴被折扣行
  98. if(isset($value['discount'])){
  99. //size对应
  100. $xm_size++;
  101. $fpkj_xm .= '<FPKJXX_XMXX>';
  102. foreach ($this->content_1($config) as $key=>$item){
  103. if($item['text']!==''){
  104. $fpkj_xm .= '<'.strtoupper($item['key']).'>'.$item['text'].'</'.$item['key'].'>';
  105. }else{
  106. $fpkj_xm .= '<'.strtoupper($item['key']).'>'.$value['discount'][$item['key']].'</'.$item['key'].'>';
  107. }
  108. }
  109. $fpkj_xm .= '</FPKJXX_XMXX>';
  110. }
  111. }
  112. $fpkj_dd = '';
  113. foreach ($this->content_2() as $key=>$item){
  114. if($item['text']!==''){
  115. $fpkj_dd .= '<'.strtoupper($item['key']).'>'.$item['text'].'</'.$item['key'].'>';
  116. }else{
  117. if($item['text']===null){
  118. $fpkj_dd .= '<'.strtoupper($item['key']).'/>';
  119. continue;
  120. }
  121. $fpkj_dd .= '<'.strtoupper($item['key']).'>'.$arr[$item['key']].'</'.$item['key'].'>';
  122. }
  123. }
  124. $root = <<<ROOT
  125. <REQUEST_FPKJXX class="REQUEST_FPKJXX">
  126. <FPKJXX_FPTXX class="FPKJXX_FPTXX">
  127. {$fpkj}
  128. </FPKJXX_FPTXX>
  129. <FPKJXX_XMXXS class="FPKJXX_XMXX;" size="{$xm_size}">
  130. {$fpkj_xm}
  131. </FPKJXX_XMXXS>
  132. <FPKJXX_DDXX class="FPKJXX_DDXX">
  133. {$fpkj_dd}
  134. </FPKJXX_DDXX>
  135. </REQUEST_FPKJXX>
  136. ROOT;
  137. return base64_encode($root);
  138. }
  139. /***
  140. * @param string $xml
  141. * @return mixed|\SimpleXMLElement
  142. */
  143. public function XML2array(string $xml)
  144. {
  145. $arr = simplexml_load_string($xml);
  146. $arr = json_decode(json_encode($arr),TRUE);
  147. return $arr;
  148. }
  149. public function getDownload($arr)
  150. {
  151. $content = '';
  152. foreach ($this->download($this->config) as $key => $item){
  153. if($item['text']!==''){
  154. $content .= '<'.strtoupper($item['key']).'>'.$item['text'].'</'.$item['key'].'>';
  155. }else{
  156. if($item['text']===null){
  157. $content .= '<'.strtoupper($item['key']).'/>';
  158. continue;
  159. }
  160. $content .= '<'.strtoupper($item['key']).'>'.$arr[$item['key']].'</'.$item['key'].'>';
  161. }
  162. }
  163. $root = <<<ROOT
  164. <REQUEST_FPXXXZ_NEW class="REQUEST_FPXXXZ_NEW">
  165. {$content}
  166. </REQUEST_FPXXXZ_NEW>
  167. ROOT;
  168. return base64_encode($root);
  169. }
  170. /***
  171. * @param array $arr
  172. * @return string
  173. */
  174. public function getEmail(array $arr)
  175. {
  176. $nsrsbh = $this->config['NSRSBH'];
  177. $root = <<<ROOT
  178. <REQUEST_EMAILPHONEFPTS class="REQUEST_EMAILPHONEFPTS">
  179. <TSFSXX class="TSFSXX">
  180. <COMMON_NODES class="COMMON_NODE;" size="4">
  181. <COMMON_NODE>
  182. <NAME>TSFS</NAME>
  183. <VALUE>0</VALUE>
  184. </COMMON_NODE>
  185. <COMMON_NODE>
  186. <NAME>SJ</NAME>
  187. <VALUE></VALUE>
  188. </COMMON_NODE>
  189. <COMMON_NODE>
  190. <NAME>EMAIL</NAME>
  191. <VALUE>{$arr['email']}</VALUE>
  192. </COMMON_NODE>
  193. <COMMON_NODE>
  194. <NAME>扩展字段名称</NAME>
  195. <VALUE>扩展字段值</VALUE>
  196. </COMMON_NODE>
  197. </COMMON_NODES>
  198. </TSFSXX>
  199. <FPXXS class="FPXX;" size="1">
  200. <FPXX>
  201. <COMMON_NODES class="COMMON_NODE;" size="5">
  202. <COMMON_NODE>
  203. <NAME>FPQQLSH</NAME>
  204. <VALUE>{$arr['FPQQLSH']}</VALUE>
  205. </COMMON_NODE>
  206. <COMMON_NODE>
  207. <NAME>NSRSBH</NAME>
  208. <VALUE>{$nsrsbh}</VALUE>
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号