6.小程序 - ILazyMiniBasic

GetAccessTokenAsync

Code2SessionAsync

属性 类型 说明
openid string 用户唯一标识
session_key string 会话密钥
unionid string 用户在开放平台的唯一标识符,在满足 UnionID 下发条件的情况下会返回,详见 UnionID 机制说明。
errcode number 错误码
errmsg string 错误信息
  • 示例代码

    wx.login({
        timeout: 10000,
        success: (res) => {
            console.log('wx-login', res)
            wx.request({
                url: 'https://test.lazywechat.cn/GetUserInfo',
                data: {
                    js_code: res.code
                },
                header: { 'content-type': 'application/json' },
                method: 'GET',
                dataType: 'json',
                responseType: 'text',
                success: (result) => {
                    console.log(result)
                	wx.setStorageSync('key', result.data.session_key)
                },
                fail: () => { },
                complete: () => { }
            });
        },
        fail: () => { },
        complete: () => { }
    });
    
    [HttpGet("GetUserInfo", Name = "GetUserInfo")]
    public async Task<JsonResult> GetUserInfo(string js_code)
    {
        try
        {
            var res = await _lazyMiniBasic.Code2SessionAsync(js_code);
            return Json(res);
        }
        catch (Exception ex)
        {
            dynamic err = new ExpandoObject();
            err.message = ex.Message;
            return Json(err);
        }
    }
    

Decrypt

  • 作用 : 根据session_key, iv对小程序消息(encryptedData)进行解密

  • 参数

    • encryptedData : 加密数据
    • iv : 初始向量
    • sessionKey : 从服务端获取的SessionKey
  • 返回值 : string, 解密以后的消息内容

  • 需要解密的常用的小程序API

    • wx.getUserInfo
  • 示例代码

    bindGetUserInfo: function () {
        wx.getUserInfo({
            success: function (res) {
                console.log({ encryptedData: res.encryptedData, iv: res.iv })
                let key = wx.getStorageSync('key');
    
                wx.request({
                    url: 'https://test.lazywechat.cn/Decrypt',
                    data: {
                        encrypted: res.encryptedData,
                        iv: res.iv,
                        key: key
                    },
                    header: { 'content-type': 'application/json' },
                    method: 'GET',
                    dataType: 'json',
                    responseType: 'text',
                    success: (result) => {
                        console.log(result)
                    },
                    fail: () => { },
                    complete: () => { }
                });
            },
            fail: function () {
                console.log('获取用户信息失败')
            }
        })
    }
    
    [HttpGet("Decrypt", Name = "Decrypt")]
    public string Decrypt(string encrypted, string iv, string key)
    {
        var res = _lazyMiniBasic.Decrypt(encrypted, iv, key);
        return res;
    }
    

GetPaidUnionId

  • 作用 : 用户支付完成后,获取该用户的 UnionId,无需用户授权

    • 调用前需用户完成支付,且支付完成5分钟内有效,不然报告89300的错误
    • 小程序必须绑定微信开放平台,不然报告89002的错误
    • 想要拿到 transaction_id 微信支付订单号 、mch_id 微信支付分配的商户号 、out_trade_no 微信支付商户订单号必须通过支付成功通知地址 notify_url 中获取 。这里需要注意数据接收成功一定要给微信返回。不返回微信会不断发送数据到notify_url 导致数据重复
  • 官方文档 : https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/user-info/auth.getPaidUnionId.html

  • 参数 : 可以通过如下两种方式调用

    • getPaidUnionIdwtTransactionIdAsync
      • openid
      • transaction_id
    • getPaidUnionIdwtOutTradeNoAsync
      • openid
      • out_trade_no
  • 返回值 dynamic

    {
      "unionid": "oTmHYjg-tElZ68xxxxxxxxhy1Rgk",
      "errcode": 0,
      "errmsg": "ok"
    }
    
  • 示例代码

    var res1 = await _lazyMiniBasic.getPaidUnionIdwtTransactionIdAsync(openid, transaction_id);
    var res2 = await _lazyMiniBasic.getPaidUnionIdwtOutTradeNoAsync(openid, out_trade_no);
    

SendUniformMessageAsync

  • 作用 : 发送统一服务消息

  • 官方文档 : https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/uniform-message/uniformMessage.send.html

  • 参数

    • message
    public class MPUniformMessage : UniformMessage
    {
        public MPUniformMessage()
        {
            mp_template_msg = new mp_template();
            mp_template_msg.miniprogram = new miniprogram();
            mp_template_msg.rawData = new List<(string, string, string)>();
        }    
        public mp_template mp_template_msg { get; set; }
    }
    
    public class mp_template
    {
        public string appid { get; set; }
    
        public string url { get; set; }
    
        public miniprogram miniprogram { get; set; }
    
        [JsonIgnore]
        public List<(string, string, string)> rawData { get; set; }
    
        public dynamic data
        {
            get;
        }
    
        public string template_id { get; set; }
    }
    
  • 示例代码

[HttpGet("Uniform", Name = "Uniform")]
public void SendUniformMessage()
{
    var message = new MPUniformMessage();

    //需要发送的用户的openid(公众号openid)
    message.touser = "oNDiC0d-r7Su5mYCU-mXFSXuhmtQ";

    //公众号appid
    message.mp_template_msg.appid = "wxbb23a029883b991d";

    //公众号中的模板消息ID
    var template_id = "rBmkY7QbkF4vxklL6HBuO80WvUH69eDlG2J9BpuJ838";
    message.mp_template_msg.template_id = template_id;

    //模板消息底部link对应的URL
    message.mp_template_msg.url = "http://test.lazywechat.cn";

    //小程序AppID
    message.mp_template_msg.miniprogram.appid = _options.Value.AppID;
    //小程序页面路径
    message.mp_template_msg.miniprogram.pagepath = "";

    //模板消息内容
    var content = new List<(string, string, string)>();
    content.Add(("first", "亲,宝贝已经启程了,好想快点来到你身边", "#173177"));
    content.Add(("delivername", "顺丰快递", "#173177"));
    content.Add(("ordername", "3291987391", "#173177"));
    content.Add(("remark", "如果疑问,请在微信服务号中输入“KF”,**将在第一时间为您服务", "#173177"));

    message.mp_template_msg.rawData = content;

    _ = _lazyMiniBasic.SendUniformMessageAsync(message);
}

备注 : 如果在小程序中调用模板消息接口 , 会出现如下错误

errcode('48001'),errmsg('api unauthorized rid: 5f2f961f-6449c2f4-2fd7e064')

该错误一般说明你的API地址可能用错了,比如在小程序中调用了不受支持的公众号API地址, 例如之前提到的SendTemplateMessage方法,如果在小程序中调用就会出现上诉错误

客服消息

SendKFMessageAsync

  • 作用 : 发送客服消息

  • 官方文档 : https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/customer-message/customerServiceMessage.send.html

  • 参数

    • message 消息内容
  • 示例代码

    共有如下4个重载函数, 分别用来发送文本、图片、链接和小程序客服消息

    /// <summary>
    /// 发送文本客服消息
    /// </summary>
    /// <param name="message">文本消息内容</param>
    /// <returns></returns>
    Task<dynamic> SendKFMessageAsync(MiniKFTextMessage message);
    
    /// <summary>
    /// 发送图片客服消息
    /// </summary>
    /// <param name="message">图片消息内容</param>
    /// <returns></returns>
    Task<dynamic> SendKFMessageAsync(MiniKFImageMessage message);
    
    /// <summary>
    /// 发送链接客服消息
    /// </summary>
    /// <param name="message">链接消息内容</param>
    /// <returns></returns>
    Task<dynamic> SendKFMessageAsync(MiniKFLinkMessage message);
    
    /// <summary>
    /// 发送小程序客服消息
    /// </summary>
    /// <param name="message">小程序消息内容</param>
    /// <returns></returns>
    Task<dynamic> SendKFMessageAsync(MiniKFMiniMessage message);
    
    var message1 = new MiniKFTextMessage();
    message1.touser = openid;
    message1.text.content = "hello mini";
    var res = _lazyMiniBasic.SendKFMessageAsync(message1).Result;
    

GetTempMediaAsync

UploadTempMediaAsync

  • 作用 : 把媒体文件上传到微信服务器, 目前仅支持图片

  • 官方文档 : https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/customer-message/customerServiceMessage.uploadTempMedia.html

  • 参数

    • fullFilePath : 素材完整路径
  • 返回值 dynamic

    属性 类型 说明
    errcode number 错误码
    errmsg string 错误信息
    type string 文件类型
    media_id string 媒体文件上传后,获取标识,3天内有效。
    created_at number 媒体文件上传时间戳
  • 示例代码

    var root = Directory.GetCurrentDirectory();
    var fullFilePath = root + @"\Materials\1.jpg";
    
    var res = await _lazyMiniBasic.UploadTempMediaAsync(fullFilePath);
    

订阅消息

  1. 获取模板 ID

    • 在公共模板库找到适合自己的模板

      image-20200810194517264

    • 在微信公众平台手动配置获取模板 ID

    • 如果没有合适的模板,可以申请添加新模板,审核通过后可使用

  2. 小程序中获取下发权限

    • 使用wx.requestSubscribeMessage(Object object)接口

      备注 : 次接口需要2.8.2以上的基础库

      image-20200810194808706

SendSubscribeMessageAsync

  • 作用 : 发送订阅消息

  • 官方文档 : https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html

  • 参数 message

    public class SubscribeMessage
    {    
        /// <summary>
        /// 接受者openid
        /// </summary>
        public string touser { get; set; }
    
        /// <summary>
        /// 所需下发的订阅模板id
        /// </summary>
        public string template_id { get; set; }
    
        /// <summary>
        /// 点击模板卡片后的跳转页面
        /// </summary>
        public string page { get; set; }
    
        /// <summary>
        /// 跳转小程序类型:developer为开发版,trial为体验版,formal为正式版,默认为正式版
        /// </summary>
        public string miniprogram_state { get; set; }
    
        /// <summary>
        /// 进入小程序查看”的语言类型
        /// </summary>
        public string lang { get; set; }
    
        /// <summary>
        /// 模板内容
        /// </summary>
        [JsonIgnore]
        public Dictionary<string, string> rawData { get; set; }
    
        /// <summary>
        /// 模板内容的dynamic格式,用于序列化
        /// </summary>
        public dynamic data
        {
            get;
        }
    }
    
  • 示例代码

    bindSubscribeMessage: () => {
        wx.requestSubscribeMessage({
            tmplIds: ['6vLy-PG3f8NxI2g9lX4NQDVjN7fb91wOcB9yAmtVRG0'],
            success: (res) => {
            	console.log(res)
            }
        })
    },
    
    [HttpGet("SendSubscribeMessage", Name = "SendSubscribeMessage")]
    public async void SendSubscribeMessage()
    {
        var message = new SubscribeMessage();
        //需要发送的用户的openid(小程序openid)
        message.touser = "ogaiR4iP8a0JHaoCIXMZyFmCAZy4";
    
        //小程序中的订阅消息模板ID
        var template_id = "6vLy-PG3f8NxI2g9lX4NQDVjN7fb91wOcB9yAmtVRG0";
    
        message.template_id = template_id;
    
        //订阅消息底部link对应的URL
        message.page = "page/page/index";
    
        //小程序的模式developer/trial/formal
        message.miniprogram_state = MiniprogramState.developer.ToString();
    
        //订阅消息内容
        var content = new Dictionary<string, string>();
        content.Add("name1", "张三");
        content.Add("phone_number2", "18643492169");
        content.Add("time3", "2019-10-15");
        content.Add("thing4", "厦门易工程信息技术有限公司");
        content.Add("thing10", "空调清洗");
    
        message.rawData = content;
    
        _ = await _lazyMiniBasic.SendSubscribeMessageAsync(message);
    }
    

AddTemplateAsync

  • 作用 : 将模板并添加至帐号下的个人模板库

  • 官方文档 : https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.addTemplate.html

  • 参数

    • tid : 模板标题 id
    • kidList : 开发者自行组合好的模板关键词列表,关键词顺序可以自由搭配(例如 [3,5,4] 或 [4,5,3]),最多支持5个,最少2个关键词组合
    • sceneDesc : 服务场景描述
  • 返回值 dynamic

    属性 类型 说明
    errcode number 错误码
    errmsg string 错误信息
    priTmplId string 添加至帐号下的模板id,发送小程序订阅消息时所需
  • 示例代码

    var res = await _lazyMiniBasic.AddTemplateAsync("1309", "测试数据", "1", "2", "3");
    

DeleteTemplateAsync

GetCategoryAsync

GetTemplateListAsync

  • 作用 : 获取当前帐号下的个人模板列表

  • 官方文档 : https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.getTemplateList.html

  • 返回值 dynamic

    {
       "errcode": 0,
       "errmsg": "ok",
       "data": [
           {
              "priTmplId": "9Aw5ZV1j9xdWTFEkqCpZ7mIBbSC34khK55OtzUPl0rU",
              "title": "报名结果通知",
              "content": "会议时间:{{date2.DATA}}\n会议地点:{{thing1.DATA}}\n",
              "example": "会议时间:2016年8月8日\n会议地点:TIT会议室\n",
              "type": 2
           }
       ]
    }
    
  • 示例代码

    var res = await _lazyMiniBasic.GetCategoryAsync();
    var ids = res.data[0].id;
    res = await _lazyMiniBasic.GetTemplateListAsync();
    

动态消息

CreateActivityIdAsync

SetUpdatableMsgAsync

小程序码

CreateQRCodeAsync

  • 作用 : 生成小程序二维码

    • 接口只能生成已发布的小程序的二维码。开发版的带参二维码可以在开发者工具预览时生成
    • wxacode.get 总共生成的码数量限制为 100,000,请谨慎调用
  • 官方文档 : https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.createQRCode.html

  • 参数

    • path : 扫码进入的小程序页面路径
    • width : 二维码的宽度
  • 返回值 返回的图片 Buffer(byte[])

  • 示例代码

    [HttpGet("CreateQRCode", Name = "CreateQRCode")]
    public async Task<FileContentResult> CreateQRCode()
    {
        var res = await _lazyMiniBasic.CreateQRCodeAsync(@"pages\index", 430);
        return new FileContentResult(res, "image/Jpeg");
    }
    
posted @ 2020-08-26 19:28  LazyWeChat  阅读(456)  评论(0)    收藏  举报