用ABAP 企微应用推送消息样例

FUNCTION zhrf_qw_remind.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     REFERENCE(IV_REQUEST_TYPE) TYPE  STRING DEFAULT 'POST'
*"     REFERENCE(IV_ZIF_ID) TYPE  ZHRT_0001-ZIF_ID
*"     REFERENCE(IV_QWID) TYPE  STRING
*"     REFERENCE(IV_MESSAGE) TYPE  STRING
*"     REFERENCE(IV_MSGTYPE) TYPE  ZEHR_MSGTYPE OPTIONAL
*"     REFERENCE(IV_MESSAGE2) TYPE  STRING OPTIONAL
*"     REFERENCE(IV_MESSAGE3) TYPE  STRING OPTIONAL
*"     REFERENCE(IV_MESSAGE4) TYPE  STRING OPTIONAL
*"  EXPORTING
*"     REFERENCE(E_RESPOND) TYPE  STRING
*"     REFERENCE(E_RETURN) TYPE  BAPIRETURN
*"----------------------------------------------------------------------
  /afl/log_init.
  DATA:lv_zif_id        LIKE zhrt_0001-zif_id,
       lo_http_client   TYPE REF TO if_http_client,
       lv_service       TYPE string,
       lv_result_string TYPE string,
       lv_len           TYPE i,
       lv_msg           TYPE string,
       lv_message       TYPE string,
       lv_http_method   TYPE string,
       lv_media_id      TYPE string,
       lv_json_data     TYPE string,
       ls_return        TYPE bapireturn.
  DATA:lv_data TYPE REF TO data.
  DATA:lv_msgtype TYPE zehr_msgtype.
  DATA:lv_msgtype_text TYPE string.
  DATA:lv_token TYPE string.
  "取提醒类型
  SELECT * INTO TABLE @DATA(lt_dd07t) FROM dd07t WHERE domname EQ 'ZDHR_MSGTYPE' AND ddlanguage EQ @sy-langu .
  SORT lt_dd07t BY domvalue_l.
  lv_msgtype = iv_msgtype.
  IF lv_msgtype IS INITIAL.
    lv_msgtype = '1'.
  ENDIF.
  READ TABLE lt_dd07t ASSIGNING FIELD-SYMBOL(<ls_msgtype>) WITH KEY domvalue_l = lv_msgtype BINARY SEARCH.
  IF sy-subrc EQ 0.
    lv_msgtype_text = <ls_msgtype>-ddtext.
  ENDIF.

  "POST
  lv_http_method = if_http_request=>co_request_method_post.

  DATA:e_data TYPE string.
  DATA:ls_data TYPE REF TO data.
  FIELD-SYMBOLS:<fs_return> TYPE any,
                <fs_value>  TYPE any.

  DATA:lv_field_symbols_string TYPE string.
  DATA:lv_id TYPE zhrt_0001-zif_id.
  IF iv_zif_id EQ 'HR00000052'.
    lv_id = 'HR00000053'.
  ELSE.
    lv_id = 'HR00000047'.
  ENDIF.
  CALL FUNCTION 'ZZF_QW_TOKEN'
    EXPORTING
      iv_zif_id       = lv_id
      iv_request_type = 'GET'
    IMPORTING
      e_data          = e_data
      e_return        = e_return.
  ls_data = /ui2/cl_json=>generate( json = e_data ).
  IF ls_data IS NOT INITIAL.
    ASSIGN ls_data->* TO <fs_return>.
    lv_field_symbols_string = '<FS_RETURN>-access_token->*'.
    ASSIGN (lv_field_symbols_string) TO <fs_value>.
  ENDIF.
  CHECK <fs_value> IS ASSIGNED.

  SELECT SINGLE *
    INTO @DATA(ls_zhrt_0001)
    FROM zhrt_0001
   WHERE client EQ @sy-mandt
     AND zif_id EQ @iv_zif_id.
  IF sy-subrc NE 0.
    ls_return-type = 'E'.
    ls_return-message = TEXT-e01."接口未配置
    RETURN.
  ENDIF.

  IF ls_zhrt_0001-zif_open EQ space.
    ls_return-type = 'E'.
    ls_return-message = TEXT-e01."接口启用
    RETURN.
  ENDIF.

  lv_service = ls_zhrt_0001-zurl  .
  REPLACE 'ACCESS_TOKEN' IN lv_service WITH <fs_value>.

  cl_http_client=>create_by_url(
    EXPORTING
      url                = lv_service
    IMPORTING
      client             = lo_http_client
    EXCEPTIONS
      argument_not_found = 1
      plugin_not_active  = 2
      internal_error     = 3
      OTHERS             = 4 ).

  lo_http_client->request->set_method( lv_http_method ).

*   "设置字符类别
  CALL METHOD lo_http_client->request->set_header_field
    EXPORTING
      name  = 'content-type'
      value = 'application/json'.
  CASE lv_msgtype.
    WHEN '1'."文本消息
      lv_msg =

      '{'                                                               &&
          '"touser":"'     && iv_qwid && '",'                           &&
          '"msgtype":  '   &&  '"'    && lv_msgtype_text  && '"' &&  ','&&
          '"agentid": '    && ls_zhrt_0001-zpara1_str     && ','        &&
          '"text": {'                                                   &&
          '"content": '    &&  '"'    && iv_message       && '"' && '},'&&
          '"safe":0,'                                                   &&
          '"enable_id_trans":0,'                                        &&
          '"enable_duplicate_check":0,'                                 &&
          '"duplicate_check_interval":0'                                &&
      '}'.
    WHEN '2'."图片消息
    WHEN '3'."语音消息
    WHEN '4'."视频消息
    WHEN '5'."文件消息
    WHEN '6'."文本卡片消息
    WHEN '7'."图文消息
      lv_msg =

        '{'
                                                                        &&
          '"touser":"'     && iv_qwid && '",'                           &&
          '"msgtype":  '   &&  '"'    && lv_msgtype_text  && '"' && ',' &&
          '"agentid": '    && ls_zhrt_0001-zpara1_str     && ',' &&
          '"news": {'                                                   &&
            '"articles" : ['                                            &&
               '{'                                                      &&
                   '"title" :  '        &&  '"' && iv_message   &&  '"' &&      ','   &&
                   '"description" : '   &&  '"' && iv_message2  &&  '"' &&      ','   &&
                   '"url" : '           &&  '"' && iv_message3  &&  '"' &&      ','   &&
                   '"picurl" :  '       &&  '"' && iv_message4  &&  '"' &&      ','   &&
                   '}'                                                                &&
                 ']'                                                                  &&
            '}'                                                                       &&
        '}'.
    WHEN '8'."图文消息(mpnews)
    WHEN '9'."markdown消息
      lv_msg =

'{'                                                               &&
    '"touser":"'     && iv_qwid && '",'                           &&
    '"msgtype":  '   &&  '"'    && lv_msgtype_text  && '"' &&  ','&&
    '"agentid": '    && ls_zhrt_0001-zpara1_str     && ','        &&
    '"markdown": {'                                               &&
    '"content": '    &&  '"'    && iv_message       && '"' && '}' &&
'}'.
    WHEN '10'."小程序通知消息
    WHEN '11'."模板卡片消息
  ENDCASE.
  lv_len = strlen( lv_msg ).
  CALL METHOD lo_http_client->request->set_cdata
    EXPORTING
      data   = lv_msg
      offset = 0
      length = lv_len.

  "设置待传输内容
  CALL METHOD lo_http_client->send
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2.
  IF sy-subrc <> 0.
    "操作失败,获取失败原因
    lo_http_client->get_last_error( IMPORTING message = lv_message ).
    ls_return-message = lv_message.
    ls_return-type = 'E'.
    RETURN..
  ENDIF.

  "读取远程服务返回的处理过结果。
  CALL METHOD lo_http_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3.
  IF sy-subrc <> 0 .
    lo_http_client->get_last_error( IMPORTING message = lv_message ).
    ls_return-message = lv_message.
    ls_return-type = 'E'.
    RETURN.
  ELSE.
    lv_result_string = lo_http_client->response->get_cdata( ).
    e_respond = lv_result_string.
    CALL FUNCTION 'ZHTTP_UNICODE_TO_ZH'
      EXPORTING
        iv_string = lv_result_string
        iv_flag   = '\u'
      IMPORTING
        rv_string = lv_result_string.
    lv_data = /ui2/cl_json=>generate( json = lv_result_string ).
    IF lv_data IS NOT INITIAL.
      ASSIGN lv_data->* TO <fs_return>.
      ASSIGN ('<FS_RETURN>-errcode->*') TO FIELD-SYMBOL(<fs_code>).
      ASSIGN ('<FS_RETURN>-errmsg->*') TO FIELD-SYMBOL(<fs_msg>).
      IF <fs_code> IS ASSIGNED AND <fs_msg> IS ASSIGNED.
        IF <fs_code> EQ 0.
          e_return-type = 'S'.
          e_return-message = <fs_msg>.
        ELSE.
          e_return-type = 'E'.
          e_return-message = <fs_msg>.
        ENDIF.
      ENDIF.
    ENDIF.
  ENDIF.
  /afl/save 'HR' 'QW' iv_qwid.
ENDFUNCTION.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值