ABAP - SAP与企业微信集成

  • 最近接到一个SAP直接给企业微信推送消息的需求,说实话之前一直没接触过,脑袋空空的,最终通过在百度搜索案例成功解决了,百度虽然一直被诟病,但却无法否认它的神奇。
  • 实现效果

  • 实现思路:从需求出发,SAP给企业微信推送消息,其本质上是SAP调用企业微信对外发布的API,按照这个思路去找企业微信的API就好了。
  • 1.获取企业内部开发>服务端API>开发指南>获取access_tokenicon-default.png?t=N7T8https://developer.work.weixin.qq.com/document/path/910392.企业内部开发>服务端API>消息推送>发送应用消息icon-default.png?t=N7T8https://developer.work.weixin.qq.com/document/path/90236 
  • 开发技巧
  1. 获取access_token请求地址: https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=企业ID&corpsecret=SECRET;两个参数企业ID和SECRET可以去找企业微信管理员的同事获取,拿到两个参数可以在postman测试;
  2. 根据第一步获取的ACCESS_TOKEN再次调用企业微信API发送应用消息;请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN


  • ABAP 代码
    DATA lv_get_url   TYPE string.
    DATA lv_post_url  TYPE string.
    
    TYPES:BEGIN OF ty_get_receive,
            errcode      TYPE i,
            errmsg       TYPE string,
            access_token TYPE string,
            expires_in   TYPE i.
    TYPES:END OF ty_get_receive.
    
    DATA ls_get_receive TYPE ty_get_receive.
    
    TYPES:BEGIN OF ty_content,
            content TYPE string.
    TYPES:END OF ty_content.
    
    TYPES:BEGIN OF ty_post_request,
            touser                   TYPE string,
            msgtype                  TYPE string,
            agentid                  TYPE i,
            text                     TYPE ty_content,
            safe                     TYPE i,
            enable_id_trans          TYPE i,
            enable_duplicate_check   TYPE i,
            duplicate_check_interval TYPE i.
    TYPES:END OF ty_post_request.
    
    DATA ls_post_request TYPE ty_post_request.
    
    TYPES:BEGIN OF ty_post_receive,
            errcode TYPE i,
            errmsg  TYPE string,
            msgid   TYPE string.
    TYPES:END OF ty_post_receive.
    
    DATA ls_post_receive TYPE ty_post_receive.
    
    START-OF-SELECTION.
    
      lv_get_url = `https://qyapi.weixin.qq.com/cgi-bin/gettoken?` &&
                   `corpid=企业ID` &&
                   `&corpsecret=企业应用Secret`.
    
      ls_post_request-text-content = |外购产品同步销售订单通知:\n|
                                  && |{ sy-datum DATE = ISO } { sy-uzeit TIME = ISO }\n|
                                  && |1234567890|
                                  && |采购订单没有同步销售订单,请知悉! |.
    
      "设置传输内容
      ls_post_request-touser = `8073|404|613|646`.
      ls_post_request-msgtype = `text`.
      ls_post_request-agentid = 1000061.
      ls_post_request-safe = 0.
      ls_post_request-enable_id_trans = 0.
      ls_post_request-enable_duplicate_check = 0.
      ls_post_request-duplicate_check_interval = 0.
    
    *** 第一步:获取access_token请求
      cl_http_client=>create_by_url( EXPORTING url    = lv_get_url
                                     IMPORTING client = DATA(io_http_client) ).
    
      io_http_client->request->set_content_type( content_type = 'application/json; charset=utf-8' ).
    
      io_http_client->request->set_method( if_http_request=>co_request_method_get ).
    
      io_http_client->send( EXCEPTIONS http_communication_failure = 1
                                       http_invalid_state         = 2  ).
      IF sy-subrc NE 0.
        io_http_client->get_last_error( IMPORTING message = DATA(lv_message) code = DATA(lv_code) ).
        CONCATENATE '获取access_token失败原因:' lv_message INTO lv_message.
      ENDIF.
    
      io_http_client->receive( EXCEPTIONS http_communication_failure = 1
                                          http_invalid_state         = 2
                                          http_processing_failed     = 3 ).
      IF sy-subrc EQ 0.
        DATA(lv_get_res) = io_http_client->response->get_cdata( ).
      ELSE.
        io_http_client->get_last_error( IMPORTING message = DATA(lv_msg) code = DATA(lv_code1) ).
        CONCATENATE '企业微信服务器响应失败原因:' lv_msg INTO lv_msg.
      ENDIF.
    
      "将Json报文转换成SAP结构
      /ui2/cl_json=>deserialize( EXPORTING json = lv_get_res
                                           pretty_name = /ui2/cl_json=>pretty_mode-camel_case
                                  CHANGING data = ls_get_receive ).
    
      IF ls_get_receive-errmsg NE `ok`.
        MESSAGE '获取access_token失败' TYPE 'E'.
      ENDIF.
    
    *** 第二步:发送到企业微信
      CLEAR:io_http_client.
    
      lv_post_url = `https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=` &&
                    ls_get_receive-access_token.
    
      cl_http_client=>create_by_url( EXPORTING url    = lv_post_url
                                     IMPORTING client = io_http_client ).
    
      io_http_client->request->set_content_type( content_type = 'application/json; charset=utf-8' ).
    
      io_http_client->request->set_method( if_http_request=>co_request_method_post ).
    
      DATA(lv_send_data) = /ui2/cl_json=>serialize( data        = ls_post_request
                                                    compress    = abap_false
                                                    pretty_name = /ui2/cl_json=>pretty_mode-camel_case ).
    
      io_http_client->request->set_cdata( data = lv_send_data ).
    
      io_http_client->send( EXCEPTIONS http_communication_failure = 1
                                       http_invalid_state         = 2  ).
      IF sy-subrc NE 0.
        io_http_client->get_last_error( IMPORTING message = lv_message code = lv_code ).
        CONCATENATE '发送POST请求给企业微信失败:' lv_message INTO lv_message.
      ENDIF.
    
      io_http_client->receive( EXCEPTIONS http_communication_failure = 1
                                          http_invalid_state         = 2
                                          http_processing_failed     = 3 ).
      IF sy-subrc EQ 0.
        DATA(lv_post_res) = io_http_client->response->get_cdata( ).
      ELSE.
        io_http_client->get_last_error( IMPORTING message = lv_msg code = lv_code1 ).
        CONCATENATE '企业微信服务器响应失败原因:' lv_msg INTO lv_msg.
      ENDIF.
    
      "将Json报文转换成SAP结构
      /ui2/cl_json=>deserialize( EXPORTING json = lv_post_res
                                           pretty_name = /ui2/cl_json=>pretty_mode-camel_case
                                  CHANGING data = ls_post_receive ).
      IF ls_post_receive-errmsg NE `ok`.
        MESSAGE '发送POST请求给企业微信失败' TYPE 'S' DISPLAY LIKE 'E'.
      ELSE.
        MESSAGE '发送POST请求给企业微信成功' TYPE 'S'.
      ENDIF.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/687505.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

命运2联机出错、无法组队?命运2频繁卡顿、延迟高的解决方法

命运2是一款由Bungie制作的第一人称射击游戏,昨日玩家们期待的最新DLC在全球发布,steam同时在线人数几乎打破历史记录达到314K,但是有不少玩家遇到联机失败、无法联机、匹配不了的情况,不知道怎么解决,下面提供几种解决…

计算机SCI期刊,中科院2区,IF=6.9,收稿范围非常广泛

一、期刊名称 Journal of King Saud University—Computer and Information Sciences 二、期刊简介概况 期刊类型:SCI 学科领域:计算机科学 影响因子:6.9 中科院分区:2区 三、期刊征稿范围 《沙特国王大学计算机与信息科学杂…

如何解决网络问题?

组织和 IT 管理员尽其所能完善他们的网络,但是,不同程度的网络问题仍然可能出现,这些网络问题需要立即响应和解决,如果这些问题在不合理的时间内得不到解决,网络和组织的损害可能会付出高昂的代价。这就是为什么 IT 管…

此商家的收款功能已被限制,暂无法支付是怎么回事

商家遇到收款功能被限制的情况时,通常是长时间没有交易导致的,还有可能是存在欺诈等风险造成的。不管是什么原因,商家可以按照以下步骤在微信支付商户平台和微信支付商家助手小程序中查看原因并尝试解决问题。 1. 登录微信支付商户平台 首先…

Hadoop+Hive数据分析综合案例

HadoopHive数据分析综合案例(超级详细) 1.1. 需求分析 1.1.1. 背景介绍 聊天平台每天都会有大量的用户在线,会出现大量的聊天数据,通过对聊天数据的统计分析,可以更好的对用户构建精准的用户画像,为用户提供更好的服务以及实现…

领夹麦克风哪个品牌好?麦克风品牌排行榜前十名推荐

​在如今这个信息爆炸的时代,无论是进行远程会议还是创作网络内容,一个高品质的无线领夹麦克风都能让你的声音更加响亮清晰。技术的发展为我们带来了多样化的选择,但同时也带来了选择上的困难。为了解决这一难题,我根据多年的使用…

高防CDN是如何应对DDoS和CC攻击的

高防CDN(内容分发网络)主要通过分布式的网络架构来帮助网站抵御DDoS(分布式拒绝服务)和CC(挑战碰撞)攻击。 下面是高防CDN如何应对这些攻击的详细描述: 1. DDoS攻击防护 DDoS攻击通过大量的恶…

pxe自动装机与无人值守

一、pxe与无人值守 pxe:c/s 模式,允许客户端通过网络从远程服务器(服务端)下载引导镜像,加载安装文件,实现自动化安装操作系统。 pxe的优点: 1、规模化 同时装配多台服务器(20多&…

wine和crossover哪个好 使用crossover有什么优势

如果你是Mac或Linux用户,你可能会遇到这样的情况:你想要运行一些Windows上的应用程序或游戏,但是你的操作系统并不支持它们。这时候,你有几种选择:一是安装双系统,也就是在你的电脑上同时安装Windows或Linu…

【权威出版/投稿优惠】2024年社会发展与公共文化国际会议(SDPC 2024)

2024 International Conference on Social Development and Public Culture 2024年社会发展与公共文化国际会议 【会议信息】 会议简称:SDPC 2024 截稿时间:点击查看 大会地点:中国上海 会议官网:www.icsdpc.com 会议邮箱&#x…

介绍一款 web 安全测试工具

什么是wafw00f? wafw00f是一个针对Web应用程序安全性的开源工具,它可以在Web服务器上运行,检测并防御常见的网络攻击。 它利用了模块化设计和高度可配置性,使得安全性专家能够根据自己的需要来定制这个工具。 wafw00f包含了许多功…

使用pytorch搭建textCNN、BERT、transformer进行文本分类

首先展示数据处理后的类型: 第一列为文本,第二类为标注的标签,数据保存在xlsx的表格中,分为训练集和验证集。 textCNN 直接上整个工程代码: import pandas as pd import numpy as np import torch from torch.util…

python基础-数据结构——hash表、线性探测、二重探测、双重哈希、闭散列(分离链接)(拉链法)Python代码实现

文章目录 哈希表及其碰撞解决策略1. 引言2. 哈希表简介3. 哈希函数4. 碰撞解决策略4.1 分离链接法(拉链法)4.2 开放寻址法4.2.1 线性探测4.2.2 二次探测4.2.3 双重哈希 5. 总结 哈希表及其碰撞解决策略 1. 引言 哈希表是一种高效的数据结构&#xff0c…

利用WK2168实现串口服务器

ESP32 SPI与WK2168实现串口服务器 概述系统组成代码 概述 一些老设备通过RS485采集数据,如果在一个系统中采用几个RS485设备可能是一个不错的选择,但要是使用46个RS485数据采集设备为一个PLC提供外部数据,系统的性能就很难有保障了。通过一个…

软考对进入事业编的人有帮助吗?

首先肯定的说,软考是可以用来评职称的。 但是, 这取决于你所在公司的性质和工作岗位。 软考全国统一实施后,不再进行计算机技术与软件相应专业和级别的专业技术职务任职资格评审工作。计算机软件资格考试既是职业资格考试,又是…

Element - UI <el-table-column>多选数据提交后禁用已提交的多选框

1. 通过 selection-change"selectionChange" 将已选择的数据存入selectData数组中 <el-table :data"tableData" class"my-5" selection-change"selectionChange" > //多选框已选择的数据 const selectData ref([]); const sel…

品致分档高频电流探头交直流电流探头的功能和应用领域

品致分档高频电流探头可以精确测量最大直流 DC-12MHz&#xff0c;具有高带宽&#xff0c;高精度的测量特点&#xff0c;且支持量程档位切换&#xff0c;满足用户一机多用的需求。探头自带归零和消磁功能&#xff0c;在包容用户的使用环境下&#xff0c;精度也高达 1%。标准的BN…

SpringBoot集成ireport打印,并解决PDF中文显示问题

1、相关jar包引入 <!-- ireport报表相关 start--><dependency><groupId>net.sf.jasperreports</groupId><artifactId>jasperreports</artifactId><version>4.5.1</version><exclusions><exclusion><groupId…

蚓链数字化营销生态的影响力分享!

​家人们&#xff0c;今天来给大家分享一些关于数字化平台生态化对数字营销影响的具体案例。 比如某电商平台&#xff0c;通过生态化的建设&#xff0c;实现了精准的推荐算法。根据用户的浏览历史和购买行为&#xff0c;为他们推荐最符合需求的商品&#xff0c;大大提高了购买…

toB市场 | 我们喜欢赞助这样的展会活动

过去的六一儿童节&#xff0c;刚去成都参加了个行业内的展会。受护网行动、儿童节等等的影响&#xff0c;这次去成都的客户并不算太多&#xff0c;但会议延续了一贯的高品质&#xff0c;让我们收货满满。 选择目标受众来得多的展会 不同厂商会视自己的产品和模式、目标客户来…