SAAS平台基于Oauth2认证的http API连接案例,有问题阅读注释
=>前言
- 对于调用频次低的接口,Token可在程序每次调用前获取
- 对于调用频次中等 高频调用期间不定的接口,可创建自定义表存Token + Token获取日期 + Token获取时间;调用时如果上次获取的Token在有效期直接调用,不在有效期就重新获取并存表
- 对应调用频次高的接口,可以做个Job每1小时55分钟更新一次Token到自定义表或共享内存(假设Token有效时间2小时)
Step1.示例代码
- 在APIPost SoapUI等软件中,参数对应的ABAP方法
TYPES: BEGIN OF TY_TOKEN, ACCESS_TOKEN TYPE CHAR50, TOKEN_TYPE TYPE CHAR10, EXPIRES_IN TYPE CHAR10, SCOPE TYPE CHAR10, END OF TY_TOKEN. DATA: GO_HTTP_CLIENT TYPE REF TO IF_HTTP_CLIENT. DATA: GT_TOKEN TYPE TABLE OF TY_TOKEN, GS_TOKEN TYPE TY_TOKEN. DATA: RESPONSE TYPE STRING, RESPONSE1 TYPE STRING, MESSAGE TYPE STRING, TOKEN TYPE CHAR50. CONSTANTS: GC_HOST TYPE STRING VALUE 'http://api.host.com', GC_AUTH TYPE STRING VALUE 'Basic YTU5OTk1MzgtOTNmNC01NzYyLWJmNjMtZ5hjODQzNjIwYWEwOjdiZGY0NGVjLTc4NGUCNGU0NC04N2MyLWZiNTQ4OTY4MjdhMQ=='. *"如果有汉字需要转码成ASCII *CALL METHOD CL_HTTP_UTILITY=>ESCAPE_URL * EXPORTING * UNESCAPED = STRING_IN * RECEIVING * ESCAPED = STRING_OUT. *&-------------------创建客户端请求-------------------------------------* CALL METHOD CL_HTTP_CLIENT=>CREATE_BY_URL EXPORTING URL = GC_HOST IMPORTING CLIENT = GO_HTTP_CLIENT EXCEPTIONS ARGUMENT_NOT_FOUND = 1 PLUGIN_NOT_ACTIVE = 2 INTERNAL_ERROR = 3 OTHERS = 4. IF SY-SUBRC <> 0. MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. EXIT. ENDIF. *GO_HTTP_CLIENT->PROPERTYTYPE_LOGON_POPUP = GO_HTTP_CLIENT->CO_DISABLED. "关闭登录弹窗 *&----------------------------Step1:Get Token.-------------------------* *http请求如果频次高,Get Token应该另外写程序,通过Background Job维持Token有效 "设置http协议版本 GO_HTTP_CLIENT->REQUEST->SET_VERSION( IF_HTTP_REQUEST=>CO_PROTOCOL_VERSION_1_1 ). "设置http请求方法 GO_HTTP_CLIENT->REQUEST->SET_METHOD( IF_HTTP_REQUEST=>CO_REQUEST_METHOD_POST ). "设置URI CL_HTTP_UTILITY=>SET_REQUEST_URI( REQUEST = GO_HTTP_CLIENT->REQUEST URI = '/openapi/oauth/token' ). "设置http请求头 GO_HTTP_CLIENT->REQUEST->SET_HEAD