RQWechatManager.m 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. //
  2. // RQWechatManager.m
  3. // XinShouJiaDao
  4. //
  5. // Created by 张嵘 on 2021/7/22.
  6. // Copyright © 2021 JCZ. All rights reserved.
  7. //
  8. #import "RQWechatManager.h"
  9. /// 支付成功通知
  10. NSString * const RQUserNotificationAlipayOrWechatSuccess = @"RQUserNotificationAlipayOrWechatSuccess";
  11. /// 支付成功通知
  12. NSString * const RQUserNotificationAlipayOrWechatFail = @"RQUserNotificationAlipayOrWechatFail";
  13. @interface RQWechatManager()
  14. @property (nonatomic, readwrite, strong) NSString *appID;
  15. @property (nonatomic, readwrite, strong) NSString *universalLink;
  16. @end
  17. @implementation RQWechatManager
  18. @def_singleton(RQWechatManager);
  19. #pragma mark - PublicMethods
  20. + (BOOL)handleOpenUrl:(NSURL *)url {
  21. return [WXApi handleOpenURL:url delegate:[RQWechatManager sharedInstance]];
  22. }
  23. + (void)hangleWechatPayWith:(PayReq *)req {
  24. [WXApi sendReq:req completion:^(BOOL success) {
  25. if (success) {
  26. NSLog(@"微信支付成功");
  27. } else {
  28. NSLog(@"微信支付异常");
  29. }
  30. }];
  31. }
  32. - (NSString *)appID {
  33. return @"wxc439503456129660";
  34. }
  35. - (NSString *)universalLink {
  36. return @"https://app.jppt.com.cn/SuDaJiaKao/";
  37. }
  38. /// 初始化微信SDK
  39. - (void)initWechatManager {
  40. dispatch_async_on_main_queue(^{
  41. [WXApi registerApp:self.appID universalLink:self.universalLink];
  42. });
  43. }
  44. /// 调起微信登录
  45. - (void)wechatLogin {
  46. /// 第三方向微信终端发送一个SendAuthReq消息结构
  47. SendAuthReq *req = [[SendAuthReq alloc] init];
  48. /// 用于保持请求和回调的状态,授权请求或原样带回
  49. req.state = @"wx_oauth_authorization_state";
  50. /// 授权作用域:获取用户个人信息
  51. req.scope = @"snsapi_userinfo";
  52. if ([WXApi isWXAppInstalled]) {
  53. /// 唤起微信
  54. [WXApi sendReq:req completion:^(BOOL success) {
  55. if (success) {
  56. NSLog(@"唤起成功");
  57. }else {
  58. NSLog(@"唤起失败");
  59. }
  60. }];
  61. } else {
  62. [WXApi sendAuthReq:req viewController:RQControllerHelper.currentViewController delegate:self completion:^(BOOL success) {
  63. }];
  64. }
  65. }
  66. - (void)lianXiKeFu {
  67. WXOpenCustomerServiceReq *req = [[WXOpenCustomerServiceReq alloc] init];
  68. req.corpid = @"ww6b1bf92786571685"; //企业ID
  69. req.url = @"https://work.weixin.qq.com/kfid/kfc49a3ec13656f2077"; //客服URL
  70. return [WXApi sendReq:req completion:nil];
  71. }
  72. #pragma mark - PrivateMethods
  73. /// 调起微信支付
  74. - (void)clickToWechatPayWithPrepareOrder:(RQPrepareOrderModel *)prepareOrder {
  75. // 发起微信支付,设置参数
  76. //需要创建这个支付对象
  77. PayReq *req = [[PayReq alloc] init];
  78. //由用户微信号和AppID组成的唯一标识,用于校验微信用户
  79. req.openID = prepareOrder.appId;
  80. // 商家id,在注册的时候给的
  81. req.partnerId = prepareOrder.partnerId;
  82. // 预支付订单这个是后台跟微信服务器交互后,微信服务器传给你们服务器的,你们服务器再传给你
  83. req.prepayId = prepareOrder.prepayId;
  84. // 根据财付通文档填写的数据和签名
  85. req.package = prepareOrder.packageValue;
  86. // 随机编码,为了防止重复的,在后台生成
  87. req.nonceStr = prepareOrder.nonceStr;
  88. // 这个是时间戳,也是在后台生成的,为了验证支付的
  89. NSString * stamp = prepareOrder.timeStamp;
  90. req.timeStamp = (UInt32)stamp.intValue;
  91. // 这个签名也是后台做的
  92. req.sign = prepareOrder.sign;
  93. //发送请求到微信,等待微信返回onResp
  94. [WXApi sendReq:req completion:^(BOOL success) {
  95. }];
  96. }
  97. #pragma mark - 微信回调
  98. /*
  99. enum WXErrCode {
  100. WXSuccess = 0, < 成功
  101. WXErrCodeCommon = -1, < 普通错误类型
  102. WXErrCodeUserCancel = -2, < 用户点击取消并返回
  103. WXErrCodeSentFail = -3, < 发送失败
  104. WXErrCodeAuthDeny = -4, < 授权失败
  105. WXErrCodeUnsupport = -5, < 微信不支持
  106. };
  107. */
  108. - (void)onResp:(BaseResp *)resp {
  109. switch (resp.errCode) {
  110. case WXSuccess: {
  111. NSLog(@"微信回调成功");
  112. /// 微信支付回调
  113. if ([resp isKindOfClass:[PayResp class]]) {
  114. PayResp *payResp = (PayResp*)resp;
  115. [RQNotificationCenter postNotificationName:RQUserNotificationAlipayOrWechatSuccess object:payResp userInfo:nil];
  116. }
  117. /// 微信登录授权回调
  118. if ([resp isKindOfClass:[SendAuthResp class]]) {
  119. SendAuthResp *sendAuthResp = (SendAuthResp *)resp;
  120. [RQNotificationCenter postNotificationName:RQWeChatOnRespNotification object:sendAuthResp.code];
  121. }
  122. break;
  123. }
  124. case WXErrCodeCommon: {
  125. NSLog(@"微信回调异常");
  126. break;
  127. }
  128. case WXErrCodeUserCancel: {
  129. NSLog(@"微信回调用户取消");
  130. break;
  131. }
  132. case WXErrCodeSentFail: {
  133. NSLog(@"微信回调发送信息失败");
  134. break;
  135. }
  136. case WXErrCodeAuthDeny: {
  137. NSLog(@"微信回调授权失败");
  138. break;
  139. }
  140. case WXErrCodeUnsupport: {
  141. NSLog(@"微信回调微信版本暂不支持");
  142. break;
  143. }
  144. default: {
  145. break;
  146. }
  147. }
  148. }
  149. - (void)onReq:(BaseReq*)req {
  150. }
  151. @end