小朱的博客

我努力是因为我什么都没有却什么都想要

我想说 
这个世界不只有眼前的苟且,还有诗和远方。

主要技能

    PHP / YII2。

    MYSQL 

    Javascript / JQUERY  /  VUE 

    CSS / Bootstrap / AdminLTE

    小程序 /  uni-app

常用软件

    Git / SVN

   PHPSTORM / Eclipse

    宝塔面板 / LNMP

    SQLYOG


一个人成长的快慢,主要取决于他在工作之外的 8 小时做什么。

把简单的事情坚持下去。

业余时间用在哪,回报就在哪。

企业里的老员工的优势不在于具备更强的业务能力,而在于对内部流程有较高的熟悉程度。这种在同一个环境中久待而形成的思维定式,可能因为符合既定环境而让人一时受益,但长久看来,却是阻碍创新的掣肘。

互联网行业从来没有“稳定之说”。


海关165号179号 实时数据企业联调接口开发

发布,1 人读过
海关 165号 179号 实时数据

海关165号179号 实时数据企业联调接口开发。我是php开发的

感谢群中的大佬的帮助

进入正题

第一步:

首先查看海关发布的165号和179号二个公告

http://www.customs.gov.cn/customs/302249/302266/302267/2134975/index.html 165号

http://www.customs.gov.cn/customs/302249/302266/302267/2155884/index.html 179号

 

第二步:

下载179号公告文档, 文档包括下面

image.png

第三步:


首先打开“海关跨境电商进口版统一信息化系统平台数据实时获取接口(试行)”文档, 查看1.6.1.1 ,得知需要写一个接口, 海关会请求这个接口,参数有OrderNo, sessionID,serviceTime,  把这三个参数存放起来,具体怎么存放看各自的方法了,你可以是消息队列, 可以是数据库, 总之你能再次找得到就行。

注意这里海关是post的发送的是 key 为openReq 的json字符串 (不少人入坑了,海关文档中没写清楚,以为是三个参数),json字符串就是上面的三个字段OrderNo, sessionID,serviceTime


第四步: 

通过读取三步接收到海关请求的内容,通过“海关跨境电商进口版统一信息化系统平台数据实时获取接口(试行)”文档 1.6.2.2 接口要求,读取OrderNo对应的信息,把订单,商品,支付这些数据填上,  最麻烦的就是CertNo, signValue这二个参数,

官方文档把最难得到的参数用123来代替, 我感觉到无奈。

4.1 先去公司找到一个海关登录的IC卡,有一个读卡器, 一般有二个卡(法人卡,操作员卡),记得把操作员卡接到读卡器里, 不能是法人卡,这个要注意。

4.2 下载海关控件安装包, 打开这个网址 http://ceb1.chinaport.gov.cn/  , 点 跨境电商进口版, 认真查找“首次登录 需要下载控件”, 点击下载 EportClientSetup_V1.5.5.exe(版本有可能会有更新,我下的是 EportClientSetup_V1.5.6.exe),  请安装它(安装注意关闭杀毒软件), 安装完成电脑屏幕右下角会有一个控件启动提醒, 桌面也有一个快捷方式“中国电子口岸客户端控件 重新启动”。 

4.3 把4.1步里面找到的读卡器接上电脑, 记得这个电脑要安装了海关控件的, 千万不要搞成, A电脑装了控件, 把这读卡器接B电脑上。 如果读卡器出现绿灯, 说明读卡器与卡都没问题, 如果是灯不亮或红灯, 不好意思, 你的卡与读卡器可能有问题了,得找另一个卡与读卡器再试。

4.4 当环境设置好了, 就需要取CertNo, 证书这些, 下载这个读取编号与证书的工具:

zip.svg7423_debug.zip, 解压打开SignTool.exe

image.png

点击步骤:

打开卡, 如果出现打开卡成功, 恭喜你, 又前进一步,

在验证口令后面的文本框输入设置的密码, 这个密码得问一下你们公司掌管卡的人(一般默认是:88888888),如果录入后点击 验证口令 提示 验证口令成功, 又恭喜你前进一步, 

点击“获取证书”, 成功的会得到后面文本框里的一串文字, 注意这个文字好长好长, 得小心从文本框里最上方拉到最下方, 很多人没拉到底, 造成证书错误, 当你选择全部后复制出来, 用记事本原封不动的保存, 改后缀名为.cer, 这样就成他们口中所说的证书了(这个文件在注册正式环境中要上传,和申请测试环境要用到), 

再点击证书序列号,会得到一个证书编号。

 

发给海关的丁鑫, 并登记企业名称, 企业联系人等信息, 总之找他就行了。

怎么找丁鑫?有关联通测试和系统对接等方面的疑问,请咨询中国电子口岸服务热线010-95198解决。联系人:张磊18652937075、丁鑫15901197073。

拨打丁鑫电话,添加微信,他会把你拉入群

到这里, 只差一个signValue这个千奇百怪的东西了。

 

第五步:

5.1 首先你要看那个"海关跨境电商进口版统一信息化系统平台数据实时获取接口(试行)"文档, 通过OrderNo把你订单信息,商品信息,支付信息拼成这样的Json, 你也可以用这个来测试, 测试通了, 再取订单来拼接, 如果后面发送得到数据格式有误, 你就得一个字符一个字符的去对, 是否一模一样。

"sessionID":"fe2374-8fnejf97-55616242"||"payExchangeInfoHead":"{"guid":"9D55BA71-55DE-41F4-8B50-C36C83B3B419","initalRequest":"https://openapi.alipay.com/gateway.do?timestamp=2013-01-0108:08:08&method=alipay.trade.pay&app_id=13580&sign_type=RSA2&sign=ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE&version=1.0&charset=GBK","initalResponse":"ok","ebpCode":"3301963K69","payCode":"312226T001","payTransactionId":"2018121222001354081010726129","totalAmount":100,"currency":"142","verDept":"3","payType":"1","tradingTime":"20181212041803","note":"批量订单,测试订单优化,生成多个so订单"}"||"payExchangeInfoLists":"[{"orderNo":"SO1710301150602574003","goodsInfo":[{"gname":"lhy-gnsku3","itemLink":"http://m.yunjiweidian.com/yunjibuyer/static/vue-buyer/idc/index.html#/detail?itemId=999761&shopId=453"},{"gname":"lhy-gnsku2","itemLink":"http://m.yunjiweidian.com/yunjibuyer/static/vue-buyer/idc/index.html#/detail?itemId=999760&shopId=453"}],"recpAccount":"OSA571908863132601","recpCode":"","recpName":"YUNJIHONGKONGLIMITED"}]"||"serviceTime":"1544519952469"

得到了这段拼接字符, 就是为了得到signValue, 所以一个字符也不能出错, 不然取不到正确的加签返回值。

 

5.2 这里最主要的就是通过websocket取得加签结果

我这里用文档中的js, Java版的我是向一位善心的张工程师那得到的,在这里十分感谢张工, 并感谢他的大无畏精神,

Java 张工版下载地址: 

zip.svg5096_java加签代码.zip

 

记得一个前提, websocket的地址就是你装有控件,插有卡的那个电脑的IP地址, 例如:ws://127.0.0.1:61232, 这是我在开发时, 在我自己的电脑上装有控件插有卡, 得来的websocket地址。

我用的是js加签的方法,用到两个js:

image.png

后台是PHP开发的上代码:

<script>    

    function initPage(){      

     var data = <?= json_encode($pay_data) ?>;              

    var post_data = '"sessionID":"'+data.sessionID+    '"||"payExchangeInfoHead":"'+JSON.stringify(data.payExchangeInfoHead)+   '"||"payExchangeInfoLists":"'+JSON.stringify(data.payExchangeInfoLists)+                   '"||"serviceTime":"'+data.serviceTime+'"'; 

    console.log(data);  

   console.log(post_data);              

  //调用client.js 的加签方法(加签数据,卡密码,回调方法)              

   EportClient.cusSpcSignDataAsPEM(post_data,'88888888',function(msg,msgJson){ 

                      console.log(msg);

                       if(!msg.Result){

                              alert('加签失败'+JSON.stringify(msg)); 

                             return false; 

                      }                      

 //把加签结果返回服务器,服务器在调用接口,以下是你的代码                       $.ajax({                ....            })               })       }

</script>


5.3 提交数据

我们通过上面获取到了加签的字符串,然后按照海关跨境电商进口统一版信息化系统平台数据实时获取接口(试行)文档上传数据,证书编号需要小写!!

返回 下面的就是成功了。开在这边的很多,有上传失败和验签失败的。请看 

txt.svg数据抓取常见问题.txt 文档,里边有签名前的格式和提交数据的格式(注意:如和海关文档有出入,按照此文档)

PHP的要注意 在json_encode payExinfoStr 字段的时候中文和斜杠不要转义

$postData = ['payExInfoStr'=>json_encode($pay_data,JSON_UNESCAPED_UNICODE+JSON_UNESCAPED_SLASHES)];

返回如下就是成功了


    "code":"10000",
    "message":"",
    "serviceTime":1533271903898
}

其他辅助文档

txt.svg数据抓取常见问题.txt    其中包含测试环境申请流程和一些常见问题

zip.svg4937_加签验签.zip  其中 有js加签


至此 测试就算结束了。



正式环境

1.注册地址ceb1.chinaport.gov.cn 企业自行注册

审核的时候系统随机抽查企业三天内的通关清单订单号,发送给企业,企业接收到返回10000为审核通过.

跨境企业类型为电商平台才能注册,企业可以去企管科查询自己的企业类型

审核不通过的原因:企业收到调用返回的不是10000,企业三天内没有订单数据,端口需要80,是否配置白名单,需要卡介质登陆

2.注册成功后把证书上传,把上面第三步开发的接口地址添加下,然后等待审核。审核通过后别忘了开启!!!


总结总体流程

首先海关会调用你上传的地址,海关要求提交哪个订单的数据

然后通过提交数据接口提交数据,这边就是比较复杂,要用到卡签名,并把签名结果和数据一起上传就可以了

先吐槽下: 诺大的中国海关, 连个指导都没有, 写的文档与demo, 100个人有99.9个人不懂, 还有0.1个人一次能懂的都算是神童!!!


感谢群中的大佬的帮助



进入正题


第一步:


首先查看海关发布的165号和179号二个公告


http://www.customs.gov.cn/customs/302249/302266/302267/2134975/index.html 165号


http://www.customs.gov.cn/customs/302249/302266/302267/2155884/index.html 179号


 


第二步:


下载179号公告文档, 文档包括下面


image.png


第三步:


首先打开“海关跨境电商进口版统一信息化系统平台数据实时获取接口(试行)”文档, 查看1.6.1.1 ,得知需要写一个接口, 海关会请求这个接口,参数有OrderNo, sessionID,serviceTime,  把这三个参数存放起来,具体怎么存放看各自的方法了,你可以是消息队列, 可以是数据库, 总之你能再次找得到就行。


注意这里海关是post的发送的是 key 为openReq 的json字符串 (不少人入坑了,海关文档中没写清楚,以为是三个参数),json字符串就是上面的三个字段OrderNo, sessionID,serviceTime




第四步: 


通过读取三步接收到海关请求的内容,通过“海关跨境电商进口版统一信息化系统平台数据实时获取接口(试行)”文档 1.6.2.2 接口要求,读取OrderNo对应的信息,把订单,商品,支付这些数据填上,  最麻烦的就是CertNo, signValue这二个参数,


官方文档把最难得到的参数用123来代替, 我感觉到无奈。


4.1 先去公司找到一个海关登录的IC卡,有一个读卡器, 一般有二个卡(法人卡,操作员卡),记得把操作员卡接到读卡器里, 不能是法人卡,这个要注意。


4.2 下载海关控件安装包, 打开这个网址 http://ceb1.chinaport.gov.cn/  , 点 跨境电商进口版, 认真查找“首次登录 需要下载控件”, 点击下载 EportClientSetup_V1.5.5.exe(版本有可能会有更新,我下的是 EportClientSetup_V1.5.6.exe),  请安装它(安装注意关闭杀毒软件), 安装完成电脑屏幕右下角会有一个控件启动提醒, 桌面也有一个快捷方式“中国电子口岸客户端控件 重新启动”。 


4.3 把4.1步里面找到的读卡器接上电脑, 记得这个电脑要安装了海关控件的, 千万不要搞成, A电脑装了控件, 把这读卡器接B电脑上。 如果读卡器出现绿灯, 说明读卡器与卡都没问题, 如果是灯不亮或红灯, 不好意思, 你的卡与读卡器可能有问题了,得找另一个卡与读卡器再试。


4.4 当环境设置好了, 就需要取CertNo, 证书这些, 下载这个读取编号与证书的工具:7423_debug.rar, 解压打开SignTool.exe


image.png


点击步骤:


打开卡, 如果出现打开卡成功, 恭喜你, 又前进一步,


在验证口令后面的文本框输入设置的密码, 这个密码得问一下你们公司掌管卡的人(一般默认是:88888888),如果录入后点击 验证口令 提示 验证口令成功, 又恭喜你前进一步, 


点击“获取证书”, 成功的会得到后面文本框里的一串文字, 注意这个文字好长好长, 得小心从文本框里最上方拉到最下方, 很多人没拉到底, 造成证书错误, 当你选择全部后复制出来, 用记事本原封不动的保存, 改后缀名为.cer, 这样就成他们口中所说的证书了(这个文件在注册正式环境中要上传,和申请测试环境要用到), 


再点击证书序列号,会得到一个证书编号。


 


发给海关的丁鑫, 并登记企业名称, 企业联系人等信息, 总之找他就行了。


怎么找丁鑫?有关联通测试和系统对接等方面的疑问,请咨询中国电子口岸服务热线010-95198解决。联系人:张磊18652937075、丁鑫15901197073。


拨打丁鑫电话,添加微信,他会把你拉入群


到这里, 只差一个signValue这个千奇百怪的东西了。


 


第五步:


5.1 首先你要看那个"海关跨境电商进口版统一信息化系统平台数据实时获取接口(试行)"文档, 通过OrderNo把你订单信息,商品信息,支付信息拼成这样的Json, 你也可以用这个来测试, 测试通了, 再取订单来拼接, 如果后面发送得到数据格式有误, 你就得一个字符一个字符的去对, 是否一模一样。


"sessionID":"fe2374-8fnejf97-55616242"||"payExchangeInfoHead":"{"guid":"9D55BA71-55DE-41F4-8B50-C36C83B3B419","initalRequest":"https://openapi.alipay.com/gateway.do?timestamp=2013-01-0108:08:08&method=alipay.trade.pay&app_id=13580&sign_type=RSA2&sign=ERITJKEIJKJHKKKKKKKHJEREEEEEEEEEEE&version=1.0&charset=GBK","initalResponse":"ok","ebpCode":"3301963K69","payCode":"312226T001","payTransactionId":"2018121222001354081010726129","totalAmount":100,"currency":"142","verDept":"3","payType":"1","tradingTime":"20181212041803","note":"批量订单,测试订单优化,生成多个so订单"}"||"payExchangeInfoLists":"[{"orderNo":"SO1710301150602574003","goodsInfo":[{"gname":"lhy-gnsku3","itemLink":"http://m.yunjiweidian.com/yunjibuyer/static/vue-buyer/idc/index.html#/detail?itemId=999761&shopId=453"},{"gname":"lhy-gnsku2","itemLink":"http://m.yunjiweidian.com/yunjibuyer/static/vue-buyer/idc/index.html#/detail?itemId=999760&shopId=453"}],"recpAccount":"OSA571908863132601","recpCode":"","recpName":"YUNJIHONGKONGLIMITED"}]"||"serviceTime":"1544519952469"

得到了这段拼接字符, 就是为了得到signValue, 所以一个字符也不能出错, 不然取不到正确的加签返回值。


 


5.2 这里最主要的就是通过websocket取得加签结果


我这里用文档中的js, Java版的我是向一位善心的张工程师那得到的,在这里十分感谢张工, 并感谢他的大无畏精神,


Java 张工版下载地址: java加签代码.rar


 


记得一个前提, websocket的地址就是你装有控件,插有卡的那个电脑的IP地址, 例如:ws://127.0.0.1:61232, 这是我在开发时, 在我自己的电脑上装有控件插有卡, 得来的websocket地址。


我用的是js加签的方法,用到两个js:


image.png


后台是PHP开发的上代码:


<script>

    function initPage(){

       var data = <?= json_encode($pay_data) ?>;       

       var post_data = '"sessionID":"'+data.sessionID+            

       '"||"payExchangeInfoHead":"'+JSON.stringify(data.payExchangeInfoHead)+            

       '"||"payExchangeInfoLists":"'+JSON.stringify(data.payExchangeInfoLists)+            

       '"||"serviceTime":"'+data.serviceTime+'"';        

       console.log(data);        

       console.log(post_data);        

       //调用client.js 的加签方法(加签数据,卡密码,回调方法)        

       EportClient.cusSpcSignDataAsPEM(post_data,'88888888',function(msg,msgJson){            

           console.log(msg);            

           if(!msg.Result){               

               alert('加签失败'+JSON.stringify(msg));               

               return false;            

           }            

           //把加签结果返回服务器,服务器在调用接口,以下是你的代码            

           $.ajax({                ....            })        

       })    

   }

</script>



5.3 提交数据


我们通过上面获取到了加签的字符串,然后按照海关跨境电商进口统一版信息化系统平台数据实时获取接口(试行)文档上传数据,证书编号需要小写!!


返回 下面的就是成功了。开在这边的很多,有上传失败和验签失败的。请看 数据抓取常见问题.txt 文档,里边有签名前的格式和提交数据的格式(注意:如和海关文档有出入,按照此文档)


PHP的要注意 在json_encode payExinfoStr 字段的时候中文和斜杠不要转义


$postData = ['payExInfoStr'=>json_encode($pay_data,JSON_UNESCAPED_UNICODE+JSON_UNESCAPED_SLASHES)];

返回如下就是成功了


    "code":"10000",

    "message":"",

    "serviceTime":1533271903898

}


其他辅助文档


数据抓取常见问题.txt    其中包含测试环境申请流程和一些常见问题


加签验签.rar   其中 有js加签



至此 测试就算结束了。






正式环境


1.注册地址ceb1.chinaport.gov.cn 企业自行注册


审核的时候系统随机抽查企业三天内的通关清单订单号,发送给企业,企业接收到返回10000为审核通过.


跨境企业类型为电商平台才能注册,企业可以去企管科查询自己的企业类型


审核不通过的原因:企业收到调用返回的不是10000,企业三天内没有订单数据,端口需要80,是否配置白名单,需要卡介质登陆


2.注册成功后把证书上传,把上面第三步开发的接口地址添加下,然后等待审核。审核通过后别忘了开启!!!




总结总体流程


首先海关会调用你上传的地址,海关要求提交哪个订单的数据


然后通过提交数据接口提交数据,这边就是比较复杂,要用到卡签名,并把签名结果和数据一起上传就可以了