微信SDK
[React Native] bridging library that integrates WeChat SDKs:
- iOS SDK 1.9.2
- Android SDK 6.8.0
npm install @huiqiangdev/react-native-wechat-api
yarn add @huiqiangdev/react-native-wechat-api
本库支持 TypeScript
,使用 Promise
或 async/await
来接收返回。
接口名称和参数尽量跟腾讯官网保持一致性,除了嵌套对象变成扁平对象,你可以直接查看腾讯文档来获得更多帮助。
appid
{String} the appid you get from WeChat dashboarduniversalLink
ios 需要 / android 为空- returns {Boolean} explains if your application is registered done
This method should be called once globally.
import * as WeChat from '@huiqiangdev/react-native-wechat-api';
WeChat.registerApp('appid', 'universalLink');
title
{String} title of this message.type
{Number} type of this message. Can be {news|text|imageUrl|imageFile|imageResource|video|audio|file}thumbImage
{String} Thumb image of the message, which can be a uri or a resource id.description
{String} The description about the sharing.webpageUrl
{String} Required if type equalsnews
. The webpage link to share.imageUrl
{String} Provide a remote image if type equalsimage
.videoUrl
{String} Provide a remote video if type equalsvideo
.musicUrl
{String} Provide a remote music if type equalsaudio
.filePath
{String} Provide a local file if type equalsfile
.fileExtension
{String} Provide the file type if type equalsfile
.
message
{ShareMetadata} This object saves the metadata for sharing- returns {Object}
Share a ShareMetadata
message to timeline(朋友圈) and returns:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization successed |
errStr | String | Error message if any error occurred |
The following examples require the 'react-native-chat' and 'react-native-fs' packages.
import * as WeChat from '@/huiqiangdev/react-native-wechat-api';
import fs from 'react-native-fs';
let resolveAssetSource = require('resolveAssetSource');
// Code example to share text message:
try {
let result = await WeChat.shareToTimeline({
type: 'text',
description: 'hello, wechat'
});
console.log('share text message to time line successful:', result);
} catch (e) {
if (e instanceof WeChat.WechatError) {
console.error(e.stack);
} else {
throw e;
}
}
// Code example to share image url:
// Share raw http(s) image from web will always fail with unknown reason, please use image file or image resource instead
try {
let result = await WeChat.shareToTimeline({
type: 'imageUrl',
title: 'web image',
description: 'share web image to time line',
mediaTagName: 'email signature',
messageAction: undefined,
messageExt: undefined,
imageUrl: 'http://www.ncloud.hk/email-signature-262x100.png'
});
console.log('share image url to time line successful:', result);
} catch (e) {
if (e instanceof WeChat.WechatError) {
console.error(e.stack);
} else {
throw e;
}
}
// Code example to share image file:
try {
let rootPath = fs.DocumentDirectoryPath;
let savePath = rootPath + '/email-signature-262x100.png';
console.log(savePath);
/*
* savePath on iOS may be:
* /var/mobile/Containers/Data/Application/B1308E13-35F1-41AB-A20D-3117BE8EE8FE/Documents/email-signature-262x100.png
*
* savePath on Android may be:
* /data/data/com.wechatsample/files/email-signature-262x100.png
**/
await fs.downloadFile('http://www.ncloud.hk/email-signature-262x100.png', savePath);
let result = await WeChat.shareToTimeline({
type: 'imageFile',
title: 'image file download from network',
description: 'share image file to time line',
mediaTagName: 'email signature',
messageAction: undefined,
messageExt: undefined,
imageUrl: "file://" + savePath // require the prefix on both iOS and Android platform
});
console.log('share image file to time line successful:', result);
} catch (e) {
if (e instanceof WeChat.WechatError) {
console.error(e.stack);
} else {
throw e;
}
}
// Code example to share image resource:
try {
let imageResource = require('./email-signature-262x100.png');
let result = await WeChat.shareToTimeline({
type: 'imageResource',
title: 'resource image',
description: 'share resource image to time line',
mediaTagName: 'email signature',
messageAction: undefined,
messageExt: undefined,
imageUrl: resolveAssetSource(imageResource).uri
});
console.log('share resource image to time line successful', result);
}
catch (e) {
if (e instanceof WeChat.WechatError) {
console.error(e.stack);
} else {
throw e;
}
}
// Code example to download an word file from web, then share it to WeChat session
// only support to share to session but time line
// iOS code use DocumentDirectoryPath
try {
let rootPath = fs.DocumentDirectoryPath;
let fileName = 'signature_method.doc';
/*
* savePath on iOS may be:
* /var/mobile/Containers/Data/Application/B1308E13-35F1-41AB-A20D-3117BE8EE8FE/Documents/signature_method.doc
**/
let savePath = rootPath + '/' + fileName;
await fs.downloadFile('https://open.weixin.qq.com/zh_CN/htmledition/res/assets/signature_method.doc', savePath);
let result = await WeChat.shareToSession({
type: 'file',
title: fileName, // WeChat app treat title as file name
description: 'share word file to chat session',
mediaTagName: 'word file',
messageAction: undefined,
messageExt: undefined,
filePath: savePath,
fileExtension: '.doc'
});
console.log('share word file to chat session successful', result);
} catch (e) {
if (e instanceof WeChat.WechatError) {
console.error(e.stack);
} else {
throw e;
}
}
//android code use ExternalDirectoryPath
try {
let rootPath = fs.ExternalDirectoryPath;
let fileName = 'signature_method.doc';
/*
* savePath on Android may be:
* /storage/emulated/0/Android/data/com.wechatsample/files/signature_method.doc
**/
let savePath = rootPath + '/' + fileName;
await fs.downloadFile('https://open.weixin.qq.com/zh_CN/htmledition/res/assets/signature_method.doc', savePath);
let result = await WeChat.shareToSession({
type: 'file',
title: fileName, // WeChat app treat title as file name
description: 'share word file to chat session',
mediaTagName: 'word file',
messageAction: undefined,
messageExt: undefined,
filePath: savePath,
fileExtension: '.doc'
});
console.log('share word file to chat session successful', result);
}
catch (e) {
if (e instanceof WeChat.WechatError) {
console.error(e.stack);
} else {
throw e;
}
}
message
{ShareMetadata} This object saves the metadata for sharing- returns {Object}
Similar to shareToTimeline
but sends the message to a friend or chat group.
- returns {Boolean} if WeChat is installed.
Check if the WeChat app is installed on the device.
import * as WeChat from 'react-native-wechat-api';
WeChat.isWXAppInstalled();
- returns {Boolean} Contains the result.
Check if wechat support open url.
import * as WeChat from 'react-native-wechat-api';
WeChat.isWXAppSupportApi();
- returns {String} Contains the result.
Get the WeChat SDK api version.
import * as WeChat from 'react-native-wechat-api';
WeChat.getApiVersion();
- returns {Boolean}
Open the WeChat app from your application.
import * as WeChat from 'react-native-wechat-api';
WeChat.openWXApp();
scope
{Array|String} Scopes of auth request.state
{String} the state of OAuth2- returns {Object}
Send authentication request, and it returns an object with the following fields:
field | type | description |
---|---|---|
errCode | Number | Error Code |
errStr | String | Error message if any error occurred |
openId | String | |
code | String | Authorization code |
url | String | The URL string |
lang | String | The user language |
country | String | The user country |
ShareTextMetadata
name | type | description |
---|---|---|
text | String | 分享文本 |
scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |
Return:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization succeed |
errStr | String | Error message if any error occurred |
import * as WeChat from 'react-native-wechat-api';
WeChat.shareText({
text: 'Text content.',
scene: 0,
});
ShareImageMetadata
name | type | description |
---|---|---|
imageUrl | String | 图片地址 |
scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |
Return:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization succeed |
errStr | String | Error message if any error occurred |
import * as WeChat from 'react-native-wechat-api';
WeChat.shareImage({
imageUrl: 'https://google.com/1.jpg',
scene: 0,
});
ShareImageMetadata
name | type | description |
---|---|---|
imageUrl | String | 图片地址 |
scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |
Return:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization succeed |
errStr | String | Error message if any error occurred |
ShareFileMetadata
name | type | description |
---|---|---|
url | String | 文件地址 |
title | String | 文件标题 |
scene | Number | 分享到, 0:会话 |
Return:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization succeed |
errStr | String | Error message if any error occurred |
import * as WeChat from 'react-native-wechat-api';
WeChat.shareFile({
imageUrl: 'https://sdcard/test.png',
title: '测试文件.pdf',
scene: 0,
});
ShareMusicMetadata
name | type | description |
---|---|---|
title | String | 标题 |
description | String | 描述 |
thumbImageUrl | String | 缩略图地址,本库会自动压缩到 32KB |
musicUrl | String | 音频网页的 URL 地址 |
musicLowBandUrl | String | 供低带宽环境下使用的音频网页 URL 地址 |
musicDataUrl | String | 音频数据的 URL 地址 |
musicLowBandDataUrl | String | 供低带宽环境下使用的音频数据 URL 地址 |
scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |
Return:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization succeed |
errStr | String | Error message if any error occurred |
import * as WeChat from 'react-native-wechat-api';
WeChat.shareMusic({
title: 'Good music.',
musicUrl: 'https://google.com/music.mp3',
thumbImageUrl: 'https://google.com/1.jpg',
scene: 0,
});
ShareVideoMetadata
name | type | description |
---|---|---|
title | String | 标题 |
description | String | 描述 |
thumbImageUrl | String | 缩略图地址,本库会自动压缩到 32KB |
videoUrl | String | 视频链接 |
videoLowBandUrl | String | 供低带宽的环境下使用的视频链接 |
scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |
Return:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization succeed |
errStr | String | Error message if any error occurred |
import * as WeChat from 'react-native-wechat-api';
WeChat.shareVideo({
title: 'Interesting video.',
videoUrl: 'https://google.com/music.mp3',
thumbImageUrl: 'https://google.com/1.jpg',
scene: 0,
});
ShareWebpageMetadata
name | type | description |
---|---|---|
title | String | 标题 |
description | String | 描述 |
thumbImageUrl | String | 缩略图地址,本库会自动压缩到 32KB |
webpageUrl | String | HTML 链接 |
scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |
Return:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization succeed |
errStr | String | Error message if any error occurred |
import * as WeChat from 'react-native-wechat-api';
WeChat.shareWebpage({
title: 'Interesting web.',
videoUrl: 'https://google.com/music.mp3',
thumbImageUrl: 'https://google.com/1.jpg',
scene: 0,
});
ShareMiniProgram
name | type | description |
---|---|---|
title | String | 标题 |
description | String | 描述 |
thumbImageUrl | String | 缩略图地址,本库会自动压缩到 32KB |
userName | String | 小程序的 userName,填小程序原始 id |
path | String | 小程序的页面路径 |
hdImageUrl | String | 小程序新版本的预览图二进制数据,6.5.9 及以上版本微信客户端支持 |
withShareTicket | String | 是否使用带 shareTicket 的分享 |
miniProgramType | Number | 小程序的类型,默认正式版,1.8.1 及以上版本开发者工具包支持分享开发版和体验版小程序 |
webpageUrl | String | 兼容低版本的网页链接 |
scene | Number | 分享到, 0:会话 1:朋友圈 2:收藏 |
Return:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization succeed |
errStr | String | Error message if any error occurred |
import * as WeChat from 'react-native-wechat-api';
WeChat.shareMiniProgram({
title: 'Mini program.',
userName: 'gh_d39d10000000',
webpageUrl: 'https://google.com/show.html',
thumbImageUrl: 'https://google.com/1.jpg',
scene: 0,
});
LaunchMiniProgramMetadata
name | type | description |
---|---|---|
userName | String | 填小程序原始 id |
miniProgramType | Number | 可选打开 开发版,体验版和正式版 |
path | String | 拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar" |
Return:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization succeed |
errStr | String | Error message if any error occurred |
import * as WeChat from 'react-native-wechat-api';
WeChat.launchMiniProgram({
userName: 'gh_d39d10000000',
miniProgramType: 1,
});
LaunchMiniProgramMetadata
name | type | description |
---|---|---|
corpid | String | 企业ID |
url | Number | 客服URL |
Return:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization succeed |
errStr | String | Error message if any error occurred |
import * as WeChat from 'react-native-wechat-api';
WeChat.launchCustomerService({
corpid: 'gh_d39d10000000',
url: 'https://work.weixin.qq.com/kfid/kfcxxxxx',
});
ChooseInvoice
name | type | description |
---|---|---|
cardSign | String | 签名 |
signType | String | 签名类型 |
timeStamp | Number | 当前时间戳 |
nonceStr | String | 随机字符串 |
Invoice
name | type | description |
---|---|---|
appId | String | |
cardId | String | 发票 Id |
encryptCode | String | 加密串 |
Return:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization succeed |
cards | Invoice[] | 发票数据 |
errStr | String | Error message if any error occurred |
import * as WeChat from 'react-native-wechat-api';
// ios 什么都不填都可以,android可以填写以下假的内容都可以正常运行,具体参数获取可以去看微信文档
WeChat.chooseInvoice({
cardSign: 'cardSign',
signType: 'SHA256',
timeStamp: Date.now(),
nonceStr: `${Date.now()}`,
});
payload
{Object} the payment datapartnerId
{String} 商家向财付通申请的商家 IDprepayId
{String} 预支付订单 IDnonceStr
{String} 随机串timeStamp
{String} 时间戳package
{String} 商家根据财付通文档填写的数据和签名sign
{String} 商家根据微信开放平台文档对数据做的签名
- returns {Object}
Sends request for proceeding payment, then returns an object:
name | type | description |
---|---|---|
errCode | Number | 0 if authorization succeed |
errStr | String | Error message if any error occurred |
- returns {Object}
name | type | description |
---|---|---|
scene | Number | 重定向后会带上 scene 参数,开发者可以填 0-10000 的整形值,用来标识订阅场值 |
templateId | String | 订阅消息模板 ID,在微信开放平台提交应用审核通过后获得 |
reserved | String | 用于保持请求和回调的状态,授权请后原样带回给第三方。该参数可用于防止 csrf 攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加 session 进行校验,开发者可以填写 a-zA-Z0-9 的参数值,最多 128 字节,要求做 urlencode |
See the contributing guide to learn how to contribute to the repository and the development workflow.
MIT