ABAP-HTTP发送JSON详解编程语言

1. HTTP发送JSON格式数据:

function zap_01_url_sap_to_c3 . 
*"---------------------------------------------------------------------- 
*"*"本地接口: 
*"  IMPORTING 
*"     VALUE(I_FLAG) TYPE  STRING OPTIONAL 
*"     VALUE(I_TITLE) TYPE  STRING 
*"     VALUE(I_MESSAGE) TYPE  STRING 
*"  EXPORTING 
*"     VALUE(E_RETURN) TYPE  STRING 
*"  TABLES 
*"      IT_REVEIVER 
*"---------------------------------------------------------------------- 
 
data: lv_url type string."http 服务接口地址 
  data: lo_http_client  type ref to if_http_client. 
data: lv_respon type string. 
data: lv_subrc type sy-subrc. 
data: lv_json_str type string. "发送报文 
  data: lv_msgty type c, 
lv_msgtx type string. 
data: lt_json type standard table of zscma_dyjg, 
ls_json type zscma_dyjg. 
* 设置报文内容 
ls_json-source        = 'ERP' . "来源 订阅号的英文名 
ls_json-sender        = 'ERP' .  "发送者 
ls_json-sender_type   = 'S' . "默认个人  P为个人  S为系统 
 
data:lv_reveiver type string. 
loop at it_reveiver. 
if sy-tabix eq 1. 
lv_reveiver = it_reveiver. 
else. 
lv_reveiver = lv_reveiver && ',' && it_reveiver. 
endif. 
endloop. 
ls_json-title    = i_title . "发送标题 
ls_json-content  = i_message. 
ls_json-message  = 'message'. " 
  ls_json-channel  = 'SUBSCRIPTION'. " 
  ls_json-messagedata = i_message. " 
 
if i_flag is initial. 
concatenate 'http://XXX.XXX.XXX.XXX:XXXX/mc/core/message/sendMessageUnitForCode?source=' ls_json-source 
'&sender='ls_json-source'&sender_type=S&receiver='lv_reveiver'&title='ls_json-title 
'&content='ls_json-content'&message='ls_json-message 
'&channel=SUBSCRIPTION&messageData=%7B%22type%22%3A%2210002%22%2C%22createTime%22%3A%22%22%2C%22remarkUrl%22%3A%22http%3A%2F%2Fwww.baidu.com%22%7D' 
into lv_url . 
*    /mc/core/message/sendMessageUnitForCode 
*    /mc/core/message/sendMessageUnit 
 
elseif i_flag eq 'X'. 
concatenate 'http://XXX.XXX.XXX.XXX:XXXX/mc/core/message/sendMessageUnitForCode?source=' ls_json-source 
'&sender='ls_json-source'&sender_type=S&receiver='lv_reveiver'&title='ls_json-title 
'&content='ls_json-content'&message='ls_json-message 
'&channel=SUBSCRIPTION&messageData=%7B%22type%22%3A%2210002%22%2C%22createTime%22%3A%22%22%2C%22remarkUrl%22%3A%22http%3A%2F%2Fwww.baidu.com%22%7D' 
into lv_url . 
endif. 
"创建客户端请求 
call method cl_http_client=>create_by_url 
exporting 
url                = lv_url 
importing 
client             = lo_http_client 
exceptions 
argument_not_found = 1 
plugin_not_active  = 2 
internal_error     = 3 
others             = 4. 
"设定传输请求内容格式以及编码格式 
lo_http_client->request->set_content_type( content_type = 'application/json; charset=utf-8' ). 
"设定调用服务 
lo_http_client->request->set_method( if_http_request=>co_request_method_post ). 
"发送请求 
lo_http_client->send(  exceptions http_communication_failure = 1 
http_invalid_state         = 2 ). 
"读取远程服务返回的处理过结果。 
lo_http_client->receive( exceptions http_communication_failure = 1 
http_invalid_state         = 2 
http_processing_failed     = 3 ). 
e_return = lo_http_client->response->get_cdata( ). 
e_return = e_return+9(1). 
translate e_return to upper case. 
endfunction.

2. 调用ODATA service,插入数据,事物码STRUST添加信任证书。

 HTTPS:

CALL METHOD cl_http_client=>create 
EXPORTING 
host    = 'api15.sapsf.cn' 
service = '443'                        
scheme  = '2'                         
ssl_id  = 'ANONYM'              
*   proxy_host    = wf_proxy 
*   proxy_service = wf_port 
IMPORTING 
client  = lo_http_client. 
lo_http_client->propertytype_logon_popup = lo_http_client->co_disabled. 
CALL METHOD lo_http_client->authenticate( 
EXPORTING 
*   client               = '110' 
*    proxy_authentication = 'X' 
username             = '' 
password             = '' 
*   LANGUAGE             = 'E' 
                           ). 
CALL METHOD lo_http_client->request->set_header_field 
EXPORTING 
name  = '~request_protocol' 
value = 'HTTPS/1.0'. 
CALL METHOD lo_http_client->request->set_header_field 
EXPORTING 
name  = '~request_uri' 
value = '/odata/v2/......'. 
CALL METHOD lo_http_client->request->set_header_field 
EXPORTING 
name  = 'Content-Type' 
value = 'application/json; charset=utf-8'. 
CALL METHOD lo_http_client->request->set_method( 'POST' ).

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/17970.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论