tiptop通过shell使用json调用webservice接口案例

公司最近使用tiptop与携客云对接,携客云提供的接口方式是https的,使用4gl里面的接口语言直接调用的话会报错“Configuration needed to perform HTTPS connection”研究了很久,没找到解决方案,无奈曲线救国,直接使用shell脚本POST json数据,发现程序更简洁,运行效率更快,下面对这种调用方式做一个详细说明:

1:gp默认是不支持json解析的,因为util.so版本的问题,,刚好看到鹏哥论坛的文章,更新util.so到新版本,解析问题解决!

2:写shell脚本,这里我写了一个公用脚本,gp使用的时候调用脚本并传入json,地址参数,就可以组成需要执行的脚本文件,最后执行脚本文件,请求连接并获取response数据
脚本getxky.sh内容 echo "curl -i -X POST -H 'Content-type':'application/json' -d '$1' $2"

3:编写4gl程序程序主要的内容就是(1):组成request的json文件;(2):调用脚本生成执行POST的脚本;(3):执行脚本,并将结果放在一个临时文本中,通过规则过滤掉无效输出,只保留有效json数据;(4):解析文本中的json数据,得到数据后做逻辑处理

以下是实现代码

FUNCTION cws_xky_receiveTypes(erpCode,innerVendorCode,prodCodes)  #获取供应商交货方式
DEFINE erpCode            LIKE zx_file.zx01,
       innerVendorCode    LIKE type_file.chr100,
       prodCodes          DYNAMIC ARRAY OF VARCHAR(40)
#-------------------------------------必要变量
DEFINE l_json_file    STRING,
       l_json_sh      STRING,
       l_json         STRING
DEFINE jsonObj        util.JSONObject
DEFINE jsondata       TEXT
DEFINE l_jsonString   STRING
DEFINE l_cmd          STRING 
#-------------------------------------必要变量
#----------------request数据
DEFINE i             INTEGER
DEFINE l_json_rec    RECORD
	commonParam  RECORD 
	 appKey      VARCHAR(40),
	 version     VARCHAR(10),
	 ownerCompanyCode   VARCHAR(40),
	 operateCompanyCode VARCHAR(40),
	 sign               VARCHAR(40),
	 timestamps         INTEGER
	          END RECORD,
	body         RECORD
	  erpCode          VARCHAR(40),
	  innerVendorCode  VARCHAR(40),
	  prodCodes        DYNAMIC ARRAY OF VARCHAR(40)
	        END RECORD
		   END RECORD
#----------------request数据
#---------------response数据
DEFINE  receiveTypes  RECORD
	result       INTEGER,   #成功=1,失败=9
	  dataList     DYNAMIC ARRAY of  RECORD
	    productCode       VARCHAR(40),  #料号
	    innerVendorCode   VARCHAR(40),  #供应商
	    receiveType       INTEGER      #交货方式  1:按订单,2:按排期
	  END  RECORD
	END  RECORD
#---------------response数据


LET l_json_sh = "/u1/tmp_dir/json/",innerVendorCode CLIPPED,".sh"     #-----执行发送的脚本
LET l_json_file = "/u1/tmp_dir/json/",innerVendorCode CLIPPED,".txt"  #-----获取到的数据
LET l_json = "/u1/tmp_dir/json/",innerVendorCode CLIPPED,".json"      #获取到的json格式数据

CALL cws_xky_get_defluat("receiveTypes") RETURNING g_common.*,g_address   #获取协客云参数信息
#-------------------赋值  begin
LET l_json_rec.commonParam.appKey   = g_common.appKey
LET l_json_rec.commonParam.version  = g_common.version
LET l_json_rec.commonParam.ownerCompanyCode = g_common.ownerCompanyCode
LET l_json_rec.commonParam.operateCompanyCode = g_common.operateCompanyCode
LET l_json_rec.commonParam.sign = g_common.sign
LET l_json_rec.commonParam.timestamps = g_common.timestamps

LET l_json_rec.body.erpCode = erpCode
LET l_json_rec.body.innerVendorCode = innerVendorCode

FOR i =1 to prodCodes.getlength()
LET l_json_rec.body.prodCodes[i] = prodCodes[i]
END FOR

#------------------赋值  END 

LET jsonObj = util.JSONObject.fromFGL(l_json_rec)  #将FGL数据转换成json
LET l_jsonString  =  jsonObj.toString()   #获取json串 

LET l_cmd = "sh /u1/tmp_dir/json/getxky.sh '",l_jsonString,"' '",g_address,"' >",l_json_sh   #调用脚本生成执行脚本(其实直接在程序组成也可以)
RUN l_cmd

LET l_cmd = "chmod 777 ",l_json_sh   #更新权限
RUN l_cmd

LET l_cmd ="sh ",l_json_sh," > ",l_json_file   #执行脚本,并将结果写入文件
RUN l_cmd 

LET l_cmd = "sed -n '$p'  ",l_json_file," > ",l_json   #获取纯正json文件(根据实际数据处理,我这里json数据在最后一行)
RUN l_cmd 

#2:解析数据
#--------------json解析  begin
LOCATE jsondata IN FILE l_json  #直接抓取文件
TRY
LET jsonObj = util.JSONObject.parse(jsondata)
CALL jsonObj.toFGL(receiveTypes)   #转化成数据
CATCH
DISPLAY "ERROR:", STATUS   
END TRY
#---------------json解析 END 

#--------------做数据处理

#--------------做数据处理

END FUNCTION 
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

四方木2021

您的鼓励是我前进路上的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值