2019-09-23 15:05:30 u010405836 阅读数 1732

安卓微信的api,个人微信开发API协议,微信 ipad sdk,微信ipad协议,微信web版接口api,微信网页版接口,微信电脑版sdk,微信开发sdk,微信开发API,微信协议,微信接口文档sdk,替代微信ipad协议的api接口,网页个人微信api分享

1、基础消息类型

1、客户端发送的心跳包HeartBeatReq = 1001; 

2、消息接收确认回复(接收或拒绝接收)MsgReceivedAck = 1002; 

3、错误单独提升为一种消息类型Error = 1003; 

4、通用任务执行结果通知TaskResultNotice = 1025; 

2、设备客户端授权类消息

1、设备(手机客户端、客服客户端)获取通信token请求与响应DeviceAuthReq = 1010; 

设备(手机客户端、客服客户端)获取通信token响应DeviceAuthRsp = 1011;

2、设备授权后退出(仅用于服务端内部)DeviceExitNotice = 1012; 

3、账号强制下线通知 AccountForceOfflineNotice = 1013; 

3、手机客户端上传的通知类消息

1、手机客户端微信上线通知 WeChatOnlineNotice = 1020; 

2、手机客户端微信下线通知 WeChatOfflineNotice = 1021; 

3、微信个人号新增好友通知FriendAddNotice = 1022;

4、微信个人号移除好友通知FriendDelNotice = 1023; 

5、微信好友发来聊天消息通知FriendTalkNotice = 1024; 

6、手机上回复好友的聊天消息通知WeChatTalkToFriendNotice = 1026; 

7、有好友请求添加好友的通知FriendAddReqeustNotice = 1027; 

8、手机上发送了朋友圈通知CircleNewPublishNotice = 1031; 

9、手机上删除朋友圈返回通知CircleDelNotice = 1032; 

10、手机检测到有人点赞/取消点赞通知CircleLikeNotice = 1033; 

11、手机检测到有人评论/删除朋友圈通知CircleCommentNotice = 1034; 

12、消息标记为已读PostMessageReadNotice = 1035; 

13、群聊新增通知ChatRoomAddNotice = 1037; 

14、群聊信息变更通知ChatRoomChangedNotice = 1042;

15、群聊删除通知返回ChatRoomDelNotice = 1041; 

16、联系人标签新增,修改通知ContactLabelAddNotice = 1038; 

17、联系人标签删除通知ContactLabelDelNotice = 1044; // 联系人标签删除通知

18、新增公众号通知BizContactAddNotice = 2038; // 新增公众号通知

19、手机端推送当前sdk的安装版本通知PostDeviceInfoNotice = 2027; 

4、服务端、客服客户端发给设备的指令类消息(sdk咨询微信tangjinjinwx)

1、给好友发消息任务TalkToFriendTask = 1070; 

返回聊天执行结果TalkToFriendTaskResultNotice = 1028; 

2、发送朋友圈任务及结果返回PostSNSNewsTask = 1071; 

返回发送朋友圈数据结果PostSNSNewsTaskResultNotice = 1073; 

3、删除朋友圈任务与结果返回DeleteSNSNewsTask = 1074; 

返回通用任务执行结果

4、主动添加好友任务及返回结果AddFriendsTask = 1072; 

返回通用任务执行结果

5、接受好友请求任务及返回结果AcceptFriendAddRequestTask = 1075; 

返回通用任务执行结果

6、群发消息任务WeChatGroupSendTask = 1076; 

返回通用任务执行结果

7、执行养号动作命令任务WeChatMaintenanceTask = 1077; 

返回通用任务执行结果

8、养号任务停止任务及返回结果PostStopWeChatMaintenanceTask = 1100; 

返回通用任务执行结果

9、清粉任务及返回结果PostFriendDetectTask = 1095; 

返回:每隔一段时间手机端回传检测清粉好友数PostFriendDetectCountNotice = 2028; 

10、终止清粉任务及返回结果PostStopFriendDetectTask = 1096; 

返回通用任务执行结果

11、请求聊天图片或视频消息的详细内容任务与结果返回RequestTalkDetailTask = 1078; 

返回聊天图片或视频消息的详细内容结果RequestTalkDetailTaskResultNotice = 1029; 

12、要求手机上传当前微信二维码任务及返回PullWeChatQrCodeTask = 1079; 

返回手机端微信的二维码PullWeChatQrCodeTaskResultNotice = 1030; 

13、触发手机推送好友列表任务及结果返回TriggerFriendPushTask = 1080; 

返回一:手机端推送好友列表(分页,每页100)FriendPushNotice = 2026;

返回二:手机端推送标签列表

14、触发手机推送朋友圈列表任务及结果返回TriggerCirclePushTask = 1081; 

返回手机朋友圈数据(分页,每页20)CirclePushNotice = 2029; 

15、朋友圈评论删除任务及结果返回CircleCommentDeleteTask = 1082; 

朋友圈评论删除任务反馈 CircleCommentDeleteTaskResultNotice = 1083; 

16、朋友圈评论回复任务及结果返回CircleCommentReplyTask = 1084; 

朋友圈评论回复反馈CircleCommentReplyTaskResultNotice = 1085; 

17、通知手机将某个聊天窗口置为已读TriggerMessageReadTask = 1086; 

无返回

18、消息撤回任务RevokeMessageTask = 1087; 

返回通用任务执行结果

19、转发消息任务ForwardMessageTask = 1088;

返回通用任务执行结果

20、通知手机推送历史聊天记录任务及返回TriggerHistoryMsgPushTask = 1089; 

返回历史消息(分页,每页50)HistoryMsgPushNotice = 2033; 

21、获取群聊二维码任务及结果返回PullChatRoomQrCodeTask = 1090; 

返回群二维码PullChatRoomQrCodeTaskResultNotice = 1043;

22、朋友圈点赞任务及结果返回PostMomentsPraiseTask = 1098; 

返回朋友圈点赞数量PostMomentsPraiseCountNotice = 2030; 

23、停止朋友圈点赞任务PostStopMomentsPraiseTask = 1099; 

返回通用任务执行结果

24、修改联系人备注任务ModifyFriendMemoTask = 1101; 

返回通用任务执行结果

25、领取红包或转账收钱任务及返回TakeLuckyMoneyTask = 1200; 

返回收钱任务执行结果TakeMoneyTaskResultNotice = 1039; 

26、获取指定好友朋友圈任务及返回PullFriendCircleTask = 1201; 

返回手机朋友圈数据CirclePushNotice = 2029; 

27、获取朋友圈的图片任务及返回PullCircleDetailTask = 1202; 

返回朋友圈图片上传信息CircleDetailNotice = 1040; 

28、单条朋友圈点赞任务CircleLikeTask = 1203; 

返回通用任务执行结果

29、触发手机推送群聊列表任务及结果返回TriggerChatroomPushTask = 1210; 

返回一:手机端推送群聊列表(分页,每页2个)ChatroomPushNotice = 2031; 

返回二:群成员(陌生人)信息列表(分页,每页100)ChatRoomMembersNotice = 2034; 

30、请求具体群聊的详细信息任务RequestChatRoomInfoTask = 1211; 

返回ChatRoomAddNotice 群聊新增通知

31、获取联系人详细信息任务及返回

(不一定是好友,如群聊成员)RequestContactsInfoTask = 1212; 

返回联系人信息ContactsInfoNotice = 1036; 

32、群聊管理任务及返回ChatRoomActionTask = 1213; 

返回通用任务执行结果

返回群聊通知类返回结果

33、群内加好友任务AddFriendInChatRoomTask = 1214;

返回通用任务执行结果

34、通讯录加好友任务AddFriendFromPhonebookTask = 1215; 

返回通用任务执行结果

35、删除好友任务及返回DeleteFriendTask = 1216;  

返回通用任务执行结果

微信个人号移除好友通知

36、发红包任务及返回  

github地址

SendLuckyMoneyTask = 1217; 返回:通用任务执行结果,成功ErrMsg=sendId

37、获取聊天消息的原始内容(主要是xml内容)任务及返回RequestTalkContentTask = 1218; 

返回聊天消息的原始内容RequestTalkContentTaskResultNotice = 1219; 

38、转发消息内容任务及返回ForwardMessageByContentTask = 1220; 

返回通用任务执行结果

39、群主通过入群申请任务及返回ChatRoomInviteApproveTask = 1221;

返回通用任务执行结果

40、设置联系人标签任务及返回ContactLabelTask = 1224; // 设置联系人标签

返回联系人标签新增,修改通知;

返回通用任务执行结果

41、删除联系人标签任务及返回ContactLabelDeleteTask = 1225; // 删除联系人标签

返回通用任务执行结果

返回联系人标签删除通知

42、语音消息转文字命令及返回VoiceTransTextTask = 1226; // 语音消息转文字

返回:通用任务执行结果,成功ErrMsg=文字内容

43、查找微信联系人任务及返回FindContactTask = 1227; // 查找微信联系人

返回查找微信联系人结果

FindContactTaskResult = 1228; // 查找微信联系人结果

44、同意加入群聊命令及返回AgreeJoinChatRoomTask = 1229; // 同意加入群聊

返回通用任务执行结果

45、清空聊天记录任务及返回ClearAllChatMsgTask= 1230; // 清空聊天记录

返回通用任务执行结果

46、聊天界面发送朋友验证任务及返回(别人把你删掉了,你发消息会出现一个发送朋友验证的链接,此处有用到)

返回通用任务执行结果

47、获取会话列表任务及返回TriggerConversationPushTask = 1232; // 会话列表推送

返回聊天会话列表(分页)ConversationPushNotice = 2035; // 会话列表

48、微信设置(改昵称,头像)任务及返回WechatSettingTask = 1233; // 微信设置:改昵称,头像

返回通用任务执行结果

49、获取加好友请求列表任务及返回结果PullFriendAddReqListTask = 1234; //获取加好友请求列表

返回请求加好友列表FriendAddReqListNotice = 2036; // 加好友请求列表

50、获取公众号列表任务及结果返回TriggerBizContactPushTask = 1235; // 获取公众号列表

返回公众号列表BizContactPushNotice = 2037; // 公众号列表推送

51、获取时间段内的所有聊天消息msgSvrId及结果返回TriggerChatMsgIdsPushTask = 1251;

52、名片加好友任务及结果返回AddFriendNameCardTask = 1236; // 名片加好友

返回通用任务执行结果

53、根据msgSvrId获取聊天消息及结果返回RequestTalkMsgTask = 1252;  // 根据msgSvrId获取聊天消息

返回RequestTalkMsgTaskResultNotice = 1253;  

5、服务端通知执行的命令 微信sdk

1、微信账号登出命令WechatLogoutTask = 1222;

无返回;微信退出会触发微信离线通知(WeChatOfflineNoticeMessage)

2、手机操作指令(重启手机等)PhoneActionTask = 1223; // 手机操作指令

返回:通用任务执行结果,(上传本地文件:ErrMsg=文件url)

3、通知手机客户端软件升级UpgradeDeviceAppNotice = 1094; 

无返回

4、服务端删除设备通知手机端PostDeleteDeviceNotice = 1097; 

无返回

安卓微信的api,个人微信开发API协议,微信 ipad sdk,微信ipad协议,微信web版接口api,微信网页版接口,微信电脑版sdk,微信开发sdk,微信开发API,微信协议,微信接口文档sdk,替代微信ipad协议的api接口,网页个人微信api分享

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

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

准备工作

首先,需要到微信公众平台注册账号
选择账号类型界面如下:
此处输入图片的描述
选择订阅号或服务器都可以,本文是使用订阅号进行展开描述。开发微信小程序的选择小程序即可,不过暂时不对个人开发,只能呵呵了。
选择之后,根据注册流程,一步步填写验证即可。
此处输入图片的描述
注册完成后,到微信公众平台登陆即可。

登陆成功,如下界面:
此处输入图片的描述

本文使用的开发语言是Nodejs,所以需要你安装Nodejs,请到官方网站下载。
注:如需其他的开发语言,会考虑添加或修改开发语言。

开发工具:WebStorm

公众号配置

个人信息的设置,点击左侧菜单中的公众号设置方可设置,不过,对于公众号的信息会有所限制。
我们需要根据用户发送给公众号的内容,返回不同的信息;当然,微信公众号是提供自动回复功能,但由于自动回复返回内容规定,然而无法满足我们的需求;所以,我们需要自己服务器对接微信公众平台,然后我们根据用户发送的内容,响应不同的数据。
故而:
配置公众号开发,点击左侧菜单中的基本配置,如下:
此处输入图片的描述

修改配置:
此处输入图片的描述
配置完成后,点击启用;我们就可以搭建自己的后台来接收微信服务器给我们发送的消息数据。
点击启动之前,我们需先启动我们服务器与微信的绑定服务;因为启动时候,微信会给指定的服务器地址发送验证请求。

绑定服务代码

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

var http = require("http");
var route = require("./lib/route");
var routemap = require("./routemap");
var i = 1;
http.createServer(
    function (request, response) {
        route(routemap, request.url, request, response);

        i++;
        console.log("The Bind server has been accessed " + i);
        if (response.asynchronous == null) {
            response.end();
        }

    }).listen(8064);

console.log("The Bind server is running.");

接着,路由映射:

var requestHandlers = require("./requestHandlers");

var routemap = {
    "get": {
        //        "/": requestHandlers.test
        "/": requestHandlers.bind
    },
    "post": {
        "/": requestHandlers.message
//        "/": requestHandlers.weixinuser
    },
    "put": {
    },
    "del": {
    }
};

module.exports = routemap;

具体接口调用位置:

var requestHandlers = {};

var globaldata = root.globaldata;

var bind = require('./handlers/bind');

requestHandlers.bind = function (request, response, pathObject, data) {
    if (data == null) {
        response.write(JSON.stringify({"提示信息": "bind server 运行正常", b: 2}));
    }
    else {
        bind.message(data, response);
    }
};

绑定接口实现部分:

var bind = {};

var push = require('../lib/push');

bind.message = function (data, response) {
    response.asynchronous = 1;
    var echostr = data.echostr;

    var timestamp = data.timestamp;
    var nonce = data.nonce;
    var signature = data.signature;

    var token = "14890991002";
    if (checkSignature(token, timestamp, nonce, signature) == true) {
       response.write(echostr);//验证成功,返回echostr
       response.end();
    }else{//验证失败就随便响应即可
        response.write("忠实于共产党");
        response.end();
    }
}

var sha1 = require('./../tools/sha1');
function checkSignature(token, timestamp, nonce, signature) {

    var strings = [timestamp , nonce , token];
    var sortedStrings = strings.sort();
    var string = sortedStrings.join().replace(/,/g, "");
    var signatureSHA = sha1.hex_sha1(string);
    if (signatureSHA == signature) {
        return true;
    }
    else {
        return false;
    }
}

module.exports = bind;

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

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

根据消息响应不同内容

首先,当用户关注公众号的时候也会推送消息,根据openid判断此用户是否关注过或重新关注;给用户响应类似谢谢关注的消息。
1.解析微信发送给我们的xml文件,解析出消息的类型;
2.如果是订阅消息类型,收集需要响应的内容
3.选择响应的消息类型,文本或图片等等
4.把收集的内容变成微信xml格式的内容格式
5.响应xml内容给微信

xml定义的格式是:

    <xml>
        <ToUserName>
            <![CDATA[gh_c6cd8a443586]]>
        </ToUserName>
        <FromUserName>
            <![CDATA[oeFW0juS8FCHZN6VAGYN6MCdyBxo]]>
        </FromUserName>
        <CreateTime>1369204090</CreateTime>
        <MsgType>
            <![CDATA[text]]>
        </MsgType>
        <Content>
            <![CDATA[金三角地]]>
        </Content>
        <MsgId>5880686788099440738</MsgId>
    </xml>

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

var message = {};

var serverSetting = root.globaldata.serverSetting;

var neo4j = require('neo4j');
var db = new neo4j.GraphDatabase(serverSetting.neo4jUrl);

var parser = require('./../tools/sax2json');
var base64 = require('./../tools/base64');
var replyTemplate = require('./../tools/replyTemplate');
var ajax = require('./../lib/ajax.js');
var vm = require('vm');
var http = require('http');
var scriptPool = {};
var redis = require("redis");
var saveClient = redis.createClient();

var debug = serverSetting.debug;

message.message = function (data, getParam, response) {
    response.asynchronous = 1;

    var timestamp = getParam.timestamp;
    var nonce = getParam.nonce;
    var signature = getParam.signature;

    var now = new Date();

    if (checkSignature(token, timestamp, nonce, signature) == false) {
      response.write("忠实于共产党");//验证失败就随便响应即可
        response.end();
        return;
    }

    for (var key in data) {
        var messageXML = key;
        parser.toJson(messageXML, function (error, messageJSON) {
        var messageData = messageJSON.XML;
            next(messageData);
        });
    }


    function next(messageData) {
        var message;
        resolveMessage(messageData);

        function resolveMessage(messageData) {
            message = {
                type: messageData.MSGTYPE,
                MsgId: messageData.MSGID,
                text: {
                    content: messageData.CONTENT
                },
                image: {
                    picUrl: messageData.PICURL
                },
                location: {
                    location_X: messageData.LOCATION_X,
                    location_Y: messageData.LOCATION_Y,
                    scale: messageData.SCALE,
                    label: messageData.LABEL
                },
                link: {
                    title: messageData.TITLE,
                    description: messageData.DESCRIPTION,
                    url: messageData.URL
                },
                event: {
                    eventType: messageData.EVENT,
                    EventKey: messageData.EVENTKEY
                },
                CreateTime: now.getTime(),
                MsgType:"from"
            };
        }

        var reply;
        resolveReply();

        function resolveReply() {
            reply = {
                ToUserName: "",
                FromUserName: "",
                CreateTime: now.getTime(),
                type: "text",
                text: {
                    content: ""
                },
                music: {
                    Title: "我的音乐",
                    Description: "我的音乐很好听",
                    MusicUrl: "http://124.202.164.17/download/24482991/31451002/1/mp3/107/128/1320945678443_384/LS9MDWtPO6z7yvJnA9bg==.mp3",
                    HQMusicUrl: "http://124.202.164.17/download/24482991/31451002/1/mp3/107/128/1320945678443_384/LS9MDWtPO6z7yvJnA9bg==.mp3"
                },
                news: {
                    ArticleCount: 2,
                    Articles: [
                        {
                            Title: "拥护共产党的领导",
                            Description: "践行中国梦",
                            PicUrl: "http://www.baidu.com/img/bdlogo.gif",
                            Url: "http://www.baidu.com/img/bdlogo.gif"
                        },
                        {
                            Title: "拥护共产党的路线",
                            Description: "实现中国梦",
                            PicUrl: "http://www.baidu.com/img/bdlogo.gif",
                            Url: "http://www.baidu.com/img/bdlogo.gif"
                        }
                    ]
                },
                log: "【公众账号管理工具.】\n",
                MsgType:"reply"
            };
        }
        if(message.event.eventType == "subscribe"){//新用户
                //todo 给用户发送类似关注信息
        }else{
            //todo根据用户发送的关键字响应不同的内容
        }
}

var sha1 = require('./../tools/sha1');
function checkSignature(token, timestamp, nonce, signature) {

    var strings = [timestamp , nonce , token];
    var sortedStrings = strings.sort();
    var string = sortedStrings.join().replace(/,/g, "");
    var signatureSHA = sha1.hex_sha1(string);
    if (signatureSHA == signature) {
        return true;
    }
    else {
        return false;
    }
}

module.exports = message;

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

注:以上数据及信息,纯属个人统计或其他来源得知,如有出现误差和错误,敬请谅解,谢谢。
ps:如有其它接口网站想再次添加贵公司接口的对比或其他信息及情况,请联系:QQ:2836989389

文章来自:http://blog.csdn.net/qxs965266509

2019-07-07 13:31:24 weixin_42550800 阅读数 1876

写在前面

微信网页授权登陆是微信网页开发的第一步,由于框架限制需要使用.NET WebAPI的前后端分离模式进行开发,所以经过几天的摸索,写了这个简单的微信网页授权的实现Demo,本篇文章为微信公众号的配置与前端页面的实现,后端部分在下一篇文章中,链接也在文章底部。特别说明,本文章适用于微信内网页应用的授权登陆,不适用于普通网站的扫码授权登录,将在后续文章中进行论述。

后端篇https://blog.csdn.net/weixin_42550800/article/details/94983616

正式开始

首先,我们需要对微信网页授权的机制有所了解,许多场景下,我们只需要获取微信用户的相关信息,包括昵称、头像、OpenId等信息。(OpenID是用户在访问公众号应用时分配的唯一标识,要注意的是,同一个用户在不同的微信公众号的OpenID不同)。

在确定了这个需求后,就要了解微信的授权机制。首先用户在微信中访问对应的网页应用,当应用检测到没有对应的用户信息时就会跳转到授权页面,用户选择同意或者不同意后返回到要跳转的页面(回调页面)。在回调页面中对微信的授权服务器进行请求,则可以顺利获取用户的相关信息。在请求过程中需要携带相关参数在正文中进行论述。

配置公众号

(相关操作需要认证后的服务号,如果没有认证服务号在左侧菜单底部选择开发者工具->公众平台测试账号进行相关配置)

正常配置如下:

1.登陆微信公众平台后进入功能设置

2. 配置授权域名

配置步骤不进行赘述,参见配置过程中的官方提示。值得注意的是这里只能配置两个域名,而且不能带端口,如果需要使用多个域名或端口则需使用Ngnix或其它的代理。所有前端页面必须在该域名下才能进行授权,不然会报错。

 3.获取AppId和Secret

开发->基本配置  ,配置完成后开始网页编写 

前端实现

目标:实现授权登陆并获取头像、昵称、所在省份城市

首先需要引入JQ <script src="http://code.jquery.com/jquery-3.4.1.min.js"></script>

Js代码分为Common与Center两个类

Common中包含:getUrlParameter方法在Url中拆分对应参数

                             getWxUserInfo方法连接后台代码,获取用户信息,存入localStorage

Center中包含:    Init方法用来初始化界面

                             enterWxAuthor方法判断是否存储了登陆状态,如果没有则跳转至授权界面

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 如果添加此标签将把所有跨域请求转化为https请求 -->
    <!-- <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> -->
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
        <img id="headimgurl" src="">
        <br />
        欢迎,<span id="nickname"></span><br />
        <span id="province"></span>,
        <span id="city"></span>
        <script src="http://res.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
        <script src="http://code.jquery.com/jquery-3.4.1.min.js"></script>
        <script>
            //替换为获取的APPID
            var WX_APPID = 'XXXXXXXX';
            //服务端地址
            var WX_ROOT = 'http://xxxx/api/';
            //一般工具类
            var common = {
                getUrlParameter:function(name) {//封装方法
                        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
                        var r = window.location.search.substr(1).match(reg); //匹配目标参数
                        if (r != null) return unescape(r[2]);
                        return null; //返回参数值
                },
                /*** 授权后获取用户的基本信息*/
                getWxUserInfo:function(par){
                    
                    var code = common.getUrlParameter("code");
                    if (par) code = par;
                    $.ajax({
                        async: false,
                        data: {code:code},
                        type : "GET",
                        dataType:"json",
                        url : WX_ROOT + "Wechat/GetUserInfo",
                        
                        success : function(json) {
                            
                            if (json){
                                console.log(json);
                                try {
                                    //保证写入的wxUserInfo是正确的
                                    if (json.Accesstoken.openid) {
                                        var str_jsonData = JSON.stringify(json);
                                        localStorage.setItem('wxUserInfo',str_jsonData);//写缓存--微信用户信息
                                    }
                                } catch (e) {
                                    // TODO: handle exception
                                }
                            }
                        }
                    });
                }
            }
            //页面逻辑控制类
            var center = {
                init: function(){
                    
                    var getLocalData = localStorage.getItem('wxUserInfo');
                    var wxUserInfo = JSON.parse(getLocalData);
                    
                    $('#nickname').html ( wxUserInfo.Accesstoken.nickname);
                    $('#province').html ( wxUserInfo.Accesstoken.province);
                    $('#city').html ( wxUserInfo.Accesstoken.city);
                    $("#headimgurl").attr("src",wxUserInfo.Accesstoken.headimgurl);
                },
                enterWxAuthor: function(){
                    
                    var wxUserInfo = localStorage.getItem("wxUserInfo");
                    if (!wxUserInfo) {
                        var code = common.getUrlParameter('code');
                        if (code) {
                            common.getWxUserInfo();
                            center.init();
                        }else{
                            //没有微信用户信息,没有授权-->> 需要授权,跳转授权页面
                            window.location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid='+ WX_APPID +'&redirect_uri='+ 'http://shop.qimeng.group' +'&response_type=code&scope=snsapi_userinfo#wechat_redirect';
                        }
                    }else{
                        center.init();
                    }
                }
            }
            //页面函数入口
            $(function() { 
                center.enterWxAuthor();
            });
        </script>
</body>
</html>

 

 

2018-08-12 20:11:57 i042416 阅读数 5819

这个系列的第二篇教程,介绍的实际是被动方式给微信用户发文本消息,即微信用户关注您的公众号时,微信平台将这个关注事件通过一个HTTP post发送到您的微信消息服务器上。您对这个post请求做了应答(格式为文本),则该应答会通过微信平台投递到您粉丝的微信应用上。

微信开发者中心的文档将这种行为称为“被动回复用户消息”:

回复消息报文的格式在开发者文档里也有清晰的定义,是一个xml格式的字符串。我的第二篇教程里也有具体的发送该报文的代码示例。

本文作为这个开发系列的第三篇教程,介绍的是如何用API的方式,主动向某个粉丝发送文本消息。

如何找到合适的微信消息发送API呢?还是登录微信开发者中心,在控制台菜单“客服消息”里,

客服接口-发消息就是我们需要使用的API。url如下:https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=<传入您的access token>

为了使用这个API,我们首先需要获得调用API的access token:

Access token的获取很简单,用Appid和secret去换。

调用另一个API,https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=<您微信公众号的appid>&secret=<您微信公众号的secret>。这个API会返回access token以及过期时间。

您微信公众号的appid和secret可以在微信开发者中心的控制台里找到,在“测试号管理”页面的标签页下。

现在我们拿到access token后,就可以调用微信文本消息发送API给指定微信用户发送文本消息了。看我下图这个postman里的调用。红色高亮的测试文本信息将通过微信API发送到我手机上:

测试成功了:

最后,我们用nodejs实现通过API给指定用户发送文本信息。

function sendWCMeaasge(toUser,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){
    }
    );
}
module.exports = sendWCMeaasge;

消费代码:

sendMessage(<此处传入接收该消息的微信用户的openid>, “这条消息是用nodejs发送的!”);

用node命名执行上面的代码,也能成功在微信app上接收到通过nodejs代码调用微信消息API的方式发送的文本消息。

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

微信API接口文档

阅读数 5342

微信开发SDK

阅读数 1329