添加微信分分享按钮
diff --git a/platforms/ios/dlapp.xcodeproj/project.pbxproj b/platforms/ios/dlapp.xcodeproj/project.pbxproj
index 0693b93..e44ab6e 100644
--- a/platforms/ios/dlapp.xcodeproj/project.pbxproj
+++ b/platforms/ios/dlapp.xcodeproj/project.pbxproj
@@ -73,6 +73,11 @@
EDCB3A04AD4D4B289E64F99E /* libsqlite3.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D29239646664D05B61A0517 /* libsqlite3.tbd */; };
988F095294ED444C9ACB1281 /* libstdc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F5208F54124408BAA42D80E /* libstdc++.tbd */; };
1CA6AE2CB7C4454E96B08442 /* TencentOpenAPI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B8DABF1D129444628738EB6A /* TencentOpenAPI.framework */; };
+ 2651E8E7F39F4BAEB5018A67 /* CDVWechat.m in Sources */ = {isa = PBXBuildFile; fileRef = CFB3542D16294A29B1D3AFDE /* CDVWechat.m */; };
+ CAF09C8DB131463391477371 /* AppDelegate+Wechat.m in Sources */ = {isa = PBXBuildFile; fileRef = 61422FD6698645BF8AC270CD /* AppDelegate+Wechat.m */; };
+ 57123A61EE2A4480A03BC15C /* libWeChatSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 8FD71481ADD343BD913C96D8 /* libWeChatSDK.a */; };
+ 0A2D48DC88304649B610E8F0 /* Webkit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C74ADF6EBDB4ACEBBE4B331 /* Webkit.framework */; };
+ BA5A99C01B124815B127341C /* libc++.1.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = F51A743DD2B847EBBD2D265B /* libc++.1.tbd */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -217,6 +222,16 @@
9D29239646664D05B61A0517 /* libsqlite3.tbd */ = {isa = PBXFileReference; name = "libsqlite3.tbd"; path = "usr/lib/libsqlite3.tbd"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = sourcecode.text-based-dylib-definition; explicitFileType = undefined; includeInIndex = 0; };
1F5208F54124408BAA42D80E /* libstdc++.tbd */ = {isa = PBXFileReference; name = "libstdc++.tbd"; path = "usr/lib/libstdc++.tbd"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = sourcecode.text-based-dylib-definition; explicitFileType = undefined; includeInIndex = 0; };
B8DABF1D129444628738EB6A /* TencentOpenAPI.framework */ = {isa = PBXFileReference; name = "TencentOpenAPI.framework"; path = "dlapp/Plugins/cordova-plugin-qqsdk/TencentOpenAPI.framework"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+ CFB3542D16294A29B1D3AFDE /* CDVWechat.m */ = {isa = PBXFileReference; name = "CDVWechat.m"; path = "cordova-plugin-wechat/CDVWechat.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
+ 61422FD6698645BF8AC270CD /* AppDelegate+Wechat.m */ = {isa = PBXFileReference; name = "AppDelegate+Wechat.m"; path = "cordova-plugin-wechat/AppDelegate+Wechat.m"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; explicitFileType = undefined; includeInIndex = 0; };
+ 8FD71481ADD343BD913C96D8 /* libWeChatSDK.a */ = {isa = PBXFileReference; name = "libWeChatSDK.a"; path = "dlapp/Plugins/cordova-plugin-wechat/libWeChatSDK.a"; sourceTree = "<group>"; fileEncoding = undefined; lastKnownFileType = archive.ar; explicitFileType = undefined; includeInIndex = 0; };
+ 5C3308DBC1A34B35AF496FD3 /* CDVWechat.h */ = {isa = PBXFileReference; name = "CDVWechat.h"; path = "cordova-plugin-wechat/CDVWechat.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ F2935B7ACABA4BAC8EA2270D /* AppDelegate+Wechat.h */ = {isa = PBXFileReference; name = "AppDelegate+Wechat.h"; path = "cordova-plugin-wechat/AppDelegate+Wechat.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 070FA15264B741429C96151A /* WXApi.h */ = {isa = PBXFileReference; name = "WXApi.h"; path = "cordova-plugin-wechat/WXApi.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ F88A8EA7C7B4483DAEB50719 /* WXApiObject.h */ = {isa = PBXFileReference; name = "WXApiObject.h"; path = "cordova-plugin-wechat/WXApiObject.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 575C7C23599048A5B0A81656 /* WechatAuthSDK.h */ = {isa = PBXFileReference; name = "WechatAuthSDK.h"; path = "cordova-plugin-wechat/WechatAuthSDK.h"; sourceTree = "<group>"; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; explicitFileType = undefined; includeInIndex = 0; };
+ 0C74ADF6EBDB4ACEBBE4B331 /* Webkit.framework */ = {isa = PBXFileReference; name = "Webkit.framework"; path = "System/Library/Frameworks/Webkit.framework"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = wrapper.framework; explicitFileType = undefined; includeInIndex = 0; };
+ F51A743DD2B847EBBD2D265B /* libc++.1.tbd */ = {isa = PBXFileReference; name = "libc++.1.tbd"; path = "usr/lib/libc++.1.tbd"; sourceTree = SDKROOT; fileEncoding = undefined; lastKnownFileType = sourcecode.text-based-dylib-definition; explicitFileType = undefined; includeInIndex = 0; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -249,6 +264,9 @@
EDCB3A04AD4D4B289E64F99E /* libsqlite3.tbd in Frameworks */,
988F095294ED444C9ACB1281 /* libstdc++.tbd in Frameworks */,
1CA6AE2CB7C4454E96B08442 /* TencentOpenAPI.framework in Frameworks */,
+ 57123A61EE2A4480A03BC15C /* libWeChatSDK.a in Frameworks */,
+ 0A2D48DC88304649B610E8F0 /* Webkit.framework in Frameworks */,
+ BA5A99C01B124815B127341C /* libc++.1.tbd in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -345,6 +363,9 @@
9D29239646664D05B61A0517 /* libsqlite3.tbd */,
1F5208F54124408BAA42D80E /* libstdc++.tbd */,
B8DABF1D129444628738EB6A /* TencentOpenAPI.framework */,
+ 8FD71481ADD343BD913C96D8 /* libWeChatSDK.a */,
+ 0C74ADF6EBDB4ACEBBE4B331 /* Webkit.framework */,
+ F51A743DD2B847EBBD2D265B /* libc++.1.tbd */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -443,6 +464,13 @@
6C8C62629761432796084184 /* ScreenRecordingDetector.h */,
29DE4F0A316B400B959056A3 /* CDVQQSDK.m */,
E381D08A673C42D780B0EAA7 /* CDVQQSDK.h */,
+ CFB3542D16294A29B1D3AFDE /* CDVWechat.m */,
+ 61422FD6698645BF8AC270CD /* AppDelegate+Wechat.m */,
+ 5C3308DBC1A34B35AF496FD3 /* CDVWechat.h */,
+ F2935B7ACABA4BAC8EA2270D /* AppDelegate+Wechat.h */,
+ 070FA15264B741429C96151A /* WXApi.h */,
+ F88A8EA7C7B4483DAEB50719 /* WXApiObject.h */,
+ 575C7C23599048A5B0A81656 /* WechatAuthSDK.h */,
);
name = Plugins;
path = dlapp/Plugins;
@@ -640,6 +668,8 @@
F70AC332CD71455D9E103429 /* ScreenshotBlocker.m in Sources */,
1ED02270B4D74F8BB970350D /* ScreenRecordingDetector.m in Sources */,
EF44EC2E45A745DAA3A1FB50 /* CDVQQSDK.m in Sources */,
+ 2651E8E7F39F4BAEB5018A67 /* CDVWechat.m in Sources */,
+ CAF09C8DB131463391477371 /* AppDelegate+Wechat.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -681,6 +711,7 @@
"$(inherited)",
"\"$(SRCROOT)/$(TARGET_NAME)/Plugins/cordova-plugin-jcore\"",
"\"$(SRCROOT)/$(TARGET_NAME)/Plugins/jpush-phonegap-plugin\"",
+ "\"$(SRCROOT)/$(TARGET_NAME)/Plugins/cordova-plugin-wechat\"",
);
PRODUCT_BUNDLE_IDENTIFIER = com.dalipolice.app;
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -721,6 +752,7 @@
"$(inherited)",
"\"$(SRCROOT)/$(TARGET_NAME)/Plugins/cordova-plugin-jcore\"",
"\"$(SRCROOT)/$(TARGET_NAME)/Plugins/jpush-phonegap-plugin\"",
+ "\"$(SRCROOT)/$(TARGET_NAME)/Plugins/cordova-plugin-wechat\"",
);
PRODUCT_BUNDLE_IDENTIFIER = com.dalipolice.app;
PRODUCT_NAME = "$(TARGET_NAME)";
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/AppDelegate+Wechat.h b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/AppDelegate+Wechat.h
new file mode 100644
index 0000000..5a5b092
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/AppDelegate+Wechat.h
@@ -0,0 +1,16 @@
+//
+// AppDelegate+Wechat.h
+// cordova-plugin-wechat
+//
+// Created by Jason.z on 26/2/20.
+//
+//
+
+#import "AppDelegate.h"
+
+@interface AppDelegate (Wechat)
+
+- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;
+- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler;
+
+@end
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/AppDelegate+Wechat.m b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/AppDelegate+Wechat.m
new file mode 100644
index 0000000..c6ecda4
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/AppDelegate+Wechat.m
@@ -0,0 +1,57 @@
+//
+// AppDelegate+Wechat.h
+// cordova-plugin-wechat
+//
+// Created by Jason.z on 26/2/20.
+//
+//
+
+#import "AppDelegate+Wechat.h"
+#import "CDVWechat.h"
+
+#import <objc/runtime.h>
+
+@implementation AppDelegate (Wechat)
+
+static BOOL swizzled = NO;
+
++ (void)load {
+ // only need to worry about this in iOS 8 and later
+ NSProcessInfo *processInfo = [NSProcessInfo processInfo];
+ if ([processInfo respondsToSelector:@selector(operatingSystemVersion)]) {
+ //operatingSystemVersion was introduced in iOS 8
+ Method swizzlee = class_getInstanceMethod(self, @selector(application:continueUserActivity:restorationHandler:));
+ Method swizzler = class_getInstanceMethod(self, @selector(swizzleApplication:continueUserActivity:restorationHandler:));
+
+ if (swizzlee) {
+ method_exchangeImplementations(swizzlee, swizzler);
+ swizzled = YES;
+ } else {
+ // app delegate has not implemented optional protocol method. add it in with our implementation
+ const char *typeEncoding = method_getTypeEncoding(swizzler);
+ class_addMethod(self, @selector(application:continueUserActivity:restorationHandler:), method_getImplementation(swizzler), typeEncoding);
+ }
+ }
+}
+
+- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
+ CDVWechat *cdvWechat = [self.viewController getCommandInstance:@"wechat"];
+ return [cdvWechat handleWechatOpenURL:url];
+}
+
+- (BOOL)swizzleApplication:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
+ if (![userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) {
+ if (swizzled) {
+ return [self swizzleApplication:application continueUserActivity:userActivity restorationHandler:restorationHandler];
+ }
+
+ return NO;
+ }
+
+ CDVWechat *cdvWechat = [self.viewController getCommandInstance:@"wechat"];
+
+ return [cdvWechat handleUserActivity:userActivity];
+
+}
+
+@end
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/CDVWechat.h b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/CDVWechat.h
new file mode 100644
index 0000000..8d4ae16
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/CDVWechat.h
@@ -0,0 +1,39 @@
+//
+// CDVWechat.h
+// cordova-plugin-wechat
+//
+// Created by xu.li on 12/23/13.
+//
+//
+
+#import <Cordova/CDV.h>
+#import "WXApi.h"
+#import "WXApiObject.h"
+
+enum CDVWechatSharingType {
+ CDVWXSharingTypeApp = 1,
+ CDVWXSharingTypeEmotion,
+ CDVWXSharingTypeFile,
+ CDVWXSharingTypeImage,
+ CDVWXSharingTypeMusic,
+ CDVWXSharingTypeVideo,
+ CDVWXSharingTypeWebPage,
+ CDVWXSharingTypeMini
+};
+
+@interface CDVWechat:CDVPlugin <WXApiDelegate>
+
+@property (nonatomic, strong) NSString *currentCallbackId;
+@property (nonatomic, strong) NSString *wechatAppId;
+
+- (void)isWXAppInstalled:(CDVInvokedUrlCommand *)command;
+- (void)share:(CDVInvokedUrlCommand *)command;
+- (void)sendAuthRequest:(CDVInvokedUrlCommand *)command;
+- (void)sendPaymentRequest:(CDVInvokedUrlCommand *)command;
+- (void)jumpToBizProfile:(CDVInvokedUrlCommand *)command;
+- (void)jumpToWechat:(CDVInvokedUrlCommand *)command;
+- (void)chooseInvoiceFromWX: (CDVInvokedUrlCommand *)command;
+- (void)openMiniProgram: (CDVInvokedUrlCommand *)command;
+- (BOOL)handleUserActivity:(NSUserActivity *)userActivity;
+- (BOOL)handleWechatOpenURL:(NSURL *)url;
+@end
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/CDVWechat.m b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/CDVWechat.m
new file mode 100644
index 0000000..4f7b424
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/CDVWechat.m
@@ -0,0 +1,575 @@
+//
+// CDVWechat.m
+// cordova-plugin-wechat
+//
+// Created by xu.li on 12/23/13.
+//
+//
+
+#import "CDVWechat.h"
+
+static int const MAX_THUMBNAIL_SIZE = 320;
+
+@implementation CDVWechat
+
+#pragma mark "API"
+- (void)pluginInitialize {
+ NSString* appId = [[self.commandDelegate settings] objectForKey:@"wechatappid"];
+
+ NSString* universalLink = [[self.commandDelegate settings] objectForKey:@"universallink"];
+
+ if (appId && ![appId isEqualToString:self.wechatAppId]) {
+ self.wechatAppId = appId;
+ [WXApi registerApp: appId universalLink: universalLink];
+
+ NSLog(@"cordova-plugin-wechat has been initialized. Wechat SDK Version: %@. APP_ID: %@.", [WXApi getApiVersion], appId);
+ }
+}
+
+- (void)isWXAppInstalled:(CDVInvokedUrlCommand *)command
+{
+ CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsBool:[WXApi isWXAppInstalled]];
+
+ [self.commandDelegate sendPluginResult:commandResult callbackId:command.callbackId];
+}
+
+- (void)share:(CDVInvokedUrlCommand *)command
+{
+ // if not installed
+ if (![WXApi isWXAppInstalled])
+ {
+ [self failWithCallbackID:command.callbackId withMessage:@"未安装微信"];
+ return ;
+ }
+
+ // check arguments
+ NSDictionary *params = [command.arguments objectAtIndex:0];
+ if (!params)
+ {
+ [self failWithCallbackID:command.callbackId withMessage:@"参数格式错误"];
+ return ;
+ }
+
+ // save the callback id
+ self.currentCallbackId = command.callbackId;
+
+ SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
+
+ // check the scene
+ if ([params objectForKey:@"scene"])
+ {
+ req.scene = (int)[[params objectForKey:@"scene"] integerValue];
+ }
+ else
+ {
+ req.scene = WXSceneTimeline;
+ }
+
+ // message or text?
+ NSDictionary *message = [params objectForKey:@"message"];
+
+ if (message)
+ {
+ req.bText = NO;
+
+ // async
+ [self.commandDelegate runInBackground:^{
+ req.message = [self buildSharingMessage:message];
+
+ [WXApi sendReq:(BaseReq *)req completion:^(BOOL success) {
+ if (!success) {
+ [self failWithCallbackID:command.callbackId withMessage:@"发送请求失败"];
+ self.currentCallbackId = nil;
+ }
+ }];
+ }];
+ }
+ else
+ {
+ req.bText = YES;
+ req.text = [params objectForKey:@"text"];
+
+ [WXApi sendReq:(BaseReq *)req completion:^(BOOL success) {
+ if (!success) {
+ [self failWithCallbackID:command.callbackId withMessage:@"发送请求失败"];
+ self.currentCallbackId = nil;
+ }
+ }];
+ }
+}
+
+- (void)sendAuthRequest:(CDVInvokedUrlCommand *)command
+{
+
+ SendAuthReq* req =[[SendAuthReq alloc] init];
+
+ // scope
+ if ([command.arguments count] > 0)
+ {
+ req.scope = [command.arguments objectAtIndex:0];
+ }
+ else
+ {
+ req.scope = @"snsapi_userinfo";
+ }
+
+ // state
+ if ([command.arguments count] > 1)
+ {
+ req.state = [command.arguments objectAtIndex:1];
+ }
+
+ [WXApi sendAuthReq:req viewController:self.viewController delegate:self completion:^(BOOL success) {
+ if(success) {
+ self.currentCallbackId = command.callbackId;
+ } else {
+ [self failWithCallbackID:command.callbackId withMessage:@"发送请求失败"];
+ }
+ }];
+}
+
+- (void)sendPaymentRequest:(CDVInvokedUrlCommand *)command
+{
+ // check arguments
+ NSDictionary *params = [command.arguments objectAtIndex:0];
+ if (!params)
+ {
+ [self failWithCallbackID:command.callbackId withMessage:@"参数格式错误"];
+ return ;
+ }
+
+ // check required parameters
+ NSArray *requiredParams;
+ if ([params objectForKey:@"mch_id"])
+ {
+ requiredParams = @[@"mch_id", @"prepay_id", @"timestamp", @"nonce", @"sign"];
+ }
+ else
+ {
+ requiredParams = @[@"partnerid", @"prepayid", @"timestamp", @"noncestr", @"sign"];
+ }
+
+ for (NSString *key in requiredParams)
+ {
+ if (![params objectForKey:key])
+ {
+ [self failWithCallbackID:command.callbackId withMessage:@"参数格式错误"];
+ return ;
+ }
+ }
+
+ PayReq *req = [[PayReq alloc] init];
+
+ // NSString *appId = [params objectForKey:requiredParams[5]];
+ // if (appId && ![appId isEqualToString:self.wechatAppId]) {
+ // self.wechatAppId = appId;
+ // [WXApi registerApp: appId];
+ // }
+
+ req.partnerId = [params objectForKey:requiredParams[0]];
+ req.prepayId = [params objectForKey:requiredParams[1]];
+ req.timeStamp = [[params objectForKey:requiredParams[2]] intValue];
+ req.nonceStr = [params objectForKey:requiredParams[3]];
+ req.package = @"Sign=WXPay";
+ req.sign = [params objectForKey:requiredParams[4]];
+
+ [WXApi sendReq:(BaseReq *)req completion:^(BOOL success) {
+ if (success) {
+ self.currentCallbackId = command.callbackId;
+ } else {
+ [self failWithCallbackID:command.callbackId withMessage:@"发送请求失败"];
+ }
+ }];
+}
+
+- (void)chooseInvoiceFromWX:(CDVInvokedUrlCommand *)command
+{
+ NSDictionary *params = [command.arguments objectAtIndex:0];
+ WXChooseInvoiceReq *req = [[WXChooseInvoiceReq alloc] init];
+ req.cardSign = [params objectForKey:@"cardSign"];
+ req.timeStamp = [[params objectForKey:@"timeStamp"] intValue];
+ req.appID = [params objectForKey:@"appId"];
+ req.nonceStr = [params objectForKey:@"nonceStr"];
+ req.signType = [params objectForKey:@"signType"];
+
+ [WXApi sendReq:(BaseReq *)req completion:^(BOOL success) {
+ if (success) {
+ self.currentCallbackId = command.callbackId;
+ } else {
+ [self failWithCallbackID:command.callbackId withMessage:@"发送请求失败"];
+ }
+ }];
+}
+
+- (void)jumpToBizProfile:(CDVInvokedUrlCommand *)command
+{
+ // check arguments
+// NSDictionary *params = [command.arguments objectAtIndex:0];
+// if (!params)
+// {
+// [self failWithCallbackID:command.callbackId withMessage:@"参数格式错误"];
+// return ;
+// }
+//
+// // check required parameters
+// NSArray *requiredParams;
+// requiredParams = @[@"type", @"info"];
+//
+// for (NSString *key in requiredParams)
+// {
+// if (![params objectForKey:key])
+// {
+// [self failWithCallbackID:command.callbackId withMessage:@"参数格式错误"];
+// return ;
+// }
+// }
+// JumpToBizProfileReq *req = [JumpToBizProfileReq new];
+// NSString *bizType = [params objectForKey:requiredParams[0]];
+//
+// if ([bizType isEqualToString:@"Normal"]) {
+// req.profileType = WXBizProfileType_Normal;
+// req.username = [params objectForKey:requiredParams[1]];
+// } else {
+// req.profileType = WXBizProfileType_Device;
+// req.extMsg = [params objectForKey:requiredParams[1]];
+// }
+//
+// if ([WXApi sendReq:req])
+// {
+// // save the callback id
+// self.currentCallbackId = command.callbackId;
+// }
+// else
+// {
+// [self failWithCallbackID:command.callbackId withMessage:@"发送请求失败"];
+// }
+}
+
+- (void)jumpToWechat:(CDVInvokedUrlCommand *)command
+{
+ // check arguments
+ NSString *url = [command.arguments objectAtIndex:0];
+ if (!url || ![url hasPrefix:@"weixin://"])
+ {
+ [self failWithCallbackID:command.callbackId withMessage:@"参数格式错误"];
+ return ;
+ }
+
+ NSURL *formatUrl = [NSURL URLWithString:[url stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]];
+ if ([[UIApplication sharedApplication] canOpenURL:formatUrl]) {
+ NSDictionary *options = @{UIApplicationOpenURLOptionUniversalLinksOnly : @YES};
+ [[UIApplication sharedApplication] openURL:formatUrl options:options completionHandler:nil];
+ } else{
+ [self failWithCallbackID:command.callbackId withMessage:@"未安装微信或其他错误"];
+ }
+ return ;
+}
+
+
+
+#pragma mark "WXApiDelegate"
+
+/**
+ * Not implemented
+ */
+- (void)onReq:(BaseReq *)req
+{
+ NSLog(@"%@", req);
+}
+
+- (void)onResp:(WXLaunchMiniProgramResp *)resp
+{
+ BOOL success = NO;
+ NSString *message = @"Unknown";
+ NSDictionary *response = nil;
+
+ switch (resp.errCode)
+ {
+ case WXSuccess:
+ success = YES;
+ break;
+
+ case WXErrCodeCommon:
+ message = @"普通错误";
+ break;
+
+ case WXErrCodeUserCancel:
+ message = @"用户点击取消并返回";
+ break;
+
+ case WXErrCodeSentFail:
+ message = @"发送失败";
+ break;
+
+ case WXErrCodeAuthDeny:
+ message = @"授权失败";
+ break;
+
+ case WXErrCodeUnsupport:
+ message = @"微信不支持";
+ break;
+
+ default:
+ message = @"未知错误";
+ }
+
+ if (success)
+ {
+ if ([resp isKindOfClass:[SendAuthResp class]])
+ {
+ // fix issue that lang and country could be nil for iPhone 6 which caused crash.
+ SendAuthResp* authResp = (SendAuthResp*)resp;
+ response = @{
+ @"code": authResp.code != nil ? authResp.code : @"",
+ @"state": authResp.state != nil ? authResp.state : @"",
+ @"lang": authResp.lang != nil ? authResp.lang : @"",
+ @"country": authResp.country != nil ? authResp.country : @"",
+ };
+
+ CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:response];
+
+ [self.commandDelegate sendPluginResult:commandResult callbackId:self.currentCallbackId];
+ }
+ else if([resp isKindOfClass:[WXChooseInvoiceResp class]]){
+ WXChooseInvoiceResp* invoiceResp = (WXChooseInvoiceResp *)resp;
+
+ // response = @{
+ // @"data":invoiceResp.cardAry
+ // }
+ NSMutableArray *arrM = [[NSMutableArray alloc] init];
+ NSDictionary *mutableDic = nil;
+ for(WXInvoiceItem *invoiceItem in invoiceResp.cardAry){
+ mutableDic = @{
+ @"cardId": invoiceItem.cardId,
+ @"encryptCode": invoiceItem.encryptCode,
+ };
+ [arrM addObject:mutableDic];
+ }
+ response = @{
+ @"data": arrM
+ };
+ NSLog(@"response======= %@", response);
+ CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:response];
+ [self.commandDelegate sendPluginResult:commandResult callbackId:self.currentCallbackId];
+ }
+ else if ([resp isKindOfClass:[WXLaunchMiniProgramResp class]])
+ {
+ NSString *extMsg = resp.extMsg;
+ response = @{
+ @"extMsg": extMsg
+ };
+ CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsDictionary:response];
+ [self.commandDelegate sendPluginResult:commandResult callbackId:self.currentCallbackId];
+ }
+ else
+ {
+ [self successWithCallbackID:self.currentCallbackId];
+ }
+ }
+ else
+ {
+ [self failWithCallbackID:self.currentCallbackId withMessage:message];
+ }
+
+ [self pluginInitialize];
+ self.currentCallbackId = nil;
+}
+
+#pragma mark "CDVPlugin Overrides"
+
+- (void)handleOpenURL:(NSNotification *)notification
+{
+ NSURL* url = [notification object];
+
+ if ([url isKindOfClass:[NSURL class]] && [url.scheme isEqualToString:self.wechatAppId])
+ {
+ [WXApi handleOpenURL:url delegate:self];
+ }
+}
+
+#pragma mark "Private methods"
+
+- (WXMediaMessage *)buildSharingMessage:(NSDictionary *)message
+{
+ WXMediaMessage *wxMediaMessage = [WXMediaMessage message];
+ wxMediaMessage.title = [message objectForKey:@"title"];
+ wxMediaMessage.description = [message objectForKey:@"description"];
+ wxMediaMessage.mediaTagName = [message objectForKey:@"mediaTagName"];
+ wxMediaMessage.messageExt = [message objectForKey:@"messageExt"];
+ wxMediaMessage.messageAction = [message objectForKey:@"messageAction"];
+ if ([message objectForKey:@"thumb"])
+ {
+ [wxMediaMessage setThumbImage:[self getUIImageFromURL:[message objectForKey:@"thumb"]]];
+ }
+
+ // media parameters
+ id mediaObject = nil;
+ WXMiniProgramObject *object;
+ NSDictionary *media = [message objectForKey:@"media"];
+ // check types
+ NSInteger type = [[media objectForKey:@"type"] integerValue];
+ switch (type)
+ {
+ case CDVWXSharingTypeApp:
+ mediaObject = [WXAppExtendObject object];
+ ((WXAppExtendObject*)mediaObject).extInfo = [media objectForKey:@"extInfo"];
+ ((WXAppExtendObject*)mediaObject).url = [media objectForKey:@"url"];
+ break;
+
+ case CDVWXSharingTypeEmotion:
+ mediaObject = [WXEmoticonObject object];
+ ((WXEmoticonObject*)mediaObject).emoticonData = [self getNSDataFromURL:[media objectForKey:@"emotion"]];
+ break;
+
+ case CDVWXSharingTypeFile:
+ mediaObject = [WXFileObject object];
+ ((WXFileObject*)mediaObject).fileData = [self getNSDataFromURL:[media objectForKey:@"file"]];
+ ((WXFileObject*)mediaObject).fileExtension = [media objectForKey:@"fileExtension"];
+ break;
+
+ case CDVWXSharingTypeImage:
+ mediaObject = [WXImageObject object];
+ ((WXImageObject*)mediaObject).imageData = [self getNSDataFromURL:[media objectForKey:@"image"]];
+ break;
+
+ case CDVWXSharingTypeMusic:
+ mediaObject = [WXMusicObject object];
+ ((WXMusicObject*)mediaObject).musicUrl = [media objectForKey:@"musicUrl"];
+ ((WXMusicObject*)mediaObject).musicDataUrl = [media objectForKey:@"musicDataUrl"];
+ break;
+
+ case CDVWXSharingTypeVideo:
+ mediaObject = [WXVideoObject object];
+ ((WXVideoObject*)mediaObject).videoUrl = [media objectForKey:@"videoUrl"];
+ break;
+ case CDVWXSharingTypeMini:
+ object = [WXMiniProgramObject object];
+ object.webpageUrl = [media objectForKey:@"webpageUrl"];
+ object.userName = [media objectForKey:@"userName"];
+ object.path = [media objectForKey:@"path"]; // pages/inbox/inbox?name1=key1&name=key2
+ object.hdImageData = [self getNSDataFromURL:[media objectForKey:@"hdImageData"]];
+ object.withShareTicket = [[media objectForKey:@"withShareTicket"] boolValue];
+ object.miniProgramType = (int)[[media objectForKey:@"miniProgramType"] integerValue];
+ wxMediaMessage.mediaObject = object;
+ return wxMediaMessage;
+
+ case CDVWXSharingTypeWebPage:
+ default:
+ mediaObject = [WXWebpageObject object];
+ ((WXWebpageObject *)mediaObject).webpageUrl = [media objectForKey:@"webpageUrl"];
+ }
+
+ wxMediaMessage.mediaObject = mediaObject;
+ return wxMediaMessage;
+}
+
+- (NSData *)getNSDataFromURL:(NSString *)url
+{
+ NSData *data = nil;
+
+ if ([url hasPrefix:@"http://"] || [url hasPrefix:@"https://"])
+ {
+ data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
+ }
+ else if ([url hasPrefix:@"data:image"])
+ {
+ // a base 64 string
+ NSURL *base64URL = [NSURL URLWithString:url];
+ data = [NSData dataWithContentsOfURL:base64URL];
+ }
+ else if ([url rangeOfString:@"temp:"].length != 0)
+ {
+ url = [NSTemporaryDirectory() stringByAppendingPathComponent:[url componentsSeparatedByString:@"temp:"][1]];
+ data = [NSData dataWithContentsOfFile:url];
+ }
+ else
+ {
+ // local file
+ url = [[NSBundle mainBundle] pathForResource:[url stringByDeletingPathExtension] ofType:[url pathExtension]];
+ data = [NSData dataWithContentsOfFile:url];
+ }
+
+ return data;
+}
+
+- (UIImage *)getUIImageFromURL:(NSString *)url
+{
+ NSData *data = [self getNSDataFromURL:url];
+ UIImage *image = [UIImage imageWithData:data];
+
+ if (image.size.width > MAX_THUMBNAIL_SIZE || image.size.height > MAX_THUMBNAIL_SIZE)
+ {
+ CGFloat width = 0;
+ CGFloat height = 0;
+
+ // calculate size
+ if (image.size.width > image.size.height)
+ {
+ width = MAX_THUMBNAIL_SIZE;
+ height = width * image.size.height / image.size.width;
+ }
+ else
+ {
+ height = MAX_THUMBNAIL_SIZE;
+ width = height * image.size.width / image.size.height;
+ }
+
+ // scale it
+ UIGraphicsBeginImageContext(CGSizeMake(width, height));
+ [image drawInRect:CGRectMake(0, 0, width, height)];
+ UIImage *scaled = UIGraphicsGetImageFromCurrentImageContext();
+ UIGraphicsEndImageContext();
+
+ return scaled;
+ }
+
+ return image;
+}
+
+- (void)successWithCallbackID:(NSString *)callbackID
+{
+ [self successWithCallbackID:callbackID withMessage:@"OK"];
+}
+
+- (void)successWithCallbackID:(NSString *)callbackID withMessage:(NSString *)message
+{
+ CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:message];
+ [self.commandDelegate sendPluginResult:commandResult callbackId:callbackID];
+}
+
+- (void)failWithCallbackID:(NSString *)callbackID withError:(NSError *)error
+{
+ [self failWithCallbackID:callbackID withMessage:[error localizedDescription]];
+}
+
+- (void)failWithCallbackID:(NSString *)callbackID withMessage:(NSString *)message
+{
+ CDVPluginResult *commandResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:message];
+ [self.commandDelegate sendPluginResult:commandResult callbackId:callbackID];
+}
+
+- (void)openMiniProgram:(CDVInvokedUrlCommand *)command
+{
+ NSDictionary *params = [command.arguments objectAtIndex:0];
+ WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object];
+ launchMiniProgramReq.userName = [params objectForKey:@"userName"]; //拉起的小程序的username
+ launchMiniProgramReq.path = [params objectForKey:@"path"]; //拉起小程序页面的可带参路径,不填默认拉起小程序首页
+ launchMiniProgramReq.miniProgramType = (int)[[params objectForKey:@"miniprogramType"] integerValue]; //拉起小程序的类型
+ [WXApi sendReq:launchMiniProgramReq completion:^(BOOL success) {
+ if(success) {
+ self.currentCallbackId = command.callbackId;
+ } else {
+ [self failWithCallbackID:command.callbackId withMessage:@"打开请求失败"];
+ }
+ }];
+}
+
+- (BOOL)handleUserActivity:(NSUserActivity *)userActivity {
+ return [WXApi handleOpenUniversalLink:userActivity delegate:self];
+}
+
+- (BOOL)handleWechatOpenURL:(NSURL *)url {
+ return [WXApi handleOpenURL:url delegate:self];
+}
+
+@end
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/WXApi.h b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/WXApi.h
new file mode 100644
index 0000000..38e6476
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/WXApi.h
@@ -0,0 +1,183 @@
+//
+// WXApi.h
+// 所有Api接口
+//
+// Created by Wechat on 12-2-28.
+// Copyright (c) 2012年 Tencent. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "WXApiObject.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+#pragma mark - WXApiDelegate
+/*! @brief 接收并处理来自微信终端程序的事件消息
+ *
+ * 接收并处理来自微信终端程序的事件消息,期间微信界面会切换到第三方应用程序。
+ * WXApiDelegate 会在handleOpenURL:delegate:中使用并触发。
+ */
+@protocol WXApiDelegate <NSObject>
+@optional
+
+/*! @brief 收到一个来自微信的请求,第三方应用程序处理完后调用sendResp向微信发送结果
+ *
+ * 收到一个来自微信的请求,异步处理完成后必须调用sendResp发送处理结果给微信。
+ * 可能收到的请求有GetMessageFromWXReq、ShowMessageFromWXReq等。
+ * @param req 具体请求内容,是自动释放的
+ */
+- (void)onReq:(BaseReq*)req;
+
+
+
+/*! @brief 发送一个sendReq后,收到微信的回应
+ *
+ * 收到一个来自微信的处理结果。调用一次sendReq后会收到onResp。
+ * 可能收到的处理结果有SendMessageToWXResp、SendAuthResp等。
+ * @param resp具体的回应内容,是自动释放的
+ */
+- (void)onResp:(BaseResp*)resp;
+
+@end
+
+#pragma mark - WXApiLogDelegate
+
+@protocol WXApiLogDelegate <NSObject>
+
+- (void)onLog:(NSString*)log logLevel:(WXLogLevel)level;
+
+@end
+
+#pragma mark - WXApi
+
+/*! @brief 微信Api接口函数类
+ *
+ * 该类封装了微信终端SDK的所有接口
+ */
+@interface WXApi : NSObject
+
+/*! @brief WXApi的成员函数,向微信终端程序注册第三方应用。
+ *
+ * 需要在每次启动第三方应用程序时调用。
+ * @attention 请保证在主线程中调用此函数
+ * @param appid 微信开发者ID
+ * @param universalLink 微信开发者Universal Link
+ * @return 成功返回YES,失败返回NO。
+ */
++ (BOOL)registerApp:(NSString *)appid universalLink:(NSString *)universalLink;
+
+
+/*! @brief 处理旧版微信通过URL启动App时传递的数据
+ *
+ * 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中调用。
+ * @param url 微信启动第三方应用时传递过来的URL
+ * @param delegate WXApiDelegate对象,用来接收微信触发的消息。
+ * @return 成功返回YES,失败返回NO。
+ */
++ (BOOL)handleOpenURL:(NSURL *)url delegate:(nullable id<WXApiDelegate>)delegate;
+
+
+/*! @brief 处理微信通过Universal Link启动App时传递的数据
+ *
+ * 需要在 application:continueUserActivity:restorationHandler:中调用。
+ * @param userActivity 微信启动第三方应用时系统API传递过来的userActivity
+ * @param delegate WXApiDelegate对象,用来接收微信触发的消息。
+ * @return 成功返回YES,失败返回NO。
+ */
++ (BOOL)handleOpenUniversalLink:(NSUserActivity *)userActivity delegate:(nullable id<WXApiDelegate>)delegate;
+
+
+/*! @brief 检查微信是否已被用户安装
+ *
+ * @return 微信已安装返回YES,未安装返回NO。
+ */
++ (BOOL)isWXAppInstalled;
+
+
+
+/*! @brief 判断当前微信的版本是否支持OpenApi
+ *
+ * @return 支持返回YES,不支持返回NO。
+ */
++ (BOOL)isWXAppSupportApi;
+
+
+
+/*! @brief 获取微信的itunes安装地址
+ *
+ * @return 微信的安装地址字符串。
+ */
++ (NSString *)getWXAppInstallUrl;
+
+
+
+/*! @brief 获取当前微信SDK的版本号
+ *
+ * @return 返回当前微信SDK的版本号
+ */
++ (NSString *)getApiVersion;
+
+
+
+/*! @brief 打开微信
+ *
+ * @return 成功返回YES,失败返回NO。
+ */
++ (BOOL)openWXApp;
+
+
+
+/*! @brief 发送请求到微信,等待微信返回onResp
+ *
+ * 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持以下类型
+ * SendAuthReq、SendMessageToWXReq、PayReq等。
+ * @param req 具体的发送请求。
+ * @param completion 调用结果回调block
+ */
++ (void)sendReq:(BaseReq *)req completion:(void (^ __nullable)(BOOL success))completion;
+
+/*! @brief 收到微信onReq的请求,发送对应的应答给微信,并切换到微信界面
+ *
+ * 函数调用后,会切换到微信的界面。第三方应用程序收到微信onReq的请求,异步处理该请求,完成后必须调用该函数。可能发送的相应有
+ * GetMessageFromWXResp、ShowMessageFromWXResp等。
+ * @param resp 具体的应答内容
+ * @param completion 调用结果回调block
+ */
++ (void)sendResp:(BaseResp*)resp completion:(void (^ __nullable)(BOOL success))completion;
+
+
+/*! @brief 发送Auth请求到微信,支持用户没安装微信,等待微信返回onResp
+ *
+ * 函数调用后,会切换到微信的界面。第三方应用程序等待微信返回onResp。微信在异步处理完成后一定会调用onResp。支持SendAuthReq类型。
+ * @param req 具体的发送请求。
+ * @param viewController 当前界面对象。
+ * @param delegate WXApiDelegate对象,用来接收微信触发的消息。
+ * @param completion 调用结果回调block
+ */
++ (void)sendAuthReq:(SendAuthReq *)req viewController:(UIViewController*)viewController delegate:(nullable id<WXApiDelegate>)delegate completion:(void (^ __nullable)(BOOL success))completion;
+
+
+/*! @brief WXApi的成员函数,接受微信的log信息。byBlock
+ 注意1:SDK会强引用这个block,注意不要导致内存泄漏,注意不要导致内存泄漏
+ 注意2:调用过一次startLog by block之后,如果再调用一次任意方式的startLoad,会释放上一次logBlock,不再回调上一个logBlock
+ *
+ * @param level 打印log的级别
+ * @param logBlock 打印log的回调block
+ */
++ (void)startLogByLevel:(WXLogLevel)level logBlock:(WXLogBolock)logBlock;
+
+/*! @brief WXApi的成员函数,接受微信的log信息。byDelegate
+ 注意1:sdk会弱引用这个delegate,这里可加任意对象为代理,不需要与WXApiDelegate同一个对象
+ 注意2:调用过一次startLog by delegate之后,再调用一次任意方式的startLoad,不会再回调上一个logDelegate对象
+ * @param level 打印log的级别
+ * @param logDelegate 打印log的回调代理,
+ */
++ (void)startLogByLevel:(WXLogLevel)level logDelegate:(id<WXApiLogDelegate>)logDelegate;
+
+/*! @brief 停止打印log,会清理block或者delegate为空,释放block
+ * @param
+ */
++ (void)stopLog;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/WXApiObject.h b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/WXApiObject.h
new file mode 100644
index 0000000..28828e2
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/WXApiObject.h
@@ -0,0 +1,1026 @@
+//
+// MMApiObject.h
+// Api对象,包含所有接口和对象数据定义
+//
+// Created by Wechat on 12-2-28.
+// Copyright (c) 2012年 Tencent. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+/*! @brief 错误码
+ *
+ */
+enum WXErrCode {
+ WXSuccess = 0, /**< 成功 */
+ WXErrCodeCommon = -1, /**< 普通错误类型 */
+ WXErrCodeUserCancel = -2, /**< 用户点击取消并返回 */
+ WXErrCodeSentFail = -3, /**< 发送失败 */
+ WXErrCodeAuthDeny = -4, /**< 授权失败 */
+ WXErrCodeUnsupport = -5, /**< 微信不支持 */
+};
+
+
+
+/*! @brief 请求发送场景
+ *
+ */
+enum WXScene {
+ WXSceneSession = 0, /**< 聊天界面 */
+ WXSceneTimeline = 1, /**< 朋友圈 */
+ WXSceneFavorite = 2, /**< 收藏 */
+ WXSceneSpecifiedSession = 3, /**< 指定联系人 */
+};
+
+
+enum WXAPISupport {
+ WXAPISupportSession = 0,
+};
+
+
+
+/*! @brief 跳转profile类型
+ *
+ */
+enum WXBizProfileType {
+ WXBizProfileType_Normal = 0, //**< 普通公众号 */
+ WXBizProfileType_Device = 1, //**< 硬件公众号 */
+};
+
+/*! @brief 分享小程序类型
+ *
+ */
+typedef NS_ENUM(NSUInteger, WXMiniProgramType) {
+ WXMiniProgramTypeRelease = 0, //**< 正式版 */
+ WXMiniProgramTypeTest = 1, //**< 开发版 */
+ WXMiniProgramTypePreview = 2, //**< 体验版 */
+};
+
+/*! @brief 跳转mp网页类型
+ *
+ */
+enum WXMPWebviewType {
+ WXMPWebviewType_Ad = 0, /**< 广告网页 **/
+};
+
+/*! @brief log的级别
+ *
+ */
+typedef NS_ENUM(NSInteger,WXLogLevel) {
+ WXLogLevelNormal = 0, // 打印日常的日志
+ WXLogLevelDetail = 1, // 打印详细的日志
+};
+
+
+/*! @brief 打印回调的block
+ *
+ */
+typedef void(^WXLogBolock)(NSString *log);
+
+#pragma mark - BaseReq
+/*! @brief 该类为微信终端SDK所有请求类的基类
+ *
+ */
+@interface BaseReq : NSObject
+
+/** 请求类型 */
+@property (nonatomic, assign) int type;
+/** 由用户微信号和AppID组成的唯一标识,需要校验微信用户是否换号登录时填写*/
+@property (nonatomic, copy) NSString *openID;
+
+@end
+
+
+
+#pragma mark - BaseResp
+/*! @brief 该类为微信终端SDK所有响应类的基类
+ *
+ */
+@interface BaseResp : NSObject
+/** 错误码 */
+@property (nonatomic, assign) int errCode;
+/** 错误提示字符串 */
+@property (nonatomic, copy) NSString *errStr;
+/** 响应类型 */
+@property (nonatomic, assign) int type;
+
+@end
+
+
+
+#pragma mark - WXMediaMessage
+@class WXMediaMessage;
+
+#ifndef BUILD_WITHOUT_PAY
+
+#pragma mark - PayReq
+/*! @brief 第三方向微信终端发起支付的消息结构体
+ *
+ * 第三方向微信终端发起支付的消息结构体,微信终端处理后会向第三方返回处理结果
+ * @see PayResp
+ */
+@interface PayReq : BaseReq
+
+/** 商家向财付通申请的商家id */
+@property (nonatomic, copy) NSString *partnerId;
+/** 预支付订单 */
+@property (nonatomic, copy) NSString *prepayId;
+/** 随机串,防重发 */
+@property (nonatomic, copy) NSString *nonceStr;
+/** 时间戳,防重发 */
+@property (nonatomic, assign) UInt32 timeStamp;
+/** 商家根据财付通文档填写的数据和签名 */
+@property (nonatomic, copy) NSString *package;
+/** 商家根据微信开放平台文档对数据做的签名 */
+@property (nonatomic, copy) NSString *sign;
+
+@end
+
+
+#pragma mark - PayResp
+/*! @brief 微信终端返回给第三方的关于支付结果的结构体
+ *
+ * 微信终端返回给第三方的关于支付结果的结构体
+ */
+@interface PayResp : BaseResp
+
+/** 财付通返回给商家的信息 */
+@property (nonatomic, copy) NSString *returnKey;
+
+@end
+
+#pragma mark - WXOfflinePay
+/*! @brief 第三方向微信终端发起离线支付
+ *
+ * 第三方向微信终端发起离线支付的消息结构体
+ */
+@interface WXOfflinePayReq : BaseReq
+
+@end
+
+/*! @brief 第三方向微信终端发起离线支付返回
+ *
+ * 第三方向微信终端发起离线支付返回的消息结构体
+ */
+@interface WXOfflinePayResp : BaseResp
+
+@end
+
+
+#pragma mark - WXNontaxPayReq
+@interface WXNontaxPayReq:BaseReq
+
+@property (nonatomic, copy) NSString *urlString;
+
+@end
+
+#pragma mark - WXNontaxPayResp
+@interface WXNontaxPayResp : BaseResp
+
+@property (nonatomic, copy) NSString *wxOrderId;
+
+@end
+
+#pragma mark - WXPayInsuranceReq
+@interface WXPayInsuranceReq : BaseReq
+
+@property (nonatomic, copy) NSString *urlString;
+
+@end
+
+#pragma mark - WXPayInsuranceResp
+@interface WXPayInsuranceResp : BaseResp
+
+@property (nonatomic, copy) NSString *wxOrderId;
+
+@end
+
+#endif
+
+
+#pragma mark - SendAuthReq
+/*! @brief 第三方程序向微信终端请求认证的消息结构
+ *
+ * 第三方程序要向微信申请认证,并请求某些权限,需要调用WXApi的sendReq成员函数,
+ * 向微信终端发送一个SendAuthReq消息结构。微信终端处理完后会向第三方程序发送一个处理结果。
+ * @see SendAuthResp
+ */
+@interface SendAuthReq : BaseReq
+/** 第三方程序要向微信申请认证,并请求某些权限,需要调用WXApi的sendReq成员函数,向微信终端发送一个SendAuthReq消息结构。微信终端处理完后会向第三方程序发送一个处理结果。
+ * @see SendAuthResp
+ * @note scope字符串长度不能超过1K
+ */
+@property (nonatomic, copy) NSString *scope;
+/** 第三方程序本身用来标识其请求的唯一性,最后跳转回第三方程序时,由微信终端回传。
+ * @note state字符串长度不能超过1K
+ */
+@property (nonatomic, copy) NSString *state;
+
+@end
+
+#pragma mark - SendAuthResp
+/*! @brief 微信处理完第三方程序的认证和权限申请后向第三方程序回送的处理结果。
+ *
+ * 第三方程序要向微信申请认证,并请求某些权限,需要调用WXApi的sendReq成员函数,向微信终端发送一个SendAuthReq消息结构。
+ * 微信终端处理完后会向第三方程序发送一个SendAuthResp。
+ * @see onResp
+ */
+@interface SendAuthResp : BaseResp
+@property (nonatomic, copy, nullable) NSString *code;
+/** 第三方程序发送时用来标识其请求的唯一性的标志,由第三方程序调用sendReq时传入,由微信终端回传
+ * @note state字符串长度不能超过1K
+ */
+@property (nonatomic, copy, nullable) NSString *state;
+@property (nonatomic, copy, nullable) NSString *lang;
+@property (nonatomic, copy, nullable) NSString *country;
+@end
+
+
+
+#pragma mark - SendMessageToWXReq
+/*! @brief 第三方程序发送消息至微信终端程序的消息结构体
+ *
+ * 第三方程序向微信发送信息需要传入SendMessageToWXReq结构体,信息类型包括文本消息和多媒体消息,
+ * 分别对应于text和message成员。调用该方法后,微信处理完信息会向第三方程序发送一个处理结果。
+ * @see SendMessageToWXResp
+ */
+@interface SendMessageToWXReq : BaseReq
+/** 发送消息的文本内容
+ * @note 文本长度必须大于0且小于10K
+ */
+@property (nonatomic, copy) NSString *text;
+/** 发送消息的多媒体内容
+ * @see WXMediaMessage
+ */
+@property (nonatomic, strong) WXMediaMessage *message;
+/** 发送消息的类型,包括文本消息和多媒体消息两种,两者只能选择其一,不能同时发送文本和多媒体消息 */
+@property (nonatomic, assign) BOOL bText;
+/** 发送的目标场景,可以选择发送到会话(WXSceneSession)或者朋友圈(WXSceneTimeline)。 默认发送到会话。
+ * @see WXScene
+ */
+@property (nonatomic, assign) int scene;
+/** 指定发送消息的人
+ * @note WXSceneSpecifiedSession时有效
+ */
+@property (nonatomic, copy, nullable) NSString *toUserOpenId;
+@end
+
+#pragma mark - SendMessageToWXResp
+/*! @brief 微信终端向第三方程序返回的SendMessageToWXReq处理结果。
+ *
+ * 第三方程序向微信终端发送SendMessageToWXReq后,微信发送回来的处理结果,该结果用SendMessageToWXResp表示。
+ */
+@interface SendMessageToWXResp : BaseResp
+@property(nonatomic, copy) NSString *lang;
+@property(nonatomic, copy) NSString *country;
+@end
+
+#pragma mark - GetMessageFromWXReq
+/*! @brief 微信终端向第三方程序请求提供内容的消息结构体。
+ *
+ * 微信终端向第三方程序请求提供内容,微信终端会向第三方程序发送GetMessageFromWXReq消息结构体,
+ * 需要第三方程序调用sendResp返回一个GetMessageFromWXResp消息结构体。
+ */
+@interface GetMessageFromWXReq : BaseReq
+@property (nonatomic, strong) NSString *lang;
+@property (nonatomic, strong) NSString *country;
+@end
+
+
+
+#pragma mark - GetMessageFromWXResp
+/*! @brief 微信终端向第三方程序请求提供内容,第三方程序向微信终端返回的消息结构体。
+ *
+ * 微信终端向第三方程序请求提供内容,第三方程序调用sendResp向微信终端返回一个GetMessageFromWXResp消息结构体。
+ */
+@interface GetMessageFromWXResp : BaseResp
+/** 向微信终端提供的文本内容
+ @note 文本长度必须大于0且小于10K
+ */
+@property (nonatomic, strong) NSString *text;
+/** 向微信终端提供的多媒体内容。
+ * @see WXMediaMessage
+ */
+@property (nonatomic, strong) WXMediaMessage *message;
+/** 向微信终端提供内容的消息类型,包括文本消息和多媒体消息两种,两者只能选择其一,不能同时发送文本和多媒体消息 */
+@property (nonatomic, assign) BOOL bText;
+@end
+
+
+
+#pragma mark - ShowMessageFromWXReq
+/*! @brief 微信通知第三方程序,要求第三方程序显示的消息结构体。
+ *
+ * 微信需要通知第三方程序显示或处理某些内容时,会向第三方程序发送ShowMessageFromWXReq消息结构体。
+ * 第三方程序处理完内容后调用sendResp向微信终端发送ShowMessageFromWXResp。
+ */
+@interface ShowMessageFromWXReq : BaseReq
+/** 微信终端向第三方程序发送的要求第三方程序处理的多媒体内容
+ * @see WXMediaMessage
+ */
+@property (nonatomic, strong) WXMediaMessage *message;
+@property (nonatomic, copy) NSString *lang;
+@property (nonatomic, copy) NSString *country;
+@end
+
+
+
+#pragma mark - ShowMessageFromWXResp
+/*! @brief 微信通知第三方程序,要求第三方程序显示或处理某些消息,第三方程序处理完后向微信终端发送的处理结果。
+ *
+ * 微信需要通知第三方程序显示或处理某些内容时,会向第三方程序发送ShowMessageFromWXReq消息结构体。
+ * 第三方程序处理完内容后调用sendResp向微信终端发送ShowMessageFromWXResp。
+ */
+@interface ShowMessageFromWXResp : BaseResp
+@end
+
+
+#pragma mark - LaunchFromWXReq
+/*! @brief 微信终端打开第三方程序携带的消息结构体
+ *
+ * 微信向第三方发送的结构体,第三方不需要返回
+ */
+@interface LaunchFromWXReq : BaseReq
+@property (nonatomic, strong) WXMediaMessage *message;
+@property (nonatomic, copy) NSString *lang;
+@property (nonatomic, copy) NSString *country;
+@end
+
+
+#pragma mark - OpenWebviewReq
+/* ! @brief 第三方通知微信启动内部浏览器,打开指定网页
+ *
+ * 第三方通知微信启动内部浏览器,打开指定Url对应的网页
+ */
+@interface OpenWebviewReq : BaseReq
+/** 需要打开的网页对应的Url
+ * @attention 长度不能超过1024
+ */
+@property(nonatomic, copy) NSString *url;
+
+@end
+
+#pragma mark - OpenWebviewResp
+/*! @brief 微信终端向第三方程序返回的OpenWebviewReq处理结果
+ *
+ * 第三方程序向微信终端发送OpenWebviewReq后,微信发送回来的处理结果,该结果用OpenWebviewResp表示
+ */
+@interface OpenWebviewResp : BaseResp
+
+@end
+
+
+
+#pragma mark - WXOpenBusinessWebViewReq
+/*! @brief 第三方通知微信启动内部浏览器,打开指定业务的网页
+ *
+ *
+ */
+@interface WXOpenBusinessWebViewReq : BaseReq
+
+/** 网页业务类型
+ * @attention
+ */
+@property (nonatomic, assign) UInt32 businessType;
+
+/** 网页业务参数
+ * @attention
+ */
+@property (nonatomic, strong, nullable) NSDictionary *queryInfoDic;
+
+@end
+
+#pragma mark - WXOpenBusinessWebViewResp
+/*! @brief 微信终端向第三方程序返回的WXOpenBusinessWebViewResp处理结果。
+ *
+ * 第三方程序向微信终端发送WXOpenBusinessWebViewReq后,微信发送回来的处理结果,该结果用WXOpenBusinessWebViewResp表示。
+ */
+@interface WXOpenBusinessWebViewResp : BaseResp
+/** 第三方程序自定义简单数据,微信终端会回传给第三方程序处理
+ * @attention 长度不能超过2k
+ */
+@property (nonatomic, copy) NSString *result;
+
+/** 网页业务类型
+ * @attention
+ */
+@property (nonatomic, assign) UInt32 businessType;
+
+@end
+
+
+#pragma mark - OpenRankListReq
+/* ! @brief 第三方通知微信,打开硬件排行榜
+ *
+ * 第三方通知微信,打开硬件排行榜
+ */
+@interface OpenRankListReq : BaseReq
+
+@end
+
+#pragma mark - OpenRanklistResp
+/*! @brief 微信终端向第三方程序返回的OpenRankListReq处理结果。
+ *
+ * 第三方程序向微信终端发送OpenRankListReq后,微信发送回来的处理结果,该结果用OpenRankListResp表示。
+ */
+@interface OpenRankListResp : BaseResp
+
+@end
+
+
+#pragma mark - WXCardItem
+
+@interface WXCardItem : NSObject
+/** 卡id
+ * @attention 长度不能超过1024字节
+ */
+@property (nonatomic, copy) NSString *cardId;
+/** ext信息
+ * @attention 长度不能超过2024字节
+ */
+@property (nonatomic, copy, nullable) NSString *extMsg;
+/**
+ * @attention 卡的状态,req不需要填。resp:0为未添加,1为已添加。
+ */
+@property (nonatomic, assign) UInt32 cardState;
+/**
+ * @attention req不需要填,chooseCard返回的。
+ */
+@property (nonatomic, copy) NSString *encryptCode;
+/**
+ * @attention req不需要填,chooseCard返回的。
+ */
+@property (nonatomic, copy) NSString *appID;
+@end;
+
+#pragma mark - WXInvoiceItem
+
+@interface WXInvoiceItem : NSObject
+/** 卡id
+ * @attention 长度不能超过1024字节
+ */
+@property (nonatomic, copy) NSString *cardId;
+/** ext信息
+ * @attention 长度不能超过2024字节
+ */
+@property (nonatomic, copy, nullable) NSString *extMsg;
+/**
+ * @attention 卡的状态,req不需要填。resp:0为未添加,1为已添加。
+ */
+@property (nonatomic, assign) UInt32 cardState;
+/**
+ * @attention req不需要填,chooseCard返回的。
+ */
+@property (nonatomic, copy) NSString *encryptCode;
+/**
+ * @attention req不需要填,chooseCard返回的。
+ */
+@property (nonatomic, copy) NSString *appID;
+
+@end
+
+#pragma mark - AddCardToWXCardPackageReq
+/* ! @brief 请求添加卡券至微信卡包
+ *
+ */
+
+@interface AddCardToWXCardPackageReq : BaseReq
+/** 卡列表
+ * @attention 个数不能超过40个 类型WXCardItem
+ */
+@property (nonatomic, strong) NSArray *cardAry;
+
+@end
+
+
+#pragma mark - AddCardToWXCardPackageResp
+/** ! @brief 微信返回第三方添加卡券结果
+ *
+ */
+
+@interface AddCardToWXCardPackageResp : BaseResp
+/** 卡列表
+ * @attention 个数不能超过40个 类型WXCardItem
+ */
+@property (nonatomic, strong) NSArray *cardAry;
+@end
+
+#pragma mark - WXChooseCardReq
+/* ! @brief 请求从微信选取卡券
+ *
+ */
+
+@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
+
+
+#pragma mark - WXChooseCardResp
+/** ! @brief 微信返回第三方请求选择卡券结果
+ *
+ */
+
+@interface WXChooseCardResp : BaseResp
+@property (nonatomic, strong ) NSArray* cardAry;
+@end
+
+
+#pragma mark - WXChooseInvoiceReq
+/* ! @brief 请求从微信选取发票
+ *
+ */
+@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
+
+#pragma mark - WXChooseInvoiceResp
+/** ! @brief 微信返回第三方请求选择发票结果
+ *
+ */
+@interface WXChooseInvoiceResp : BaseResp
+@property (nonatomic, strong) NSArray* cardAry;
+@end
+
+#pragma mark - WXSubscriptionReq
+@interface WXSubscribeMsgReq : BaseReq
+@property (nonatomic, assign) UInt32 scene;
+@property (nonatomic, copy) NSString *templateId;
+@property (nonatomic, copy, nullable) NSString *reserved;
+@end
+
+#pragma mark - WXSubscriptionReq
+@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
+
+#pragma mark - WXSubscribeMiniProgramMsg
+/** ! @brief 第三方请求订阅小程序消息
+ *
+ */
+@interface WXSubscribeMiniProgramMsgReq : BaseReq
+@property (nonatomic, copy) NSString *miniProgramAppid;
+@end
+
+#pragma mark - WXSubscriptionReq
+@interface WXSubscribeMiniProgramMsgResp : BaseResp
+
+@property(nonatomic, copy) NSString *openId; // 小程序openid
+@property(nonatomic, copy) NSString *unionId; // unionId
+@property(nonatomic, copy) NSString *nickName; // 用户昵称
+
+@end
+
+#pragma mark - WXinvoiceAuthInsertReq
+@interface WXInvoiceAuthInsertReq : BaseReq
+
+@property (nonatomic, copy) NSString *urlString;
+
+@end
+
+#pragma mark - WXinvoiceAuthInsertResp
+
+@interface WXInvoiceAuthInsertResp : BaseResp
+
+@property (nonatomic, copy) NSString *wxOrderId;
+
+@end
+
+#pragma mark - WXMediaMessage
+
+/*! @brief 多媒体消息结构体
+ *
+ * 用于微信终端和第三方程序之间传递消息的多媒体消息内容
+ */
+@interface WXMediaMessage : NSObject
+
++ (WXMediaMessage *)message;
+
+/** 标题
+ * @note 长度不能超过512字节
+ */
+@property (nonatomic, copy) NSString *title;
+/** 描述内容
+ * @note 长度不能超过1K
+ */
+@property (nonatomic, copy) NSString *description;
+/** 缩略图数据
+ * @note 大小不能超过64K
+ */
+@property (nonatomic, strong, nullable) NSData *thumbData;
+/**
+ * @note 长度不能超过64字节
+ */
+@property (nonatomic, copy, nullable) NSString *mediaTagName;
+/**
+ *
+ */
+@property (nonatomic, copy, nullable) NSString *messageExt;
+@property (nonatomic, copy, nullable) NSString *messageAction;
+/**
+ * 多媒体数据对象,可以为WXImageObject,WXMusicObject,WXVideoObject,WXWebpageObject等。
+ */
+@property (nonatomic, strong) id mediaObject;
+
+/*! @brief 设置消息缩略图的方法
+ *
+ * @param image 缩略图
+ * @note 大小不能超过64K
+ */
+- (void)setThumbImage:(UIImage *)image;
+
+@end
+
+
+
+#pragma mark - WXImageObject
+/*! @brief 多媒体消息中包含的图片数据对象
+ *
+ * 微信终端和第三方程序之间传递消息中包含的图片数据对象。
+ * @note imageData成员不能为空
+ * @see WXMediaMessage
+ */
+@interface WXImageObject : NSObject
+/*! @brief 返回一个WXImageObject对象
+ *
+ * @note 返回的WXImageObject对象是自动释放的
+ */
++ (WXImageObject *)object;
+
+/** 图片真实数据内容
+ * @note 大小不能超过25M
+ */
+@property (nonatomic, strong) NSData *imageData;
+
+@end
+
+
+#pragma mark - WXMusicObject
+/*! @brief 多媒体消息中包含的音乐数据对象
+ *
+ * 微信终端和第三方程序之间传递消息中包含的音乐数据对象。
+ * @note musicUrl和musicLowBandUrl成员不能同时为空。
+ * @see WXMediaMessage
+ */
+@interface WXMusicObject : NSObject
+/*! @brief 返回一个WXMusicObject对象
+ *
+ * @note 返回的WXMusicObject对象是自动释放的
+ */
++ (WXMusicObject *)object;
+
+/** 音乐网页的url地址
+ * @note 长度不能超过10K
+ */
+@property (nonatomic, copy) NSString *musicUrl;
+/** 音乐lowband网页的url地址
+ * @note 长度不能超过10K
+ */
+@property (nonatomic, copy) NSString *musicLowBandUrl;
+/** 音乐数据url地址
+ * @note 长度不能超过10K
+ */
+@property (nonatomic, copy) NSString *musicDataUrl;
+
+/**音乐lowband数据url地址
+ * @note 长度不能超过10K
+ */
+@property (nonatomic, copy) NSString *musicLowBandDataUrl;
+
+/**音乐封面图Url
+ * @note 长度不能超过10K
+ */
+@property (nonatomic, copy) NSString *songAlbumUrl;
+
+/**歌词信息 LRC格式
+ * @note 长度不能超过32K
+ */
+@property (nonatomic, copy, nullable) NSString *songLyric;
+@end
+
+
+
+#pragma mark - WXVideoObject
+/*! @brief 多媒体消息中包含的视频数据对象
+ *
+ * 微信终端和第三方程序之间传递消息中包含的视频数据对象。
+ * @note videoUrl和videoLowBandUrl不能同时为空。
+ * @see WXMediaMessage
+ */
+@interface WXVideoObject : NSObject
+/*! @brief 返回一个WXVideoObject对象
+ *
+ * @note 返回的WXVideoObject对象是自动释放的
+ */
++ (WXVideoObject *)object;
+
+/** 视频网页的url地址
+ * @note 长度不能超过10K
+ */
+@property (nonatomic, copy) NSString *videoUrl;
+/** 视频lowband网页的url地址
+ * @note 长度不能超过10K
+ */
+@property (nonatomic, copy) NSString *videoLowBandUrl;
+
+@end
+
+
+
+#pragma mark - WXWebpageObject
+/*! @brief 多媒体消息中包含的网页数据对象
+ *
+ * 微信终端和第三方程序之间传递消息中包含的网页数据对象。
+ * @see WXMediaMessage
+ */
+@interface WXWebpageObject : NSObject
+/*! @brief 返回一个WXWebpageObject对象
+ *
+ * @note 返回的WXWebpageObject对象是自动释放的
+ */
++ (WXWebpageObject *)object;
+
+/** 网页的url地址
+ * @note 不能为空且长度不能超过10K
+ */
+@property (nonatomic, copy) NSString *webpageUrl;
+
+@end
+
+
+
+#pragma mark - WXAppExtendObject
+/*! @brief 多媒体消息中包含的App扩展数据对象
+ *
+ * 第三方程序向微信终端发送包含WXAppExtendObject的多媒体消息,
+ * 微信需要处理该消息时,会调用该第三方程序来处理多媒体消息内容。
+ * @note url,extInfo和fileData不能同时为空
+ * @see WXMediaMessage
+ */
+@interface WXAppExtendObject : NSObject
+/*! @brief 返回一个WXAppExtendObject对象
+ *
+ * @note 返回的WXAppExtendObject对象是自动释放的
+ */
++ (WXAppExtendObject *)object;
+
+/** 若第三方程序不存在,微信终端会打开该url所指的App下载地址
+ * @note 长度不能超过10K
+ */
+@property (nonatomic, copy) NSString *url;
+/** 第三方程序自定义简单数据,微信终端会回传给第三方程序处理
+ * @note 长度不能超过2K
+ */
+@property (nonatomic, copy, nullable) NSString *extInfo;
+/** App文件数据,该数据发送给微信好友,微信好友需要点击后下载数据,微信终端会回传给第三方程序处理
+ * @note 大小不能超过10M
+ */
+@property (nonatomic, strong, nullable) NSData *fileData;
+
+@end
+
+
+
+#pragma mark - WXEmoticonObject
+/*! @brief 多媒体消息中包含的表情数据对象
+ *
+ * 微信终端和第三方程序之间传递消息中包含的表情数据对象。
+ * @see WXMediaMessage
+ */
+@interface WXEmoticonObject : NSObject
+
+/*! @brief 返回一个WXEmoticonObject对象
+ *
+ * @note 返回的WXEmoticonObject对象是自动释放的
+ */
++ (WXEmoticonObject *)object;
+
+/** 表情真实数据内容
+ * @note 大小不能超过10M
+ */
+@property (nonatomic, strong) NSData *emoticonData;
+
+@end
+
+
+
+#pragma mark - WXFileObject
+/*! @brief 多媒体消息中包含的文件数据对象
+ *
+ * @see WXMediaMessage
+ */
+@interface WXFileObject : NSObject
+
+/*! @brief 返回一个WXFileObject对象
+ *
+ * @note 返回的WXFileObject对象是自动释放的
+ */
++ (WXFileObject *)object;
+
+/** 文件后缀名
+ * @note 长度不超过64字节
+ */
+@property (nonatomic, copy) NSString *fileExtension;
+
+/** 文件真实数据内容
+ * @note 大小不能超过10M
+ */
+@property (nonatomic, strong) NSData *fileData;
+
+@end
+
+
+#pragma mark - WXLocationObject
+/*! @brief 多媒体消息中包含的地理位置数据对象
+ *
+ * 微信终端和第三方程序之间传递消息中包含的地理位置数据对象。
+ * @see WXMediaMessage
+ */
+@interface WXLocationObject : NSObject
+
+/*! @brief 返回一个WXLocationObject对象
+ *
+ * @note 返回的WXLocationObject对象是自动释放的
+ */
++ (WXLocationObject *)object;
+
+/** 地理位置信息
+ * @note 经纬度
+ */
+@property (nonatomic, assign) double lng; //经度
+@property (nonatomic, assign) double lat; //纬度
+
+@end
+
+#pragma mark - WXTextObject
+/*! @brief 多媒体消息中包含的文本数据对象
+ *
+ * 微信终端和第三方程序之间传递消息中包含的文本数据对象。
+ * @see WXMediaMessage
+ */
+@interface WXTextObject : NSObject
+
+/*! @brief 返回一个WXTextObject对象
+ *
+ * @note 返回的WXTextObject对象是自动释放的
+ */
++ (WXTextObject *)object;
+
+/** 地理位置信息
+ * @note 文本内容
+ */
+@property (nonatomic, copy) NSString *contentText;
+
+@end
+
+#pragma mark - WXMiniProgramObject
+
+@interface WXMiniProgramObject : NSObject
+
+/*! @brief WXMiniProgramObject对象
+ *
+ * @note 返回的WXMiniProgramObject对象是自动释放的
+ */
++ (WXMiniProgramObject *)object;
+
+/** 低版本网页链接
+ * @attention 长度不能超过1024字节
+ */
+@property (nonatomic, copy) NSString *webpageUrl;
+
+/** 小程序username */
+@property (nonatomic, copy) NSString *userName;
+
+/** 小程序页面的路径
+ * @attention 不填默认拉起小程序首页
+ */
+@property (nonatomic, copy, nullable) NSString *path;
+
+/** 小程序新版本的预览图
+ * @attention 大小不能超过128k
+ */
+@property (nonatomic, strong, nullable) NSData *hdImageData;
+
+/** 是否使用带 shareTicket 的转发 */
+@property (nonatomic, assign) BOOL withShareTicket;
+
+/** 分享小程序的版本
+ * @attention (正式,开发,体验)
+ */
+@property (nonatomic, assign) WXMiniProgramType miniProgramType;
+
+/** 是否禁用转发 */
+@property (nonatomic, assign) BOOL disableForward;
+
+@end
+
+#pragma mark - WXLaunchMiniProgramReq
+
+/*! @brief WXLaunchMiniProgramReq对象, 可实现通过sdk拉起微信小程序
+ *
+ * @note 返回的WXLaunchMiniProgramReq对象是自动释放的
+ */
+@interface WXLaunchMiniProgramReq : BaseReq
+
++ (WXLaunchMiniProgramReq *)object;
+
+/** 小程序username */
+@property (nonatomic, copy) NSString *userName;
+
+/** 小程序页面的路径
+ * @attention 不填默认拉起小程序首页
+ */
+@property (nonatomic, copy, nullable) NSString *path;
+
+/** 分享小程序的版本
+ * @attention (正式,开发,体验)
+ */
+@property (nonatomic, assign) WXMiniProgramType miniProgramType;
+
+/** ext信息
+ * @attention json格式
+ */
+@property (nonatomic, copy, nullable) NSString *extMsg;
+
+/** extDic
+ * @attention 字典,可存放图片等比较大的数据
+ */
+@property (nonatomic, copy, nullable) NSDictionary *extDic;
+
+@end
+
+#pragma mark - WXLaunchMiniProgramResp
+/*! @brief 微信终端向第三方程序返回的WXLaunchMiniProgramReq处理结果。
+ *
+ * 第三方程序向微信终端发送WXLaunchMiniProgramReq后,微信发送回来的处理结果,该结果用WXLaunchMiniProgramResp表示。
+ */
+@interface WXLaunchMiniProgramResp : BaseResp
+
+@property (nonatomic, copy, nullable) NSString *extMsg;
+
+@end
+
+
+#pragma mark - WXOpenBusinessViewReq
+/*! @brief WXOpenBusinessViewReq对象, 可实现第三方通知微信启动,打开业务页面
+ *
+ * @note 返回的WXOpenBusinessViewReq对象是自动释放的
+ */
+
+@interface WXOpenBusinessViewReq : BaseReq
+
++ (WXOpenBusinessViewReq *)object;
+
+/** 业务类型
+ */
+@property (nonatomic, copy) NSString *businessType;
+
+/** 业务参数
+ */
+@property (nonatomic, copy, nullable) NSString *query;
+
+/** ext信息
+ * @note 选填,json格式
+ */
+@property (nonatomic, copy, nullable) NSString *extInfo;
+
+/** extData数据
+ * @note
+ */
+@property (nonatomic, strong, nullable) NSData *extData;
+@end
+
+
+@interface WXOpenBusinessViewResp : BaseResp
+
+/** 业务类型
+ */
+@property (nonatomic, copy) NSString *businessType;
+
+/** 业务返回数据
+ */
+@property (nonatomic, copy, nullable) NSString *extMsg;
+
+@end
+NS_ASSUME_NONNULL_END
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/WechatAuthSDK.h b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/WechatAuthSDK.h
new file mode 100644
index 0000000..308aaea
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/WechatAuthSDK.h
@@ -0,0 +1,68 @@
+//
+// WechatAuthSDK.h
+// WechatAuthSDK
+//
+// Created by 李凯 on 13-11-29.
+// Copyright (c) 2013年 Tencent. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import <UIKit/UIKit.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+enum AuthErrCode {
+ WechatAuth_Err_Ok = 0, //Auth成功
+ WechatAuth_Err_NormalErr = -1, //普通错误
+ WechatAuth_Err_NetworkErr = -2, //网络错误
+ WechatAuth_Err_GetQrcodeFailed = -3, //获取二维码失败
+ WechatAuth_Err_Cancel = -4, //用户取消授权
+ WechatAuth_Err_Timeout = -5, //超时
+};
+
+@protocol WechatAuthAPIDelegate<NSObject>
+@optional
+
+- (void)onAuthGotQrcode:(UIImage *)image; //得到二维码
+- (void)onQrcodeScanned; //二维码被扫描
+- (void)onAuthFinish:(int)errCode AuthCode:(nullable NSString *)authCode; //成功登录
+
+@end
+
+@interface WechatAuthSDK : NSObject{
+ NSString *_sdkVersion;
+ __weak id<WechatAuthAPIDelegate> _delegate;
+}
+
+@property(nonatomic, weak, nullable) id<WechatAuthAPIDelegate> delegate;
+@property(nonatomic, readonly) NSString *sdkVersion; //authSDK版本号
+
+/*! @brief 发送登录请求,等待WechatAuthAPIDelegate回调
+ *
+ * @param appId 微信开发者ID
+ * @param nonceStr 一个随机的尽量不重复的字符串,用来使得每次的signature不同
+ * @param timeStamp 时间戳
+ * @param scope 应用授权作用域,拥有多个作用域用逗号(,)分隔
+ * @param signature 签名
+ * @param schemeData 会在扫码后拼在scheme后
+ * @return 成功返回YES,失败返回NO
+ 注:该实现只保证同时只有一个Auth在运行,Auth未完成或未Stop再次调用Auth接口时会返回NO。
+ */
+
+- (BOOL)Auth:(NSString *)appId
+ nonceStr:(NSString *)nonceStr
+ timeStamp:(NSString *)timeStamp
+ scope:(NSString *)scope
+ signature:(NSString *)signature
+ schemeData:(nullable NSString *)schemeData;
+
+
+/*! @brief 暂停登录请求
+ *
+ * @return 成功返回YES,失败返回NO。
+ */
+- (BOOL)StopAuth;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/libWeChatSDK.a b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/libWeChatSDK.a
new file mode 100644
index 0000000..ddf18bb
--- /dev/null
+++ b/platforms/ios/dlapp/Plugins/cordova-plugin-wechat/libWeChatSDK.a
Binary files differ
diff --git a/platforms/ios/dlapp/config.xml b/platforms/ios/dlapp/config.xml
index 66cd47a..6e5270f 100755
--- a/platforms/ios/dlapp/config.xml
+++ b/platforms/ios/dlapp/config.xml
@@ -74,6 +74,10 @@
<feature name="QQSDK">
<param name="ios-package" value="CDVQQSDK" />
</feature>
+ <feature name="Wechat">
+ <param name="ios-package" value="CDVWechat" />
+ <param name="onload" value="true" />
+ </feature>
<name short="大理智警">dlapp</name>
<description>
A sample Apache Cordova application that responds to the deviceready event.
@@ -118,6 +122,8 @@
<preference name="StatusBarStyle" value="lightcontent" />
<preference name="CameraUsesGeolocation" value="false" />
<preference name="QQ_APP_ID" value="101885581" />
+ <preference name="WECHATAPPID" value="wxa483e2c392b08993" />
+ <preference name="UNIVERSALLINK" value="YOUR_UNIVERSAL_LINK" />
<preference name="AutoHideSplashScreen" value="true" />
<preference name="SplashScreenDelay" value="0" />
<preference name="SplashShowOnlyFirstTime" value="true" />
diff --git a/platforms/ios/dlapp/dlapp-Info.plist b/platforms/ios/dlapp/dlapp-Info.plist
index 07026c3..649db61 100644
--- a/platforms/ios/dlapp/dlapp-Info.plist
+++ b/platforms/ios/dlapp/dlapp-Info.plist
@@ -77,6 +77,14 @@
<string>tencent101885581</string>
</array>
</dict>
+ <dict>
+ <key>CFBundleURLName</key>
+ <string>weixin</string>
+ <key>CFBundleURLSchemes</key>
+ <array>
+ <string>wxa483e2c392b08993</string>
+ </array>
+ </dict>
</array>
<key>LSApplicationQueriesSchemes</key>
<array>
@@ -119,6 +127,9 @@
<string>timopensdkdataline</string>
<string>wtlogintimV1</string>
<string>timapiV1</string>
+ <string>weixin</string>
+ <string>wechat</string>
+ <string>weixinULAPI</string>
</array>
<key>NSCameraUsageDescription</key>
<string>APP需要使用您的相机权限,没有该权限将无法完成扫一扫功能</string>
diff --git a/platforms/ios/frameworks.json b/platforms/ios/frameworks.json
index d516bf0..8022925 100644
--- a/platforms/ios/frameworks.json
+++ b/platforms/ios/frameworks.json
@@ -1,21 +1,24 @@
{
- "Security.framework": 4,
- "SystemConfiguration.framework": 3,
+ "Security.framework": 5,
+ "SystemConfiguration.framework": 4,
"LocalAuthentication.framework": 1,
"ImageIO.framework": 1,
"CoreLocation.framework": 1,
"AVFoundation.framework": 1,
- "CFNetwork.framework": 1,
+ "CFNetwork.framework": 2,
"CoreFoundation.framework": 1,
- "CoreTelephony.framework": 2,
+ "CoreTelephony.framework": 3,
"Foundation.framework": 1,
"UIKit.framework": 2,
- "libz.tbd": 2,
+ "libz.tbd": 3,
"AdSupport.framework": 1,
"UserNotifications.framework": 1,
"libresolv.tbd": 1,
"WebKit.framework": 1,
"libiconv.tbd": 1,
"libsqlite3.tbd": 1,
- "libstdc++.tbd": 1
+ "libstdc++.tbd": 1,
+ "libsqlite3.0.tbd": 1,
+ "Webkit.framework": 1,
+ "libc++.1.tbd": 1
}
\ No newline at end of file
diff --git a/platforms/ios/ios.json b/platforms/ios/ios.json
index 543eb31..c718eee 100644
--- a/platforms/ios/ios.json
+++ b/platforms/ios/ios.json
@@ -95,6 +95,18 @@
{
"xml": "<preference name=\"QQ_APP_ID\" value=\"101885581\" />",
"count": 1
+ },
+ {
+ "xml": "<feature name=\"Wechat\"><param name=\"ios-package\" value=\"CDVWechat\" /><param name=\"onload\" value=\"true\" /></feature>",
+ "count": 1
+ },
+ {
+ "xml": "<preference name=\"WECHATAPPID\" value=\"wxa483e2c392b08993\" />",
+ "count": 1
+ },
+ {
+ "xml": "<preference name=\"UNIVERSALLINK\" value=\"YOUR_UNIVERSAL_LINK\" />",
+ "count": 1
}
]
}
@@ -133,12 +145,26 @@
{
"xml": "<array><dict><key>CFBundleTypeRole</key><string>Editor</string><key>CFBundleURLName</key><string>tencentopenapi</string><key>CFBundleURLSchemes</key><array><string>tencent101885581</string></array></dict></array>",
"count": 1
+ },
+ {
+ "xml": "<array><dict><key>CFBundleURLName</key><string>weixin</string><key>CFBundleURLSchemes</key><array><string>wxa483e2c392b08993</string></array></dict></array>",
+ "count": 1
}
],
"LSApplicationQueriesSchemes": [
{
"xml": "<array><string>mqqapi</string><string>mqq</string><string>mqqOpensdkSSoLogin</string><string>mqqconnect</string><string>mqqopensdkdataline</string><string>mqqopensdkgrouptribeshare</string><string>mqqopensdkfriend</string><string>mqqopensdkapi</string><string>mqqopensdkapiV2</string><string>mqqopensdkapiV3</string><string>mqqopensdkapiV4</string><string>mqzoneopensdk</string><string>wtloginmqq</string><string>wtloginmqq2</string><string>mqqwpa</string><string>mqzone</string><string>mqzonev2</string><string>mqzoneshare</string><string>wtloginqzone</string><string>mqzonewx</string><string>mqzoneopensdkapiV2</string><string>mqzoneopensdkapi19</string><string>mqzoneopensdkapi</string><string>mqzoneopensdk</string><string>mqqgamebindinggroup</string><string>tencentapi.qq.reqContent</string><string>tencentapi.qzone.reqContent</string><string>tim</string><string>timapi</string><string>timopensdkfriend</string><string>timwpa</string><string>timgamebindinggroup</string><string>timapiwallet</string><string>timOpensdkSSoLogin</string><string>wtlogintim</string><string>timopensdkgrouptribeshare</string><string>timopensdkapiV4</string><string>timgamebindinggroup</string><string>timopensdkdataline</string><string>wtlogintimV1</string><string>timapiV1</string></array>",
"count": 1
+ },
+ {
+ "xml": "<array><string>weixin</string><string>wechat</string><string>weixinULAPI</string></array>",
+ "count": 1
+ }
+ ],
+ "NSAppTransportSecurity": [
+ {
+ "xml": "<dict><key>NSAllowsArbitraryLoads</key><true /></dict>",
+ "count": 1
}
]
}
@@ -240,6 +266,11 @@
"cordova-plugin-qqsdk": {
"QQ_APP_ID": "101885581",
"PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
+ },
+ "cordova-plugin-wechat": {
+ "WECHATAPPID": "wxa483e2c392b08993",
+ "UNIVERSALLINK": "YOUR_UNIVERSAL_LINK",
+ "PACKAGE_NAME": "$(PRODUCT_BUNDLE_IDENTIFIER)"
}
},
"dependent_plugins": {},
@@ -619,6 +650,14 @@
"clobbers": [
"QQSDK"
]
+ },
+ {
+ "id": "cordova-plugin-wechat.Wechat",
+ "file": "plugins/cordova-plugin-wechat/www/wechat.js",
+ "pluginId": "cordova-plugin-wechat",
+ "clobbers": [
+ "Wechat"
+ ]
}
],
"plugin_metadata": {
@@ -641,6 +680,7 @@
"cordova-plugin-brightness": "0.1.5",
"cordova-plugin-fingerprint-aio": "3.0.1",
"cordova-plugin-prevent-screenshot-coffice": "1.0.1",
- "cordova-plugin-qqsdk": "0.9.7"
+ "cordova-plugin-qqsdk": "0.9.7",
+ "cordova-plugin-wechat": "3.0.0"
}
}
diff --git a/platforms/ios/platform_www/cordova_plugins.js b/platforms/ios/platform_www/cordova_plugins.js
index 3e450c8..45f3e0b 100644
--- a/platforms/ios/platform_www/cordova_plugins.js
+++ b/platforms/ios/platform_www/cordova_plugins.js
@@ -375,6 +375,14 @@
"clobbers": [
"QQSDK"
]
+ },
+ {
+ "id": "cordova-plugin-wechat.Wechat",
+ "file": "plugins/cordova-plugin-wechat/www/wechat.js",
+ "pluginId": "cordova-plugin-wechat",
+ "clobbers": [
+ "Wechat"
+ ]
}
];
module.exports.metadata = {
@@ -397,6 +405,7 @@
"cordova-plugin-brightness": "0.1.5",
"cordova-plugin-fingerprint-aio": "3.0.1",
"cordova-plugin-prevent-screenshot-coffice": "1.0.1",
- "cordova-plugin-qqsdk": "0.9.7"
+ "cordova-plugin-qqsdk": "0.9.7",
+ "cordova-plugin-wechat": "3.0.0"
};
});
\ No newline at end of file
diff --git a/platforms/ios/platform_www/plugins/cordova-plugin-wechat/www/wechat.js b/platforms/ios/platform_www/plugins/cordova-plugin-wechat/www/wechat.js
new file mode 100644
index 0000000..7f86ab9
--- /dev/null
+++ b/platforms/ios/platform_www/plugins/cordova-plugin-wechat/www/wechat.js
@@ -0,0 +1,190 @@
+cordova.define("cordova-plugin-wechat.Wechat", function(require, exports, module) {
+var exec = require('cordova/exec');
+
+module.exports = {
+ Scene: {
+ SESSION: 0, // 聊天界面
+ TIMELINE: 1, // 朋友圈
+ FAVORITE: 2 // 收藏
+ },
+
+ Type: {
+ APP: 1,
+ EMOTION: 2,
+ FILE: 3,
+ IMAGE: 4,
+ MUSIC: 5,
+ VIDEO: 6,
+ WEBPAGE: 7,
+ MINI: 8
+ },
+
+ Mini: {
+ RELEASE: 0, // 正式版
+ TEST: 1, // 测试版
+ PREVIEW: 2 // 体验版
+ },
+
+ isInstalled: function (onSuccess, onError) {
+ exec(onSuccess, onError, "Wechat", "isWXAppInstalled", []);
+ },
+
+ /**
+ * Share a message to wechat app
+ *
+ * @example
+ * <code>
+ * Wechat.share({
+ * message: {
+ * title: "Message Title",
+ * description: "Message Description(optional)",
+ * mediaTagName: "Media Tag Name(optional)",
+ * thumb: "http://YOUR_THUMBNAIL_IMAGE",
+ * media: {
+ * type: Wechat.Type.WEBPAGE, // webpage
+ * webpageUrl: "https://github.com/xu-li/cordova-plugin-wechat" // webpage
+ * }
+ * },
+ * scene: Wechat.Scene.TIMELINE // share to Timeline
+ * }, function () {
+ * alert("Success");
+ * }, function (reason) {
+ * alert("Failed: " + reason);
+ * });
+ * </code>
+ */
+ share: function (message, onSuccess, onError) {
+ exec(onSuccess, onError, "Wechat", "share", [message]);
+ },
+
+ /**
+ * Sending an auth request to Wechat
+ *
+ * @example
+ * <code>
+ * Wechat.auth(function (response) { alert(response.code); });
+ * </code>
+ */
+ auth: function (scope, state, onSuccess, onError) {
+ if (typeof scope == "function") {
+ // Wechat.auth(function () { alert("Success"); });
+ // Wechat.auth(function () { alert("Success"); }, function (error) { alert(error); });
+ return exec(scope, state, "Wechat", "sendAuthRequest");
+ }
+
+ if (typeof state == "function") {
+ // Wechat.auth("snsapi_userinfo", function () { alert("Success"); });
+ // Wechat.auth("snsapi_userinfo", function () { alert("Success"); }, function (error) { alert(error); });
+ return exec(state, onSuccess, "Wechat", "sendAuthRequest", [scope]);
+ }
+
+ return exec(onSuccess, onError, "Wechat", "sendAuthRequest", [scope, state]);
+ },
+
+ /**
+ * Send a payment request
+ *
+ * @link https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=9_1
+ * @example
+ * <code>
+ * var params = {
+ * mch_id: '10000100', // merchant id
+ * prepay_id: 'wx201411101639507cbf6ffd8b0779950874', // prepay id returned from server
+ * nonce: '1add1a30ac87aa2db72f57a2375d8fec', // nonce string returned from server
+ * timestamp: '1439531364', // timestamp
+ * sign: '0CB01533B8C1EF103065174F50BCA001', // signed string
+ * };
+ * Wechat.sendPaymentRequest(params, function () {
+ * alert("Success");
+ * }, function (reason) {
+ * alert("Failed: " + reason);
+ * });
+ * </code>
+ */
+ sendPaymentRequest: function (params, onSuccess, onError) {
+ exec(onSuccess, onError, "Wechat", "sendPaymentRequest", [params]);
+ },
+
+ /**
+ * jumpToBizProfile (跳转到某个微信公众号)2016-11-11 测试是失效的,囧
+ *
+ * @link https://segmentfault.com/a/1190000007204624
+ * @link https://segmentfault.com/q/1010000003907796
+ * @example
+ * <code>
+ * var params = {
+ * info: 'gh_xxxxxxx', // 公众帐号原始ID
+ * type: 'Normal' // 普通号
+ * }
+ * or
+ * var params = {
+ * info: 'extMsg', // 相关的硬件二维码串
+ * type: 'Device' // 硬件号
+ * };
+ * Wechat.jumpToBizProfile(params, function () {
+ * alert("Success");
+ * }, function (reason) {
+ * alert("Failed: " + reason);
+ * });
+ * </code>
+ */
+
+ jumpToBizProfile: function (params, onSuccess, onError) {
+ exec(onSuccess, onError, "Wechat", "jumpToBizProfile", [params]);
+ },
+
+ /**
+ * jumpToWechat (因为jumpToBizProfile失效了,暂时新增了一个临时的api)
+ *
+ * @link https://segmentfault.com/a/1190000007204624
+ * @example
+ * <code>
+ * var url = "wechat://" 现阶段貌似只支持这一个协议了
+ * Wechat.jumpToWechat(url, function () {
+ * alert("Success");
+ * }, function (reason) {
+ * alert("Failed: " + reason);
+ * });
+ * </code>
+ */
+ jumpToWechat: function (url, onSuccess, onError) {
+ exec(onSuccess, onError, "Wechat", "jumpToWechat", [url]);
+ },
+
+ /**
+ * chooseInvoiceFromWX exq:choose invoices from Wechat card list
+ *
+ * @example
+ * <code>
+ * params: signType, cardSign, nonceStr, timeStamp all required
+ * Wechat.chooseInvoiceFromWX(params, function () {
+ * alert("Success");
+ * }, function (reason) {
+ * alert("Failed: " + reason);
+ * });
+ * </code>
+ */
+ chooseInvoiceFromWX: function (params, onSuccess, onError) {
+ exec(onSuccess, onError, "Wechat", "chooseInvoiceFromWX", [params]);
+ },
+
+ /**
+ * openMiniProgram exq:app opens wechat mini program
+ *
+ * @example
+ * <code>
+ * params: userName, path, miniprogramType all required
+ * Wechat.openMiniProgram(params, function (data) {
+ * alert(data.extMsg);
+ * }, function (reason) {
+ * alert("Failed: " + reason);
+ * });
+ * </code>
+ */
+ openMiniProgram: function (params, onSuccess, onError) {
+ exec(onSuccess, onError, "Wechat", "openMiniProgram", [params]);
+ }
+
+};
+
+});