资讯动态

武汉微信开发之C4C数据更改通知发送到微信应用程序

标签:   | 作者:admin | VISITORS: | 来源:未知
18
Jan
2018
今天,武汉微信开发公司的小编又要给大家讲课啦!搬好小凳子,带好笔记本开始听课吧。作为专业的武汉微信开发者,小编今天要给大家讲的是在微信开发中,我们应该如何将C4C数据更改通知发送到微信应用程。

本系列中使用的完整源代码可以从我的github存储库中找到。
在之前的博客中,当微信用户订阅微信账号时,会在C4C系统中自动创建新的个人客户。
 
 
 
所以在技术上,微信是数据流的源(发送者),我们的C4C系统是数据流目标(接收者),而nodejs服务器则是中间件。
在这个博客中,我们试试其他的方式:假设有人在C4C系统中自动创建账户,相应的微信用户会在他/她的微信应用中收到通知。 这样的通知是由C4C发送的,微信应用是接收者。
实现细节
1.由于在本系列的第三篇博客中,我使用Customer BO的标准字段“LastName”来存储已经执行订阅的用户的微信ID,
 
 

 
后来在C4C中,任何用户都可以改变这个字段。
 
 
因此,在这个博客中,我在Customer BO的公共节点中创建了一个新的扩展字段来存储微信ID。
 
import AP.Common.GDT; import AP.FO.BusinessPartner.Global; [Extension] businessobject AP.FO.BusinessPartner.Global:Customer { // root node of Customer is not extendable node Common { [Label("Wechat ID")] element WechatID:LANGUAGEINDEPENDENT_EXTENDED_Text; } }
 
并创建一个新的BeforeSave.absl将FamilyName的值复制到扩展字段WechatID中。
 
import ABSL; var common = this.Common.GetFirst(); if( common.WechatID.IsInitial()) { common.WechatID = common.Person.Name.FamilyName; }
 
2.创建一个新的OData服务来公开这个WechatID,标记字段ObjectID,ParentObjectID和WechatID。

 
通过url测试这个OData服务:
https:// <您的租户> / sap / c4c / odata / cust / v1 / zindividualcustomer / CustomerCommonCollection?$ filter = ParentObjectID%20eq%20%2700163E20C9511EE7B8975BD4AB3F60C0%27
确保它可以按预期的方式返回三个字段的正确值:
 
 
3.一旦在C4C中更改帐户,应该从C4C发送通知给我们的nodejs服务器。 这个自动通知机制可以通过C4C OData事件通知来实现。 看到我的另一个博客杠杆C4C奥达塔通知监控CRM系统C4C机会变化 的细节。
 
下面的设置意味着在C4C中发生Customer BO的更改时,更改通知将自动发送到端点:
https://wechatjerry.herokuapp.com/c4c
到目前为止,C4C方面的所有开发/配置都完成了。
 

 
 
4.在nodejs服务器实现中,在config对象中创建一个新的字段:
 
字段名称:indivudualCustomerNewurl
字段值:https:// <您的租户> / sap / c4c / odata / cust / v1 / zindividualcustomer / CustomerCommonCollection?$ filter =

由于我在C4C系统中配置的端点是:https://wechatjerry.herokuapp.com/c4c
当C4C中给定的账户发生变化时,一个带有以下类型负载的HTTP POST将被发送到这个端点:
{“businessObject”:“CUSTOMER”,“businessObjectId”:“00163E20C9511EE7B8975BD4AB3F60C0”,“event”:“”,“odataServiceEndpoint”:“https:// <your tenant> / sap / byd / odata / v1 / zindividualcustomer / CustomerCommonCollection '00163E20C9511EE7B8975BD4AB3F60C0')”}
所以在nodejs服务器上,我必须对这个Post请求做出反应。
主要逻辑在模块notifyWechatUser中实现,它使用已更改的Customer BO实例的GUID作为输入参数。
 
 
notifyWechatUser的实现里面包含两个步骤:
 
function notifyWechatUser(uuid,res){ console.log("begin to read uuid: " + uuid); _getAccount(uuid).then(function(wechatID){ res.status(200).end(); sendMessage(wechatID, "Dear user, A kind reminder: your C4C account is changed in the system."); }); }
 
1.调用_getAccount通过OData调用获取客户BO公共节点上存储的WechatID。
2.一旦WechatID可用,调用sendMessage发送一个硬编码的句子给相应的Wechat用户。
实现_getAccount
 
function _getAccount(uuid) { var AccountBOguid = uuid; var detailODataUrl = config.indivudualCustomerNewurl; var parentID = 'ParentObjectID eq \'' + AccountBOguid + '\''; detailODataUrl = detailODataUrl + encodeURI(parentID); var getOptions = { url: detailODataUrl, method: "GET", json:true, headers: { "content-type": "application/json", 'Authorization': 'Basic ' + new Buffer(config.credential).toString('base64') } }; return new Promise(function(resolve,reject){ var requestC = request.defaults({jar: true}); console.log("request with url: " + detailODataUrl); requestC(getOptions,function(error,response,body){ var wechatID = body.d.results[0].WechatID; console.log("wechat id: " + wechatID); resolve(wechatID); }); // end of requestC }); }​
 
sendMessage的实现
 
var config = require("../../config.js"); var request = require("request"); function printObject(oData){ for( var a in oData){ console.log("key: " + a); console.log("value: " + oData[a]); if( typeof oData[a] === "object"){ printObject(oData[a]); } } } function sendWCMeaasge(toUser,sMessage){ console.log("begin to send message to user: " + toUser + " with message: " + sMessage); var options = { url:"https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + config.accessToken, method: "POST", json:true, headers: { "content-type": "application/json"}, body:{ "touser":toUser, "msgtype":"text", "text": { "content":sMessage } } }; request(options,function(error,response,data){ console.log("error? " + error); console.log("response: " + response); console.log("data: " + data); console.log("response..............................................."); //printObject(response); console.log("data....................................................."); console.log("Status message: " + response.statusMessage); console.log("Data: " + data.errmsg); }); } module.exports = sendWCMeaasge;
 
最终成就
只要我通过扫描QRCode订阅测试微信账号,就会在C4C系统中创建一个新账号1000443。
 

 
 
在系统中更改此帐户时:
 
相应的微信用户在微信app中成功收到了C4C发来的通知:
 
 
本系列中使用的完整源代码可以从我的github存储库中找到。
资讯动态
首页 | 解决案例 | 资讯动态 | 客户服务 | 关于我们
分享按钮