weixin-js-sdk 升级及 @types/react 升级

This commit is contained in:
Wang Kejun 2023-11-04 12:11:39 +08:00
parent fc7bc6a4ec
commit 3f66903a7f
16 changed files with 141 additions and 849 deletions

View File

@ -1,12 +1,17 @@
/// <reference types="react" />
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../oak-app-domain").EntityDict, keyof import("../../../oak-app-domain").EntityDict, false, {
bgColor: string;
bgImg: string;
bgImgUrl: string;
selectedIndex: number;
list: {
redDot: boolean;
text: string;
pagePath: string;
iconName?: string | undefined;
selectedIconName?: string | undefined;
iconPath?: string | undefined;
selectedIconPath?: string | undefined;
iconSize?: string | undefined;
}[];
color: string;
selectedColor: string;

View File

@ -4,7 +4,7 @@ export default OakComponent({
// 背景色
bgColor: '',
// 背景图
bgImg: '',
bgImgUrl: '',
// 当前选中索引
selectedIndex: 0,
// tab 项

View File

@ -37,8 +37,8 @@
.@{component}__item-image {
display: block;
width: 52rpx;
height: 52rpx;
width: 22px;
height: 22px;
}
.@{component}__item-text {

View File

@ -1,10 +1,26 @@
<view wx:if="{{showTabBar}}" class="tab-bar"
style="{{bgColor?'background-color:'+bgColor+';':''}} {{bgImg?'background-image: url('+bgImg+');':''}}">
style="{{bgColor?'background-color:'+bgColor+';':''}} {{bgImg?'background-image: url('+bgImgUrl+');':''}}">
<view class="tab-bar__item-wrapper" data-index="{{index}}" mut-bind:tap="onTapItem" style="width:{{750/list.length}}rpx" wx:for="{{list}}" wx:key="index">
<view class="tab-bar__item-container">
<!-- 标签图标 -->
<l-badge show="{{item.redDot}}" dot="{{item.redDot===true}}" value="{{item.redDot}}" data-index="{{index}}" mut-bind:lintap="onTapItem">
<oak-icon name="{{selectedIndex===index?item.selectedIconName:item.iconName}}" size="{{item.iconSize || 22}}" color="{{selectedIndex===index? selectedColor : color}}" />
<block wx:if="{{selectedIndex===index}}">
<block wx:if="{{item.selectedIconPath}}">
<image class="tab-bar__item-image" src={{item.selectedIconPath}} style="{{item.iconSize ? 'width: '+item.iconSize+ 'px;' : ''}} {{item.iconSize ? 'height: '+item.iconSize+ 'px;' : ''}}" />
</block>
<block wx:else>
<oak-icon name="{{item.selectedIconName}}" size="{{item.iconSize || 22}}" color="{{selectedColor}}" />
</block>
</block>
<block wx:else>
<block wx:if="{{item.iconPath}}">
<image class="tab-bar__item-image" src={{item.iconPath}} style="{{item.iconSize ? 'width: '+item.iconSize+ 'px;' : ''}} {{item.iconSize ? 'height: '+item.iconSize+ 'px;' : ''}}" />
</block>
<block wx:else>
<oak-icon name="{{item.iconName}}" size="{{item.iconSize || 22}}" color="{{color}}" />
</block>
</block>
</l-badge>
<!-- 标签文字 -->
<view wx:if="{{item.text}}" class="tab-bar__item-text {{ selectedIndex===index ? 'tab-bar__item--selected' : '' }}" style="color: {{selectedIndex===index ? selectedColor : color}}">

View File

@ -1,4 +1,3 @@
/// <reference path="../../typings/weixin-js-sdk.d.ts" />
import { Feature } from 'oak-frontend-base';
import { CommonAspectDict } from 'oak-common-aspect';
import { EntityDict } from '../oak-app-domain';
@ -8,7 +7,17 @@ import { FrontendRuntimeContext } from '../context/FrontendRuntimeContext';
import { Cache } from 'oak-frontend-base/es/features/cache';
import { LocalStorage } from 'oak-frontend-base/es/features/localStorage';
import { Environment } from 'oak-frontend-base/es/features/environment';
type Options = WeixinJsSdk.CheckJsApiOptions | WeixinJsSdk.AddCardOptions | WeixinJsSdk.ChooseCardOptions | WeixinJsSdk.OnMenuShareTimelineOptions | WeixinJsSdk.OnMenuShareAppMessageOptions | WeixinJsSdk.OnMenuShareQQ | WeixinJsSdk.OnMenuShareWeibo | WeixinJsSdk.OnMenuShareQZone | WeixinJsSdk.ChooseImageOptions | WeixinJsSdk.PreviewImageOptions | WeixinJsSdk.UploadImageOptions | WeixinJsSdk.DownloadImageOptions | WeixinJsSdk.GetLocalImgDataOptions | WeixinJsSdk.LocalVoiceOptions | WeixinJsSdk.UploadVoiceOptions | WeixinJsSdk.DownloadVoiceOptions | WeixinJsSdk.OpenLocationOptions | WeixinJsSdk.GetLocationOptions | WeixinJsSdk.ScanQRCodeOptions | WeixinJsSdk.OpenProductSpecificViewOptions | WeixinJsSdk.ChooseCardOptions | WeixinJsSdk.OpenCardOptions | WeixinJsSdk.ChooseWXPayOptions;
import wx from 'weixin-js-sdk';
type ConfigOptions = {
debug?: boolean;
appId: string;
timestamp: number;
nonceStr: string;
signature: string;
jsApiList?: wx.jsApiList;
openTagList?: wx.openTagList;
};
type ParamOptions = wx.IcheckJsApi | wx.IaddCard | wx.IchooseCard | wx.IonMenuShareTimeline | wx.IonMenuShareAppMessage | wx.IonMenuShareQQ | wx.IonMenuShareWeibo | wx.IonMenuShareQZone | wx.IchooseImage | wx.IpreviewImage | wx.IuploadImage | wx.IdownloadImage | wx.IgetLocalImgData | wx.IplaypausestopVoice | wx.IupdownloadVoice | wx.IopenLocation | wx.IgetLocation | wx.IscanQRCode | wx.IopenProductSpecificView | wx.IchooseCard | wx.IopenCard | wx.IchooseWXPay;
export declare class WeiXinJsSdk<ED extends EntityDict, Cxt extends BackendRuntimeContext<ED>, FrontCxt extends FrontendRuntimeContext<ED, Cxt, AD>, AD extends AspectDict<ED, Cxt> & CommonAspectDict<ED, Cxt>> extends Feature {
private cache;
private storage;
@ -16,15 +25,15 @@ export declare class WeiXinJsSdk<ED extends EntityDict, Cxt extends BackendRunti
private landingUrl?;
constructor(cache: Cache<ED, Cxt, FrontCxt, AD>, storage: LocalStorage, environment: Environment);
signatureJsSDK(url: string): Promise<ReturnType<(AD & CommonAspectDict<ED, Cxt>)["signatureJsSDK"]>>;
getConfig(config: WeixinJsSdk.ConfigOptions): Promise<unknown>;
getConfig(config: ConfigOptions): Promise<unknown>;
setLandingUrl(url?: string): void;
init(options?: {
jsApiList?: WeixinJsSdk.JSApis[];
openTagList?: string[];
jsApiList?: wx.jsApiList;
openTagList?: wx.openTagList;
}): Promise<unknown>;
/**
* jssdk
*/
loadWxAPi(name: WeixinJsSdk.JSApis, options?: Options, jsApiList?: WeixinJsSdk.JSApis[], openTagList?: string[]): Promise<object>;
loadWxAPi(name: wx.ApiMethod, options?: ParamOptions, jsApiList?: wx.jsApiList, openTagList?: wx.openTagList): Promise<object>;
}
export {};

View File

@ -1,9 +1,8 @@
/// <reference path="../../typings/weixin-js-sdk.d.ts" />
import { Feature } from 'oak-frontend-base';
import { isIos, isWeiXin, isWeiXinDevTools, } from 'oak-frontend-base/es/utils/utils';
import { promisify as wxPromisify } from 'oak-frontend-base/es/utils/promisify';
import { uniq } from 'oak-domain/lib/utils/lodash';
import weixin from 'weixin-js-sdk';
import wx from 'weixin-js-sdk';
export class WeiXinJsSdk extends Feature {
cache;
storage;
@ -26,12 +25,12 @@ export class WeiXinJsSdk extends Feature {
}
async getConfig(config) {
return new Promise((resolve, reject) => {
weixin.config(config);
weixin.ready(() => {
wx.config(config);
wx.ready(() => {
console.log('调用wx.config通过');
resolve('');
});
weixin.error((err) => {
wx.error((err) => {
const error = `调用wx.config出错: ${JSON.stringify(err)},请重新尝试`;
reject(error);
});
@ -85,7 +84,6 @@ export class WeiXinJsSdk extends Feature {
nonceStr: result.noncestr,
signature: result.signature,
jsApiList: jsApiList2,
beta: false,
openTagList: openTagList2,
});
}
@ -94,7 +92,7 @@ export class WeiXinJsSdk extends Feature {
*/
async loadWxAPi(name, options, jsApiList, openTagList) {
await this.init({ jsApiList, openTagList });
const wxFn = wxPromisify(weixin[name]);
const wxFn = wxPromisify(wx[name]);
const result = await wxFn(options);
return result;
}

View File

@ -1,12 +1,17 @@
/// <reference types="react" />
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../oak-app-domain").EntityDict, keyof import("../../../oak-app-domain").EntityDict, false, {
bgColor: string;
bgImg: string;
bgImgUrl: string;
selectedIndex: number;
list: {
redDot: boolean;
text: string;
pagePath: string;
iconName?: string | undefined;
selectedIconName?: string | undefined;
iconPath?: string | undefined;
selectedIconPath?: string | undefined;
iconSize?: string | undefined;
}[];
color: string;
selectedColor: string;

View File

@ -6,7 +6,7 @@ exports.default = OakComponent({
// 背景色
bgColor: '',
// 背景图
bgImg: '',
bgImgUrl: '',
// 当前选中索引
selectedIndex: 0,
// tab 项

View File

@ -37,8 +37,8 @@
.@{component}__item-image {
display: block;
width: 52rpx;
height: 52rpx;
width: 22px;
height: 22px;
}
.@{component}__item-text {

View File

@ -1,10 +1,26 @@
<view wx:if="{{showTabBar}}" class="tab-bar"
style="{{bgColor?'background-color:'+bgColor+';':''}} {{bgImg?'background-image: url('+bgImg+');':''}}">
style="{{bgColor?'background-color:'+bgColor+';':''}} {{bgImg?'background-image: url('+bgImgUrl+');':''}}">
<view class="tab-bar__item-wrapper" data-index="{{index}}" mut-bind:tap="onTapItem" style="width:{{750/list.length}}rpx" wx:for="{{list}}" wx:key="index">
<view class="tab-bar__item-container">
<!-- 标签图标 -->
<l-badge show="{{item.redDot}}" dot="{{item.redDot===true}}" value="{{item.redDot}}" data-index="{{index}}" mut-bind:lintap="onTapItem">
<oak-icon name="{{selectedIndex===index?item.selectedIconName:item.iconName}}" size="{{item.iconSize || 22}}" color="{{selectedIndex===index? selectedColor : color}}" />
<block wx:if="{{selectedIndex===index}}">
<block wx:if="{{item.selectedIconPath}}">
<image class="tab-bar__item-image" src={{item.selectedIconPath}} style="{{item.iconSize ? 'width: '+item.iconSize+ 'px;' : ''}} {{item.iconSize ? 'height: '+item.iconSize+ 'px;' : ''}}" />
</block>
<block wx:else>
<oak-icon name="{{item.selectedIconName}}" size="{{item.iconSize || 22}}" color="{{selectedColor}}" />
</block>
</block>
<block wx:else>
<block wx:if="{{item.iconPath}}">
<image class="tab-bar__item-image" src={{item.iconPath}} style="{{item.iconSize ? 'width: '+item.iconSize+ 'px;' : ''}} {{item.iconSize ? 'height: '+item.iconSize+ 'px;' : ''}}" />
</block>
<block wx:else>
<oak-icon name="{{item.iconName}}" size="{{item.iconSize || 22}}" color="{{color}}" />
</block>
</block>
</l-badge>
<!-- 标签文字 -->
<view wx:if="{{item.text}}" class="tab-bar__item-text {{ selectedIndex===index ? 'tab-bar__item--selected' : '' }}" style="color: {{selectedIndex===index ? selectedColor : color}}">

View File

@ -1,4 +1,3 @@
/// <reference path="../../typings/weixin-js-sdk.d.ts" />
import { Feature } from 'oak-frontend-base';
import { CommonAspectDict } from 'oak-common-aspect';
import { EntityDict } from '../oak-app-domain';
@ -8,7 +7,17 @@ import { FrontendRuntimeContext } from '../context/FrontendRuntimeContext';
import { Cache } from 'oak-frontend-base/es/features/cache';
import { LocalStorage } from 'oak-frontend-base/es/features/localStorage';
import { Environment } from 'oak-frontend-base/es/features/environment';
type Options = WeixinJsSdk.CheckJsApiOptions | WeixinJsSdk.AddCardOptions | WeixinJsSdk.ChooseCardOptions | WeixinJsSdk.OnMenuShareTimelineOptions | WeixinJsSdk.OnMenuShareAppMessageOptions | WeixinJsSdk.OnMenuShareQQ | WeixinJsSdk.OnMenuShareWeibo | WeixinJsSdk.OnMenuShareQZone | WeixinJsSdk.ChooseImageOptions | WeixinJsSdk.PreviewImageOptions | WeixinJsSdk.UploadImageOptions | WeixinJsSdk.DownloadImageOptions | WeixinJsSdk.GetLocalImgDataOptions | WeixinJsSdk.LocalVoiceOptions | WeixinJsSdk.UploadVoiceOptions | WeixinJsSdk.DownloadVoiceOptions | WeixinJsSdk.OpenLocationOptions | WeixinJsSdk.GetLocationOptions | WeixinJsSdk.ScanQRCodeOptions | WeixinJsSdk.OpenProductSpecificViewOptions | WeixinJsSdk.ChooseCardOptions | WeixinJsSdk.OpenCardOptions | WeixinJsSdk.ChooseWXPayOptions;
import wx from 'weixin-js-sdk';
type ConfigOptions = {
debug?: boolean;
appId: string;
timestamp: number;
nonceStr: string;
signature: string;
jsApiList?: wx.jsApiList;
openTagList?: wx.openTagList;
};
type ParamOptions = wx.IcheckJsApi | wx.IaddCard | wx.IchooseCard | wx.IonMenuShareTimeline | wx.IonMenuShareAppMessage | wx.IonMenuShareQQ | wx.IonMenuShareWeibo | wx.IonMenuShareQZone | wx.IchooseImage | wx.IpreviewImage | wx.IuploadImage | wx.IdownloadImage | wx.IgetLocalImgData | wx.IplaypausestopVoice | wx.IupdownloadVoice | wx.IopenLocation | wx.IgetLocation | wx.IscanQRCode | wx.IopenProductSpecificView | wx.IchooseCard | wx.IopenCard | wx.IchooseWXPay;
export declare class WeiXinJsSdk<ED extends EntityDict, Cxt extends BackendRuntimeContext<ED>, FrontCxt extends FrontendRuntimeContext<ED, Cxt, AD>, AD extends AspectDict<ED, Cxt> & CommonAspectDict<ED, Cxt>> extends Feature {
private cache;
private storage;
@ -16,15 +25,15 @@ export declare class WeiXinJsSdk<ED extends EntityDict, Cxt extends BackendRunti
private landingUrl?;
constructor(cache: Cache<ED, Cxt, FrontCxt, AD>, storage: LocalStorage, environment: Environment);
signatureJsSDK(url: string): Promise<ReturnType<(AD & CommonAspectDict<ED, Cxt>)["signatureJsSDK"]>>;
getConfig(config: WeixinJsSdk.ConfigOptions): Promise<unknown>;
getConfig(config: ConfigOptions): Promise<unknown>;
setLandingUrl(url?: string): void;
init(options?: {
jsApiList?: WeixinJsSdk.JSApis[];
openTagList?: string[];
jsApiList?: wx.jsApiList;
openTagList?: wx.openTagList;
}): Promise<unknown>;
/**
* jssdk
*/
loadWxAPi(name: WeixinJsSdk.JSApis, options?: Options, jsApiList?: WeixinJsSdk.JSApis[], openTagList?: string[]): Promise<object>;
loadWxAPi(name: wx.ApiMethod, options?: ParamOptions, jsApiList?: wx.jsApiList, openTagList?: wx.openTagList): Promise<object>;
}
export {};

View File

@ -2,7 +2,6 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.WeiXinJsSdk = void 0;
const tslib_1 = require("tslib");
/// <reference path="../../typings/weixin-js-sdk.d.ts" />
const oak_frontend_base_1 = require("oak-frontend-base");
const utils_1 = require("oak-frontend-base/es/utils/utils");
const promisify_1 = require("oak-frontend-base/es/utils/promisify");
@ -89,7 +88,6 @@ class WeiXinJsSdk extends oak_frontend_base_1.Feature {
nonceStr: result.noncestr,
signature: result.signature,
jsApiList: jsApiList2,
beta: false,
openTagList: openTagList2,
});
}

View File

@ -29,7 +29,7 @@
"sha1": "^1.1.1",
"tslib": "^2.4.0",
"uuid": "^8.3.2",
"weixin-js-sdk": "^1.6.0",
"weixin-js-sdk": "^1.6.3",
"x2js": "^3.4.4"
},
"peerDependencies": {
@ -55,11 +55,11 @@
"@types/lodash": "^4.14.168",
"@types/mocha": "^8.2.0",
"@types/node": "^20.6.0",
"@types/react": "^18.2.22",
"@types/react-dom": "^18.0.5",
"@types/react": "^18.2.34",
"@types/react-dom": "^18.2.14",
"@types/sha1": "^1.1.3",
"@types/uuid": "^8.3.0",
"@types/wechat-miniprogram": "^3.4.3",
"@types/uuid": "^9.0.6",
"@types/wechat-miniprogram": "^3.4.5",
"antd": "^5.9.0",
"antd-mobile": "^5.32.0",
"antd-mobile-icons": "^0.3.0",

View File

@ -1,4 +1,3 @@
/// <reference path="../../typings/weixin-js-sdk.d.ts" />
import { Feature } from 'oak-frontend-base';
import {
isIos,
@ -18,32 +17,41 @@ import { Environment } from 'oak-frontend-base/es/features/environment';
import { WebEnv } from 'oak-domain/lib/types/Environment';
import { uniq } from 'oak-domain/lib/utils/lodash';
import weixin from 'weixin-js-sdk';
import wx from 'weixin-js-sdk';
type Options =
| WeixinJsSdk.CheckJsApiOptions
| WeixinJsSdk.AddCardOptions
| WeixinJsSdk.ChooseCardOptions
| WeixinJsSdk.OnMenuShareTimelineOptions
| WeixinJsSdk.OnMenuShareAppMessageOptions
| WeixinJsSdk.OnMenuShareQQ
| WeixinJsSdk.OnMenuShareWeibo
| WeixinJsSdk.OnMenuShareQZone
| WeixinJsSdk.ChooseImageOptions
| WeixinJsSdk.PreviewImageOptions
| WeixinJsSdk.UploadImageOptions
| WeixinJsSdk.DownloadImageOptions
| WeixinJsSdk.GetLocalImgDataOptions
| WeixinJsSdk.LocalVoiceOptions
| WeixinJsSdk.UploadVoiceOptions
| WeixinJsSdk.DownloadVoiceOptions
| WeixinJsSdk.OpenLocationOptions
| WeixinJsSdk.GetLocationOptions
| WeixinJsSdk.ScanQRCodeOptions
| WeixinJsSdk.OpenProductSpecificViewOptions
| WeixinJsSdk.ChooseCardOptions
| WeixinJsSdk.OpenCardOptions
| WeixinJsSdk.ChooseWXPayOptions;
type ConfigOptions = {
debug?: boolean; // 开启调试模式,调用的所有api的返回值会在客户端alert出来若要查看传入的参数可以在pc端打开参数信息会通过log打出仅在pc端时才会打印。
appId: string; // 必填,公众号的唯一标识
timestamp: number; // 必填,生成签名的时间戳
nonceStr: string; // 必填,生成签名的随机串
signature: string; // 必填签名见附录1
jsApiList?: wx.jsApiList; // 必填需要使用的JS接口列表所有JS接口列表见附录2
openTagList?: wx.openTagList;
};
type ParamOptions =
| wx.IcheckJsApi
| wx.IaddCard
| wx.IchooseCard
| wx.IonMenuShareTimeline
| wx.IonMenuShareAppMessage
| wx.IonMenuShareQQ
| wx.IonMenuShareWeibo
| wx.IonMenuShareQZone
| wx.IchooseImage
| wx.IpreviewImage
| wx.IuploadImage
| wx.IdownloadImage
| wx.IgetLocalImgData
| wx.IplaypausestopVoice
| wx.IupdownloadVoice
| wx.IopenLocation
| wx.IgetLocation
| wx.IscanQRCode
| wx.IopenProductSpecificView
| wx.IchooseCard
| wx.IopenCard
| wx.IchooseWXPay;
export class WeiXinJsSdk<
ED extends EntityDict,
@ -78,15 +86,15 @@ export class WeiXinJsSdk<
return result;
}
async getConfig(config: WeixinJsSdk.ConfigOptions) {
async getConfig(config: ConfigOptions) {
return new Promise((resolve, reject) => {
weixin.config(config);
wx.config(config);
weixin.ready(() => {
wx.ready(() => {
console.log('调用wx.config通过');
resolve('');
});
weixin.error((err: any) => {
wx.error((err: any) => {
const error = `调用wx.config出错: ${JSON.stringify(
err
)}`;
@ -102,8 +110,8 @@ export class WeiXinJsSdk<
}
async init(options?: {
jsApiList?: WeixinJsSdk.JSApis[];
openTagList?: string[];
jsApiList?: wx.jsApiList;
openTagList?: wx.openTagList;
}) {
if (!isWeiXin) {
console.warn('只能在微信客户端初始化JSSDK');
@ -119,7 +127,7 @@ export class WeiXinJsSdk<
const splitUrl = url.split('#')[0];
const result = await this.signatureJsSDK(splitUrl); // 接口回来的是noncestr 不是nonceStr
let jsApiList2: WeixinJsSdk.JSApis[] = [
let jsApiList2: wx.jsApiList = [
'updateAppMessageShareData',
'updateTimelineShareData',
'onMenuShareTimeline',
@ -139,7 +147,7 @@ export class WeiXinJsSdk<
jsApiList2 = uniq(jsApiList2.concat(jsApiList));
}
let openTagList2 = ['wx-open-launch-weapp'];
let openTagList2: wx.openTagList = ['wx-open-launch-weapp'];
if (openTagList && openTagList instanceof Array) {
openTagList2 = uniq(openTagList2.concat(openTagList));
}
@ -151,7 +159,6 @@ export class WeiXinJsSdk<
nonceStr: result.noncestr,
signature: result.signature,
jsApiList: jsApiList2,
beta: false,
openTagList: openTagList2,
});
}
@ -160,13 +167,13 @@ export class WeiXinJsSdk<
* jssdk
*/
async loadWxAPi(
name: WeixinJsSdk.JSApis,
options?: Options,
jsApiList?: WeixinJsSdk.JSApis[],
openTagList?: string[]
name: wx.ApiMethod,
options?: ParamOptions,
jsApiList?: wx.jsApiList,
openTagList?: wx.openTagList
) {
await this.init({ jsApiList, openTagList });
const wxFn = wxPromisify((weixin as any)[name as any]);
const wxFn = wxPromisify(wx[name]);
const result = await wxFn(options);
return result;
}

1
typings/wechat.d.ts vendored
View File

@ -1,4 +1,3 @@
declare let WeixinJSBridge: any;
declare namespace WechatMiniprogram {

View File

@ -1,770 +0,0 @@
declare namespace WeixinJsSdk {
/** **************************************************************************
* Type definations
****************************************************************************/
type JSApis =
| 'updateAppMessageShareData'
| 'updateTimelineShareData'
| 'onMenuShareTimeline'
| 'onMenuShareAppMessage'
| 'onMenuShareQQ'
| 'onMenuShareWeibo'
| 'onMenuShareQZone'
| 'startRecord'
| 'stopRecord'
| 'onVoiceRecordEnd'
| 'playVoice'
| 'pauseVoice'
| 'stopVoice'
| 'onVoicePlayEnd'
| 'uploadVoice'
| 'downloadVoice'
| 'chooseImage'
| 'previewImage'
| 'uploadImage'
| 'downloadImage'
| 'translateVoice'
| 'getNetworkType'
| 'openLocation'
| 'getLocation'
| 'hideOptionMenu'
| 'showOptionMenu'
| 'hideMenuItems'
| 'showMenuItems'
| 'hideAllNonBaseMenuItem'
| 'showAllNonBaseMenuItem'
| 'closeWindow'
| 'scanQRCode'
| 'chooseWXPay'
| 'openProductSpecificView'
| 'addCard'
| 'chooseCard'
| 'openCard'
| 'checkJsApi'
| 'onRecordEnd'
| 'openWXDeviceLib'
| 'closeWXDeviceLib'
| 'configWXDeviceWiFi'
| 'getWXDeviceInfos'
| 'sendDataToWXDevice'
| 'startScanWXDevice'
| 'stopScanWXDevice'
| 'connectWXDevice'
| 'disconnectWXDevice'
| 'getWXDeviceTicket'
| 'WeixinJSBridgeReady'
| 'onWXDeviceBindStateChange'
| 'onWXDeviceStateChange'
| 'onScanWXDeviceResult'
| 'onReceiveDataFromWXDevice'
| 'onWXDeviceBluetoothStateChange';
type Menus =
| 'menuItem:exposeArticle' // 举报
| 'menuItem:setFont' // 调整字体
| 'menuItem:dayMode' // 日间模式
| 'menuItem:nightMode' // 夜间模式
| 'menuItem:refresh' // 刷新
| 'menuItem:profile' // 查看公众号(已添加)
| 'menuItem:addContact' // 查看公众号(未添加)
| 'menuItem:share:appMessage' // 发送给朋友
| 'menuItem:share:timeline' // 分享到朋友圈
| 'menuItem:share:qq' // 分享到 QQ
| 'menuItem:share:weiboApp' // 分享到 Weibo
| 'menuItem:favorite' // 收藏
| 'menuItem:share:facebook' // 分享到 Facebook
| 'menuItem:share:QZone' // 分享到 QQ 空间
| 'menuItem:editTag' // 编辑标签
| 'menuItem:delete' // 删除
| 'menuItem:copyUrl' // 复制链接
| 'menuItem:originPage' // 原网页
| 'menuItem:readMode' // 阅读模式
| 'menuItem:openWithQQBrowser' // 在QQ浏览器中打开
| 'menuItem:openWithSafari' // 在Safari中打开
| 'menuItem:share:email' // 邮件
| 'menuItem:share:brand'; // 一些特殊公众号
type scanTypes =
| 'qrCode' // 二维码
| 'barCode'; // 一维码
type ImageSize = 'original' | 'compressed';
type SourceType = 'album' | 'camera';
/** **************************************************************************
* Interface definations
****************************************************************************/
interface ConfigOptions {
/**
* ,api的返回值会在客户端alert出来
* pc端打开log打出pc端时才会打印
*/
debug?: boolean;
/**
*
*/
appId: string;
/**
*
*/
timestamp: string | number;
/**
*
*/
nonceStr: string;
/**
*
*/
signature: string;
/**
* 使JS接口列表
*/
jsApiList: JSApis[];
/* beta */
beta: boolean;
[x: string]: any;
}
/**
* wx对象(使jWeixin对象)
*
*/
interface Callbacks {
/**
*
*/
success?: (res: any) => void;
/**
*
*/
fail?: (res: any) => void;
/**
*
*/
complete?: (res: any) => void;
/**
* api才会用到
*/
cancel?: (res: any) => void;
}
interface MenuCallbacks extends Callbacks {
/**
* Menu中的按钮点击时触发的方法Menu中的相关接口
*/
trigger?: (res: any) => void;
}
interface CheckJsApiOptions extends Callbacks {
/**
* JS接口列表
*/
jsApiList: JSApis[];
}
interface OnMenuShareTimelineOptions extends MenuCallbacks {
/**
*
*/
title: string;
/**
* JS安全域名一致
*/
link: string;
/**
*
*/
imgUrl?: string;
}
interface OnMenuShareAppMessageOptions extends OnMenuShareTimelineOptions {
/**
*
*/
desc?: string;
/**
* ,musicvideo或linklink
*/
type?: 'music' | 'video' | 'link';
/**
* type是music或video
*/
dataUrl?: string;
}
interface OnMenuShareQQ extends OnMenuShareTimelineOptions {
/**
*
*/
desc?: string;
}
interface OnMenuShareWeibo extends OnMenuShareTimelineOptions {
/**
*
*/
desc?: string;
}
interface OnMenuShareQZone extends OnMenuShareTimelineOptions {
/**
*
*/
desc?: string;
}
interface ChooseImageOptions extends Callbacks {
/**
*
*
* 9
*/
count?: number;
/**
*
*/
sizeType?: ImageSize[];
/**
*
*/
sourceType?: SourceType[];
}
interface PreviewImageOptions extends Callbacks {
/**
* http
*/
current: string;
/**
* http
*/
urls: string[];
}
interface UploadImageOptions extends Callbacks {
/**
* IDchooseImage接口获得
*/
localId: string;
/**
*
*/
isShowProgressTips?: boolean;
}
interface DownloadImageOptions extends Callbacks {
/**
* IDuploadImage接口获得
*/
serverId: string;
/**
*
*/
isShowProgressTips?: boolean;
}
interface GetLocalImgDataOptions extends Callbacks {
/**
* localID
*/
localId: string;
}
interface LocalVoiceOptions extends Callbacks {
/**
* ID stopRecord
*/
localId: string;
}
interface UploadVoiceOptions extends LocalVoiceOptions {
/**
*
*/
isShowProgressTips?: boolean;
}
interface DownloadVoiceOptions extends Callbacks {
/**
* IDuploadVoice接口获得
*/
serverId: string;
/**
*
*/
isShowProgressTips?: boolean;
}
interface OpenLocationOptions extends Callbacks {
/**
* 90 ~ -90
*/
latitude: number;
/**
* 180 ~ -180
*/
longitude: number;
/**
*
*/
name: string;
/**
*
*/
address: string;
/**
* ,,1~28
*/
scale?: number;
/**
* ,
*/
infoUrl?: string;
}
interface GetLocationOptions extends Callbacks {
/**
* wgs84的gps坐标openLocation用的火星坐标'gcj02'
*/
type: 'wgs84' | 'gcj02';
}
interface StartSearchBeacons {
/**
* ticket,
*/
ticket: string;
}
interface MenuOptions {
menuList: Menus[];
}
interface ScanQRCodeOptions extends Callbacks {
/**
* 01
*/
needResult?: 0 | 1;
/**
*
*/
scanType?: scanTypes[];
}
interface OpenProductSpecificViewOptions {
/**
* id
*/
productId: string;
/**
* 0.
* 1.
* 2.
*/
viewType: 0 | 1 | 2;
}
interface ChooseCardOptions extends Callbacks {
/**
* Id
*/
shopId?: string;
/**
*
*/
cardType?: string;
/**
* Id
*/
cardId?: string;
/**
*
*/
timestamp: number;
/**
*
*/
nonceStr: string;
/**
* 'SHA1'
*/
signType: 'SHA1';
/**
*
*/
cardSign: string;
}
interface AddCard {
cardId: string;
cardExt: string;
}
interface AddCardOptions extends Callbacks {
cardList: AddCard[];
}
interface OpenCard {
cardId: string;
code: string;
}
interface OpenCardOptions extends Callbacks {
cardList: OpenCard[];
}
interface ChooseWXPayOptions extends Callbacks {
/**
* jssdk中的所有使用timestamp字段均为小写
* 使timeStamp字段名需大写其中的S字符
*/
timestamp: string;
/**
* 32
*/
nonceStr: string;
/**
* prepay_id参数值prepay_id=***
*/
package: string;
/**
* 'SHA1'使'MD5'
*/
signType: 'SHA1' | 'MD5';
/**
*
*/
paySign: string;
}
/** **************************************************************************
*
****************************************************************************/
/**
*
* 使 JS-SDK
* url url SPA web app url变化时进行调用,
* Android pushState H5
* 使 pushState web app
* Android6.2
*/
function config(options: ConfigOptions): void;
/**
*
*
* config信息验证后会执行ready方法config接口获得结果之后
* config是一个客户端的异步操作
* ready函数中调用来确保正确执行
* ready函数中
*/
function ready(callback: () => void): void;
/**
*
*
* config信息验证失败会执行error函数
* config的debug模式查看res参数中查看
* SPA可以在这里更新签名
*/
function error(callback: (res: any) => void): void;
/**
* JS接口
*
* checkJsApi接口是客户端6.0.2
* 使checkJsApi来检测
*/
function checkJsApi(options: CheckJsApiOptions): void;
/** **************************************************************************
*
****************************************************************************/
/**
*
*/
function updateTimelineShareData(options: OnMenuShareTimelineOptions): void;
/**
*
*/
function updateAppMessageShareData(
options: OnMenuShareAppMessageOptions
): void;
/**
*
*/
function onMenuShareTimeline(options: OnMenuShareTimelineOptions): void;
/**
*
*/
function onMenuShareAppMessage(options: OnMenuShareAppMessageOptions): void;
/**
* QQ
*/
function onMenuShareQQ(options: OnMenuShareQQ): void;
/**
*
*/
function onMenuShareWeibo(options: OnMenuShareWeibo): void;
/**
* QQ空间
*/
function onMenuShareQZone(options: OnMenuShareQZone): void;
/** **************************************************************************
*
****************************************************************************/
/**
*
*/
function chooseImage(options: ChooseImageOptions): void;
/**
*
*/
function previewImage(options: PreviewImageOptions): void;
/**
*
*
* 3 serverId media_id
*/
function uploadImage(options: UploadImageOptions): void;
/**
*
*/
function downloadImage(options: DownloadImageOptions): void;
/**
*
*/
function getLocalImgData(options: GetLocalImgDataOptions): void;
/** **************************************************************************
*
****************************************************************************/
/**
*
*/
function startRecord(): void;
/**
*
*/
function stopRecord(options: Callbacks): void;
/**
*
*/
function onVoiceRecordEnd(options: Callbacks): void;
/**
*
*/
function playVoice(options: LocalVoiceOptions): void;
/**
*
*/
function pauseVoice(options: LocalVoiceOptions): void;
/**
*
*/
function stopVoice(options: LocalVoiceOptions): void;
/**
*
*/
function onVoicePlayEnd(options: Callbacks): void;
/**
*
*/
function uploadVoice(options: UploadVoiceOptions): void;
/**
*
*/
function downloadVoice(options: DownloadVoiceOptions): void;
/** **************************************************************************
*
****************************************************************************/
/**
*
*/
function translateVoice(options: UploadVoiceOptions): void;
/** **************************************************************************
*
****************************************************************************/
/**
*
*/
function getNetworkType(options: Callbacks): void;
/** **************************************************************************
*
****************************************************************************/
/**
* 使
*/
function openLocation(options: OpenLocationOptions): void;
/**
*
*/
function getLocation(options: GetLocationOptions): void;
/** **************************************************************************
*
****************************************************************************/
/**
* ibeacon设备接口
*/
function startSearchBeacons(options: StartSearchBeacons): void;
/**
* ibeacon设备接口
*/
function stopSearchBeacons(options: Callbacks): void;
/**
* ibeacon设备接口
*
* 使
*/
function onSearchBeacons(options: Callbacks): void;
/** **************************************************************************
*
****************************************************************************/
/**
*
*/
function closeWindow(): void;
/**
*
*/
function hideMenuItems(options: MenuOptions): void;
/**
*
*/
function showMenuItems(options: MenuOptions): void;
/**
*
*/
function hideAllNonBaseMenuItem(): void;
/**
*
*/
function showAllNonBaseMenuItem(): void;
/** **************************************************************************
*
****************************************************************************/
/**
*
*/
function scanQRCode(options: ScanQRCodeOptions): void;
/** **************************************************************************
*
****************************************************************************/
/**
*
*/
function openProductSpecificView(
options: OpenProductSpecificViewOptions
): void;
/** **************************************************************************
*
****************************************************************************/
/**
*
*/
function chooseCard(options: ChooseCardOptions): void;
/**
*
*/
function addCard(options: AddCardOptions): void;
/**
*
*/
function openCard(options: OpenCardOptions): void;
/** **************************************************************************
*
****************************************************************************/
/**
*
*/
function chooseWXPay(options: ChooseWXPayOptions): void;
}
declare module 'weixin-js-sdk' {
export = WeixinJsSdk;
}