design bu leezec 296066606

应用实例

T100销售订单推送到CRM

需求分解:1.调用销售易接口校验取得token 2.取得token后按照要求推送数据

1.什么是token?

首先,要调用CRM的实际应用场景,就绕不开一个安全校验机制,叫做接口鉴权,也叫token,是一个在外部网络环境防止数据泄漏的一个验证,通常会提供一个账号密码,以特定的加密方式传输到指定服务器,获得一个授权码,然后根据这个授权码才能调用实际应用场景,目前这样的接口校验方式已经成为主流

2.为什么要用token?

销售易是一个云平台,接口调用有统一的域名,能区分身份的就是token了,根据token会把你的请求内容更新到属于你的账号数据里面,好比销售易是一家银行,token就是银行卡账号,你去银行转账才不会把张三的芒尼存到李四的账号

一,token获取开发

首先看下销售易的token文档:

 

通过文档得知:要成功获取token,需要的内容有

由于销售易的api支持个性定制化,所以后面附上的域名信息和文档略有不同
1.请求地址 :https://login.xiaoshouyi.com/auc/oauth2/token
2.请求方式 :get
3.请求参数 :grant_type,client_id,client_secret,redirect_uri
4.返回结构 :主要提取access_token
{"id": 15441****7509,  #去敏处理"access_token": "39eebeb9****99.MTU0NDEwOTYxNTA0MTE3Mg==0",  #去敏处理"issued_at": 166****119,  #去敏处理"token_type": "Bearer"
}

附上T100调用销售易API获取token的源码(关键信息去敏处理):

PUBLIC FUNCTION cs_crm_get_token()
DEFINE req          com.HTTPRequest
DEFINE resp         com.HTTPResponse
DEFINE p_req_url    STRING
DEFINE p_pos_param  STRING
DEFINE l_req        STRINGDEFINE l_response   STRING
DEFINE l_date       DATETIME YEAR TO SECOND
DEFINE l_param_r    RECORD id           LIKE type_t.chr1000,access_token LIKE type_t.chr1000,issued_at    LIKE type_t.chr1000,token_type   LIKE type_t.chr1000END RECORD
DEFINE l_token      LIKE gzzg_t.gzzg005
DEFINE g_logfile STRING  #日志文件名称
DEFINE g_logdate STRING  #日志日期
DEFINE ch base.Channel    #写入日志
DEFINE g_logcont STRING  #日志文件内容LET p_req_url='https://api-tencent.xiaoshouyi.com/oauth2/token.action'LET p_pos_param='?grant_type=password&client_id=77******7f2&client_secret=e***dc8a9aa&redirect_uri=https://api-tencent.xiaoshouyi.com&username=1**5&password=***' #*号内容去敏处理LET g_logdate=YEAR(CURRENT) USING "####",MONTH(CURRENT) USING "&&",DAY(CURRENT) USING "&&"#,TIME(CURRENT)LET g_logfile=FGL_GETENV("LOGDIR")LET g_logfile=g_logfile,'/cs_oa_',g_logdate,".log"DISPLAY g_logfileLET ch=base.Channel.create()CALL ch.setDelimiter("")CALL ch.openFile(g_logfile,"a")LET g_logcont='=============================================================='CALL ch.writeLine(g_logcont)CALL ch.writeLine('request:')  LET l_date=cl_get_current()LET g_logcont=' time:',l_date,' \r\n g_prog:',g_prog,' \r\n req_url:',p_req_url,' \r\n pos_param:',p_pos_param,'\r\n'CALL ch.writeLine(g_logcont)DISPLAY 'URL:',p_req_urlLET l_req=p_req_url,p_pos_paramTRY LET req = com.HTTPRequest.Create(l_req)CALL req.setCharset("UTF-8")#CALL req.setHeader("ContentLength", p_pos_param.getLength())#CALL req.setHeader("Content-Type","application/json")CALL req.setMethod("GET")#CALL req.doTextRequest(p_pos_param)CALL req.doRequest()CALL req.setConnectionTimeOut(120) DISPLAY reqLET resp = req.getResponse()#获取发送请求后服务器返回的状态码,200为正常访问IF resp.getStatusCode() != 200 THENDISPLAY  "HTTP Error (" || resp.getStatusCode() || ") ", resp.getStatusDescription()ELSE#获取请求返回的json字符串LET l_response = resp.getTextResponse()CALL util.JSON.parse(l_response,l_param_r)   #解析json字串转成变量LET l_token=l_param_r.access_tokenEND IFDISPLAY l_responseCATCH# Error occured from Genero system # 客戶端連線錯誤 ( 錯誤代碼: %1 )INITIALIZE g_errparam TO NULLLET g_errparam.code = "lib-00427"LET g_errparam.extend = ''LET g_errparam.popup = TRUE CALL cl_err() LET l_token = NULLEND TRYCALL ch.writeLine('Reponse:')LET g_logcont=l_responseCALL ch.writeLine(g_logcont) LET g_logcont='==============================================================\r\n\r\n\r\n'CALL ch.writeLine(g_logcont)CALL ch.close()RETURN l_tokenEND FUNCTION

二,订单推送开发

取得token之后,就是要推送实际的订单系统数据了,由于销售易的结构特殊性,订单的单头和单身分开的,所以实际上是两个接口,订单单头推送一份,单身推送一份,并且单身不是数组类型,需要逐笔推送,附上源码

#該程式未解開Section, 採用最新樣板產出!
#該程式為freestyle程式!
{<section id="cs_axmt500_send.description" type="s" >}
#應用 a00 樣板自動產生(Version:3)
#+ Standard Version.....: SD版次:0001(1900-01-01 00:00:00), PR版次:
#+ Customerized Version.: SD版次:0001(1900-01-01 00:00:00), PR版次:
#+ Build......: 000140
#+ Filename...: cs_axmt500_send
#+ Description: 推送訂單信息到crm
#+ Creator....: TIPTOP(2021-09-16 09:37:36)
#+ Modifier...: 00000 -SD/PR-{</section>}{<section id="cs_axmt500_send.global" type="s" >}
#應用 p00 樣板自動產生(Version:6)
#add-point:填寫註解說明 name="main.memo"#end add-point
#add-point:填寫註解說明(客製用) name="main.memo_customerization"#end add-point
#(ver:6) ---start---
#add-point:填寫註解說明(行業用) name="global.memo_industry"#end add-point
#(ver:6) --- end ---IMPORT os
#add-point:增加匯入項目 name="main.import"
IMPORT FGL WSHelper
IMPORT com
IMPORT util
IMPORT xml
#end add-pointSCHEMA dsGLOBALS "../../cfg/top_global.inc"
#add-point:增加匯入變數檔 name="global.inc"
DEFINE l_remote_ip    STRING
DEFINE l_service      STRING
DEFINE l_req_url      STRING
DEFINE js STRING
DEFINE l_token STRING
DEFINE r_success    LIKE type_t.num5
DEFINE l_response   VARCHAR(5000)
DEFINE l_request    STRING
DEFINE l_orderId    LIKE type_t.chr1000
DEFINE l_orderproduct LIKE type_t.chr1000
DEFINE l_timestamp  CHAR(13)
DEFINE g_type       LIKE type_t.chr1
#end add-point{</section>}{<section id="cs_axmt500_send.free_style_variable" type="s" >}
#add-point:free_style模組變數(Module Variable) name="free_style.variable"
TYPE type_order        RECORD entityType        LIKE type_t.chr1000,po                LIKE type_t.chr1000,accountId         LIKE type_t.chr1000,customItem183__c  LIKE type_t.chr1000,ownerId           LIKE type_t.chr1000,dimDepart         LIKE type_t.chr1000,customItem188__c  LIKE type_t.chr1000,customItem189__c  LIKE type_t.chr1000,customItem194__c  LIKE type_t.chr1000,customItem195__c  LIKE type_t.chr1000,contactAddress    LIKE type_t.chr1000,comment           LIKE type_t.chr1000,customItem198__c  LIKE type_t.chr1000,customItem184__c  LIKE type_t.chr1000,customItem182__c  LIKE type_t.chr1000,customItem192__c  LIKE type_t.chr1000,customItem193__c  LIKE type_t.chr1000,customItem191__c  LIKE type_t.chr1000,customItem196__c  LIKE type_t.chr1000,customItem197__c  LIKE type_t.chr1000,customItem190__c  LIKE type_t.chr1000,customItem207__c  LIKE type_t.chr1000,customItem209__c  LIKE type_t.chr1000,customItem201__c  LIKE type_t.chr1000,    customItem202__c  LIKE type_t.chr1000END RECORD DEFINE l_param_order RECORD   --单头data          type_orderEND RECORD TYPE type_orderproduct RECORD entityType        LIKE type_t.chr1000,name              LIKE type_t.chr1000,    productId         LIKE type_t.chr1000,    quantity          LIKE type_t.chr1000,    customItem180__c  LIKE type_t.chr1000,    listTotal         LIKE type_t.chr1000,    customItem188__c  LIKE type_t.chr1000,    unitPrice         LIKE type_t.chr1000,  standardPrice     LIKE type_t.chr1000,   customItem183__c  LIKE type_t.chr1000,    comment           LIKE type_t.chr1000,    customItem187__c  LIKE type_t.chr1000,    customItem186__c  LIKE type_t.chr1000,    customItem184__c  LIKE type_t.chr1000,    customItem181__c  LIKE type_t.chr1000,    customItem185__c  LIKE type_t.chr1000,    discount          LIKE type_t.chr1000,    customItem179__c  LIKE type_t.chr1000,    customItem182__c  LIKE type_t.chr1000,    orderId           LIKE type_t.chr1000END RECORD DEFINE l_param_orderproduct RECORD   --单身data                 type_orderproductEND RECORD TYPE type_data_r    RECORDid             LIKE type_t.chr1000,objectApiKey   LIKE type_t.chr1000,busiType       LIKE type_t.chr1000,name           LIKE type_t.chr1000END RECORD DEFINE l_param_r  RECORD --返回值code       LIKE type_t.chr1000,msg        LIKE type_t.chr1000,      errorInfo  LIKE type_t.chr1000END RECORD DEFINE l_param_data_r RECORD --返回值data       type_data_rEND RECORD               TYPE type_updatejson   RECORD id                LIKE type_t.chr1000,po                LIKE type_t.chr1000END RECORD DEFINE l_param_order_up RECORD   --单头标题修改objectapi        LIKE type_t.chr1000,id               LIKE type_t.chr1000,updatejson       type_updatejsonEND RECORD #end add-point{</section>}{<section id="cs_axmt500_send.global_variable" type="s" >}
#add-point:自定義模組變數(Module Variable) name="global.variable"
DEFINE l_cmd  LIKE type_t.chr1
DEFINE g_logfile STRING  #日志文件名称
DEFINE g_logdate STRING  #日志日期
DEFINE ch base.Channel    #写入日志
DEFINE g_logcont STRING  #日志文件内容
#end add-point{</section>}{<section id="cs_axmt500_send.other_dialog" type="s" >}{</section>}{<section id="cs_axmt500_send.other_function" readonly="Y" type="s" >}################################################################################
# Descriptions...: 描述说明
# Memo...........:
# Usage..........: CALL s_aooi150_ins (传入参数)
#                  RETURNING 回传参数
# Input parameter: 传入参数变量1   传入参数变量说明1
#                : 传入参数变量2   传入参数变量说明2
# Return code....: 回传参数变量1   回传参数变量说明1
#                : 回传参数变量2   回传参数变量说明2
# Date & Author..: 日期 By 作者
# Modify.........:
################################################################################
PUBLIC FUNCTION cs_axmt500_send(p_docno)
DEFINE p_docno      LIKE type_t.chr1000  #单据编号
DEFINE l_stus       LIKE type_t.chr10    #单据状态
DEFINE l_xmda006    LIKE xmda_t.xmda006
DEFINE l_xmdaud009  LIKE xmda_t.xmdaud009
DEFINE l_xmdaud010  LIKE xmda_t.xmdaud010
DEFINE l_xmda       RECORD LIKE xmda_t.*
DEFINE l_xmdc       RECORD LIKE xmdc_t.*
DEFINE g_sql        STRING
DEFINE l_json_obj   util.JSONObject
DEFINE l_success    LIKE type_t.num5
DEFINE l_i         LIKE type_t.num5
DEFINE l_id       LIKE type_t.chr1000
DEFINE l_time     LIKE type_t.chr10
DEFINE p_type     LIKE type_t.chr1WHENEVER ERROR CONTINUELET r_success = TRUELET g_type = p_typeIF cl_get_para(g_enterprise,g_site,'S-SYSC0008') <> 'Y' THEN RETURN r_successEND IF  LET l_orderId = NULLLET l_orderproduct = NULLIF cl_null(p_docno) THEN#傳入單據編號為空;請指定單據編號!INITIALIZE g_errparam TO NULLLET g_errparam.code = 'sub-00228'LET g_errparam.extend = p_docnoLET g_errparam.popup = TRUECALL cl_err()LET r_success = FALSERETURN r_successEND IFLET l_xmda006=NUll SELECT xmda006 INTO l_xmda006FROM xmda_t WHERE xmdaent=g_enterprise AND xmdadocno=p_docno  IF l_xmda006 NOT MATCHES '[12]' THEN RETURN r_successEND IF LET l_stus = '' SELECT xmdastus INTO l_stusFROM xmda_t WHERE xmdaent=g_enterprise AND xmdadocno=p_docno  IF l_stus = 'X' THEN#此筆資料已經作廢;請確認狀態碼!INITIALIZE g_errparam TO NULLLET g_errparam.code = 'sub-00229'LET g_errparam.extend = p_docnoLET g_errparam.popup = TRUECALL cl_err()LET r_success = FALSERETURN r_successEND IFIF l_stus <> 'Y' THENINITIALIZE g_errparam TO NULLLET g_errparam.code = 'axm-00027'LET g_errparam.extend = p_docnoLET g_errparam.popup = TRUECALL cl_err()LET r_success = FALSERETURN r_successEND IFLET l_xmdaud009=NULLLET l_xmdaud010=NULLSELECT xmdaud009,xmdaud010 INTO l_xmdaud009,l_xmdaud010FROM xmda_t WHERE xmdaent=g_enterprise AND xmdadocno=p_docnoIF NOT cl_null(l_xmdaud009) THEN INITIALIZE g_errparam TO NULLLET g_errparam.code = 'cxm-00060'  --已经产生对应单据LET g_errparam.extend = p_docnoLET g_errparam.popup = TRUECALL cl_err()LET r_success = FALSERETURN r_successEND IF#檢查:應在事物中的IF NOT s_transaction_chk('Y','0') THENLET r_success = FALSERETURN r_successEND IF #获取token --一直用这个token LET l_token=NULL CALL cs_crm_get_token() RETURNING l_tokenIF cl_null(l_token) THENINITIALIZE g_errparam TO NULLLET g_errparam.code = 'cws-00200'LET g_errparam.extend = ''LET g_errparam.popup = TRUECALL cl_err()RETURN FALSEELSE LET l_token="Bearer ",l_token END IF LET l_id = ''SELECT wslauc002 INTO l_id FROM wslauc_t WHERE wslaucent = g_enterpriseAND wslauc001 = p_docnoAND wslauc002 <> 'Y'IF NOT cl_null(l_id) THEN LET l_req_url = "https://api-tencent.xiaoshouyi.com/rest/data/v2.0/xobjects/order/",l_id,""CALL cs_crm_delete(l_req_url,l_token) RETURNING l_successIF NOT l_success THEN   #INITIALIZE g_errparam TO NULLLET g_errparam.code = '!'LET g_errparam.extend = 'CRM已存在该订单记录,且无法删除,请联系IT检查!'LET g_errparam.popup = TRUECALL cl_err()RETURN FALSEEND IF UPDATE wslauc_t SET wslauc003 ='Y'WHERE wslaucent = g_enterpriseAND wslauc001 = p_docnoAND wslauc002 = l_idEND IF LET l_cmd='a'SELECT * INTO l_xmda.* FROM xmda_t WHERE xmdaent=g_enterprise AND xmdadocno=p_docnoCALL cs_axmt500_send_master(l_xmda.*) RETURNING r_success LET ch=base.Channel.create()CALL ch.setDelimiter("")CALL ch.openFile(g_logfile,"a")LET g_logcont='r_success1:',r_successCALL ch.writeLine(g_logcont) LET g_logcont='=======\n'CALL ch.writeLine(g_logcont) CALL ch.close()IF r_success THEN CALL util.JSON.parse(l_response,l_param_data_r)LET l_orderId=l_param_data_r.data.id --crm返回的idCALL cs_axmt500_send_master_up(l_xmda.*) RETURNING r_successLET ch=base.Channel.create()CALL ch.setDelimiter("")CALL ch.openFile(g_logfile,"a")LET g_logcont='r_success2:',r_successCALL ch.writeLine(g_logcont) LET g_logcont='=======\n'CALL ch.writeLine(g_logcont) CALL ch.close()IF r_success THEN LET g_sql = "SELECT * FROM xmdc_t WHERE xmdcent='",g_enterprise,"' AND xmdcdocno='",p_docno,"' "PREPARE cs_detail_p FROM g_sqlDECLARE cs_detail_c CURSOR FOR cs_detail_pFOREACH cs_detail_c INTO l_xmdc.*CALL cs_axmt500_send_detail(l_xmdc.*) RETURNING r_success LET ch=base.Channel.create()CALL ch.setDelimiter("")CALL ch.openFile(g_logfile,"a")LET g_logcont='r_success3:',r_successCALL ch.writeLine(g_logcont) LET g_logcont='=======\n'CALL ch.writeLine(g_logcont) CALL ch.close()IF NOT r_success THEN EXIT FOREACH END IFIF r_success THEN CALL util.JSON.parse(l_response,l_param_data_r)LET l_orderproduct=l_param_data_r.data.id --crm返回的idUPDATE xmdc_t SET xmdcud010=l_orderproductWHERE xmdcent=g_enterprise AND xmdcdocno=p_docno AND xmdcseq=l_xmdc.xmdcseq IF SQLCA.SQLCODE THENINITIALIZE g_errparam TO NULL LET g_errparam.extend = "g_xmda_m:",SQLERRMESSAGE LET g_errparam.code = SQLCA.SQLCODE LET g_errparam.popup = TRUE  CALL cl_err()LET r_success=FALSE                   END IFLET ch=base.Channel.create()CALL ch.setDelimiter("")CALL ch.openFile(g_logfile,"a")LET g_logcont='r_success4:',r_successCALL ch.writeLine(g_logcont) LET g_logcont='=======\n'CALL ch.writeLine(g_logcont) CALL ch.close()IF NOT r_success THEN EXIT FOREACH END IFEND IF END FOREACH END IF    END IF IF r_success THEN UPDATE xmda_t SET xmdaud009=l_orderIdWHERE xmdaent=g_enterprise AND xmdadocno=p_docno IF SQLCA.SQLCODE THENINITIALIZE g_errparam TO NULL LET g_errparam.extend = "g_xmda_m:",SQLERRMESSAGE LET g_errparam.code = SQLCA.SQLCODE LET g_errparam.popup = TRUE  CALL cl_err()LET r_success=FALSE  END IFEND IF LET ch=base.Channel.create()CALL ch.setDelimiter("")CALL ch.openFile(g_logfile,"a")LET g_logcont='r_success5:',r_successCALL ch.writeLine(g_logcont) LET g_logcont='=======\n'CALL ch.writeLine(g_logcont) CALL ch.close()####如果错误则删除CRM数据IF NOT cl_null(l_orderId) AND NOT r_success THEN  LET l_success = TRUEFOR  l_i = 1 TO 3   LET l_req_url = "https://api-tencent.xiaoshouyi.com/rest/data/v2.0/xobjects/order/",l_orderId,""CALL cs_crm_delete(l_req_url,l_token) RETURNING l_success IF l_success THEN EXIT FOREND IF sleep 5END FORLET ch=base.Channel.create()CALL ch.setDelimiter("")CALL ch.openFile(g_logfile,"a")LET g_logcont='l_success6:',l_successCALL ch.writeLine(g_logcont) LET g_logcont='=======\n'CALL ch.writeLine(g_logcont) CALL ch.close()IF NOT l_success THEN   #删除失败则记录单据,待下次处理LET l_time = TIMEINSERT INTO wslauc_t(wslaucent,wslauc001,wslauc002,wslauc003,wslauc004,wslauc005)VALUES (g_enterprise,p_docno,l_orderId,'N',g_today,l_time)    END IF END IF  RETURN r_successEND FUNCTION################################################################################
# Descriptions...: 描述说明
# Memo...........:
# Usage..........: CALL s_aooi150_ins (传入参数)
#                  RETURNING 回传参数
# Input parameter: 传入参数变量1   传入参数变量说明1
#                : 传入参数变量2   传入参数变量说明2
# Return code....: 回传参数变量1   回传参数变量说明1
#                : 回传参数变量2   回传参数变量说明2
# Date & Author..: 日期 By 作者
# Modify.........:
################################################################################
PUBLIC FUNCTION cs_axmt500_send_master(l_xmda)
DEFINE l_xmda       RECORD LIKE xmda_t.*
DEFINE l_json_obj   util.JSONObject
DEFINE l_ownerId      LIKE type_t.chr1000
DEFINE l_dimDepart    LIKE type_t.chr1000
DEFINE g_slip         LIKE oobal_t.oobal002
DEFINE l_success      LIKE type_t.num5INITIALIZE l_param_order.data.* TO NULL CASE l_xmda.xmda048WHEN '1'LET l_param_order.data.entityType = '1544126532993732'WHEN '2'LET l_param_order.data.entityType = '1905875652788871'END CASE LET l_param_order.data.po                = l_xmda.xmdadocno  --单号  LET l_param_order.data.accountId         = cs_axmt500_send_value('pmaa_t',l_xmda.xmda004)LET l_param_order.data.customItem183__c  = cs_axmt500_send_xmcmuc004('order','customItem183__c',l_xmda.xmdasite)CALL cs_crm_get_ownerid(l_token,l_xmda.xmda004) RETURNING l_ownerId,l_dimDepartLET l_param_order.data.ownerId           = l_ownerIdLET l_param_order.data.dimDepart         = l_dimDepartLET l_param_order.data.customItem188__c  = cs_axmt500_send_xmcmuc004('order','customItem188__c',l_xmda.xmda005)LET l_param_order.data.customItem189__c  = cs_axmt500_send_xmcmuc004('order','customItem189__c',l_xmda.xmda006)LET l_param_order.data.customItem194__c  = l_xmda.xmda021LET l_param_order.data.customItem195__c  = l_xmda.xmda022LET l_param_order.data.contactAddress    = l_xmda.xmdaua001LET l_param_order.data.comment           = l_xmda.xmda071LET l_param_order.data.customItem198__c  = cs_axmt500_send_value('xmdx_t',l_xmda.xmdaud005)LET l_param_order.data.customItem184__c  = cs_axmt500_send_xmcmuc004('order','customItem184__c',l_xmda.xmdastus)LET l_param_order.data.customItem182__c  = cs_axmt500_send_xmcmuc004('order','customItem182__c',l_xmda.xmda019)LET l_param_order.data.customItem192__c  = cs_axmt500_send_xmcmuc004('order','customItem192__c',l_xmda.xmda009)LET l_param_order.data.customItem193__c  = cs_axmt500_send_xmcmuc004('order','customItem193__c',l_xmda.xmda010)LET l_param_order.data.customItem191__c  = cs_axmt500_send_xmcmuc004('order','customItem191__c',l_xmda.xmda011)LET l_param_order.data.customItem196__c  = cs_axmt500_send_xmcmuc004('order','customItem196__c',l_xmda.xmda035)CALL s_aooi200_get_slip(l_xmda.xmdadocno) RETURNING l_success,g_slipLET l_param_order.data.customItem197__c  = cs_axmt500_send_xmcmuc004('order','customItem197__c',g_slip)LET l_param_order.data.customItem190__c  = l_xmda.xmda050LET l_param_order.data.customItem207__c  = '1'LET l_param_order.data.customItem209__c  = l_xmda.xmdadocnoLET l_param_order.data.customItem201__c  = l_xmda.xmda002LET l_param_order.data.customItem202__c  = l_xmda.xmda003LET l_json_obj = util.JSONObject.fromFGL(l_param_order)  LET l_request =  l_json_obj.toString()#LET l_request = cl_replace_str(l_request,"null","' '") #把null替换成空格LET l_request = cl_replace_str(l_request,"'",'"')       #把'替换"LET l_req_url = "https://api-tencent.xiaoshouyi.com/rest/data/v2.0/xobjects/order"CALL cs_axmt500_send_http_req(l_req_url,l_request) RETURNING r_success  RETURN r_successEND FUNCTION################################################################################
# Descriptions...: 描述说明
# Memo...........:
# Usage..........: CALL s_aooi150_ins (传入参数)
#                  RETURNING 回传参数
# Input parameter: 传入参数变量1   传入参数变量说明1
#                : 传入参数变量2   传入参数变量说明2
# Return code....: 回传参数变量1   回传参数变量说明1
#                : 回传参数变量2   回传参数变量说明2
# Date & Author..: 日期 By 作者
# Modify.........:
################################################################################
PUBLIC FUNCTION cs_axmt500_send_master_up(l_xmda)
DEFINE l_xmda       RECORD LIKE xmda_t.*
DEFINE l_json_obj   util.JSONObject INITIALIZE l_param_order_up.* TO NULL LET l_param_order_up.objectapi     = 'order'LET l_param_order_up.id            = l_orderIdLET l_param_order_up.updatejson.id = l_orderIdLET l_param_order_up.updatejson.po = l_xmda.xmdadocnoLET l_json_obj = util.JSONObject.fromFGL(l_param_order_up)  LET l_request =  l_json_obj.toString() LET l_request = cl_replace_str(l_request,"'",'"')       #把'替换"LET l_req_url = "https://api-tencent.xiaoshouyi.com/rest/data/v2.0/scripts/api/updateapi"CALL cs_axmt500_send_http_req(l_req_url,l_request) RETURNING r_success  RETURN r_successEND FUNCTION################################################################################
# Descriptions...: 描述说明
# Memo...........:
# Usage..........: CALL s_aooi150_ins (传入参数)
#                  RETURNING 回传参数
# Input parameter: 传入参数变量1   传入参数变量说明1
#                : 传入参数变量2   传入参数变量说明2
# Return code....: 回传参数变量1   回传参数变量说明1
#                : 回传参数变量2   回传参数变量说明2
# Date & Author..: 日期 By 作者
# Modify.........:
################################################################################
PUBLIC FUNCTION cs_axmt500_send_detail(l_xmdc)
DEFINE l_xmdc       RECORD LIKE xmdc_t.*
DEFINE l_json_obj   util.JSONObject INITIALIZE l_param_orderproduct.data.* TO NULL LET l_param_orderproduct.data.entityType       ='1544126618862228'LET l_param_orderproduct.data.name             =l_xmdc.xmdcseqLET l_param_orderproduct.data.productId        =cs_axmt500_send_value('imaa_t',l_xmdc.xmdc001)LET l_param_orderproduct.data.quantity         =l_xmdc.xmdc007 LET l_timestamp=NULLSELECT (l_xmdc.xmdc012 - TO_DATE('1970-1-1 8', 'YYYY-MM-DD HH24')) * 86400000 INTO l_timestamp FROM dualLET l_param_orderproduct.data.customItem180__c =l_timestampLET l_param_orderproduct.data.listTotal        =l_xmdc.xmdcud015 * l_xmdc.xmdc007 LET l_param_orderproduct.data.customItem188__c =l_xmdc.xmdcud012LET l_param_orderproduct.data.unitPrice        =l_xmdc.xmdc015LET l_param_orderproduct.data.standardPrice    =l_xmdc.xmdcud015LET l_param_orderproduct.data.customItem183__c =cs_axmt500_send_xmcmuc004('orderProduct','customItem183__c',l_xmdc.xmdc045)LET l_param_orderproduct.data.comment          =l_xmdc.xmdc050LET l_param_orderproduct.data.customItem187__c =l_xmdc.xmdcud003LET l_param_orderproduct.data.customItem186__c =cs_axmt500_send_xmcmuc004('orderProduct','customItem186__c',l_xmdc.xmdcud004)LET l_param_orderproduct.data.customItem184__c =l_xmdc.xmdcud006LET l_param_orderproduct.data.customItem181__c =cs_axmt500_send_xmcmuc004('orderProduct','customItem181__c',l_xmdc.xmdcud007)LET l_param_orderproduct.data.customItem185__c =l_xmdc.xmdcud014LET l_param_orderproduct.data.discount         =l_xmdc.xmdcud016LET l_timestamp=NULLSELECT (l_xmdc.xmdc012 - TO_DATE('1970-1-1 8', 'YYYY-MM-DD HH24')) * 86400000 INTO l_timestamp FROM dualLET l_param_orderproduct.data.customItem179__c =l_timestampLET l_param_orderproduct.data.customItem182__c =cs_axmt500_send_xmcmuc004('orderProduct','customItem182__c',l_xmdc.xmdc052)LET l_param_orderproduct.data.orderId          =l_orderIdLET l_json_obj = util.JSONObject.fromFGL(l_param_orderproduct)  LET l_request =  l_json_obj.toString()#LET l_request = cl_replace_str(l_request,"null","' '") #把null替换成空格--LET l_request = cl_replace_str(l_request,"'",'"')       #把'替换"LET l_req_url = "https://api-tencent.xiaoshouyi.com/rest/data/v2.0/xobjects/orderProduct"CALL cs_axmt500_send_http_req(l_req_url,l_request) RETURNING r_success RETURN r_successEND FUNCTION################################################################################
# Descriptions...: 描述说明
# Memo...........:
# Usage..........: CALL s_aooi150_ins (传入参数)
#                  RETURNING 回传参数
# Input parameter: 传入参数变量1   传入参数变量说明1
#                : 传入参数变量2   传入参数变量说明2
# Return code....: 回传参数变量1   回传参数变量说明1
#                : 回传参数变量2   回传参数变量说明2
# Date & Author..: 日期 By 作者
# Modify.........:
################################################################################
PUBLIC FUNCTION cs_axmt500_send_http_req(p_req_url,p_pos_param)
DEFINE req          com.HTTPRequest
DEFINE resp         com.HTTPResponse
DEFINE p_req_url    STRING
DEFINE p_pos_param  STRING
DEFINE l_str        STRING
DEFINE l_date       DATETIME YEAR TO SECONDLET g_logdate=YEAR(CURRENT) USING "####",MONTH(CURRENT) USING "&&",DAY(CURRENT) USING "&&"#,TIME(CURRENT)LET g_logfile=FGL_GETENV("LOGDIR")LET g_logfile=g_logfile,'/cs_crm_',g_logdate,".log"DISPLAY g_logfileLET ch=base.Channel.create()CALL ch.setDelimiter("")CALL ch.openFile(g_logfile,"a")LET g_logcont='=============================================================='CALL ch.writeLine(g_logcont)CALL ch.writeLine('request:')  LET l_date=cl_get_current()LET g_logcont=' time:',l_date,' \r\n g_prog:',g_prog,' \r\n req_url:',p_req_url,' \r\n pos_param:',p_pos_param,'\r\n'CALL ch.writeLine(g_logcont)DISPLAY 'URL:',p_req_urlLET req = com.HTTPRequest.Create(p_req_url)CALL req.clearHeaders()CALL req.setCharset("UTF-8")CALL req.setHeader("ContentLength", p_pos_param.getLength())CALL req.setHeader("Content-Type","application/json")CALL req.setHeader("Authorization",l_token)CALL req.setMethod("POST")CALL req.doTextRequest(p_pos_param)CALL req.setConnectionTimeOut(120) DISPLAY reqLET resp = req.getResponse()#获取发送请求后服务器返回的状态码,200为正常访问IF resp.getStatusCode() != 200 THEN LET l_response="HTTP ERROR (" || resp.getStatusCode() || ") ", resp.getStatusDescription()LET r_success = FALSEELSE#获取请求返回的json字符串LET l_response = resp.getTextResponse()CALL util.JSON.parse(l_response,l_param_r) IF cl_null(l_param_r.code) OR l_param_r.code<>'200' THEN INITIALIZE g_errparam TO NULL LET g_errparam.code   = 'aws-00130'LET g_errparam.extend = l_param_r.msg,':',l_param_orderproduct.data.nameLET g_errparam.popup  = TRUE LET r_success = FALSECALL cl_err()END IF END IFDISPLAY l_responseCALL ch.writeLine('Reponse:')LET g_logcont=l_responseCALL ch.writeLine(g_logcont) LET g_logcont='==============================================================\r\n\r\n\r\n'CALL ch.writeLine(g_logcont)CALL ch.close()RETURN r_successEND FUNCTION################################################################################
# Descriptions...: 描述说明
# Memo...........:
# Usage..........: CALL s_aooi150_ins (传入参数)
#                  RETURNING 回传参数
# Input parameter: 传入参数变量1   传入参数变量说明1
#                : 传入参数变量2   传入参数变量说明2
# Return code....: 回传参数变量1   回传参数变量说明1
#                : 回传参数变量2   回传参数变量说明2
# Date & Author..: 日期 By 作者
# Modify.........:
################################################################################
PUBLIC FUNCTION cs_axmt500_send_xmcmuc004(l_xmcmuc001,l_xmcmuc002,l_xmcmuc003)
DEFINE l_xmcmuc001  LIKE xmcmuc_t.xmcmuc001
DEFINE l_xmcmuc002  LIKE xmcmuc_t.xmcmuc002
DEFINE l_xmcmuc003  LIKE xmcmuc_t.xmcmuc003
DEFINE l_xmcmuc004  LIKE xmcmuc_t.xmcmuc004LET l_xmcmuc004=NULL SELECT xmcmuc004 INTO l_xmcmuc004FROM xmcmuc_t WHERE xmcmucent=g_enterprise AND xmcmuc001=l_xmcmuc001AND xmcmuc002=l_xmcmuc002AND xmcmuc003=l_xmcmuc003RETURN l_xmcmuc004END FUNCTION################################################################################
# Descriptions...: 描述说明
# Memo...........:
# Usage..........: CALL s_aooi150_ins (传入参数)
#                  RETURNING 回传参数
# Input parameter: 传入参数变量1   传入参数变量说明1
#                : 传入参数变量2   传入参数变量说明2
# Return code....: 回传参数变量1   回传参数变量说明1
#                : 回传参数变量2   回传参数变量说明2
# Date & Author..: 日期 By 作者
# Modify.........:
################################################################################
PUBLIC FUNCTION cs_axmt500_send_value(l_table,l_erpkey)
DEFINE l_table   LIKE type_t.chr100
DEFINE l_erpkey  LIKE type_t.chr100
DEFINE l_value   LIKE type_t.chr100LET l_value=nullCASE l_tableWHEN 'pmaa_t'SELECT pmaaud003 INTO l_value FROM pmaa_t WHERE pmaaent=g_enterprise AND pmaa001=l_erpkeyWHEN 'xmdx_t'SELECT xmdxud009 INTO l_value FROM xmdx_t WHERE xmdxent=g_enterprise AND xmdxsite=g_site AND xmdxud008=l_erpkeyWHEN 'imaa_t'SELECT imaaud008 INTO l_value FROM imaa_t WHERE imaaent=g_enterprise AND imaa001=l_erpkeyEND CASE RETURN l_valueEND FUNCTION{</section>}

本文只是以销售易CRM作为实例,另外泛微,致远,蓝凌,纷享销客,携客云,数夫之类的软件客户端开发方式都不一样,总的来说,客户端开发,需要配合服务端,服务端接口有什么要求,就要按服务端的方式去进行,希望大家早日掌握接口开发精髓

T100客户端接口开发实例(T100对接销售易CRM)相关推荐

  1. PHP支付宝微信个人免签即时到帐接口开发实例

    PHP支付宝微信个人免签即时到帐接口开发实例,使用原生支付宝即时到帐接口修改而来,即可实现多接口收款功能,开发只需要按照支付宝即时到帐接口开发即可,减少开发难度 需要修改的文件:notify_url. ...

  2. 销售易CRM:提高管理效率需做好业绩预测

    销售易CRM结合销售漏斗管理体系,可以帮助企业更加精准的预测销销售业绩.那么对于不同规模的公司,销售预测的价值不同. 对于上市公司,销售预测的精准度除了对业务管理非常重要,对于股票市场也非常重要.在美 ...

  3. 销售易CRM怎么样?

    销售易CRM是销售易公司旗下的CRM产品,正在选型中的您,一定非常关心销售易CRM用户口碑怎么样?优缺点有哪些? 想了解这些信息,您应该到选型宝,B2B的大众点评,看看用户对销售易CRM的实名点评. ...

  4. 销售易CRM系统排名?销售易CRM系统怎么选?什么是用户口碑最好的销售易CRM系统?

    提到CRM选型,难免不会提到销售易,销售易CRM怎么样?销售易CRM有哪些优缺点?销售易CRM用户口碑怎么样? 想了解这些信息,您应该到选型宝,B2B的大众点评,看看用户对销售易CRM产品的实名点评. ...

  5. 销售易crm虚拟位置_释放CRM和虚拟电话集成的潜力

    销售易crm虚拟位置 Virtual phone systems and CRM need little introduction to anyone active in the business w ...

  6. 基于HttpClient接口开发实例(一)

    前言 本系列将是本人的一些开发经验总结.由于身处金融IT因而因业务需求需要和银行接口打交道,恰巧最近公司有个项目和这有很大的关系,下面我们将着重从基于HttpClient接口开发的技术点+基本业务点说 ...

  7. java支付接口开发原理_java对接微信支付接口开发的过程是什么?

    java对接微信支付接口开发的过程是什么?以下是小编整理的java对接微信支付接口实现的方法和过程,有需要的朋友可以学习以下的java对接微信支付接口内容. java对接微信支付接口开发的过程是什么? ...

  8. java restful接口开发实例_实战:基于Spring Boot快速开发RESTful风格API接口

    写在前面的话 这篇文章计划是在过年期间完成的,示例代码都写好了,结果亲戚来我家做客,文章没来得及写.已经很久没有更新文章了,小伙伴们,有没有想我啊.言归正传,下面开始,今天的话题. 目标 写一套符合规 ...

  9. restful接口开发实例_Restful接口开发与测试—接口测试

    开发完接口,接下来我们需要对我们开发的接口进行测试.接口测试的方法比较多,使用接口工具或者Python来测试都可以,工具方面比如之前我们学习过的Postman或者Jmeter ,Python脚本测试可 ...

最新文章

  1. 首记,一种新的企业信息化平台开发方案——AgileEAS.NET框架
  2. 同一服务器 数据库间 不同表 的查询
  3. 傅里叶变换表_Numpy库小抄表!主要语法和代码都在这里啦
  4. 开源三维地球_用开源拯救地球
  5. 初识GaussDB(for Cassandra)
  6. 数据结构期末复习(四)
  7. Ubuntu下部署SVN+SVNManager
  8. C语言练习——数据加密
  9. 通过银行卡号获取银行名称和银行图标的ICON
  10. 基于SSM的社区宠物信息管理系统
  11. 2019互联网寒冬期IT大牛不容错过的泰牛程序员PHP系列高级教程
  12. ZOJ3332 Strange Country II java
  13. UBUNTU-19.04的拼音输入法
  14. 使用函数实现数组元素的赋值
  15. 揭秘HTTP/3优先级
  16. c语言backtrack算法6,一个关于数组回溯算法(backtrack)的通用模式
  17. Git如何处理blob上的SHA-1冲突?
  18. C# TextBox输入密码显示星号(*)
  19. 深度学习——fastai第四课 04_minist_basics
  20. skype 加密通话_如何更改您的Skype视频通话背景

热门文章

  1. 幸运拼团app系统软件开发介绍案例
  2. 中国智慧教育行业发展潜力与投资价值分析报告2022版
  3. OTA系列小问答:为什么汽车OTA会比IT OTA发展要晚呢?汽车OTA与传统OTA有什么区别?FOTA与OTA区别在哪?
  4. 5 JInja2模版(适用于Django和Flask)
  5. 基于区块链的医疗数据共享系统
  6. Java模拟登陆,将文件中的单词自动添加到扇贝生词本
  7. 基于javaweb的在线客服系统
  8. QT不规则形状的按钮的实现
  9. SELinux如何永久禁用
  10. ERROR 1045 (28000): ProxySQL Error: Access denied for user 'admin'@'' (using password: NO)