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/tech/pnotes/17970.html

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

相关推荐

发表回复

登录后才能评论