You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

225 lines
6.2 KiB

  1. local PluginBase = require("luaScript.Plugins.PluginBase")
  2. local PluginWechat = class("PluginWechat" , PluginBase)
  3. local PluginConfig = require("preload.PluginConfig")
  4. function PluginWechat:ctor()
  5. PluginWechat.super.ctor(self);
  6. self.plugin = nil
  7. self.AcountId = nil
  8. self.SessionId = nil
  9. self.isInstalled = false
  10. self.pluginKey = "PluginWechat";
  11. end
  12. -- 启动插件
  13. function PluginWechat:start()
  14. if isAndroidPlatform() then
  15. self.plugin = cc.PluginManager:getInstance():createPlugin("PluginWechat" , "com/ddgame/plugin/PluginWechat");
  16. elseif isIOSPlatform() then
  17. self.plugin = cc.PluginManager:getInstance():createPlugin("PluginWechat" , "PluginWechat");
  18. end
  19. if self.plugin then
  20. local developerInfo =
  21. {
  22. appId = PluginConfig.WeiXin.appId,
  23. appKey = PluginConfig.WeiXin.appKey,
  24. appSign = PluginConfig.WeiXin.appSign,
  25. appName = PluginConfig.WeiXin.appName,
  26. partnerId = PluginConfig.WeiXin.partnerId,
  27. universalLink = PluginConfig.WeiXin.universalLink,
  28. permissions = "snsapi_login",
  29. pluginKey = self.pluginKey,
  30. callback = handler(self, self.onResult), -- 回调函数
  31. };
  32. logD("PluginWechat:start(), developerInfo = ", table.tostring(developerInfo))
  33. self.plugin:callVoid("initPlugin", developerInfo)
  34. end
  35. end
  36. -- 停止插件
  37. function PluginWechat:stop()
  38. if self.plugin then
  39. cc.PluginManager:getInstance():removePlugin(self.plugin);
  40. self.plugin = nil;
  41. end
  42. end
  43. function PluginWechat:isSupport()
  44. return self.isInstalled == true;
  45. end
  46. function PluginWechat:isSupportPay()
  47. return false
  48. end
  49. -- 请求登录
  50. function PluginWechat:login(tt)
  51. log("PluginWechat:login", table.tostring(tt))
  52. if not self.isInstalled then
  53. showTooltip("未安装微信或者微信版本过低,请安装最新版本的微信后再试")
  54. return;
  55. end
  56. self:start();
  57. if self.plugin then
  58. self.plugin:callVoid("login",tt or {})
  59. end
  60. end
  61. -- 请求登出
  62. function PluginWechat:logout(tt)
  63. log("PluginWechat:logout", table.tostring(tt))
  64. -- IOS没做登出
  65. end
  66. function PluginWechat:pay(tt)
  67. log("PluginWechat:pay", table.tostring(tt))
  68. if not self.isInstalled then
  69. showTooltip("未安装微信或者微信版本过低,请安装最新版本的微信后再试")
  70. return;
  71. end
  72. self:start();
  73. if self.plugin then
  74. self.plugin:callVoid("pay",tt or {})
  75. end
  76. end
  77. -- 跳转至微信
  78. function PluginWechat:gotoWeiXin()
  79. log("PluginWechat:gotoWeiXin() ")
  80. if not self.isInstalled then
  81. showTooltip("未安装微信或者微信版本过低,请安装最新版本的微信后再试")
  82. return;
  83. end
  84. self:start();
  85. if self.plugin then
  86. self.plugin:callVoid("gotoWeiXin");
  87. end
  88. end
  89. -- 分享链接给好友
  90. function PluginWechat:shareGame(tt, shareCallbakc)
  91. log("PluginWechat:shareGame(), ", table.tostring(tt))
  92. if not self.isInstalled then
  93. showTooltip("未安装微信或者微信版本过低,请安装最新版本的微信后再试")
  94. return;
  95. end
  96. self:start();
  97. if self.plugin then
  98. self.shareCallbakc = shareCallbakc
  99. self.plugin:callVoid("shareGame", tt or {});
  100. end
  101. end
  102. -- 回调函数
  103. function PluginWechat:onResult(result)
  104. log("PluginWechat:onResult() result = ", result)
  105. local resultJson = json.decode(result);
  106. if not resultJson then
  107. return
  108. end
  109. local pluginKey = tostring(resultJson.pluginKey)
  110. if pluginKey ~= self.pluginKey then
  111. return
  112. end
  113. local code = tonumber(resultJson.code);
  114. local msg = json.decode(resultJson.message);
  115. if code == self.Code.INIT_SUCCESS then
  116. self.isInstalled = true
  117. elseif code == self.Code.INIT_FAIL then
  118. self.isInstalled = false
  119. elseif code == self.Code.LOGIN_SUCCESS then
  120. --是否绑定微信true代表绑定,false代表登录
  121. if app.user.bindWeiXinIng or app.user.bindWeiXinTwice then
  122. local openid = msg.openid
  123. local unionid = msg.unionid
  124. local sex = msg.sex or 0
  125. local nickname = msg.nickname or ""
  126. local headimgurl = msg.headimgurl or ""
  127. local access_token = msg.access_token or ""
  128. local refresh_token = msg.refresh_token or ""
  129. --app.user:updateUserInfo()
  130. app.user.bindWeiXinIng = false
  131. local tt = {
  132. openid = msg.openid,
  133. unionid = msg.unionid,
  134. nickname = msg.nickname or "",
  135. sex = tonumber(msg.sex) or 0,
  136. headimgurl = msg.headimgurl or "",
  137. areano = app.user.areano,
  138. gpsInfo = app.user.gpsInfo,
  139. access_token = msg.access_token or "",
  140. refresh_token = msg.refresh_token or "",
  141. phonenum = app.user.phonenum,
  142. password = app.user.password,
  143. deviceInfo = app.user.strUserDeviceInfo,
  144. }
  145. local weixinInfo = json.encode(tt);
  146. --绑定微信请求
  147. local request = PhoneBindRequest:new()
  148. request.uid = app.user.loginInfo.uid
  149. request.checkcode = ""
  150. request.weixinInfo = weixinInfo
  151. request.rewardType = 5 -- 奖励类型:1. 房卡 2.金币 3. 活动房卡 4. RMB 5. 红包券
  152. if app.user.bindWeiXinTwice then
  153. logD("yhj: 微信二次授权")
  154. request.bindType = BIND_TYPE.WEIXIN_TWICE_BIND
  155. request.account = msg.openid
  156. request.password = msg.unionid
  157. app.user.bindWeiXinTwice = false
  158. else
  159. logD("yhj: 普通微信绑定")
  160. request.bindType = BIND_TYPE.WEIXIN
  161. request.account = app.user.phonenum
  162. request.password = ""
  163. end
  164. --
  165. app.user:dispatchEvent({name = "onWetChatBindRequest",request = request});
  166. else
  167. app.user.openid = msg.openid
  168. app.user.unionid = msg.unionid
  169. app.user.sex = msg.sex or 0
  170. app.user.nickname = msg.nickname or ""
  171. app.user.headimgurl = msg.headimgurl or ""
  172. app.user.access_token = msg.access_token or ""
  173. app.user.refresh_token = msg.refresh_token or ""
  174. logD("yhj: 正常微信登录")
  175. app.user.loginType = 0
  176. --app:dispatchEvent({name = "thirdLoginResutl" });
  177. loginToken();
  178. showTooltip("微信授权成功,正在登陆服务器,请稍后!")
  179. end
  180. elseif code == self.Code.LOGIN_FAIL then
  181. --showTooltip("微信登录失敗")
  182. --app:dispatchEvent({name = "thirdLoginResutl" });
  183. elseif code == self.Code.SHARE_SUCCESS then
  184. showTooltip("微信分享成功")
  185. if self.shareCallbakc and type(self.shareCallbakc) == "function" then
  186. self.shareCallbakc()
  187. end
  188. elseif code == self.Code.SHARE_CANCEL then
  189. showTooltip("微信分享取消")
  190. elseif code == self.Code.SHARE_FAIL then
  191. showTooltip("微信分享失败")
  192. end
  193. end
  194. return PluginWechat