例子:数据库传快递信息到外部系统post

procedure cux_sf_prod_procedure(l_om_express_rec cux_om_express_t%rowtype,l_out_sf_number out varchar2,l_out_flag out varchar2) is
    l_soap_request varchar2(32767);
    l_soap_request_header varchar2(32767);
    l_soap_request_header1 varchar2(32767);
    l_leng             NUMBER;
    l_http_req         utl_http.req;
    l_http_resp        utl_http.resp;
    v_timestamp number;
    v_msgDigest varchar2(100);
  --  l_soap_respond_val CLOB;--VARCHAR2(32767);
  --  l_soap_end_val     CLOB;--VARCHAR2(32767);
    l_soap_respond_val VARCHAR2(32767);
    l_soap_end_val     VARCHAR2(32767);
   -- l_resp             CLOB;
   -- l_req_blob      blob;
  --  l_clob CLOB;
    v_isSignBack number;
    v_isReturnSignBackRoutelabel number;
    v_attrval varchar2(5);
    l_raw_content raw(1024);
    v_requestID varchar2(100);
    v_sj_tel varchar2(30);
    l_test_code varchar2(100) := '111111';  --校验码
  begin
     utl_http.set_wallet('file:/home/oracle/test13', 'password');---网页证书  test14 测试
    
  l_soap_request_header := 'partnerID=1234&&requestID=v_requestID&&msgDigest=v_msgDigest&&serviceCode=EXP_RECE_CREATE_ORDER&&timestamp=v_timestamp&&msgData=';
    
    
    
    l_soap_request := '{"orderId":"v_order_id",  
         "cargoDetails":{"name":"v_product_name","count":"v_count"},
         "contactInfoList":[{"contactType":1,
                           "company":"v_jj_company",
                           "contact":"v_jj_contact",
                           "tel":"v_jj_tel",
                           "province":"v_jj_province",
                           "city":"v_jj_city",
                           "county":"v_jj_county",
                           "address":"v_jj_address"},
                          {"contactType":2,
                          "company":"v_sj_company",
                          "contact":"v_sj_contact",
                          "tel":"v_sj_tel",
                          "province":"v_sj_province",
                          "city":"v_sj_city",
                          "county":"v_sj_county",
                          "address":"v_sj_address"}],
         "payMethod":1,                 
         "monthlyCard":"7553226638",
         "expressTypeId":v_expressTypeId,
         "parcelQty":v_parcelQty,
         "isSignBack":v_isSignBack,
         "isReturnSignBackRoutelabel":v_isReturnSignBackRoutelabel,
         "extraInfoList":[{"attrName": "attr014", "attrVal": "singBackInfo"},{"attrName": "attr015", "attrVal": "v_attrval"}],
         "remark":"v_remark"                
        }';
        

    dbms_output.put_line(l_leng);
    l_http_req := utl_http.begin_request('https://eps-kxxxxx.com',
                                         'POST',
                                         utl_http.http_version_1_1);--正式

    dbms_output.put_line(1);                                      
    utl_http.set_header(l_http_req, 'Content-Type','application/x-www-form-urlencoded;charset=UTF-8'/* 'application/json'*/); 
    utl_http.set_header(l_http_req,
                        'Accept',
                       -- 'application/x-www-form-urlencoded;charset=UTF-8'
                        'application/json; charset=utf-8');     

    select replace(get_uuid(),'-') into v_requestID from dual;

    SELECT (SYSDATE - TO_DATE('1970-1-1 8', 'YYYY-MM-DD HH24')) * 86400000 + TO_NUMBER(TO_CHAR(SYSTIMESTAMP(3), 'FF')) into v_timestamp FROM DUAL;
 
    v_msgDigest := md5_base64(l_soap_request || v_timestamp || l_test_code);
  
    l_soap_request_header := replace(l_soap_request_header,'v_requestID',v_requestID);                  
    l_soap_request_header := replace(l_soap_request_header,'v_timestamp',v_timestamp);
    l_soap_request := replace(l_soap_request,'v_order_id',l_om_express_rec.pl_delivery_name);
    l_soap_request := replace(l_soap_request,'v_product_name',l_om_express_rec.product_name);
    l_soap_request := replace(l_soap_request,'v_count',l_om_express_rec.attribute2);
    l_soap_request := replace(l_soap_request,'v_jj_company',l_om_express_rec.jj_company);
    l_soap_request := replace(l_soap_request,'v_jj_contact',l_om_express_rec.jj_name);
    l_soap_request := replace(l_soap_request,'v_jj_tel',l_om_express_rec.jj_tel);
    l_soap_request := replace(l_soap_request,'v_jj_province',l_om_express_rec.jj_province);
    l_soap_request := replace(l_soap_request,'v_jj_city',l_om_express_rec.jj_city);
    l_soap_request := replace(l_soap_request,'v_jj_county',l_om_express_rec.jj_county);
    l_soap_request := replace(l_soap_request,'v_jj_address',l_om_express_rec.jj_address);
    
    l_soap_request := replace(l_soap_request,'v_sj_company',l_om_express_rec.sj_company);
    l_soap_request := replace(l_soap_request,'v_sj_contact',l_om_express_rec.sj_name);
    select replace(l_om_express_rec.sj_tel,' ') into v_sj_tel from dual;
    l_soap_request := replace(l_soap_request,'v_sj_tel',v_sj_tel);
    l_soap_request := replace(l_soap_request,'v_sj_province',l_om_express_rec.sj_province);
    l_soap_request := replace(l_soap_request,'v_sj_city',l_om_express_rec.sj_city);
    l_soap_request := replace(l_soap_request,'v_sj_county',l_om_express_rec.sj_county);
    l_soap_request := replace(l_soap_request,'v_sj_address',l_om_express_rec.sj_address);
    
    l_soap_request := replace(l_soap_request,'v_expressTypeId',l_om_express_rec.expresstypeid);
    l_soap_request := replace(l_soap_request,'v_parcelQty',l_om_express_rec.parcelqty);
    
    if NVL(l_om_express_rec.issignback_1,'N') = 'Y' then
      v_isSignBack := 1;
      v_isReturnSignBackRoutelabel := 1;
    else
      v_isSignBack := 0;
      v_isReturnSignBackRoutelabel := 0;
    end if;
    l_soap_request := replace(l_soap_request,'v_isSignBack',v_isSignBack);
    l_soap_request := replace(l_soap_request,'v_isReturnSignBackRoutelabel',v_isReturnSignBackRoutelabel);
    
    if (NVL(l_om_express_rec.issignback_1,'N') = 'Y') AND (NVL(l_om_express_rec.issignback_2,'N') = 'Y') THEN
      v_attrval := '1,2';
    ELSIF (NVL(l_om_express_rec.issignback_1,'N') = 'Y') AND (NVL(l_om_express_rec.issignback_2,'N') = 'N') THEN
      v_attrval := '1';
    ELSIF  (NVL(l_om_express_rec.issignback_1,'N') = 'N') AND (NVL(l_om_express_rec.issignback_2,'N') = 'Y') THEN
      v_attrval := '2';
    ELSE
       v_attrval := NULL;
    END IF;
    l_soap_request := replace(l_soap_request,'v_attrval',v_attrval);
    l_soap_request := replace(l_soap_request,'v_remark',l_om_express_rec.remark);
    
    l_soap_request_header := replace(l_soap_request_header,'v_msgDigest',v_msgDigest);

    utl_http.set_body_charset(l_http_req, 'UTF-8');
    l_leng := lengthb(l_soap_request_header || l_soap_request);
    utl_http.set_header(l_http_req, 'Content-Length', l_leng);
    dbms_output.put_line(2);
    
    utl_http.write_raw(r => l_http_req, data => UTL_RAW.CAST_TO_RAW(l_soap_request_header || l_soap_request ));
    --utl_http.write_text(l_http_req, l_soap_request_header || l_soap_request);
    dbms_output.put_line(l_soap_request_header  || l_soap_request );   
    l_http_resp := utl_http.get_response(l_http_req);  
    dbms_output.put_line('l_http_resp.status_code:' ||l_http_resp.status_code || chr(10) ||
                         'l_http_resp.reason_phrase:' ||l_http_resp.reason_phrase || chr(10) ||
                         'l_http_resp.http_version:' ||l_http_resp.http_version || chr(10) ||
                         'l_http_resp.private_hndl:' ||l_http_resp.private_hndl || chr(10) 
                 );
    
   IF l_http_resp.status_code = '200' THEN
      utl_http.read_line(l_http_resp, l_soap_respond_val, TRUE);
      if (q_json(REPLACE(SUBSTR(l_soap_respond_val,1,300),'\'),'apiResultCode',1) = 'A1000') and (q_json(REPLACE(SUBSTR(l_soap_respond_val,1,300),'\'),'apiErrorMsg',1) is null) then
         l_out_flag := 'Y';
         l_out_sf_number := q_json(REPLACE(SUBSTR(l_soap_respond_val,1,300),'\'),'waybillNo',2);
      ELSE
         l_out_flag := 'E';
         l_out_sf_number := q_json(REPLACE(SUBSTR(l_soap_respond_val,1,300),'\'),'apiErrorMsg',1);
      end if;
      dbms_output.put_line(l_soap_respond_val);
   ELSE
      l_out_flag := 'E';
      l_out_sf_number := '网络不通';
   END IF;
    utl_http.end_response(l_http_resp);
    utl_http.end_request(l_http_req);
    -----LOG 记录下保文
    INSERT INTO CUX_OM_EXPRESS_T_LOG
    VALUES(l_om_express_rec.pl_delivery_name,SUBSTR(l_soap_request_header || l_soap_request ,1,4000),SUBSTR(l_soap_respond_val,1,4000));
    COMMIT;
 
  exception
    when others then
      utl_http.end_response(l_http_resp);                                       
      utl_http.end_request(l_http_req);                              
  end cux_sf_prod_procedure;

postman body 上图这种方式

utl_http.write_raw(r => l_http_req, data => UTL_RAW.CAST_TO_RAW(l_soap_request_header || l_soap_request ));

这种方式写入报文  栏位之间用&& 分隔

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值