@shanjing-inc/wechat-node-sdk
v0.2.0
Published
Modern TypeScript SDK for WeChat server-side APIs.
Readme
@shanjing-inc/wechat-node-sdk
现代 TypeScript 微信服务端 SDK。当前覆盖 core、mini-app、official-account、pay、work、open-platform、open-work、channel 的基础能力。
特性
- ESM first,支持 npm 子路径导出
- 原生
fetchHTTP 客户端 - Web Crypto 优先,Node crypto 通过
@shanjing-inc/wechat-node-sdk/adapters/node引入 CacheStore抽象,内置内存缓存zod配置校验fast-xml-parserXML 解析和构建vitest测试,tsup构建
安装
pnpm add @shanjing-inc/wechat-node-sdk小程序
import { createMiniAppClient } from '@shanjing-inc/wechat-node-sdk/mini-app';
const miniApp = createMiniAppClient({
appId: process.env.WECHAT_APP_ID!,
appSecret: process.env.WECHAT_APP_SECRET!
});
const session = await miniApp.code2Session('js_code');公众号
import { createOfficialAccountClient } from '@shanjing-inc/wechat-node-sdk/official-account';
const officialAccount = createOfficialAccountClient({
appId: process.env.WECHAT_APP_ID!,
appSecret: process.env.WECHAT_APP_SECRET!
});
const user = await officialAccount.getUserInfo('openid');微信支付 API v3
import { createPayClient } from '@shanjing-inc/wechat-node-sdk/pay';
import { createNodeCryptoAdapter } from '@shanjing-inc/wechat-node-sdk/adapters/node';
const pay = createPayClient({
appId: process.env.WECHAT_APP_ID!,
mchId: process.env.WECHAT_MCH_ID!,
serialNo: process.env.WECHAT_PAY_SERIAL_NO!,
privateKey: process.env.WECHAT_PAY_PRIVATE_KEY!,
apiV3Key: process.env.WECHAT_PAY_API_V3_KEY!,
crypto: createNodeCryptoAdapter()
});
const transaction = await pay.transactionsJsapi({
openid: 'openid',
description: '测试订单',
outTradeNo: 'order-1',
notifyUrl: 'https://example.com/pay/notify',
amount: { total: 1 },
settleInfo: { profitSharing: true }
});
const jsapiParams = await pay.createJsapiPaySign(transaction.prepay_id, process.env.WECHAT_APP_ID!);
const partnerTransaction = await pay.transactionsJsapi({
openid: 'sub-openid',
description: '服务商测试订单',
outTradeNo: 'partner-order-1',
notifyUrl: 'https://example.com/pay/partner-notify',
amount: { total: 1 },
subAppId: process.env.WECHAT_SUB_APP_ID!,
subMchId: process.env.WECHAT_SUB_MCH_ID!
});
const partnerJsapiParams = await pay.createJsapiPaySign(
partnerTransaction.prepay_id,
process.env.WECHAT_SUB_APP_ID!
);企业微信
import { createWorkClient } from '@shanjing-inc/wechat-node-sdk/work';
const work = createWorkClient({
corpId: process.env.WECHAT_WORK_CORP_ID!,
corpSecret: process.env.WECHAT_WORK_CORP_SECRET!
});
await work.sendMessage({
touser: 'userid',
msgtype: 'text',
agentid: 1000001,
text: { content: 'hello' }
});微信开放平台
import { createOpenPlatformClient } from '@shanjing-inc/wechat-node-sdk/open-platform';
const openPlatform = createOpenPlatformClient({
appId: process.env.WECHAT_OPEN_APP_ID!,
appSecret: process.env.WECHAT_OPEN_APP_SECRET!,
componentVerifyTicket: async () => loadComponentVerifyTicket()
});
const preAuthCode = await openPlatform.createPreAuthCode();企业微信开放平台
import { createOpenWorkClient } from '@shanjing-inc/wechat-node-sdk/open-work';
const openWork = createOpenWorkClient({
suiteId: process.env.WECHAT_WORK_SUITE_ID!,
suiteSecret: process.env.WECHAT_WORK_SUITE_SECRET!,
suiteTicket: async () => loadSuiteTicket()
});
const preAuthCode = await openWork.getPreAuthCode();视频号
import { createChannelClient } from '@shanjing-inc/wechat-node-sdk/channel';
const channel = createChannelClient({
appId: process.env.WECHAT_APP_ID!,
appSecret: process.env.WECHAT_APP_SECRET!
});
const info = await channel.getBasicsInfo();开发
pnpm install
pnpm typecheck
pnpm test
pnpm build设计说明见 docs/architecture.md。
