บัญชีอย่างเป็นทางการของ WeChat, การพัฒนาโปรแกรม WeChat, มินิเกม WeChat, การชำระเงิน WeChat และ WeChat ระดับองค์กร และการห่อหุ้มโมดูล Nestjs API ฝั่งเซิร์ฟเวอร์อื่นๆ นอกจากนี้ยังสามารถใช้เป็นคลาสเครื่องมือได้โดยตรงอีกด้วย
Nest-wechat เป็นแพ็คเกจสำหรับธุรกิจแบบใช้เอง หาก API ที่คุณต้องการใช้ยังไม่พร้อมใช้งาน คุณสามารถส่งปัญหามาให้ฉันแล้วเราจะดำเนินการแก้ไขให้โดยเร็วที่สุด
เอกสารภาษาจีน
npm i --save รัง-wechat
ลงทะเบียนวิธีการลงทะเบียน
นำเข้า { โมดูล } จาก '@nestjs/common'; นำเข้า { WeChatModule } จาก 'nest-wechat';@Module({ การนำเข้า: [WeChatModule.register({appId: 'รหัสแอปของคุณ', ความลับ: 'ความลับของคุณ'})],}) ส่งออกคลาส AppModule {}
สำหรับการลงทะเบียนการกำหนดค่ารูท
นำเข้า { CACHE_MANAGER, โมดูล } จาก '@nestjs/common'; นำเข้า { ConfigModule, ConfigService } จาก '@nestjs/config'; นำเข้า { แคช } จาก 'cache-manager'; นำเข้า { RedisCache, WeChatModule } จาก 'nest-wechat ';@โมดูล({ การนำเข้า: [ConfigModule.forRoot({ envFilePath: '.env.test.local',}),WeChatModule.forRootAsync({ นำเข้า: [ConfigModule], ฉีด: [ConfigService, CACHE_MANAGER], useFactory: (configService: ConfigService, แคช: แคช) => ({appId: configService.get('WX_APPID'), ความลับ: configService.get('WX_SECRET'), โทเค็น: configService.get('WX_TOKEN'), การเข้ารหัสAESKey: configService.get('WX_AESKEY'), cacheAdapter: ใหม่ RedisCache(แคช) ตรวจแก้จุดบกพร่อง: จริง, }),}), ]}) ส่งออกคลาส AppModule {}
นำเข้า { WeChatService } จาก 'nest-wechat';const service = new WeChatService({ appId: 'your app id', Secret: 'your Secret'});
/** * อินเทอร์เฟซแคช โปรดใช้อินเทอร์เฟซนี้หากคุณต้องการปรับแต่งอินเทอร์เฟซแคช * * แคช โปรดใช้อินเทอร์เฟซนี้หากต้องการ รับ <T> (คีย์: สตริง): สัญญา <T>; // eslint-disable-next-line @typescript-eslint/no-explicit-any ชุด (คีย์: สตริง, ค่า: ใด ๆ ): เป็นโมฆะ; ลบ (คีย์: สตริง): บูลีน; ปิด (): เป็นโมฆะ;}
กำหนดค่าคุณสมบัติการอ่านและเขียน พิมพ์: WeChatModuleOptions
อะแดปเตอร์แคชอ่านและเขียนแอตทริบิวต์ประเภท: ICache ค่าเริ่มต้นคือแคชที่นำไปใช้โดยแผนที่
async getAccessTokenByCode สาธารณะ (รหัส: สตริง, _appId?: สตริง, _secret?: สตริง): สัญญา <UserAccessTokenResult>;
กลับอย่างถูกต้อง
{ "access_token": "ACCESS_TOKEN", "expires_in":7200, "refresh_token": "REFRESH_TOKEN", "openid": "OPENID", "ขอบเขต": SCOPE " }
กลับข้อผิดพลาด
{"errcode": 40029,"errmsg": "รหัสไม่ถูกต้อง"}
เอกสารอ้างอิง
บัญชีทางการดึงข้อมูลผู้ใช้
async getUserInfo สาธารณะ (accessToken: string, openid: string, lang: 'zh_CN' | 'zh_TW' | 'en' = 'zh_CN'): สัญญา <UserInfoResult>;
กลับอย่างถูกต้อง
- "openid": "OPENID", "ชื่อเล่น": NICKNAME, "เพศ": 1, "จังหวัด": "จังหวัด", "เมือง": "เมือง", "ประเทศ": "ประเทศ", "headimgurl":https://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46", "สิทธิพิเศษ":[ "PRIVILEGE1" "PRIVILEGE2" ], "unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"}
กลับข้อผิดพลาด
{ "errcode":40003, "errmsg": openid ไม่ถูกต้อง "}
async getAccountAccessToken สาธารณะ (_appId?: string, _secret?: string): สัญญา <AccountAccessTokenResult>;
กลับอย่างถูกต้อง
{ "access_token": "52_s0Mcl3E3DBKs12rthjxG8_DOvsIC4puV9A34WQR6Bhb_30TW9W9BjhUxDRkyph-hY9Ab2QS03Q8w ZBe5UkA1k0q0hc17eUDZ7vAWItl4iahnhq_57dCoKc1dQ3AfiHUKGCCMJ2NcQ0BmbBRIKBEgAAAPGJ", "expires_in": 7200}
กลับข้อผิดพลาด
{ "errcode": 40013, "errmsg": "รหัสแอปไม่ถูกต้อง"}
เอกสารอ้างอิง
async getStableAccessToken สาธารณะ (_appId?: string, _secret?: string, force = false): สัญญา <AccountAccessTokenResult>;
เอกสารอ้างอิง
async getJSApiTicket สาธารณะ (_appId?: string, _secret?: string): สัญญา <TicketResult>;
ส่งคืนข้อมูล
{ "errcode": 0, "errmsg": "ok", "ตั๋ว": "bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA", "expires_in": 7200}
เอกสารอ้างอิง
async jssdkSignature สาธารณะ (url: string): สัญญา <SignatureResult>; async jssdkSignature สาธารณะ (url: string, appId: string, ความลับ: string): Promise <SignatureResult>;
เอกสารอ้างอิง
async sendTemplateMessage สาธารณะ (ข้อความ: TemplateMessage, appId?: string, Secret?: string): Promise<DefaultRequestResult & { msgid: string }>;
เอกสารอ้างอิง
async createQRCode สาธารณะ (ข้อมูล: AccountCreateQRCode, appId?: string, ความลับ?: string): Promise <AccountCreateQRCodeResult>;
เอกสารอ้างอิง
showQRCode สาธารณะ (ตั๋ว: สตริง): Promis<Buffer>;
เอกสารอ้างอิง
WeChatService.checkSignatureExpress (ต้องการ: คำขอ ตอบ: ตอบกลับ);
การใช้งาน:
@Get('push')async pushTest (@Req() คำขอ: คำขอ @Res() res: การตอบสนอง) { this.service.checkSignatureExpress (ต้องการ, ความละเอียด);}
เอกสารอ้างอิง
// โหมดเข้ารหัส WeChatService.messagePushExpressHandler (req: Request, res?: Response, resText?: string); // โหมดข้อความธรรมดา WeChatService.plainMessagePushExpressHandler (req: Request, res?: Response, resText?: string);
การใช้งาน:
@Post('push')async OfficialPushTest (@Req() คำขอ: คำขอ @Res() res: การตอบสนอง) { const decrypt = รอ this.service.messagePushExpressHandler (req, res);}
เอกสารอ้างอิง
getAccessToken สาธารณะ (appId?: สตริง, ความลับ?: สตริง): สัญญา <AccessTokenResult>;
const service = new WeChatService({ appId: 'your app id', Secret: 'your Secret'}); const res = await service.mp.getAccessToken();console.log(res.data.access_token);
async getRid สาธารณะ (กำจัด: สตริง, accessToken: สตริง): สัญญา <RidInfo>;
async getPluginOpenPId สาธารณะ (รหัส: สตริง, accessToken: สตริง): สัญญา <DefaultRequestResult & { openpid: string }>;
async code2Session สาธารณะ (รหัส: สตริง, appId?: สตริง, ความลับ?: สตริง): สัญญา <SessionResult>;
ส่งคืนข้อมูล
{ "openid": "openid", "session_key": "key", "unionid": "unionid", "errcode": 0, "errmsg": "ok", -
เอกสารอ้างอิง
สาธารณะ async getPhoneNumber (รหัส: สตริง, accessToken: สตริง);
เอกสารอ้างอิง
async getQRCode สาธารณะ (พารามิเตอร์: QRCode, accessToken: string): สัญญา <DefaultRequestResult & { contentType: string, บัฟเฟอร์: Buffer }>;
สาธารณะ getUnlimitedQRCode (พารามิเตอร์: GetUnlimitedQRCode, accessToken: สตริง): สัญญา <DefaultRequestResult & {บัฟเฟอร์: บัฟเฟอร์ }>;
async createQRCode สาธารณะ (พารามิเตอร์: CreateQRCode, accessToken: string): สัญญา <DefaultRequestResult & { contentType: string, บัฟเฟอร์: Buffer }>;
สาธารณะ async queryScheme (โครงการ: สตริง, accessToken: สตริง): สัญญา <DefaultRequestResult & { Scheme_info: SchemeInfo, Scheme_quota: SchemeQuota }>;
GenerateScheme สาธารณะ (พารามิเตอร์: GenerateScheme, accessToken: string): สัญญา <DefaultRequestResult & { openlink: string >;
GenerateNFCScheme สาธารณะ (พารามิเตอร์: GenerateNFCScheme, accessToken: string): สัญญา <DefaultRequestResult & { openlink: string }>;
GenerateUrlLink สาธารณะ (พารามิเตอร์: GenerateUrlLink, accessToken: string): สัญญา <DefaultRequestResult & { url_link: string }>;
queryUrlLink สาธารณะ (urlLink: สตริง, accessToken: สตริง): สัญญา <UrlLinkResult>;
GenerateShortLink สาธารณะ (พารามิเตอร์: GenerateShortLink, accessToken: สตริง): สัญญา <DefaultRequestResult & { ลิงก์: สตริง }>;
sendUniformMessage สาธารณะ (พารามิเตอร์: SendUniformMessage, accessToken: สตริง): สัญญา <DefaultRequestResult>;
createActivityId สาธารณะ (พารามิเตอร์: CreateActivityId, accessToken: สตริง): สัญญา <ActivityIdResult>;
setUpdatableMsg สาธารณะ (พารามิเตอร์: UpdatableMsg, accessToken: สตริง): สัญญา <DefaultRequestResult>;
สาธารณะ DeleteMessageTemplate (priTmplId: สตริง, accessToken: สตริง): สัญญา <DefaultRequestResult>;
getCategory สาธารณะ (accessToken: สตริง): สัญญา <DefaultRequestResult & { ข้อมูล: {id: หมายเลข ชื่อ: string}[] }>;
สาธารณะ getPubTemplateKeyWordsById (tid: หมายเลข accessToken: สตริง): สัญญา <PubTemplateKeyWords>;
สาธารณะ getPubTemplateTitleList (พารามิเตอร์: PubTemplateTitleList, accessToken: สตริง): สัญญา <PubTemplateTitleListResult>;
สาธารณะ getMessageTemplateList (accessToken: สตริง): สัญญา <MessageTemplateListResult>;
sendMessage สาธารณะ (พารามิเตอร์: SendMessage, accessToken: string): สัญญา <DefaultRequestResult>;
addMessageTemplate สาธารณะ (พารามิเตอร์: MessageTemplate, accessToken: string): สัญญา <DefaultRequestResult & { priTmplId: string }>;
การนำเข้าโมดูล
นำเข้า { โมดูล } จาก '@nestjs/common'; นำเข้า { WeChatMobileModule } จาก 'nest-wechat';@Module({ การนำเข้า: [WeChatMobileModule.register()],}) ส่งออกคลาส AppModule {}
การแนะนำเครื่องมือ
นำเข้า { MobileService } จาก 'nest-wechat';const service = new MobileService();
getAccessToken สาธารณะ (รหัส: สตริง, appId: สตริง, ความลับ: สตริง): สัญญา <AxiosResponse<MobileAppAccessTokenResult, ใด ๆ>>;
สาธารณะ RefreshAccessToken (appId: สตริง, RefreshToken: สตริง): สัญญา <AxiosResponse <MobileAppAccessTokenResult ใดๆ>>;
checkAccessToken สาธารณะ (openId: สตริง, accessToken: สตริง): สัญญา <AxiosResponse<DefaultRequestResult ใด ๆ>>;
pay.jsapi (คำสั่งซื้อ: TransactionOrder, serialNo: string, privateKey: Buffer | string): Promise<{prepay_id: string}>;
pay.getTransactionById (id: string, mchId: string, serialNo: string, privateKey: Buffer | string): สัญญา<การค้า>;
pay.getTransactionByOutTradeNo (outTradeNo: สตริง, mchId: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง): สัญญา<การค้า>;
pay.close (outTradeNo: สตริง, mchId: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
pay.refund (คืนเงิน: RequireOnlyOne <RefundParameters, 'transaction_id' | 'out_trade_no'>, mchId: string, serialNo: string, privateKey: Buffer | string): Promise <RefundResult>;
pay.getRefund (outRefundNo: สตริง, mchId: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง): สัญญา <RefundResult>;
pay.buildMiniProgramPayment (appId: สตริง, prepayId: สตริง, privateKey: บัฟเฟอร์ | สตริง): MiniProgramPaymentParameters;
pay.paidCallback (publicKey: บัฟเฟอร์ | สตริง, apiKey: สตริง, คำขอ: คำขอ, res: การตอบสนอง): สัญญา <การค้า>;
pay.refundedCallback (ใบรับรอง: Map<string, string>, apiKey: string, req: Request, res: Response): Promise<RefundNotifyResult>;
pay.fapiaoDevConfig (ข้อมูล: DevelopmentConfigRequest, mchId: string, serialNo: string, privateKey: Buffer | string);
pay.getFapiaoDevConfig (mchId: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
pay.createCardTemplate (ข้อมูล: CreateCardTemplateRequest, mchId: string, serialNo: string, privateKey: Buffer | string);
pay.fapiaoCallback (ใบรับรอง: Map<string, string>, apiKey: string, req: Request, res: Response): Promise<FapiaoNotifyResult>;
pay.getUserTitle (พารามิเตอร์: GetUserTitleParams, mchId: string, serialNo: string, privateKey: Buffer | string);
pay.issueFapiao (ข้อมูล: IssueFapiaoRequest, mchId: string, serialNo: string, privateKey: Buffer | string);
pay.getIssueFapiao (fapiaoApplyId: สตริง, fapiaoId: สตริง, mchId: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
pay.reverseFapiao (fapiaoApplyId: สตริง, ข้อมูล: ReverseFapiaoRequest, mchId: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
pay.rsaEncryptOAEP (ข้อความ: สตริง, publicKey: บัฟเฟอร์ | สตริง);
pay.rsaDecryptOAEP (ข้อความเข้ารหัส: สตริง, privateKey: บัฟเฟอร์ | สตริง);
ไม่มีร้านค้าทดสอบและการทดสอบไม่สำเร็จ โปรดทดสอบด้วยตัวเอง หากคุณมีคำถามใดๆ โปรดส่งปัญหา
การทดสอบสามารถทำการทดสอบหน่วยได้ด้วยตัวเอง (จำเป็นต้องแก้ไขการกำหนดค่า)
ทดสอบการรัน npm 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>>;
เอกสารอ้างอิง
jsapiOfPartner (คำสั่ง: TransactionOrderOfPartner, serialNo: string, privateKey: Buffer | string);
เอกสารอ้างอิง
สร้างอินเทอร์เฟซสำหรับการเรียกพารามิเตอร์การชำระเงิน WeChat
buildJSAPIParameters (appId: string, prepayId: string, privateKey: Buffer | string): MiniProgramPaymentParameters;
เอกสารอ้างอิง
PaidCallbackOfPartner (ใบรับรอง: Map<string, string>, apiKey: string, req: Request, res: Response): Promise<TradeOfPartner>;
เอกสารอ้างอิง
closeOfPartner (outTradeNo: สตริง, spMchId: สตริง, subMchId: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
เอกสารอ้างอิง
getTransactionByIdOfPartner (id: สตริง, spMchId: สตริง, subMchid: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
เอกสารอ้างอิง
getTransactionByOutTradeNoOfPartner (outTradeNo: สตริง, spMchId: สตริง, subMchid: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
เอกสารอ้างอิง
RefundOfPartner (คืนเงิน: RequireOnlyOne <RefundParametersOfPartner, 'transaction_id' | 'out_trade_no'>, spMchId: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
เอกสารอ้างอิง
getRefundOfPartner (outRefundNo: สตริง, spMchId: สตริง, subMchId: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
เอกสารอ้างอิง
RefundedCallbackOfPartner (ใบรับรอง: Map<string, string>, apiKey: string, req: Request, res: Response): Promise<RefundNotifyResultOfPartner>;
เอกสารอ้างอิง
createCardTemplateOfPartner (ข้อมูล: CreateCardTemplateRequestOfPartner, spMchId: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
เอกสารอ้างอิง
fapiaoDevConfigOfPartner (ข้อมูล: DevelopmentConfigRequestOfPartner, spMchId: string, serialNo: string, privateKey: Buffer | string);
เอกสารอ้างอิง
getFapiaoDevConfigOfPartner (spMchId: สตริง, subMchId: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
เอกสารอ้างอิง
fapiaoCallbackOfPartner (ใบรับรอง: Map<string, string>, apiKey: string, req: Request, res: Response): Promise<FapiaoNotifyResultOfPartner>;
เอกสารอ้างอิง
getUserTitleOfPartner (พารามิเตอร์: GetUserTitleParams, spMchId: สตริง, subMchId: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
เอกสารอ้างอิง
issueFapiaoOfPartner (ข้อมูล: IssueFapiaoRequestOfPartner, spMchId: string, serialNo: string, privateKey: Buffer | string, platformSerial: string);
เอกสารอ้างอิง
getIssueFapiaoOfPartner (fapiaoApplyId: สตริง, fapiaoId: สตริง | null | ไม่ได้กำหนด, spMchId: สตริง, subMchid: สตริง, serialNo: สตริง, privateKey: บัฟเฟอร์ | สตริง);
เอกสารอ้างอิง
ReverseFapiaoOfPartner (fapiaoApplyId: สตริง ข้อมูล: ReverseFapiaoRequestOfPartner, spMchId: สตริง serialNo: สตริง privateKey: บัฟเฟอร์ | สตริง);
ถอดรหัสCipherText
decryptCipherText<T> (apiKey: สตริง, การเข้ารหัส: สตริง, ข้อมูลที่เกี่ยวข้อง: สตริง, nonce: สตริง): T | สตริง;
เอกสารอ้างอิง
นำเข้า { MessageCrypto } จาก 'nest-wechat';const sha1 = MessageCrypto.sha1('string to hash');
วิธีการคงที่:
sha1 (...args: สตริง[]): สตริง;
md5 (ข้อความ: สตริง): สตริง;
getAESKey (การเข้ารหัสAESKey: สตริง): บัฟเฟอร์;
getAESKeyIV (aesKey: บัฟเฟอร์): บัฟเฟอร์;
PKCS7Encoder (บัฟ: บัฟเฟอร์): บัฟเฟอร์;
PKCS7Decoder (บัฟ: บัฟเฟอร์): บัฟเฟอร์;
ถอดรหัส (aesKey: บัฟเฟอร์, iv: บัฟเฟอร์, str: สตริง): สตริง;
เข้ารหัส (aesKey: บัฟเฟอร์, iv: บัฟเฟอร์, msg: สตริง, appId: สตริง): สตริง;
createNonceStr (ความยาว = 16): สตริง;
encryptMessage (appId: string, โทเค็น: string, encodingAESKey: string, ข้อความ: string, timestamp: string, nonce: string): string;
decryptMessage (โทเค็น: สตริง, การเข้ารหัส AESKey: สตริง, ลายเซ็น: สตริง, การประทับเวลา: สตริง, nonce: สตริง, encryptXml: สตริง);
decryptMessage (โทเค็น: สตริง, การเข้ารหัส AESKey: สตริง, ลายเซ็น: สตริง, การประทับเวลา: สตริง, nonce: สตริง, encryptXml: สตริง);
checkSignature (ลายเซ็น: สตริง, เวลาประทับ: สตริง, nonce: สตริง, โทเค็น: สตริง);
สร้างไฟล์ .env.test.local และบันทึกรหัสแอปทดสอบและข้อมูลลับในไฟล์
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
รันการทดสอบ e2e
การทดสอบการทำงาน NPM: e2e
เรียกใช้การทดสอบหน่วย
ทดสอบการทำงาน npm wechat.service.userinfo.spec.ts
เริ่มการทดสอบบริการ
npx ts-node -T การทดสอบ/e2e/wechat-app.main.ts
การกำหนดค่าการพุชข้อความบัญชีสาธารณะ (แพลตฟอร์มทดสอบสาธารณะ WeChat) หลังจากเปิดการทดสอบบริการข้างต้นแล้ว คุณสามารถผ่านการทดสอบการกำหนดค่าได้
URL: http://your/url/wechat/push เช่น: http://113.22.11.2:3001/wechat/push
โทเค็น: pamtest
รับ access_token จากเครื่องมือแก้ไขจุดบกพร่องอินเทอร์เฟซแพลตฟอร์มสาธารณะ WeChat
ร่างกาย
{ "grant_type": "client_credential", "appid": "ของคุณ/appid", "secret": "ของคุณ/ความลับ", "force_refresh": false}
เครื่องมือแก้ไขจุดบกพร่องบนแพลตฟอร์มเปิด WeChat - เครื่องมือแก้ไขจุดบกพร่องสำหรับการทดสอบการพุชข้อความเพื่อทดสอบการพุช