1.获取调用微信API的token
api:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential
参数:app_id
app_secret
(参数在微信官方管理平台可以查阅)
返回:access_token。
2.JSSDK系列
2.1微信上传图片之后,把数据存储在微信服务器。
wx.chooseImage({ count: 1, // 默认9 // sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 // sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 isShowProgressTips: 1, // 默认为1,显示进度提示 sizeType: ['compressed'], // 可以指定是原图还是压缩图,默认二者都有 sourceType: ['camera'], // 可以指定来源是相册还是相机,默认二者都有 success: function(res) { var localIds = res.localIds; // 返回选定照片的本地ID列表,localId可以作为img标签的src属性显示图片 wx.uploadImage({ localId: localIds[0], // 需要上传的图片的本地ID,由chooseImage接口获得 isShowProgressTips: 1, // 默认为1,显示进度提示 success: function(res) { //alert("upload succ!"); var serverId = res.serverId; // 返回图片的服务器端ID //alert("serverId"+serverId); uploadWXImgId(mediatype, serverId); }, fail: function(err) {} }); }, error: function() {}, fail: function(err) {} }); function uploadWXImgId(mediatype, serverId){ //追踪上传图片的进度step1,上传到微信成功 }
2.2 通过获取临时素材接口,把图片获取到指定服务器
先指定下载到本地服务器:
conf.oss.local_weixin_upload_folder = "/mydata/oss/weixin_upload_img"; //服务器上存储weixin上传的图片 //folder = conf.oss.local_weixin_upload_folder ; //bucketFolder = conf.oss.bucket_folder_new || "weixin_photos"; //weixin_photos //targetFolder = year + "/" + month + "/" + day; 2017/05/24 var filePath = path.resolve(folder, bucketFolder, targetFolder, mediaId + ".jpg");
下载到本地服务器之后,异步记录日志:
var sql_step2 = sqlTemplate["upload_imgs"]["step2"]; var step2_param = { download_folder: fileFolder, id: id } if (err) { step2_param.download_err = err; step2_param.download_result = -1; } else { step2_param.download_result = 1; } //异步插入日志 db.query(null, sql_step2, step2_param).catch(function(err) { console.log("记录下载结果出错", err); });
如果上传到tencent云,则应该是这样:
//从tencent云获取签名的参数 qcloud.conf.setAppInfo(conf_oss.appId, conf_oss.secretId, conf_oss.secretKey); //filepath,本地需要上传到腾讯云的路径, //conf_oss.bucket 对象储存控制台创建的Bucket //target_path 上传到腾讯云的访问url return new RSVP.Promise(function(resolve, reject) { qcloud.cos.upload(filePath, conf_oss.bucket, target_path, function(ret) {} });
需要参照nodejs第三方库:qcloud_cos
3.微信公众号被关注之后,触发事件
需要在微信公众平台进行服务器配置,如下:
配置好服务器地址之后,就可以写业务逻辑,用户在关注与取消公众号时,微信会推事件给开发者,参数如下解析:
var xml = req.body.xml || {}; var scene_id = xml.eventkey && xml.eventkey[0]; var openid = xml.fromusername && xml.fromusername[0]; var event = xml.event && xml.event[0].toLocaleLowerCase();
返回给客户端的消息写需要一定的格式,如下:
function getMsgContent(xml, text) { var result; result = "<xml>"; result += "<ToUserName><![CDATA[" + xml.fromusername[0] + "]]></ToUserName>"; result += "<FromUserName><![CDATA[" + xml.tousername[0] + "]]></FromUserName>"; result += "<CreateTime>" + xml.createtime[0] + "</CreateTime>"; result += "<MsgType><![CDATA[text]]></MsgType>"; result += "<Content><![CDATA[" + text + "]]></Content>"; result += "</xml>"; console.log("return content is:" + result); return result; }