背景:最近在做电子档案的项目,需要从开票系统中获取发票打印文件到SAP,为保证发票主要信息传输不受影响,对方系统开票时不会直接生成打印文件返回SAP,而是预生成文件的URL地址,URL地址被访问时才会真正的生成打印文件,因此SAP这边需要根据URL来获取文件
API调用很简单,只是简单的调用URL并获取返回参数,主要是第一次做外网系统的调用,中间遇到不少网络问题
API调用代码如下
METHOD url_to_base64.
DATA:lo_http_client TYPE REF TO if_http_client.
DATA:lv_i TYPE i.
CALL METHOD cl_http_client=>create_by_url
EXPORTING
url = iv_url
IMPORTING
client = lo_http_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3.
CHECK sy-subrc = 0.
lo_http_client->request->set_header_field( EXPORTING name = '~request_method'
value = 'GET' ).
CALL METHOD lo_http_client->send
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2.
CHECK sy-subrc = 0.
CALL METHOD lo_http_client->receive
EXCEPTIONS
http_communication_failure = 1
http_invalid_state = 2
http_processing_failed = 3.
CHECK sy-subrc = 0.
lo_http_client->response->get_status( IMPORTING code = lv_i ).
CHECK lv_i = 200.
rv_base64 = lo_http_client->response->get_data( ).
ENDMETHOD.
刚开始用HTTP_GET测试时提示:Connect Error: No SSL support available
需下载网站证书,在事务码STRUST中导入证书
证书导入后发现还是不行,于是检查服务器网络设置,发现服务器网络未对外网开放,网络设置好后,HTTP_GET测试OK,但是API调用仍是失败
DEBUG发现提示HTTPIO_PLG_CANCELED
在事务码SMICM中查看Internet日志,发现https service没有激活
Https service配置,参考资料How to activate and define HTTP, HTTPS, SMTP ports in any SAP R/3 system | SAP Blogs
1、事务码RZ10中配置参数,配置后重新激活
2、事务码STRUST中创建SSL
3、SMICM中激活http service
之后重新测试API调用,正常