| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258 |
- //
- // WXSDKHelper.m
- // MingMen
- //
- // Created by 尚旅客户端 on 2017/8/18.
- // Copyright © 2017年 尚旅客户端. All rights reserved.
- //
- #import "WXSDKHelper.h"
- @implementation WXSDKHelper
- static WXSDKHelper *sharedObj = nil;
- + (instancetype)sharedInstance
- {
- static dispatch_once_t onceToken = 0;
- dispatch_once(&onceToken, ^{
- sharedObj = [[super allocWithZone: NULL] init];
- });
- return sharedObj;
- }
- + (id) allocWithZone:(struct _NSZone *)zone
- {
- return [self sharedInstance];
- }
- - (id) copyWithZone:(NSZone *) zone
- {
- return self;
- }
- #pragma mark - 初始化微信SDK
- - (void)setWXSDK
- {
- [WXApi registerApp:WXKey enableMTA:YES];
-
- //向微信注册支持的文件类型 例如word/pdf之类的 暂时没用到
- //UInt64 typeFlag = MMAPP_SUPPORT_TEXT | MMAPP_SUPPORT_PICTURE | MMAPP_SUPPORT_LOCATION | MMAPP_SUPPORT_VIDEO |MMAPP_SUPPORT_AUDIO | MMAPP_SUPPORT_WEBPAGE | MMAPP_SUPPORT_DOC | MMAPP_SUPPORT_DOCX | MMAPP_SUPPORT_PPT | MMAPP_SUPPORT_PPTX | MMAPP_SUPPORT_XLS | MMAPP_SUPPORT_XLSX | MMAPP_SUPPORT_PDF;
-
- //[WXApi registerAppSupportContentFlag:typeFlag];
- }
- #pragma mark - 调用微信分享API
- - (void)wxShare:(NSDictionary *)shareDictionary
- {
- //创建发送对象实例
- SendMessageToWXReq *sendReq = [[SendMessageToWXReq alloc] init];
- sendReq.bText = NO;//不使用文本信息
- sendReq.scene = [shareDictionary[@"scene"] intValue];//0 = 好友列表 1 = 朋友圈 2 = 收藏
-
- //创建分享内容对象
- WXMediaMessage *urlMessage = [WXMediaMessage message];
- urlMessage.title = shareDictionary[@"title"];//分享标题
- urlMessage.description = shareDictionary[@"description"];//分享描述
-
- UIImage *image = shareDictionary[@"image"]!=nil?shareDictionary[@"image"]:NewImageError_J;
- [urlMessage setThumbImage:image];//分享图片,使用SDK的setThumbImage方法可压缩图片大小
-
- //创建多媒体对象
- WXWebpageObject *webObj = [WXWebpageObject object];
- webObj.webpageUrl = [shareDictionary[@"webpageUrl"] length]>0?shareDictionary[@"webpageUrl"]:NewShareURL;//分享链接
-
- //完成发送对象实例
- urlMessage.mediaObject = webObj;
- sendReq.message = urlMessage;
-
- //发送分享信息
- [WXApi sendReq:sendReq];
- }
- #pragma mark - 调用微信支付API
- - (void)wxPay:(NSDictionary *)orderDictionary
- {
- //已安装较新版本的微信
- if([WXApi isWXAppInstalled] == YES && [WXApi isWXAppSupportApi] == YES)
- {
- //NSString *appid, *mch_id, *prepay_id;//这三个字段需要我们自己的服务器配置
- NSString *time_stamp, *nonce_str;
- //设置支付参数
- time_t now;
- time(&now);
- time_stamp = [NSString stringWithFormat:@"%ld", now];
- nonce_str = [time_stamp md5];
-
- PayReq *request = [[PayReq alloc] init];
- //微信号和AppID组成的唯一标识
- request.openID = orderDictionary[@"openID"];
- //商户号
- request.partnerId = orderDictionary[@"partnerId"];
- //预支付订单ID
- request.prepayId = orderDictionary[@"prepayId"];
- //商家 财付通签名 这个是固定写死
- request.package = @"Sign=WXPay";
- //随机串
- request.nonceStr = nonce_str;
- //请求时间
- request.timeStamp = [time_stamp intValue];
- //商家 微信开发平台签名 64F0562166BFA93EC49F05C70E587ABB 9C6819BB8D3D88DDD4FF7A0927FB7315
- // 构造参数列表
- NSMutableDictionary *params = [NSMutableDictionary dictionary];
- [params setObject:request.openID forKey:@"openID"];
- [params setObject:nonce_str forKey:@"noncestr"];
- [params setObject:@"Sign=WXPay" forKey:@"package"];
- [params setObject:request.partnerId forKey:@"partnerid"];
- [params setObject:time_stamp forKey:@"timestamp"];
- [params setObject:request.prepayId forKey:@"prepayid"];
-
- request.sign = [NewUtils createMd5Sign:params];
-
- NSLog(@"\nAppId:%@\n商户号:%@\n预支付订单ID:%@\n商家签名:%@\n随机字符串:%@\n请求时间:%u\nSign签名:%@",request.openID,request.partnerId,request.prepayId,request.package,request.nonceStr,(unsigned int)request.timeStamp,request.sign);
-
- [WXApi sendReq:request];
-
- }else
- {
- UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"提示"
- message:@"请去AppStore下载最新版本微信APP"
- delegate:self
- cancelButtonTitle:@"确定"
- otherButtonTitles:nil];
- [alert show];
-
- /*
- UIAlertController *alertController1 = [UIAlertController alertControllerWithTitle:@"温馨提示" message:[WXApi isWXAppInstalled] == NO ?@"检测到你的手机还没有安装微信,是否现在安装 ?" : [WXApi isWXAppSupportApi] == NO ? @"请升级最新版本微信 !" : @"检测微信失败 !" preferredStyle:(UIAlertControllerStyleAlert)];
-
-
- UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"立即前往下载" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction *action) {
- NSString *string=[WXApi getWXAppInstallUrl];
- NSURL *url=[NSURL URLWithString:string];
- [[UIApplication sharedApplication] openURL:url];
- [self.navigationController popToRootViewControllerAnimated:YES];
- }];
-
- UIAlertAction *cancelAction = [UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleCancel) handler:^(UIAlertAction *action) {
- //[self.navigationController popToRootViewControllerAnimated:YES];
- }];
-
- [alertController1 addAction:okAction];
- [alertController1 addAction:cancelAction];
- */
- }
- }
- #pragma mark - 下面三个方法都是处理微信通过URL启动App时传递的数据
- - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
- {
- return [WXApi handleOpenURL:url delegate:self];
- }
- // NOTE: iOS9.0以后使用新API接口
- - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
- {
- return [WXApi handleOpenURL:url delegate:self];
- }
- // NOTE: iOS9.0之前使用旧API接口
- - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
- {
- return [WXApi handleOpenURL:url delegate:self];
- }
- #pragma mark - 微信回调方法
- -(void) onResp:(BaseResp*)resp
- {
- //微信支付回调
- if ([resp isKindOfClass:[PayResp class]])
- {
- PayResp *response = (PayResp *)resp;
-
- switch (response.errCode) {
- case WXSuccess: {
-
- _NewWXSdkCallback?_NewWXSdkCallback([NSString stringWithFormat:@"%d",response.errCode]):nil;
-
- break;
- }
- /*
- case WXErrCodeCommon: {
- //普通错误类型
- break;
- }
- case WXErrCodeUserCancel: {
- //用户点击取消并返回
- break;
- }
- case WXErrCodeSentFail: {
- //发送失败
- break;
- }
- case WXErrCodeAuthDeny: {
- //授权失败
- break;
- }
- case WXErrCodeUnsupport: {
- //微信不支持
- break;
- }
- */
- default: {
-
- _NewWXSdkCallback?_NewWXSdkCallback([NSString stringWithFormat:@"%@",response.errStr]):nil;
-
- break;
- }
- }
- }
- //微信分享回调
- else if ([resp isKindOfClass:[SendMessageToWXResp class]])
- {
-
- SendMessageToWXResp *sendResp = (SendMessageToWXResp *)resp;
- switch (sendResp.errCode) {
- case WXSuccess: {
-
- _NewWXSdkCallback?_NewWXSdkCallback([NSString stringWithFormat:@"%d",sendResp.errCode]):nil;
-
- break;
- }
- default: {
-
- _NewWXSdkCallback?_NewWXSdkCallback([NSString stringWithFormat:@"%@",sendResp.errStr]):nil;
-
- break;
- }
- }
- }
- /*
- //微信登录回调
- else if ([resp isKindOfClass:[SendAuthResp class]])
- {
- SendAuthResp *sendResp = (SendAuthResp *)resp;
- switch (sendResp.errCode) {
- case WXSuccess: {
- //登录成功
- break;
- }
- default: {
- //登录失败
- break;
- }
- }
- }
- */
- }
- @end
|