wsdl接口调用请求消息xml_SAP调用企业微信接口发送消息

38039617193df3259030ad091e1e6c3b.png

REPORT Z_COMMON_SEND_TO_WECHAT.types: BEGIN OF ty_kv,        errcode  TYPE i,        errmsg TYPE string,        access_token  TYPE string,        expires_in TYPE i,      END OF ty_kv,       BEGIN OF   ty_senddata,      touser  TYPE string,      toparty TYPE string,      totag TYPE string,      msgtype TYPE string,      agentid TYPE i,      BEGIN OF  text  ,      content TYPE string,      END  OF  text  ,      safe  TYPE i,*      enable_id_trans  TYPE i,*      enable_duplicate_check TYPE i,*      duplicate_check_interval TYPE i,    END OF  ty_senddata ,    BEGIN OF   ty_sendresult,      errcode  TYPE i,      errmsg TYPE string,      invaliduser TYPE string,      invalidparty TYPE string,      invalidtag TYPE string,    END OF  ty_sendresult .data:corpid TYPE string,     corpsecret TYPE  string,     access_token TYPE string,       ev_json_output TYPE string,       ev_url TYPE string,       ev_json_input   TYPE string,       ev_method TYPE string.DATA:  ls_sendresult TYPE ty_sendresult,       ls_senddata TYPE ty_senddata,       lt_senddata TYPE TABLE OF  ty_senddata,       ls_access_token TYPE zaccess_token.DATA: time_now type tzntstmpl ,      time_old type tzntstmpl,      secs type tzntstmpl,      gettoken_flag(1).gettoken_flag  = 1 .SELECT SINGLE * INTO  ls_access_token  FROM zaccess_token.IF sy-subrc = 0 .  access_token = ls_access_token-access_token.get time stamp field time_now.PERFORM get_time(ZREPORT_FORM) USING  time_now  ls_access_token-TSTMP  CHANGING  secs  .IF secs < ls_access_token-EXPIRES_IN.   gettoken_flag  = 0 .ENDIF.ENDIF.IF gettoken_flag  = 1.  PERFORM get_new_access_token. "access_token获取ENDIF.PERFORM send_message.WRITE: / ls_sendresult-errcode ,/,ls_sendresult-errmsg  ,/,ls_sendresult-invaliduser ."发送应用消息FORM send_message.      ev_url =  'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='           &&  access_token.      ev_method = 'POST'.      ls_senddata-touser  = '1670'."企业微信接收消息账号ID      "ls_senddata-toparty      "ls_senddata-totag      ls_senddata-msgtype = 'text'.      ls_senddata-agentid = 1000041."企业微信发送消息应用ID      ls_senddata-text-content = '12345上山打老虎'.      ls_senddata-safe  = 1.*      ls_senddata-enable_id_trans  = 0.*      ls_senddata-enable_duplicate_check = 0.*      ls_senddata-duplicate_check_interval = 1800.     " append ls_senddata to lt_senddata.ev_json_input = /ui2/cl_json=>serialize( data = ls_senddata compress = abap_true pretty_name = /ui2/cl_json=>pretty_mode-camel_case ). "将字符串中的[]替换REPLACE ALL OCCURRENCES OF   '[' IN ev_json_input WITH space.REPLACE ALL OCCURRENCES OF   ']' IN ev_json_input WITH space.PERFORM httpjson(ZREPORT_FORM)  USING  ev_url   ev_json_input  ev_method       changing ev_json_output./ui2/cl_json=>deserialize( exporting json = ev_json_output changing data =  ls_sendresult  ).ENDFORM.PROGRAM ZREPORT_FORM.TYPES: BEGIN OF ty_kv,        errcode  TYPE i,        errmsg TYPE string,        access_token  TYPE string,        expires_in TYPE i,      END OF ty_kv.*记录程序运行时间到日志表FORM REPORTLOG USING V_TCODE  V_PROGNAME.  TABLES:ZREPORTLOG .DATA: BEGIN OF LS_ZREPORTLOG OCCURS 100.        INCLUDE STRUCTURE ZREPORTLOG .DATA: END   OF LS_ZREPORTLOG.LS_ZREPORTLOG-PROGNAME =  V_PROGNAME.LS_ZREPORTLOG-TCODE =  V_TCODE.LS_ZREPORTLOG-UNAME = SY-UNAME.LS_ZREPORTLOG-BEGINDATUM = SY-DATUM.LS_ZREPORTLOG-BEGINUZEIT = SY-UZEIT.SELECT * FROM ZREPORTLOG WHERE PROGNAME =  LS_ZREPORTLOG-PROGNAME  AND TCODE =  LS_ZREPORTLOG-TCODE  AND UNAME = LS_ZREPORTLOG-UNAME  AND BEGINDATUM = LS_ZREPORTLOG-BEGINDATUM AND BEGINUZEIT = LS_ZREPORTLOG-BEGINUZEIT.ENDSELECT.  IF SY-SUBRC <> 0.    INSERT INTO ZREPORTLOG VALUES  LS_ZREPORTLOG.  ENDIF.ENDFORM."httpjson接口FORM httpjson  USING    lv_url     TYPE string       li_json   TYPE string       li_method TYPE string       changing lo_json TYPE string.  DATA: lo_http_client TYPE REF TO if_http_client,        lv_len         TYPE i ,        ls_zhttpjson         TYPE zhttpjson,        lv_callid TYPE i.  "创建客户端请求  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.  IF sy-subrc <> 0.    "lv_subrc = sy-subrc.*    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH*               sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.    EXIT.  ENDIF.  "设定传输请求内容格式以及编码格式  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_get ).  "设置待传输内容长度  lv_len = strlen( li_json ).  "设置调用方法  CALL METHOD lo_http_client->request->set_header_field    EXPORTING      name  = '~request_method'      value =  li_method."'GET'.  "设置传入字符串  CALL METHOD lo_http_client->request->set_cdata    EXPORTING      data   = li_json      offset = 0      length = lv_len.  "发送数据  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 ).  "提取返回字符串  lo_json = lo_http_client->response->get_cdata( ).  "将字符串中的回车符替换,否则abap将会识别为#  REPLACE ALL OCCURRENCES OF REGEX '\n' IN lo_json WITH space.  "将本次调用进行记录  select max( callid ) into   lv_callid FROM ZHTTPJSON .  IF sy-subrc = 0.    lv_callid = lv_callid + 1.  ELSE.    lv_callid =  1.  ENDIF.   ls_zhttpjson-CALLID = lv_callid .   ls_zhttpjson-URL = lv_url.   ls_zhttpjson-METHOD = li_method.   ls_zhttpjson-I_JSON = li_json.   ls_zhttpjson-O_JSON = lo_json.   ls_zhttpjson-DATUM = sy-DATUM.   ls_zhttpjson-UZEIT = sy-UZEIT.   ls_zhttpjson-UNAME = sy-UNAME.   INSERT INTO ZHTTPJSON VALUES ls_zhttpjson.  lo_http_client->close( ). ENDFORM."获取两个时间戳之间的时间差(秒)FORM get_time USING tstmp1 type tzntstmpl  tstmp2 type tzntstmpl CHANGING  secs type tzntstmpl.try.secs = cl_abap_tstmp=>subtract(tstmp1 = tstmp1tstmp2 = tstmp2).catch cx_parameter_invalid_range .catch cx_parameter_invalid_type .endtry.ENDFORM."获取access_tokenFORM get_new_access_token CHANGING ls_kv TYPE  ty_kv.data:corpid TYPE string,     corpsecret TYPE  string,     ev_url TYPE string,     ev_json_input   TYPE string,     ev_json_output TYPE string,     ev_method TYPE string,     time_now type tzntstmpl,     ls_access_token TYPE zaccess_token.CORPID = 'CORP_ID'.  " 微信企业号提供的CORP_IDCORPSECRET = 'CORP_SECRET'.  "微信企业号提供的CORP_SECRETev_url =  'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid='           && CORPID && '&corpsecret=' && CORPSECRET.ev_method = 'GET'.get time stamp field time_now.PERFORM httpjson(ZREPORT_FORM)  USING  ev_url   ev_json_input  ev_method       changing ev_json_output./ui2/cl_json=>deserialize( exporting json = ev_json_output changing data = ls_kv  ).IF ls_kv-errcode = 0 AND ls_kv-access_token IS NOT INITIAL.   SELECT SINGLE * INTO  ls_access_token  FROM zaccess_token WHERE access_token = ls_kv-access_token.  IF sy-subrc <> 0 .    ls_access_token-ACCESS_TOKEN = ls_kv-access_token.    ls_access_token-EXPIRES_IN = ls_kv-EXPIRES_IN.    ls_access_token-TSTMP =  time_now.    insert    zaccess_token FROM   ls_access_token.  ENDIF.ENDIF.ENDFORM.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值