@tnwx/miniprogram
Version:
TNWX 微信系开发脚手架之极速开发微信小程序
391 lines • 19 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const util = require("util");
const accesstoken_1 = require("@tnwx/accesstoken");
const kits_1 = require("@tnwx/kits");
/**
* @author Javen
* @copyright javendev@126.com
* @description 微信小程序、小游戏相关 API
*/
class MiniProgramApi {
/**
* 校验服务器所保存的登录态 session_key 是否合法
* @param openId 用户唯一标识符
* @param signature 用户登录态签名
* @param sigMethod 用户登录态签名的哈希方法
*/
static checkSessionKey(openId, signature, sigMethod) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.checkSessionKeyUrl, accessToken.getAccessToken, signature, openId, sigMethod);
return kits_1.HttpKit.getHttpDelegate.httpGet(url);
});
}
/**
* @param appId 小程序 appId
* @param secret 小程序 appSecret
* @param jsCode 登录时获取的 code
*/
static code2Session(appId, secret, jsCode) {
return __awaiter(this, void 0, void 0, function* () {
let url = util.format(this.code2SessionUrl, appId, secret, jsCode);
return kits_1.HttpKit.getHttpDelegate.httpGet(url);
});
}
/**
* 校验图片是否违规
* @param imgPath 图片路径
*/
static imgSecCheck(imgPath) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.imgSecCheckUrl, accessToken.getAccessToken);
return kits_1.HttpKit.getHttpDelegate.upload(url, imgPath, '');
});
}
/**
* 异步校验图片/音频是否违规
* @param mediaUrl
* @param mediaType
*/
static mediaCheckAsync(mediaUrl, mediaType) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.mediaCheckAsyncUrl, accessToken.getAccessToken);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
media_url: mediaUrl,
media_type: mediaType
}));
});
}
/**
* 校验文本是否违规
* @param content
*/
static msgSecCheck(content) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.msgSecCheckUrl, accessToken.getAccessToken);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
content: content
}));
});
}
/**
* 删除已经上报到微信的key-value数据
* @param openId 用户唯一标识符
* @param signature 用户登录态签名
* @param sigMethod 用户登录态签名的哈希方法
* @param key 要删除的数据key列表
*/
static removeUserStorage(openId, signature, sigMethod, keys) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.removeUserStorageUrl, accessToken.getAccessToken, signature, openId, sigMethod);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
key: keys
}));
});
}
/**
* 写用户关系链互动数据存储
* @param openId 用户唯一标识符
* @param signature 用户登录态签名
* @param sigMethod 用户登录态签名的哈希方法
* @param kvList 要删除的数据列表 {"key":"1","value":0}
*/
static setUserInteractiveData(openId, signature, sigMethod, kvList) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.setUserInteractiveDataUrl, accessToken.getAccessToken, signature, openId, sigMethod);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
kv_list: kvList
}));
});
}
/**
* 写用户关系链互动数据存储
* @param openId 用户唯一标识符
* @param signature 用户登录态签名
* @param sigMethod 用户登录态签名的哈希方法
* @param kvList 要删除的数据列表 {"key":"1","value":0}
*/
static setUserStorage(openId, signature, sigMethod, kvList) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.setUserStorageUrl, accessToken.getAccessToken, signature, openId, sigMethod);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
kv_list: kvList
}));
});
}
/**
* 创建被分享动态消息的 activity_id
*/
static createActivityId() {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.createActivieyIdUrl, accessToken.getAccessToken);
return kits_1.HttpKit.getHttpDelegate.httpGet(url);
});
}
/**
* 修改被分享的动态消息
*
* @param activityId 动态消息的 ID
* @param targetState 动态消息修改后的状态
* @param templateInfo 动态消息对应的模板信息
*/
static setUpdatableMsg(activityId, targetState, templateInfo) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.setUpdatableMsgUrl, accessToken.getAccessToken);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
activity_id: activityId,
target_state: targetState,
template_info: templateInfo
}));
});
}
/**
* 获取小程序二维码
* 适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制
*
* @param path
* @param width
*/
static createQRCode(path, width = 430) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.createQRCodeUrl, accessToken.getAccessToken);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
path: path,
width: width
}), {
headers: { 'Content-type': 'application/json' },
responseType: 'arraybuffer'
});
});
}
/**
* 获取小程序二维码
* 适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制
*
* @param path
* @param width
* @param autoColor
* @param lineColor
* @param isHyaline
*/
static getWxAcode(path, width = 430, autoColor = false, lineColor = { r: 0, g: 0, b: 0 }, isHyaline = false) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.getWxAcodeUrl, accessToken.getAccessToken);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
path: path,
width: width,
auto_color: autoColor,
line_color: lineColor,
is_hyaline: isHyaline
}), {
headers: { 'Content-type': 'application/json' },
responseType: 'arraybuffer'
});
});
}
/**
* 获取小程序二维码
* 适用于需要的码数量极多的业务场景。通过该接口生成的小程序码,永久有效,数量暂无限制。
* @param scene
* @param page
* @param width
* @param autoColor
* @param lineColor
* @param isHyaline
*/
static getUnlimited(scene, page, width = 430, autoColor = false, lineColor = { r: 0, g: 0, b: 0 }, isHyaline = false) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.getUnlimitedUrl, accessToken.getAccessToken);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
scene: scene,
page: page,
width: width,
auto_color: autoColor,
line_color: lineColor,
is_hyaline: isHyaline
}), {
headers: { 'Content-type': 'application/json' },
responseType: 'arraybuffer'
});
});
}
/**
* 发送订阅消息
*
* @param toUser 接收者(用户)的 openid
* @param templateId 所需下发的订阅模板id
* @param data 模板内容
* @param page 跳转页面路径
*/
static sendSubscribeMsg(toUser, templateId, data, page) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.sendSubscribeMsgUrl, accessToken.getAccessToken);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
touser: toUser,
template_id: templateId,
page: page,
data: data
}));
});
}
/**
* 用户支付完成后,获取该用户的 UnionId,无需用户授权
* @param openId 支付用户唯一标识
* @param transactionId 微信支付订单号
*/
static getPaidUnionidByTransactionId(openId, transactionId) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.getPaidUnionidByTransactionIdUrl, accessToken.getAccessToken, openId, transactionId);
return kits_1.HttpKit.getHttpDelegate.httpGet(url);
});
}
/**
* 用户支付完成后,获取该用户的 UnionId,无需用户授权
* @param openId 支付用户唯一标识
* @param mchId 微信支付商户号
* @param outTradeNo 微信支付商户订单号
*/
static getPaidUnionidByMchId(openId, mchId, outTradeNo) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.getPaidUnionidByMchIdUrl, accessToken.getAccessToken, openId, mchId, outTradeNo);
return kits_1.HttpKit.getHttpDelegate.httpGet(url);
});
}
/**
* SOTER 生物认证秘钥签名验证
* @param openId 用户 openid
* @param jsonString 通过 wx.startSoterAuthentication 成功回调获得的 resultJSON 字段
* @param jsonSignature 通过 wx.startSoterAuthentication 成功回调获得的 resultJSONSignature 字段
*/
static verifySoterSignature(openId, jsonString, jsonSignature) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.verifySoterSignatureUrl, accessToken.getAccessToken);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
openid: openId,
json_string: jsonString,
json_signature: jsonSignature
}));
});
}
/**
* 调用服务平台提供的服务
* @param service 服务 ID
* @param api 接口名
* @param clientMsgId 随机字符串 ID,调用方请求的唯一标识
* @param data 服务提供方接口数据
*/
static serviceMarket(service, api, clientMsgId, data) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.serviceMarketUrl, accessToken.getAccessToken);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
service: service,
api: api,
client_msg_id: clientMsgId,
data: data
}));
});
}
/**
* 小程序开发者可以通过本接口提交小程序页面url及参数信息,
* 让微信可以更及时的收录到小程序的页面信息,
* 开发者提交的页面信息将可能被用于小程序搜索结果展示。
* @param pages 小程序页面信息列表
*/
static submitPages(pages) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.submitPagesUrl, accessToken.getAccessToken);
return kits_1.HttpKit.getHttpDelegate.httpPost(url, JSON.stringify({
pages: pages
}));
});
}
/**
* 实时日志查询
* @param date YYYYMMDD格式的日期,仅支持最近7天
* @param begintime 开始时间,必须是date指定日期的时间
* @param endtime 结束时间,必须是date指定日期的时间
* @param start 开始返回的数据下标,用作分页,默认为0
* @param limit 返回的数据条数,用作分页,默认为20
* @param traceId 小程序启动的唯一ID,按TraceId查询会展示该次小程序启动过程的所有页面的日志。
* @param path 小程序页面路径,例如pages/index/index
* @param id 用户微信号或者OpenId
* @param filterMsg 开发者通过setFileterMsg/addFilterMsg指定的filterMsg字段
* @param level 日志等级,返回大于等于level等级的日志,level的定义为2(Info)、4(Warn)、8(Error),如果指定为4,则返回大于等于4的日志,即返回Warn和Error日志。
*/
static userLogSearch(date, begintime, endtime, start = 0, limit = 20, traceId, path, id, filterMsg, level) {
return __awaiter(this, void 0, void 0, function* () {
let accessToken = yield accesstoken_1.AccessTokenApi.getAccessToken();
let url = util.format(this.userLogSearchUrl, accessToken.getAccessToken, date, begintime, endtime, start, limit);
if (traceId) {
url.concat('&traceId=').concat(traceId);
}
if (path) {
url.concat('&url=').concat(path);
}
if (id) {
url.concat('&id=').concat(id);
}
if (filterMsg) {
url.concat('&filterMsg=').concat(filterMsg);
}
if (level) {
url.concat('&level=').concat(level.toString());
}
return kits_1.HttpKit.getHttpDelegate.httpGet(url);
});
}
}
exports.MiniProgramApi = MiniProgramApi;
MiniProgramApi.checkSessionKeyUrl = 'https://api.weixin.qq.com/wxa/checksession?access_token=%s&signature=%s&openid=%s&sig_method=%s';
MiniProgramApi.code2SessionUrl = 'https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code';
MiniProgramApi.imgSecCheckUrl = 'https://api.weixin.qq.com/wxa/img_sec_check?access_token=%s';
MiniProgramApi.mediaCheckAsyncUrl = 'https://api.weixin.qq.com/wxa/media_check_async?access_token=%s';
MiniProgramApi.msgSecCheckUrl = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token=%s';
MiniProgramApi.removeUserStorageUrl = 'https://api.weixin.qq.com/wxa/remove_user_storage?access_token=%s&signature=%s&openid=%s&sig_method=%s';
MiniProgramApi.setUserInteractiveDataUrl = 'https://api.weixin.qq.com/wxa/setuserinteractivedata?access_token=%s&signature=%s&openid=%s&sig_method=%s';
MiniProgramApi.setUserStorageUrl = 'https://api.weixin.qq.com/wxa/set_user_storage?access_token=%s&signature=%s&openid=%s&sig_method=%s';
MiniProgramApi.createActivieyIdUrl = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/activityid/create?access_token=%s';
MiniProgramApi.setUpdatableMsgUrl = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/updatablemsg/send?access_token=%s';
MiniProgramApi.createQRCodeUrl = 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=%s';
MiniProgramApi.getWxAcodeUrl = 'https://api.weixin.qq.com/wxa/getwxacode?access_token=%s';
MiniProgramApi.getUnlimitedUrl = 'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=%s';
MiniProgramApi.sendSubscribeMsgUrl = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=%s';
MiniProgramApi.getPaidUnionidByTransactionIdUrl = 'https://api.weixin.qq.com/wxa/getpaidunionid?access_token=%s&openid=%s&transaction_id=%s';
MiniProgramApi.getPaidUnionidByMchIdUrl = 'https://api.weixin.qq.com/wxa/getpaidunionid?access_token=%s&openid=%s&mch_id=%s&out_trade_no=%s';
MiniProgramApi.verifySoterSignatureUrl = 'https://api.weixin.qq.com/cgi-bin/soter/verify_signature?access_token=%s';
MiniProgramApi.serviceMarketUrl = 'https://api.weixin.qq.com/wxa/servicemarket?access_token=%s';
MiniProgramApi.submitPagesUrl = 'https://api.weixin.qq.com/wxa/search/wxaapi_submitpages?access_token=%s';
MiniProgramApi.userLogSearchUrl = 'https://api.weixin.qq.com/wxaapi/userlog/userlog_search?access_token=%s&date=%s&begintime=%s&endtime=%s&start=%s&limit=%s';
var MiniProgramMediaType;
(function (MiniProgramMediaType) {
MiniProgramMediaType[MiniProgramMediaType["VOICE"] = 1] = "VOICE";
MiniProgramMediaType[MiniProgramMediaType["IMG"] = 2] = "IMG";
})(MiniProgramMediaType = exports.MiniProgramMediaType || (exports.MiniProgramMediaType = {}));
//# sourceMappingURL=MiniProgramApi.js.map