zoukankan      html  css  js  c++  java
  • 使用nodejs消费SAP Cloud for Customer上的Web service

    Jerry在公众号文章C4C和微信集成系列教程里曾经使用nodejs去消费C4C提供的标准webservice。

    看一个具体例子:C4C里Individual Customers可以维护Social User Profile,在Jerry上面的公众号文章里,正是把微信用户的open ID维护到Social User Profile的SocialMediaAccountUserID字段去,如下图所示。

    那么已知一个Social Profile ID,如何用nodejs通过Web Service的方式获得该Profile明细?

    首先到Administrator->Input and Output Management->Service Explorer中取得标准的查询Social User profile的web service:

    https:///sap/bc/srt/scs/sap/requestforsocialmediauserprofi

    然后使用nodejs module request给这个url发一个HTTP post请求。

    您可以参考我github上的源代码。

    
    var request = require('request');
    var config = require("../../config.js");
    
    function getSocialMediaProfile(profileID) {
    
      console.log("Jerry trace begin ***********************************");
      console.log("url: " + config.socialMediaProfileGetEndPoint);
      console.log("config.credential_qxl: " + config.credential_qxl);
    
      var ogetSocialMediaProfileOptions = {
            url: config.socialMediaProfileGetEndPoint,
            method: "POST",
            headers: {
                "content-type": "text/xml",
                'Authorization': 'Basic ' + new Buffer(config.credential_qxl).toString('base64')
            },
            body: '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:glob="http://sap.com/xi/SAPGlobal20/Global"><soapenv:Header/><soapenv:Body><glob:SocialMediaUserProfileRequest_sync>'
                          +'<SocialMediaUserProfileSelectionByElements>'
                          +'<SelectionBySocialMediaUserProfileID>'
                          +'<InclusionExclusionCode>I</InclusionExclusionCode>'
                          +'<IntervalBoundaryTypeCode>1</IntervalBoundaryTypeCode>'
                          +'<LowerBoundarySocialMediaUserProfileID >' + profileID + '</LowerBoundarySocialMediaUserProfileID>'
                          +'</SelectionBySocialMediaUserProfileID>'
                          +'</SocialMediaUserProfileSelectionByElements>'
                          +'</glob:SocialMediaUserProfileRequest_sync></soapenv:Body></soapenv:Envelope>'
                  };
    
      console.log("body: " + ogetSocialMediaProfileOptions.body);
      console.log("Jerry trace end ***********************************");
    
      return new Promise(function(resolve,reject){
          request(ogetSocialMediaProfileOptions,function(error,response,body){
    
            console.log("Jerry web service response: " + body);
            var soapreg = /.*<SocialMediaUserAccountID>(.*)</SocialMediaUserAccountID>.*/;
    	      var soapresult = soapreg.exec(body);
    	      if( soapresult.length === 2){
    	   		  resolve(soapresult[1]);
    	      }
          });
        }); 
    }
    
    module.exports = getSocialMediaProfile;
    
    

    将上述代码另存为文件getSocialMediaProfileTest.js, 直接使用node getSocialMediaProfileTest.js执行。

    从console能观察到发送的HTTP post请求的body和返回的响应内容:

    要获取更多Jerry的原创技术文章,请关注公众号"汪子熙"或者扫描下面二维码:

  • 相关阅读:
    工作的本质是思考
    V8、JSCore、Hermes、QuickJS,hybrid开发JS引擎怎么选
    Aspects框架的源码解读及问题解析
    饿了么移动APP的架构演进
    关键字:客户端架构演进
    以小见大,见微知著——亿万级APP架构演进之路
    理解 Swift:ObjectiveC 的构建管道
    MMKV 组件现在开源了
    进阶:iOS 性能优化系列
    你如果无法度量它,就无法管理它
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/9168580.html
Copyright © 2011-2022 走看看