Akun resmi WeChat, pengembangan program WeChat, mini-game WeChat, pembayaran WeChat dan WeChat perusahaan serta enkapsulasi modul sarang API sisi server lainnya. Itu juga dapat digunakan secara langsung sebagai kelas alat.
nest-wechat adalah paket untuk bisnis penggunaan mandiri. Jika API yang Anda perlukan belum tersedia, Anda dapat mengirimkan masalahnya kepada saya dan saya akan memperbaikinya sesegera mungkin.
Dokumentasi Tiongkok
npm i --simpan sarang-wechat
pendaftaran metode pendaftaran
impor { Modul } dari '@nestjs/common';impor { WeChatModule } dari 'nest-wechat';@Module({ impor: [WeChatModule.register({appId: 'your app id', secret: 'your secret'})],})ekspor kelas AppModule {}
pendaftaran konfigurasi forRoot
import { CACHE_MANAGER, Module } dari '@nestjs/common';import { ConfigModule, ConfigService } dari '@nestjs/config';import { Cache } dari 'cache-manager';import { RedisCache, WeChatModule } dari 'nest-wechat ';@Modul({ impor: [ConfigModule.forRoot({ envFilePath: '.env.test.local',}),WeChatModule.forRootAsync({ impor: [ConfigModule], menyuntikkan: [ConfigService, CACHE_MANAGER], useFactory: (configService: ConfigService, cache: Cache) => ({appId: configService.get('WX_APPID'), rahasia: configService.get('WX_SECRET'), token: configService.get('WX_TOKEN'), pengkodeanAESKey: configService.get('WX_AESKEY'), cacheAdapter: RedisCache baru(cache), debug: benar, }),}), ]})ekspor kelas AppModule {}
impor { WeChatService } dari 'nest-wechat';const service = new WeChatService({ appId: 'ID aplikasi Anda', rahasia: 'rahasia Anda'});
/** * Antarmuka cache, harap terapkan antarmuka ini jika Anda perlu menyesuaikan cache * * antarmuka cache, harap terapkan antarmuka ini jika Anda memerlukannya. get<T> (kunci: string): Janji<T>; // eslint-disable-next-line @typescript-eslint/no-explicit-any set (kunci: string, nilai: apa saja): batal; hapus (kunci: string): boolean; tutup(): batal;}
Konfigurasikan properti baca dan tulis, ketik: WeChatModuleOptions
Atribut baca dan tulis adaptor cache, ketik: ICache, defaultnya adalah cache yang diimplementasikan oleh Map
public async getAccessTokenByCode (kode: string, _appId?: string, _secret?: string): Promise<UserAccessTokenResult>;
Kembali dengan benar
{ "access_token":"ACCESS_TOKEN", "expires_in":7200, "refresh_token":"REFRESH_TOKEN", "openid":"OPENID", "scope":"SCOPE" }
kesalahan kembali
{"errcode": 40029,"errmsg": "kode tidak valid"}
Dokumentasi referensi
Akun resmi menarik informasi pengguna
getUserInfo async publik (accessToken: string, openid: string, lang: 'zh_CN' | 'zh_TW' | 'en' = 'zh_CN'): Janji<UserInfoResult>;
Kembali dengan benar
{ "openid": "OPENID", "nama panggilan": NICKNAME, "jenis kelamin": 1, "provinsi":"PROVINSI", "kota":"KOTA", "negara":"NEGARA", "headimgurl":"https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", "hak istimewa":[ "PRIVILEGE1" "PRIVILEGE2" ], "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}
kesalahan kembali
{ "errcode":40003, "errmsg":" openid tidak valid "}
getAccountAccessToken async publik (_appId?: string, _secret?: string): Janji<AccountAccessTokenResult>;
Kembali dengan benar
{ "akses_token": "52_s0Mcl3E3DBKs12rthjxG8_DOvsIC4puV9A34WQR6Bhb_30TW9W9BjhUxDRkyph-hY9Ab2QS03Q8w ZBe5UkA1k0q0hc17eUDZ7vAWItl4iahnhq_57dCoKc1dQ3AfiHUKGCCMJ2NcQ0BmbBRIKBEgAAAPGJ", "kedaluwarsa_dalam": 7200}
kesalahan kembali
{ "kode kesalahan": 40013, "errmsg": "aplikasi tidak valid"}
Dokumentasi referensi
async publik getStableAccessToken (_appId?: string, _secret?: string, force = false): Janji<AccountAccessTokenResult>;
Dokumentasi referensi
async publik getJSApiTicket (_appId?: string, _secret?: string): Janji<TicketResult>;
Kembalikan data
{ "kode kesalahan": 0, "errmsg": "ok", "tiket": "bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA", "expires_in": 7200}
Dokumentasi referensi
async publik jssdkSignature (url: string): Janji<SignatureResult>; async publik jssdkSignature (url: string, appId: string, rahasia:string): Janji<SignatureResult>;
Dokumentasi referensi
public async sendTemplateMessage (pesan: TemplateMessage, appId?: string, secret?: string): Promise<DefaultRequestResult & { msgid: string }>;
Dokumentasi referensi
public async createQRCode (data: AccountCreateQRCode, appId?: string, rahasia?: string): Janji<AccountCreateQRCodeResult>;
Dokumentasi referensi
pertunjukan publikQRCode (tiket: string): Promis<Buffer>;
Dokumentasi referensi
WeChatService.checkSignatureExpress (permintaan: Permintaan, res: Respons);
Penggunaan:
@Get('push')async pushTest (@Req() req: Permintaan, @Res() res: Response) { this.service.checkSignatureExpress(req, res);}
Dokumentasi referensi
// Mode terenkripsi WeChatService.messagePushExpressHandler (permintaan: Permintaan, res?: Respon, resText?: string); // Mode teks biasa WeChatService.plainMessagePushExpressHandler (permintaan: Permintaan, res?: Respon, resText?: string);
Penggunaan:
@Post('push')async officialPushTest (@Req() req: Permintaan, @Res() res: Response) { const decrypt = tunggu this.service.messagePushExpressHandler(req, res);}
Dokumentasi referensi
getAccessToken publik (appId?: string, rahasia?: string): Janji<AccessTokenResult>;
const service = new WeChatService({ appId: 'id aplikasi Anda', rahasia: 'rahasia Anda'}); const res = menunggu service.mp.getAccessToken();console.log(res.data.access_token);
getRid async publik (singkirkan: string, accessToken: string): Janji<RidInfo>;
public async getPluginOpenPId (kode: string, accessToken: string): Promise<DefaultRequestResult & { openpid: string }>;
public async code2Session (kode: string, appId?: string, rahasia?: string): Promise<SessionResult>;
Kembalikan data
{ "openid": "openid", "session_key": "key", "unionid": "unionid", "errcode": 0, "errmsg": "ok", }
Dokumentasi referensi
getPhoneNumber async publik (kode: string, accessToken: string);
Dokumentasi referensi
public async getQRCode (params: QRCode, accessToken: string): Promise<DefaultRequestResult & { contentType: string, buffer: Buffer }>;
public getUnlimitedQRCode (params: GetUnlimitedQRCode, accessToken: string): Promise<DefaultRequestResult & { buffer: Buffer }>;
public async createQRCode (params: CreateQRCode, accessToken: string): Promise<DefaultRequestResult & { contentType: string, buffer: Buffer }>;
public async queryScheme (skema: string, accessToken: string): Promise<DefaultRequestResult & { Scheme_info: SchemeInfo, Scheme_quota: SchemeQuota }>;
public generateScheme (params: GenerateScheme, accessToken: string): Promise<DefaultRequestResult & { openlink: string >;
public generateNFCScheme (params: GenerateNFCScheme, accessToken: string): Promise<DefaultRequestResult & { openlink: string }>;
public generateUrlLink (params: GenerateUrlLink, accessToken: string): Promise<DefaultRequestResult & { url_link: string }>;
public queryUrlLink (urlLink: string, accessToken: string): Janji<UrlLinkResult>;
public generateShortLink (params: GenerateShortLink, accessToken: string): Promise<DefaultRequestResult & { link: string }>;
sendUniformMessage publik (params: SendUniformMessage, accessToken: string): Promise<DefaultRequestResult>;
createActivityId publik (params: CreateActivityId, accessToken: string): Promise<ActivityIdResult>;
setUpdatableMsg publik (params: UpdatableMsg, accessToken: string): Janji<DefaultRequestResult>;
public deleteMessageTemplate (priTmplId: string, accessToken: string): Janji<DefaultRequestResult>;
getCategory publik (accessToken: string): Promise<DefaultRequestResult & { data: {id: number, name: string}[] }>;
getPubTemplateKeyWordsById publik (tid: angka, accessToken: string): Janji<PubTemplateKeyWords>;
getPubTemplateTitleList publik (params: PubTemplateTitleList, accessToken: string): Promise<PubTemplateTitleListResult>;
getMessageTemplateList publik (accessToken: string): Janji<MessageTemplateListResult>;
sendMessage publik (params: SendMessage, accessToken: string): Promise<DefaultRequestResult>;
public addMessageTemplate (params: MessageTemplate, accessToken: string): Promise<DefaultRequestResult & { priTmplId: string }>;
Impor modul
impor { Modul } dari '@nestjs/common';impor { WeChatMobileModule } dari 'nest-wechat';@Module({ impor: [WeChatMobileModule.register()],})ekspor kelas AppModule {}
Pengenalan alat
impor { MobileService } dari 'nest-wechat';const service = new MobileService();
getAccessToken publik (kode: string, appId: string, rahasia: string): Promise<AxiosResponse<MobileAppAccessTokenResult, any>>;
public refreshAccessToken (appId: string, refreshToken: string): Promise<AxiosResponse<MobileAppAccessTokenResult, any>>;
checkAccessToken publik (openId: string, accessToken: string): Janji<AxiosResponse<DefaultRequestResult, any>>;
pay.jsapi (pesanan: TransactionOrder, serialNo: string, privateKey: Buffer | string): Janji<{prepay_id: string}>;
pay.getTransactionById (id: string, mchId: string, serialNo: string, privateKey: Buffer | string): Janji<Trade>;
pay.getTransactionByOutTradeNo (outTradeNo: string, mchId: string, serialNo: string, privateKey: Buffer | string): Janji<Trade>;
pay.close (outTradeNo: string, mchId: string, serialNo: string, privateKey: Buffer | string);
pay.refund (pengembalian dana: RequireOnlyOne<RefundParameters, 'transaction_id' | 'out_trade_no'>, mchId: string, serialNo: string, privateKey: Buffer | string): Promise<RefundResult>;
pay.getRefund (outRefundNo: string, mchId: string, serialNo: string, privateKey: Buffer | string): Promise<RefundResult>;
pay.buildMiniProgramPayment (appId: string, prepayId: string, privateKey: Buffer | string): MiniProgramPaymentParameters;
pay.paidCallback (publicKey: Buffer | string, apiKey: string, req: Permintaan, res: Respon): Janji<Trade>;
pay.refundedCallback (sertifikat: Map<string, string>, apiKey: string, req: Request, res: Response): Promise<RefundNotifyResult>;
pay.fapiaoDevConfig (data: DevelopmentConfigRequest, mchId: string, serialNo: string, privateKey: Buffer | string);
pay.getFapiaoDevConfig (mchId: string, serialNo: string, privateKey: Buffer | string);
pay.createCardTemplate (data: CreateCardTemplateRequest, mchId: string, serialNo: string, privateKey: Buffer | string);
pay.fapiaoCallback (sertifikat: Map<string, string>, apiKey: string, req: Request, res: Response): Promise<FapiaoNotifyResult>;
pay.getUserTitle (params: GetUserTitleParams, mchId: string, serialNo: string, privateKey: Buffer | string);
pay.issueFapiao (data: IssueFapiaoRequest, mchId: string, serialNo: string, privateKey: Buffer | string);
pay.getIssueFapiao (fapiaoApplyId: string, fapiaoId: string, mchId: string, serialNo: string, privateKey: Buffer | string);
pay.reverseFapiao (fapiaoApplyId: string, data: ReverseFapiaoRequest, mchId: string, serialNo: string, privateKey: Buffer | string);
pay.rsaEncryptOAEP (teks: string, publicKey: Buffer | string);
pay.rsaDecryptOAEP (cipherText: string, privateKey: Buffer | string);
Tidak ada pedagang pengujian yang tersedia dan pengujian belum berhasil. Silakan uji sendiri. Jika Anda memiliki pertanyaan, silakan kirimkan masalah.
Pengujian dapat menjalankan pengujian unit dengan sendirinya (perlu mengubah konfigurasi)
npm jalankan tes lib/wepay.hb.spec.ts
pay.sendRedPack(redPack: RedPackData, appId: string, mchId: string, apiKey: string, publicKey: Buffer | string, privateKey: Buffer | string, group = false): Promise<AxiosResponse<string, any>>;
pay.sendGroupRedPack(redPack: GroupRedPackData, appId: string, mchId: string, apiKey: string, publicKey: Buffer | string, privateKey: Buffer | string): Promise<AxiosResponse<string, any>>;
pay.getHbInfo(billNO: string, appId: string, mchId: string, apiKey: string, publicKey: Buffer | string, privateKey: Buffer | string): Promise<AxiosResponse<string, any>>;
Dokumentasi referensi
jsapiOfPartner (pesanan: TransactionOrderOfPartner, serialNo: string, privateKey: Buffer | string);
Dokumentasi referensi
Bangun antarmuka untuk memanggil parameter pembayaran WeChat
buildJSAPIParameters (appId: string, prepayId: string, privateKey: Buffer | string): MiniProgramPaymentParameters;
Dokumentasi referensi
dibayarCallbackOfPartner (sertifikat: Peta<string, string>, apiKey: string, req: Permintaan, res: Respon): Promise<TradeOfPartner>;
Dokumentasi referensi
closeOfPartner (outTradeNo: string, spMchId: string, subMchId: string, serialNo: string, privateKey: Buffer | string);
Dokumentasi referensi
getTransactionByIdOfPartner (id: string, spMchId: string, subMchid: string, serialNo: string, privateKey: Buffer | string);
Dokumentasi referensi
getTransactionByOutTradeNoOfPartner (outTradeNo: string, spMchId: string, subMchid: string, serialNo: string, privateKey: Buffer | string);
Dokumentasi referensi
refundOfPartner (pengembalian dana: RequireOnlyOne<RefundParametersOfPartner, 'transaction_id' | 'out_trade_no'>, spMchId: string, serialNo: string, privateKey: Buffer | string);
Dokumentasi referensi
getRefundOfPartner (outRefundNo: string, spMchId: string, subMchId: string, serialNo: string, privateKey: Buffer | string);
Dokumentasi referensi
refundedCallbackOfPartner (sertifikat: Map<string, string>, apiKey: string, req: Request, res: Response): Promise<RefundNotifyResultOfPartner>;
Dokumentasi referensi
createCardTemplateOfPartner (data: CreateCardTemplateRequestOfPartner, spMchId: string, serialNo: string, privateKey: Buffer | string);
Dokumentasi referensi
fapiaoDevConfigOfPartner (data: DevelopmentConfigRequestOfPartner, spMchId: string, serialNo: string, privateKey: Buffer | string);
Dokumentasi referensi
getFapiaoDevConfigOfPartner (spMchId: string, subMchId: string, serialNo: string, privateKey: Buffer | string);
Dokumentasi referensi
fapiaoCallbackOfPartner (sertifikat: Map<string, string>, apiKey: string, req: Request, res: Response): Promise<FapiaoNotifyResultOfPartner>;
Dokumentasi referensi
getUserTitleOfPartner (params: GetUserTitleParams, spMchId: string, subMchId: string, serialNo: string, privateKey: Buffer | string);
Dokumentasi referensi
issueFapiaoOfPartner (data: IssueFapiaoRequestOfPartner, spMchId: string, serialNo: string, privateKey: Buffer | string, platformSerial: string);
Dokumentasi referensi
getIssueFapiaoOfPartner (fapiaoApplyId: string, fapiaoId: string | null | tidak terdefinisi, spMchId: string, subMchid: string, serialNo: string, privateKey: Buffer | string);
Dokumentasi referensi
reverseFapiaoOfPartner (fapiaoApplyId: string, data: ReverseFapiaoRequestOfPartner, spMchId: string, serialNo: string, privateKey: Buffer | string);
mendekripsiCipherText
decryptCipherText<T> (apiKey: string, sandi: string, data terkait: string, nonce: string): T | string;
Dokumentasi referensi
import { MessageCrypto } dari 'nest-wechat';const sha1 = MessageCrypto.sha1('string ke hash');
Metode statis:
sha1 (...args: string[]): string;
md5 (teks: string): string;
getAESKey (pengkodeanAESKey: string): Buffer;
getAESKeyIV (aesKey: Penyangga): Penyangga;
PKCS7Encoder (penggemar: Penyangga): Penyangga;
PKCS7Decoder (penggemar: Buffer): Penyangga;
mendekripsi (aesKey: Buffer, iv: Buffer, str: string): string;
mengenkripsi (aesKey: Buffer, iv: Buffer, pesan: string, appId: string): string;
createNonceStr (panjang = 16): string;
encryptMessage (appId: string, token: string, pengkodeanAESKey: string, pesan: string, stempel waktu: string, nonce: string): string;
decryptMessage (token: string, pengkodeanAESKey: string, tanda tangan: string, stempel waktu: string, nonce: string, encryptXml: string);
decryptMessage (token: string, pengkodeanAESKey: string, tanda tangan: string, stempel waktu: string, nonce: string, encryptXml: string);
checkSignature (tanda tangan: string, stempel waktu: string, nonce: string, token: string);
Buat file .env.test.local, dan simpan aplikasi pengujian dan rahasia Anda di file tersebut.
TEST_APPID=your/test/appid
TEST_SECRET=your/test/secret
TEST_JSSDK_URL=https://your/website/url
TEST_TOKEN=your/token
TEST_AESKEY=your/aeskey
REDIS_HOST=your/redis/host
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
REDIS_TTL=600
Jalankan tes e2e.
npm menjalankan tes:e2e
Jalankan pengujian unit.
npm jalankan tes wechat.service.userinfo.spec.ts
Mulai pengujian layanan
npx ts-node -T tes/e2e/wechat-app.main.ts
Konfigurasi push pesan akun publik (platform pengujian publik WeChat), setelah mengaktifkan pengujian layanan di atas, Anda dapat melewati verifikasi konfigurasi
URL: http://your/url/wechat/push, seperti: http://113.22.11.2:3001/wechat/push
Token: tes pamtest
Dapatkan access_token dari alat debugging antarmuka platform publik WeChat
tubuh
{ "grant_type": "kredensial_klien", "appid": "Anda/appid", "rahasia": "rahasia/Anda", "force_refresh": salah}
Alat debugging pada platform terbuka WeChat - alat debugging untuk pengujian push pesan untuk menguji push