参数说明

参数

是否必填

说明

msgtype

消息类型,此时固定为news

articles

图文消息,一个图文消息支持1到8条图文

title

标题,不超过128个字节,超过会自动截断

description

描述,不超过512个字节,超过会自动截断

url

点击后跳转的链接。

picurl

图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图 1068455,小图150150。

效果展示

ABAP推送企业微信机器人4-图文类型_json

Demo Code

  DATA:LV_TX_ROBOT_WEBHOOK TYPE STRING VALUE 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=50d640d9-9ad6-4d39-98aa-c94c2002e6d4'.
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,
LV_BASE64 TYPE STRING, "BASE64
LV_BASE64_MD5 TYPE STRING, "BASE64
LV_BASE64_MD5_DECODE TYPE STRING, "BASE64
LS_RETURN TYPE BAPIRETURN.

*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file. "弹出选择文件对话框
* PERFORM FRM_GET_FILE.

START-OF-SELECTION.

LV_ZIF_ID = 'HR00000032'.
LV_HTTP_METHOD = IF_HTTP_REQUEST=>CO_REQUEST_METHOD_POST.

SELECT SINGLE *
INTO @DATA(LS_ZHRT_0001)
FROM ZHRT_0001
WHERE CLIENT EQ @SY-MANDT
AND ZIF_ID EQ @LV_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.
* IF ET_TABLE[] IS NOT INITIAL.
*
* CALL FUNCTION 'ZZF_HR_TX_ROBOT_POST_FILE'
* EXPORTING
* IV_FIELD_NAME = IV_FIELD_NAME
* IMPORTING
* EV_MEDIA_ID = LV_MEDIA_ID
* TABLES
* ET_TABLE = ET_TABLE
* .
*
* ENDIF.

* PERFORM FRM_GET_BASE64 CHANGING LV_BASE64 LV_BASE64_MD5.
* PERFORM FRM_GET_BASE64_MD5 USING LV_BASE64 CHANGING LV_BASE64_MD5 .


LV_SERVICE = LS_ZHRT_0001-ZURL && LS_ZHRT_0001-ZPARA1 .
REPLACE 'HR_PARA1' IN LV_SERVICE WITH LS_ZHRT_0001-ZPARA1_STR.


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'.
LV_MSG =

'{' &&
'"msgtype": "news",' &&
'"news": {' &&
'"articles" : [' &&
'{' &&
'"title" : "Joker''s news!",' &&
'"description" : "Any New can See by the Link",' &&
'"url" : "https://blog.csdn.net/huanglin6",' &&
'"picurl" : "https://img-blog.csdnimg.cn/20191213191041316.jpg"' &&
'},' &&
'{' &&
'"title" : "Joker''s ui5!",' &&
'"description" : "Any New can See by the Link",' &&
'"url" : "http://119.29.121.148/ui5/com.joker.Zportal/uimodule/webapp/",' &&
'"picurl" : "https://avatar.csdnimg.cn/0/0/B/2_huanglin6.jpg"' &&
'}' &&
']' &&
'}' &&
'}'.

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( ).
CALL FUNCTION 'ZHTTP_UNICODE_TO_ZH'
EXPORTING
IV_STRING = LV_RESULT_STRING
IV_FLAG = '\u'
IMPORTING
RV_STRING = LV_RESULT_STRING.
LV_JSON_DATA = LV_RESULT_STRING.

ENDIF.

**&---------------------------------------------------------------------*
**& Form FRM_GET_FILE
**&---------------------------------------------------------------------*
**& text
**&---------------------------------------------------------------------*
**& --> p1 text
**& <-- p2 text
**&---------------------------------------------------------------------*
*FORM FRM_GET_FILE .
*
* DATA: IT_FILE TYPE FILETABLE WITH HEADER LINE,
* l_obj TYPE REF TO cl_gui_frontend_services,
* g_rc TYPE i.
*
* CREATE OBJECT L_OBJ.
* CALL METHOD L_OBJ->FILE_OPEN_DIALOG
* EXPORTING
* FILE_FILTER = '*.bmp;*.jpg;*.jpeg'
* INITIAL_DIRECTORY = 'C:\DATA'
* CHANGING
* FILE_TABLE = IT_FILE[]
* RC = G_RC.
* READ TABLE IT_FILE INDEX 1.
* P_FILE = IT_FILE-FILENAME.
*
*ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_BASE64
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& <-- LV_BASE64
*&---------------------------------------------------------------------*
*FORM FRM_GET_BASE64 CHANGING P_LV_BASE64 P_LV_BASE64_MD5.
* DATA: LT_BIN_DATA TYPE STANDARD TABLE OF CHAR1024.
* DATA: LV_FILE_LENGTH TYPE I,
* LV_XSTRING TYPE XSTRING,
* LV_HASH TYPE MD5_FIELDS-HASH.
*
* CALL FUNCTION 'GUI_UPLOAD'
* EXPORTING
* FILENAME = P_FILE
* FILETYPE = 'BIN'
** HAS_FIELD_SEPARATOR = ' '
** HEADER_LENGTH = 0
** READ_BY_LINE = 'X'
** DAT_MODE = ' '
** CODEPAGE = ' '
** IGNORE_CERR = ABAP_TRUE
** REPLACEMENT = '#'
** CHECK_BOM = ' '
** VIRUS_SCAN_PROFILE =
** NO_AUTH_CHECK = ' '
* IMPORTING
* FILELENGTH = LV_FILE_LENGTH
** HEADER =
* TABLES
* DATA_TAB = LT_BIN_DATA
* EXCEPTIONS
* FILE_OPEN_ERROR = 1
* FILE_READ_ERROR = 2
* NO_BATCH = 3
* GUI_REFUSE_FILETRANSFER = 4
* INVALID_TYPE = 5
* NO_AUTHORITY = 6
* UNKNOWN_ERROR = 7
* BAD_DATA_FORMAT = 8
* HEADER_NOT_ALLOWED = 9
* SEPARATOR_NOT_ALLOWED = 10
* HEADER_TOO_LONG = 11
* UNKNOWN_DP_ERROR = 12
* ACCESS_DENIED = 13
* DP_OUT_OF_MEMORY = 14
* DISK_FULL = 15
* DP_TIMEOUT = 16
* OTHERS = 17
* .
* IF SY-SUBRC <> 0.
** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
** WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
* ENDIF.
*
* CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
* EXPORTING
* INPUT_LENGTH = LV_FILE_LENGTH
* IMPORTING
* BUFFER = LV_XSTRING
* TABLES
* BINARY_TAB = LT_BIN_DATA
* EXCEPTIONS
* FAILED = 1
* .
*
* DATA: LV_JS TYPE REF TO CL_JAVA_SCRIPT,
* LV_JAVASCRIPT TYPE STRING,
* LV_RETURN TYPE STRING.
* LV_JS = cl_java_script=>create( ).
*
*
** CONCATENATE
** INTO LV_JAVASCRIPT.
** LV_JAVASCRIPT = 'var oXstring = "' && LV_XSTRING && '";'.
** CONCATENATE LV_JAVASCRIPT
** 'function xStringToBase64(xString) {'
** ' var encode = encodeURI(xString);'
** ' var base64 = btoa(encode);'
** ' return base64;'
** ' }'
** 'xStringToBase64(oXstring);'
** INTO LV_JAVASCRIPT SEPARATED BY cl_abap_char_utilities=>cr_lf.
*
*
**GET THE RETURN VALUE
** LV_RETURN = LV_JS->EVALUATE( LV_JAVASCRIPT ).
** P_LV_BASE64_MD5 = LV_RETURN.
*
*
*
* CALL FUNCTION 'SCMS_BASE64_ENCODE_STR'
* EXPORTING
* INPUT = LV_XSTRING
** INPUT_LENGTH = LV_FILE_LENGTH
* IMPORTING
* OUTPUT = P_LV_BASE64.
**
** DATA HASH TYPE MD5_FIELDS-HASH.
**
** CALL FUNCTION 'CALCULATE_HASH_FOR_CHAR'
** EXPORTING
** ALG = 'MD5'
** DATA = LV_XSTRING
** LENGTH = LV_FILE_LENGTH
** IMPORTING
** HASH = HASH.
**
** CALL FUNCTION 'MD5_CALCULATE_HASH_FOR_RAW'
*** EXPORTING
*** DATA = DATA
*** LENGTH = 0
*** VERSION = 1
** IMPORTING
** HASH = HASH
** TABLES
** DATA_TAB = LT_BIN_DATA
** EXCEPTIONS
** INTERNAL_ERROR = 1
** .
*
*
*
* CALL FUNCTION 'MD5_CALCULATE_HASH_FOR_CHAR'
* EXPORTING
* DATA = P_LV_BASE64
* LENGTH = 0
* VERSION = 1
* IMPORTING
* HASH = LV_HASH
** TABLES
** DATA_TAB = LT_BIN_DATA
* EXCEPTIONS
* NO_DATA = 1
* INTERNAL_ERROR = 2
* .
* P_LV_BASE64_MD5 = LV_HASH.
*
*
*ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_BASE64_MD5
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& --> LV_BASE64
*& <-- LV_BASE64_MD5
*&---------------------------------------------------------------------*
FORM FRM_GET_BASE64_MD5 USING P_LV_BASE64
CHANGING P_LV_BASE64_MD5.
DATA HASH TYPE MD5_FIELDS-HASH.

CALL FUNCTION 'MD5_CALCULATE_HASH_FOR_CHAR'
EXPORTING
DATA = P_LV_BASE64
LENGTH = 0
VERSION = 1
IMPORTING
HASH = HASH
EXCEPTIONS
NO_DATA = 1
INTERNAL_ERROR = 2
.
P_LV_BASE64_MD5 = HASH.
ENDFORM.