







#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN



enum  WXErrCode {
    WXSuccess           = 0,    

    WXErrCodeCommon     = -1,   

    WXErrCodeUserCancel = -2,   

    WXErrCodeSentFail   = -3,   

    WXErrCodeAuthDeny   = -4,   

    WXErrCodeUnsupport  = -5,   

};





enum WXScene {
    WXSceneSession          = 0,   

    WXSceneTimeline         = 1,   

    WXSceneFavorite         = 2,   

    WXSceneSpecifiedSession = 3,   

    WXSceneState            = 4,   

};


enum WXAPISupport {
    WXAPISupportSession = 0,
};





enum WXBizProfileType {
    WXBizProfileType_Normal = 0,    /

    WXBizProfileType_Device = 1,    /

};



typedef NS_ENUM(NSUInteger, WXMiniProgramType) {
    WXMiniProgramTypeRelease = 0,       /

    WXMiniProgramTypeTest = 1,        /

    WXMiniProgramTypePreview = 2,         /

};



enum WXMPWebviewType {
    WXMPWebviewType_Ad = 0,        

};



typedef NS_ENUM(NSInteger,WXLogLevel) {
    WXLogLevelNormal = 0,      
    WXLogLevelDetail = 1,      
};




typedef void(^WXLogBolock)(NSString *log);



typedef NS_ENUM(NSInteger, WXULCheckStep)
{
    WXULCheckStepParams,
    WXULCheckStepSystemVersion,
    WXULCheckStepWechatVersion,
    WXULCheckStepSDKInnerOperation,
    WXULCheckStepLaunchWechat,
    WXULCheckStepBackToCurrentApp,
    WXULCheckStepFinal,
};






@interface WXCheckULStepResult : NSObject



@property(nonatomic, assign) BOOL success;


@property(nonatomic, strong) NSString* errorInfo;


@property(nonatomic, strong) NSString* suggestion;

- (instancetype)initWithCheckResult:(BOOL)success errorInfo:(nullable NSString*)errorInfo suggestion:(nullable NSString*)suggestion;

@end




typedef void(^WXCheckULCompletion)(WXULCheckStep step, WXCheckULStepResult* result);





@interface BaseReq : NSObject



@property (nonatomic, assign) int type;


@property (nonatomic, copy) NSString *openID;

@end






@interface BaseResp : NSObject


@property (nonatomic, assign) int errCode;


@property (nonatomic, copy) NSString *errStr;


@property (nonatomic, assign) int type;

@end




@class WXMediaMessage;




@interface SendAuthReq : BaseReq


@property (nonatomic, copy) NSString *scope;


@property (nonatomic, copy) NSString *state;

@property (nonatomic, assign) BOOL isOption1;



@property (nonatomic, assign) BOOL nonautomatic;

@property (nonatomic, copy) NSString *extData;

@end




@interface SendAuthResp : BaseResp
@property (nonatomic, copy, nullable) NSString *code;


@property (nonatomic, copy, nullable) NSString *state;
@property (nonatomic, copy, nullable) NSString *lang;
@property (nonatomic, copy, nullable) NSString *country;
@end




@interface WXStateJumpInfo : NSObject

@end




@interface WXStateJumpUrlInfo : WXStateJumpInfo


@property (nonatomic, copy) NSString *url;

@end




@interface WXStateJumpMiniProgramInfo : WXStateJumpInfo


@property (nonatomic, copy) NSString *username;



@property (nonatomic, copy, nullable) NSString *path;



@property (nonatomic, assign) WXMiniProgramType miniProgramType;

@end






@interface WXStateJumpChannelProfileInfo : WXStateJumpInfo


@property (nonatomic, copy) NSString *username;


@end




@interface WXSceneDataObject : NSObject

@end




@interface WXStateSceneDataObject : WXSceneDataObject



@property (nonatomic, copy) NSString *stateId;


@property (nonatomic, copy) NSString *stateTitle;


@property (nonatomic, copy) NSString *token;


@property (nonatomic, strong) WXStateJumpInfo *stateJumpDataInfo;

@end




@interface SendMessageToWXReq : BaseReq


@property (nonatomic, copy) NSString *text;


@property (nonatomic, strong) WXMediaMessage *message;


@property (nonatomic, assign) BOOL bText;


@property (nonatomic, assign) int scene;


@property (nonatomic, copy, nullable) NSString *toUserOpenId;


@property (nonatomic, strong) WXSceneDataObject *sceneDataObject;

@end




@interface SendMessageToWXResp : BaseResp
@property(nonatomic, copy) NSString *lang;
@property(nonatomic, copy) NSString *country;
@end




@interface GetMessageFromWXReq : BaseReq
@property (nonatomic, strong) NSString *lang;
@property (nonatomic, strong) NSString *country;
@end






@interface GetMessageFromWXResp : BaseResp


@property (nonatomic, strong) NSString *text;


@property (nonatomic, strong) WXMediaMessage *message;


@property (nonatomic, assign) BOOL bText;
@end






@interface ShowMessageFromWXReq : BaseReq


@property (nonatomic, strong) WXMediaMessage *message;
@property (nonatomic, copy) NSString *lang;
@property (nonatomic, copy) NSString *country;
@end






@interface ShowMessageFromWXResp : BaseResp
@end





@interface LaunchFromWXReq : BaseReq
@property (nonatomic, strong) WXMediaMessage *message;
@property (nonatomic, copy) NSString *lang;
@property (nonatomic, copy) NSString *country;
@end





@interface OpenWebviewReq : BaseReq


@property(nonatomic, copy) NSString *url;

@end




@interface OpenWebviewResp : BaseResp

@end






@interface WXOpenBusinessWebViewReq : BaseReq



@property (nonatomic, assign) UInt32 businessType;



@property (nonatomic, strong, nullable) NSDictionary *queryInfoDic;

@end




@interface WXOpenBusinessWebViewResp : BaseResp


@property (nonatomic, copy) NSString *result;



@property (nonatomic, assign) UInt32 businessType;

@end





@interface OpenRankListReq : BaseReq

@end




@interface OpenRankListResp : BaseResp

@end




@interface WXCardItem : NSObject


@property (nonatomic, copy) NSString *cardId;


@property (nonatomic, copy, nullable) NSString *extMsg;


@property (nonatomic, assign) UInt32 cardState;


@property (nonatomic, copy) NSString *encryptCode;


@property (nonatomic, copy) NSString *appID;
@end;



@interface WXInvoiceItem : NSObject


@property (nonatomic, copy) NSString *cardId;


@property (nonatomic, copy, nullable) NSString *extMsg;


@property (nonatomic, assign) UInt32 cardState;


@property (nonatomic, copy) NSString *encryptCode;


@property (nonatomic, copy) NSString *appID;

@end





@interface AddCardToWXCardPackageReq : BaseReq


@property (nonatomic, strong) NSArray *cardAry;

@end






@interface AddCardToWXCardPackageResp : BaseResp


@property (nonatomic, strong) NSArray *cardAry;
@end





@interface WXChooseCardReq : BaseReq
@property (nonatomic, copy) NSString *appID;
@property (nonatomic, assign) UInt32 shopID;
@property (nonatomic, assign) UInt32 canMultiSelect;
@property (nonatomic, copy) NSString *cardType;
@property (nonatomic, copy) NSString *cardTpID;
@property (nonatomic, copy) NSString *signType;
@property (nonatomic, copy) NSString *cardSign;
@property (nonatomic, assign) UInt32 timeStamp;
@property (nonatomic, copy) NSString *nonceStr;
@end






@interface WXChooseCardResp : BaseResp
@property (nonatomic, strong ) NSArray* cardAry;
@end





@interface WXChooseInvoiceReq : BaseReq
@property (nonatomic, copy) NSString *appID;
@property (nonatomic, assign) UInt32 shopID;
@property (nonatomic, copy) NSString *signType;
@property (nonatomic, copy) NSString *cardSign;
@property (nonatomic, assign) UInt32 timeStamp;
@property (nonatomic, copy) NSString *nonceStr;
@end




@interface WXChooseInvoiceResp : BaseResp
@property (nonatomic, strong) NSArray* cardAry;
@end


@interface WXSubscribeMsgReq : BaseReq
@property (nonatomic, assign) UInt32 scene;
@property (nonatomic, copy) NSString *templateId;
@property (nonatomic, copy, nullable) NSString *reserved;
@end


@interface WXSubscribeMsgResp : BaseResp

@property (nonatomic, copy) NSString *templateId;
@property (nonatomic, assign) UInt32 scene;
@property (nonatomic, copy) NSString *action;
@property (nonatomic, copy) NSString *reserved;
@property (nonatomic, copy, nullable) NSString *openId;

@end




@interface WXSubscribeMiniProgramMsgReq : BaseReq
@property (nonatomic, copy) NSString *miniProgramAppid;
@end


@interface WXSubscribeMiniProgramMsgResp : BaseResp

@property(nonatomic, copy) NSString *openId;   
@property(nonatomic, copy) NSString *unionId;  
@property(nonatomic, copy) NSString *nickName; 

@end


@interface WXInvoiceAuthInsertReq : BaseReq

@property (nonatomic, copy) NSString *urlString;

@end



@interface WXInvoiceAuthInsertResp : BaseResp

@property (nonatomic, copy) NSString *wxOrderId;

@end





@interface WXMediaMessage : NSObject

+ (WXMediaMessage *)message;



@property (nonatomic, copy) NSString *title;


@property (nonatomic, copy) NSString *description;


@property (nonatomic, strong, nullable) NSData *thumbData;


@property (nonatomic, copy, nullable) NSString *mediaTagName;


@property (nonatomic, copy, nullable) NSString *messageExt;
@property (nonatomic, copy, nullable) NSString *messageAction;


@property (nonatomic, strong) id mediaObject;



@property (nonatomic, copy, nullable) NSString *thumbDataHash;



@property (nonatomic, copy, nullable) NSString *msgSignature;




- (void)setThumbImage:(UIImage *)image;

@end






@interface WXImageObject : NSObject


+ (WXImageObject *)object;



@property (nonatomic, strong) NSData *imageData;



@property (nonatomic, copy, nullable) NSString *imgDataHash;



@property (nonatomic, copy, nullable) NSString *entranceMiniProgramUsername;



@property (nonatomic, copy, nullable) NSString *entranceMiniProgramPath;

@end





@interface WXMusicObject : NSObject


+ (WXMusicObject *)object;



@property (nonatomic, copy) NSString *musicUrl;


@property (nonatomic, copy) NSString *musicLowBandUrl;


@property (nonatomic, copy) NSString *musicDataUrl;



@property (nonatomic, copy) NSString *musicLowBandDataUrl;



@property (nonatomic, copy) NSString *songAlbumUrl;



@property (nonatomic, copy, nullable) NSString *songLyric;
@end





@interface WXMusicVipInfo : NSObject



@property (nonatomic, copy) NSString *musicId;

@end


@interface WXMusicVideoObject : NSObject



+ (WXMusicVideoObject *)object;



@property (nonatomic, copy) NSString *musicUrl;



@property (nonatomic, copy) NSString *musicDataUrl;



@property (nonatomic, copy) NSString *singerName;



@property (nonatomic, assign) UInt32 duration;



@property (nonatomic, copy) NSString *songLyric;



@property (nonatomic, strong) NSData *hdAlbumThumbData;



@property (nonatomic, copy, nullable) NSString *hdAlbumThumbFileHash;



@property (nonatomic, copy, nullable) NSString *albumName;



@property (nonatomic, copy, nullable) NSString *musicGenre;



@property (nonatomic, assign) UInt64 issueDate;



@property (nonatomic, copy, nullable) NSString *identification;



@property (nonatomic, copy, nullable) NSString *musicOperationUrl;



@property (nonatomic, strong) WXMusicVipInfo *musicVipInfo;

@end






@interface WXVideoObject : NSObject


+ (WXVideoObject *)object;



@property (nonatomic, copy) NSString *videoUrl;


@property (nonatomic, copy) NSString *videoLowBandUrl;

@end






@interface WXWebpageObject : NSObject


+ (WXWebpageObject *)object;



@property (nonatomic, copy) NSString *webpageUrl;



@property (nonatomic, assign) BOOL isSecretMessage;



@property (nonatomic, strong, nullable) NSDictionary *extraInfoDic;

@end






@interface WXAppExtendObject : NSObject


+ (WXAppExtendObject *)object;



@property (nonatomic, copy) NSString *url;


@property (nonatomic, copy, nullable) NSString *extInfo;


@property (nonatomic, strong, nullable) NSData *fileData;

@end






@interface WXEmoticonObject : NSObject



+ (WXEmoticonObject *)object;



@property (nonatomic, strong) NSData *emoticonData;

@end






@interface WXFileObject : NSObject



+ (WXFileObject *)object;



@property (nonatomic, copy) NSString *fileExtension;



@property (nonatomic, strong) NSData *fileData;

@end





@interface WXLocationObject : NSObject



+ (WXLocationObject *)object;



@property (nonatomic, assign) double lng; //经度
@property (nonatomic, assign) double lat; //纬度

@end




@interface WXTextObject : NSObject



+ (WXTextObject *)object;



@property (nonatomic, copy) NSString *contentText;

@end



@interface WXMiniProgramObject : NSObject



+ (WXMiniProgramObject *)object;



@property (nonatomic, copy) NSString *webpageUrl;



@property (nonatomic, copy) NSString *userName;



@property (nonatomic, copy, nullable) NSString *path;



@property (nonatomic, strong, nullable) NSData *hdImageData;



@property (nonatomic, assign) BOOL withShareTicket;



@property (nonatomic, assign) WXMiniProgramType miniProgramType;



@property (nonatomic, assign) BOOL disableForward;

@property (nonatomic, assign) BOOL isUpdatableMessage;

@property (nonatomic, assign) BOOL isSecretMessage;




@property (nonatomic, strong, nullable) NSDictionary *extraInfoDic;

@end






@interface WXGameLiveObject : NSObject

+ (WXGameLiveObject *)object;



@property (nonatomic, strong, nullable) NSDictionary *extraInfoDic;

@end

@interface WXNativeGamePageObject : NSObject



@property (nonatomic, assign) BOOL isVideo;



@property (nonatomic, assign) UInt32 videoDuration;



@property (nonatomic, copy) NSString *shareData;



@property (nonatomic, strong) NSData *gameThumbData;

+ (WXNativeGamePageObject *)object;

@end





@interface WXLaunchMiniProgramReq : BaseReq

+ (WXLaunchMiniProgramReq *)object;



@property (nonatomic, copy) NSString *userName;



@property (nonatomic, copy, nullable) NSString *path;



@property (nonatomic, assign) WXMiniProgramType miniProgramType;



@property (nonatomic, copy, nullable) NSString *extMsg;



@property (nonatomic, copy, nullable) NSDictionary *extDic;

@end




@interface WXLaunchMiniProgramResp : BaseResp

@property (nonatomic, copy, nullable) NSString *extMsg;

@end






@interface WXOpenBusinessViewReq : BaseReq

+ (WXOpenBusinessViewReq *)object;



@property (nonatomic, copy) NSString *businessType;



@property (nonatomic, copy, nullable) NSString *query;



@property (nonatomic, copy, nullable) NSString *extInfo;



@property (nonatomic, strong, nullable) NSData *extData;
@end


@interface WXOpenBusinessViewResp : BaseResp



@property (nonatomic, copy) NSString *businessType;



@property (nonatomic, copy, nullable) NSString *extMsg;

@end


@interface WXOpenCustomerServiceReq : BaseReq

+ (WXOpenCustomerServiceReq *)object;



@property (nonatomic, copy, nullable) NSString *url;



@property (nonatomic, copy, nullable) NSString *corpid;

@end

@interface WXOpenCustomerServiceResp : BaseResp



@property (nonatomic, copy, nullable) NSString *extMsg;

@end




@interface WXChannelStartLiveReq : BaseReq

+ (WXChannelStartLiveReq *)object;



@property (nonatomic, copy) NSString *liveJsonInfo;

@end

@interface WXChannelStartLiveResp : BaseResp



@property (nonatomic, copy, nullable) NSString *extMsg;

@end

NS_ASSUME_NONNULL_END
