6.小程序 - ILazyMiniBasic
GetAccessTokenAsync
-
作用 : 获取小程序全局唯一后台接口调用凭据(access_token)
-
具体用法请参考 [3.公众号 - 1.ILazyWeChatBasic.md#GetAccessTokenAsync](3.公众号 - 1.ILazyWeChatBasic.md#GetAccessTokenAsync)
Code2SessionAsync
- 作用 : 登录凭证校验。通过 wx.login 接口获得临时登录凭证js_code 后传到开发者服务器调用此接口完成登录流程
- 官方文档 : https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
- 参数
- js_code : 通过 wx.login 接口获得的临时登录凭证js_code
- 返回值 dynamic
| 属性 | 类型 | 说明 |
|---|---|---|
| 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 导致数据重复
-
参数 : 可以通过如下两种方式调用
- getPaidUnionIdwtTransactionIdAsync
- openid
- transaction_id
- getPaidUnionIdwtOutTradeNoAsync
- openid
- out_trade_no
- getPaidUnionIdwtTransactionIdAsync
-
返回值 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
-
作用 : 发送统一服务消息
-
参数
- 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
-
作用 : 发送客服消息
-
参数
- 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
-
作用 : 获取客服消息内的临时素材
-
参数
- media_id
-
返回值 byte[]
-
示例代码
var res = await _lazyMiniBasic.GetTempMediaAsync(res.media_id);
UploadTempMediaAsync
-
作用 : 把媒体文件上传到微信服务器, 目前仅支持图片
-
参数
- 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);
订阅消息
-
获取模板 ID
-
在公共模板库找到适合自己的模板
![image-20200810194517264]()
-
在微信公众平台手动配置获取模板 ID
-
如果没有合适的模板,可以申请添加新模板,审核通过后可使用
-
-
小程序中获取下发权限
-
使用wx.requestSubscribeMessage(Object object)接口
备注 : 次接口需要2.8.2以上的基础库
![image-20200810194808706]()
-
SendSubscribeMessageAsync
-
作用 : 发送订阅消息
-
参数 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
-
作用 : 将模板并添加至帐号下的个人模板库
-
参数
- 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
-
作用 : 删除帐号下的个人模板
-
参数
- priTmplId : 要删除的模板id
-
返回值 dynamic
-
示例代码
var res = await _lazyMiniBasic.AddTemplateAsync("1309", "测试数据", "1", "2", "3"); var priTmplId = res.priTmplId; res = await _lazyMiniBasic.DeleteTemplateAsync(priTmplId);
GetCategoryAsync
-
作用 : 获取小程序账号的类目
-
返回值 dynamic
{ "errcode": 0, "errmsg": "ok", "data": [ { "id": 616, "name": "公交" } ] } -
示例代码
var res = await _lazyMiniBasic.GetCategoryAsync();
GetTemplateListAsync
-
作用 : 获取当前帐号下的个人模板列表
-
返回值 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
-
作用 : 创建动态消息需要的activity_id, 该activity_id可被用于wx.updateShareMenu中的activityId参数
-
官方文档 :
-
返回值 dynamic
属性 类型 说明 activityId string 动态消息的 ID expirationTime number activity_id 的过期时间戳。默认24小时后过期。 errCode number 错误码 -
示例代码
var res = await _lazyMiniBasic.CreateActivityIdAsync();
SetUpdatableMsgAsync
- 作用 : 修改被分享的动态消息
- 官方文档 : https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/updatable-message/updatableMessage.setUpdatableMsg.html
- 参数 : 具体的参数说明请参考官方文档
- activity_id : 动态消息的ID
- target_state : 动态消息修改后的状态
- parameters : 模板中需要修改的参数列表
小程序码
CreateQRCodeAsync
-
作用 : 生成小程序二维码
- 接口只能生成已发布的小程序的二维码。开发版的带参二维码可以在开发者工具预览时生成
- 与 wxacode.get 总共生成的码数量限制为 100,000,请谨慎调用
-
参数
- 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"); }



浙公网安备 33010602011771号