zoukankan      html  css  js  c++  java
  • 微信公众号开发

    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;
    }
  • 相关阅读:
    医学影像
    阿里云九卿 大数据产业化
    陈海青 阿里
    店铺高频问题主动生成知识点机器 大脑+人脑 知识库
    数据总线和流计算在城市大脑中的应用
    无推荐不APP
    ww
    业务架构
    jd算法大赛 一个user_id只需映射到一个sku_id, 但是一个sku_id能否映射到多个user_id
    短URL DH 密钥交换算法
  • 原文地址:https://www.cnblogs.com/liuyinlei/p/8135294.html
Copyright © 2011-2022 走看看