之前的文章,已经分析过快递Api接口可能被使用的需求及场景;今天呢,简单给大家介绍一下微信公众号中怎么来使用快递Api接口,来完成我们的需求和业务场景。

开发语言Nodejs,其中用到了Neo4j图形数据库

准备工作

首先,需要到微信公众平台注册账号

选择账号类型界面如下:



选择订阅号或服务器都可以,本文是使用订阅号进行展开描述。开发微信小程序的选择小程序即可,不过暂时不对个人开发,只能呵呵了。

选择之后,根据注册流程,一步步填写验证即可。



注册完成后,到微信公众平台登陆即可。

登陆成功,如下界面:

本文使用的开发语言是Nodejs,所以需要你安装Nodejs,请到官方网站下载。

注:如需其他的开发语言,会考虑添加或修改开发语言。

开发工具:WebStorm

公众号配置

个人信息的设置,点击左侧菜单中的公众号设置方可设置,不过,对于公众号的信息会有所限制。

我们需要根据用户发送给公众号的内容,返回不同的信息;当然,微信公众号是提供自动回复功能,但由于自动回复返回内容规定,然而无法满足我们的需求;所以,我们需要自己服务器对接微信公众平台,然后我们根据用户发送的内容,响应不同的数据。

故而:

配置公众号开发,点击左侧菜单中的基本配置,如下:

修改配置:



配置完成后,点击启用;我们就可以搭建自己的后台来接收微信服务器给我们发送的消息数据。

点击启动之前,我们需先启动我们服务器与微信的绑定服务;因为启动时候,微信会给指定的服务器地址发送验证请求。

绑定服务代码

我这里监听的是8064端口,具体监听那个端口由你自己决定,8064端口是由Nginx转发到Nodejs服务上的,具体Nginx的配置,请百度。

  1. var http = require("http");
  2. var route = require("./lib/route");
  3. var routemap = require("./routemap");
  4. var i = 1;
  5. http.createServer(
  6. function (request, response) {
  7. route(routemap, request.url, request, response);
  8. i++;
  9. console.log("The Bind server has been accessed " + i);
  10. if (response.asynchronous == null) {
  11. response.end();
  12. }
  13. }).listen(8064);
  14. console.log("The Bind server is running.");

接着,路由映射:

  1. var requestHandlers = require("./requestHandlers");
  2. var routemap = {
  3. "get": {
  4. // "/": requestHandlers.test
  5. "/": requestHandlers.bind
  6. },
  7. "post": {
  8. "/": requestHandlers.message
  9. // "/": requestHandlers.weixinuser
  10. },
  11. "put": {
  12. },
  13. "del": {
  14. }
  15. };
  16. module.exports = routemap;

具体接口调用位置:

  1. var requestHandlers = {};
  2. var globaldata = root.globaldata;
  3. var bind = require('./handlers/bind');
  4. requestHandlers.bind = function (request, response, pathObject, data) {
  5. if (data == null) {
  6. response.write(JSON.stringify({"提示信息": "bind server 运行正常", b: 2}));
  7. }
  8. else {
  9. bind.message(data, response);
  10. }
  11. };

绑定接口实现部分:

  1. var bind = {};
  2. var push = require('../lib/push');
  3. bind.message = function (data, response) {
  4. response.asynchronous = 1;
  5. var echostr = data.echostr;
  6. var timestamp = data.timestamp;
  7. var nonce = data.nonce;
  8. var signature = data.signature;
  9. var token = "14890991002";
  10. if (checkSignature(token, timestamp, nonce, signature) == true) {
  11. response.write(echostr);//验证成功,返回echostr
  12. response.end();
  13. }else{//验证失败就随便响应即可
  14. response.write("忠实于dang");
  15. response.end();
  16. }
  17. }
  18. var sha1 = require('./../tools/sha1');
  19. function checkSignature(token, timestamp, nonce, signature) {
  20. var strings = [timestamp , nonce , token];
  21. var sortedStrings = strings.sort();
  22. var string = sortedStrings.join().replace(/,/g, "");
  23. var signatureSHA = sha1.hex_sha1(string);
  24. if (signatureSHA == signature) {
  25. return true;
  26. }
  27. else {
  28. return false;
  29. }
  30. }
  31. module.exports = bind;

注:checkSignature是验证微信消息是否正确的一个方法,其它语法的验证Demo请看微信公众号官方提供的实例。另外注意,代码中用的token必须和微信配置token一致。

到此,当你点击启动的时候,微信公众号就会显示绑定成功。

根据消息响应不同内容

首先,当用户关注公众号的时候也会推送消息,根据openid判断此用户是否关注过或重新关注;给用户响应类似谢谢关注的消息。

1.解析微信发送给我们的xml文件,解析出消息的类型;

2.如果是订阅消息类型,收集需要响应的内容

3.选择响应的消息类型,文本或图片等等

4.把收集的内容变成微信xml格式的内容格式

5.响应xml内容给微信

xml定义的格式是:

  1. <xml>
  2. <ToUserName>
  3. <![CDATA[gh_c6cd8a443586]]>
  4. </ToUserName>
  5. <FromUserName>
  6. <![CDATA[oeFW0juS8FCHZN6VAGYN6MCdyBxo]]>
  7. </FromUserName>
  8. <CreateTime>1369204090</CreateTime>
  9. <MsgType>
  10. <![CDATA[text]]>
  11. </MsgType>
  12. <Content>
  13. <![CDATA[金三角地]]>
  14. </Content>
  15. <MsgId>5880686788099440738</MsgId>
  16. </xml>

如果用户已经关注公众号,我们需要根据用户给公众号发送内容在我们的服务器上进行匹配,查看当前关键字是否有所关联;如有关联,响应相应的文本或图文等即可。

下面是之前写的测试代码,仅供参考:

  1. var message = {};
  2. var serverSetting = root.globaldata.serverSetting;
  3. var neo4j = require('neo4j');
  4. var db = new neo4j.GraphDatabase(serverSetting.neo4jUrl);
  5. var parser = require('./../tools/sax2json');
  6. var base64 = require('./../tools/base64');
  7. var replyTemplate = require('./../tools/replyTemplate');
  8. var ajax = require('./../lib/ajax.js');
  9. var vm = require('vm');
  10. var http = require('http');
  11. var scriptPool = {};
  12. var redis = require("redis");
  13. var saveClient = redis.createClient();
  14. var debug = serverSetting.debug;
  15. message.message = function (data, getParam, response) {
  16. response.asynchronous = 1;
  17. var timestamp = getParam.timestamp;
  18. var nonce = getParam.nonce;
  19. var signature = getParam.signature;
  20. var now = new Date();
  21. if (checkSignature(token, timestamp, nonce, signature) == false) {
  22. response.write("忠实于dang");//验证失败就随便响应即可
  23. response.end();
  24. return;
  25. }
  26. for (var key in data) {
  27. var messageXML = key;
  28. parser.toJson(messageXML, function (error, messageJSON) {
  29. var messageData = messageJSON.XML;
  30. next(messageData);
  31. });
  32. }
  33. function next(messageData) {
  34. var message;
  35. resolveMessage(messageData);
  36. function resolveMessage(messageData) {
  37. message = {
  38. type: messageData.MSGTYPE,
  39. MsgId: messageData.MSGID,
  40. text: {
  41. content: messageData.CONTENT
  42. },
  43. image: {
  44. picUrl: messageData.PICURL
  45. },
  46. location: {
  47. location_X: messageData.LOCATION_X,
  48. location_Y: messageData.LOCATION_Y,
  49. scale: messageData.SCALE,
  50. label: messageData.LABEL
  51. },
  52. link: {
  53. title: messageData.TITLE,
  54. description: messageData.DESCRIPTION,
  55. url: messageData.URL
  56. },
  57. event: {
  58. eventType: messageData.EVENT,
  59. EventKey: messageData.EVENTKEY
  60. },
  61. CreateTime: now.getTime(),
  62. MsgType:"from"
  63. };
  64. }
  65. var reply;
  66. resolveReply();
  67. function resolveReply() {
  68. reply = {
  69. ToUserName: "",
  70. FromUserName: "",
  71. CreateTime: now.getTime(),
  72. type: "text",
  73. text: {
  74. content: ""
  75. },
  76. music: {
  77. Title: "我的音乐",
  78. Description: "我的音乐很好听",
  79. MusicUrl: "http://124.202.164.17/download/24482991/31451002/1/mp3/107/128/1320945678443_384/LS9MDWtPO6z7yvJnA9bg==.mp3",
  80. HQMusicUrl: "http://124.202.164.17/download/24482991/31451002/1/mp3/107/128/1320945678443_384/LS9MDWtPO6z7yvJnA9bg==.mp3"
  81. },
  82. news: {
  83. ArticleCount: 2,
  84. Articles: [
  85. {
  86. Title: "拥护dang的领导",
  87. Description: "践行中国梦",
  88. PicUrl: "http://www.baidu.com/img/bdlogo.gif",
  89. Url: "http://www.baidu.com/img/bdlogo.gif"
  90. },
  91. {
  92. Title: "拥护dang的路线",
  93. Description: "实现中国梦",
  94. PicUrl: "http://www.baidu.com/img/bdlogo.gif",
  95. Url: "http://www.baidu.com/img/bdlogo.gif"
  96. }
  97. ]
  98. },
  99. log: "【公众账号管理工具.】\n",
  100. MsgType:"reply"
  101. };
  102. }
  103. if(message.event.eventType == "subscribe"){//新用户
  104. //todo 给用户发送类似关注信息
  105. }else{
  106. //todo根据用户发送的关键字响应不同的内容
  107. }
  108. }
  109. var sha1 = require('./../tools/sha1');
  110. function checkSignature(token, timestamp, nonce, signature) {
  111. var strings = [timestamp , nonce , token];
  112. var sortedStrings = strings.sort();
  113. var string = sortedStrings.join().replace(/,/g, "");
  114. var signatureSHA = sha1.hex_sha1(string);
  115. if (signatureSHA == signature) {
  116. return true;
  117. }
  118. else {
  119. return false;
  120. }
  121. }
  122. module.exports = message;

可能代码运行存在问题,仅供参考提供整体流程,谢谢。

注:以上数据及信息,纯属个人统计或其他来源得知,如有出现误差和错误,敬请谅解,谢谢。

ps:如有其它接口网站想再次添加贵公司接口的对比或其他信息及情况,请联系:QQ:2836989389

快递Api接口 & 微信公众号开发流程的更多相关文章

  1. 微信公众号开发流程,jssdk的使用以及签名算法的实现

    一 开发流程 1 基本配置-登录自己的公众号 A:新型微信认证,认证过的企业号才可以进行自定义菜单中的连接跳转: B:开发基本配置里面进行开发者iD查询,密码查询和重置和ip白名单配置: C:公众号设 ...

  2. php微信公众号开发之快递查询

    [文章来源:脚本之家   文章地址:https://www.jb51.net/article/149205.htm] 本文实例为大家分享了php微信公众号开发之快递查询的具体代码,供大家参考,具体内容 ...

  3. C#微信公众号开发-高级接口-之网页授权oauth2.0获取用户基本信息(二)

    C#微信公众号开发之网页授权oauth2.0获取用户基本信息(一) 中讲解了如果通过微信授权2.0snsapi_base获取已经关注用户的基本信息,然而很多情况下我们经常需要获取非关注用户的信息,方法 ...

  4. .net微信公众号开发——基础接口

    作者:王先荣    本文讲述微信公众号开发中基础接口的使用,包括以下内容:    (1)获取许可令牌(AccessToken):    (2)获取微信服务器地址:    (3)上传.下载多媒体文件:  ...

  5. 3.微信公众号开发:配置与微信公众平台服务器交互的URL接口地址

    微信开发基本原理: 1.首先有3个对象 分别是微信用户端 微信公众平台服务器 开发者服务器(也就是放自己代码的服务器) 三者间互相交互 2.微信公众平台服务器 充当中间者角色 (以被动回复消息为例) ...

  6. NET微信公众号开发-5.0微信支付(待测试)

    开发前准备. 1.0微信支付官方开发者文档 2.0官方demo下载 我们用c#所以选择.net版本 不过这个官方的demo根本跑步起来 3.0官方demo运行起来解决方案 4.0微信支付官方.net版 ...

  7. .NET微信公众号开发-5.0微信支付

    一.前言 在开始做这个功能之前,我们要做的第一件事情就是思考,如何做这个微信支付,从哪里开始,从哪里入手,官方的sdk说明什么的,有没有什么官方的demo,还有就是老板给我的一些资料齐全不,那些要申请 ...

  8. 微信公众号开发(三)获取access_token

    微信公众号开发(三)获取access_token 1.说明 access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token.开发者需要进行妥善保存.acce ...

  9. 微信公众号开发C#系列-11、生成带参数二维码应用场景

    1.概述 我们在微信公众号开发C#系列-7.消息管理-接收事件推送章节有对扫描带参数二维码事件的处理做了讲解.本篇主要讲解通过微信公众号开发平台提供的接口生成带参数的二维码及应用场景. 微信公众号平台 ...

随机推荐

  1. C# 在腾讯的发展

    本文首发我的微信公众号"dotnet跨平台", 内容得到大家热烈的欢迎,全文重新发布在博客,欢迎转载,请注明出处. .NET 主要的开发语言是 C# , .NET 平台泛指遵循EC ...

  2. 微软.NET Core RC2正式发布,横跨所有平台

    .NET官方博客宣布了<Announcing .NET Core RC2 and .NET Core SDK Preview 1>,正式如期发布了.NET Core RC2, 现在可以放心 ...

  3. AutoFac在项目中的应用

    技能大全:http://www.cnblogs.com/dunitian/p/4822808.html#skill 完整Demo:https://github.com/dunitian/LoTCode ...

  4. JavaScript中事件处理

    先看看下面一道题目,请评价以下代码并给出改进意见: if (window.addEventListener) {//标准浏览器 var addListener = function(el, type, ...

  5. JVM类加载

    JVM的类加载机制就是:JVM把描述类的class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被JVM直接使用的Java类型 ClassLoader JVM中的ClassLoade ...

  6. 【开发软件】 在Mac下配置php开发环境:Apache+php+MySql

    本文地址 原文地址   本文提纲: 1. 启动Apache 2. 运行PHP 3. 配置Mysql 4. 使用PHPMyAdmin 5. 附录   有问题请先 看最后的附录   摘要: 系统OS X ...

  7. Tableau未必最佳,国内BI也能突破重围!

    如今,百度一下商业智能或BI工具,总能看到Tableau的身影.并不是Tableau的营销做得好,而是国内对于商业智能工具的认知和选择似乎都落在了Tableau身上.导致不管业内业外都对商业智能的概念 ...

  8. 【干货分享】流程DEMO-采购预算编制

    流程名: 采购预算编制  业务描述: 在月初由计财部进行预算编辑,提交审批后预算生效  流程相关文件: 流程包.xml WebService业务服务.xml WebService.asmx WebSe ...

  9. BPM配置故事之案例9-根据表单数据调整审批线路2

    老李:好久不见啊,小明. 小明:-- 老李:不少部门有物资着急使用,现在的审批流程太慢了,申请时增加一个是否加急的选项吧.如果选加急,金额1000以下的直接到我这里,我审批完就通过,超过1000的直接 ...

  10. git图像化界面GUI的使用

    GIT学习笔记 一.        基础内容 1.git是一个版本控制软件,与svn类似,特点是分布式管理,不需要中间总的服务器,可以增加很多分支. 2.windows下的git叫msysgit,下载 ...