微信公众号开发

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;
}
原文地址:https://www.cnblogs.com/liuyinlei/p/8135294.html