feat 添加一次性订阅消息接口

This commit is contained in:
little-snow-fox 2020-03-02 18:14:45 +08:00
parent bf5834884e
commit 48d4b7f5b0
6 changed files with 76 additions and 1 deletions

View File

@ -364,6 +364,17 @@ Sends request for proceeding payment, then returns an object:
| errCode | Number | 0 if authorization successed |
| errStr | String | Error message if any error occurred |
#### subscribeMessage(SubscribeMessageMetadata) 一次性订阅消息
- returns {Object}
| name | type | description |
|---------|--------|-------------------------------------|
| scene | Number | 重定向后会带上 scene 参数,开发者可以填 0-10000 的整形值,用来标识订阅场值 |
| templateId | String | 订阅消息模板 ID在微信开放平台提交应用审核通过后获得 |
| reserved | String | 用于保持请求和回调的状态,授权请后原样带回给第三方。该参数可用于防止 csrf 攻击(跨站请求伪造攻击),建议第三方带上该参数,可设置为简单的随机数加 session 进行校验,开发者可以填写 a-zA-Z0-9 的参数值,最多 128 字节,要求做 urlencode |
## License
MIT

View File

@ -515,6 +515,20 @@ public class WeChatModule extends ReactContextBaseJavaModule implements IWXAPIEv
if (!success) callback.invoke(INVALID_ARGUMENT);
}
/**
* 一次性订阅消息
* @param data
* @param callback
*/
@ReactMethod
public void subscribeMessage(ReadableMap data, Callback callback) {
SubscribeMessage.Req req = new SubscribeMessage.Req();
req.scene = data.hasKey("scene") ? data.getInt("scene") : SendMessageToWX.Req.WXSceneSession;
req.templateID = data.getString("templateId");
req.reserved = data.getString("reserved");
callback.invoke(null, api.sendReq(req));
}
@ReactMethod
public void shareToSession(ReadableMap data, Callback callback) {
if (api == null) {

10
index.d.ts vendored
View File

@ -112,6 +112,13 @@ declare module "react-native-wechat-lib" {
miniProgramType?: number,
path?: string
}
export interface SubscribeMessageMetadata {
scene?: WXScene,
templateId: string,
reserved?: string
}
export function shareText(
message: ShareTextMetadata
): Promise<{ errCode?: number; errStr?: string }>;
@ -136,6 +143,9 @@ declare module "react-native-wechat-lib" {
export function launchMiniProgram(
message: LaunchMiniProgramMetadata
): Promise<{ errCode?: number; errStr?: string }>;
export function subscribeMessage(
message: SubscribeMessageMetadata
): Promise<{ errCode?: number; errStr?: string }>;
export interface PaymentLoad {
partnerId: string;
prepayId: string;

View File

@ -156,6 +156,8 @@ const nativeShareMusic = wrapApi(WeChat.shareMusic);
const nativeShareVideo = wrapApi(WeChat.shareVideo);
const nativeShareWebpage = wrapApi(WeChat.shareWebpage);
const nativeShareMiniProgram = wrapApi(WeChat.shareMiniProgram);
const nativeSubscribeMessage = wrapApi(WeChat.subscribeMessage);
/**
* @method sendAuthRequest
@ -350,6 +352,27 @@ export function launchMiniProgram({userName, miniProgramType = 0, path = ''}) {
});
}
/**
* 一次性订阅消息
* @method shareVideo
* @param {Object} data
*/
export function subscribeMessage(data) {
if (data && data.scene == null) {
data.scene = 0
}
return new Promise((resolve, reject) => {
nativeSubscribeMessage(data);
emitter.once('WXSubscribeMsgReq.Resp', resp => {
if (resp.errCode === 0) {
resolve(resp);
} else {
reject(new WechatError(resp));
}
});
});
}
/**
* Share something to favorite
* @method shareToFavorite

View File

@ -459,6 +459,23 @@ RCT_EXPORT_METHOD(shareMiniProgram:(NSDictionary *)data
[WXApi sendReq:req completion:completion];
}
//
RCT_EXPORT_METHOD(subscribeMessage:(NSDictionary *)data
:(RCTResponseSenderBlock)callback)
{
WXSubscribeMsgReq *req = [[WXSubscribeMsgReq alloc] init];
req.scene = [data[@"scene"] integerValue];
req.templateId = data[@"templateId"];
req.reserved = data[@"reserved"];
void ( ^ completion )( BOOL );
completion = ^( BOOL success )
{
callback(@[success ? [NSNull null] : INVOKE_FAILED]);
return;
};
[WXApi sendReq:req completion:completion];
}
RCT_EXPORT_METHOD(launchMiniProgram:(NSDictionary *)data
:(RCTResponseSenderBlock)callback)
{

View File

@ -1,6 +1,6 @@
{
"name": "react-native-wechat-lib",
"version": "1.1.12",
"version": "1.1.13",
"description": "react-native library for wechat app. 支持分享和拉起小程序。",
"main": "index.js",
"scripts": {