OpenPayMgr.lua 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. local OpenPayMgr = class('OpenPayMgr')
  2. function OpenPayMgr:ctor()
  3. self.openID = "1oijtI"
  4. self.productCode = "62071860216202428267772989490827"
  5. self.openKey = "f7jMJSjCOYRX2kx7UQ4Ox5zZdAowUSe9"
  6. self.userId = ""
  7. self.roleName = ""
  8. self.serverName = ""
  9. self.roleLevel = 0
  10. self.sign = ""
  11. self.baseUrl = "http://mia.hkhappygame.com/open/getPayUrl"
  12. LogError("---------OpenPayMgr --------------")
  13. self.getPayUrlWWW = nil
  14. self.CurPayUrl = nil
  15. self.postData = ""
  16. --62071860216202428267772989490827
  17. self:RegisterNetEvents()
  18. self.IsInitVersionInfo = false
  19. self.VersionCfgWWw = nil
  20. end
  21. ---IOS
  22. -- 25053842546594917787640743618071
  23. -- 2jqXkC
  24. -- oxlQZ8zN7QfrC6mMJ9P0pnvPjx8JutlS
  25. function OpenPayMgr:Clear()
  26. self.userId = ""
  27. self.roleName = ""
  28. self.serverName = ""
  29. self.roleLevel = 0
  30. end
  31. function OpenPayMgr:Destroy()
  32. self:UnRegisterNetEvents()
  33. end
  34. function OpenPayMgr:SetOpenData(userId,roleName,roleLevel,serverName)
  35. self.userId = userId
  36. self.roleName = roleName
  37. self.serverName = serverName
  38. self.roleLevel = roleLevel
  39. self.platform = ManagerContainer.LuaGameMgr.platform
  40. if self.platform == "SDKHwQuick" then
  41. self.openID = "1oijtI"
  42. self.productCode = "62071860216202428267772989490827"
  43. self.openKey = "f7jMJSjCOYRX2kx7UQ4Ox5zZdAowUSe9"
  44. elseif self.platform == "SDKYOUYI_IOS" then
  45. self.openID = "2jqXkC"
  46. self.productCode = "25053842546594917787640743618071"
  47. self.openKey = "oxlQZ8zN7QfrC6mMJ9P0pnvPjx8JutlS"
  48. else
  49. -- self.openID = "2jqXkC"
  50. -- self.productCode = "25053842546594917787640743618071"
  51. -- self.openKey = "oxlQZ8zN7QfrC6mMJ9P0pnvPjx8JutlS"
  52. end
  53. self:GetVersionCfg()
  54. --LogError("---------OpenPayMgr -------------uid = "..userId.." roleName = "..roleName.." roleLevel = "..roleLevel.." serverName = "..serverName)
  55. end
  56. --ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISimpleWeb, "https://www.baidu.com", nil, nil, nil, Enum.UISibling[Enum.UIType.Top] - 2)
  57. function OpenPayMgr:RegisterNetEvents()
  58. ManagerContainer.NetManager:NetRegister(ProtoMsgId.SC_MD5_GET_ACK, self.OnGetMD5InfoAck, self)
  59. end
  60. function OpenPayMgr:UnRegisterNetEvents()
  61. ManagerContainer.NetManager:UnRegisterPbIdCallback(ProtoMsgId.SC_MD5_GET_ACK)
  62. end
  63. function OpenPayMgr:Update()
  64. if self.getPayUrlWWW ~= nil and self.getPayUrlWWW.isDone then
  65. if self.getPayUrlWWW.error and self.getPayUrlWWW.error ~= '' then
  66. LogError("获取支付页面失败!!!!")
  67. else
  68. LogError(self.getPayUrlWWW.text)
  69. local ok, result = RO_XPCALL(JSON.decode, debug.traceback, JSON, self.getPayUrlWWW.text)
  70. LogError("result = "..Inspect(result))
  71. if ok and result.status then
  72. self.CurPayUrl ="http://" ..result.data.payUrl
  73. LogError("PayUrl = [[[["..self.CurPayUrl.."]]]]")
  74. --ManagerContainer.LuaUIMgr:Open(Enum.UIPageName.UISimpleWeb, self.CurPayUrl, nil, nil, nil, Enum.UISibling[Enum.UIType.Top] - 2)
  75. UnityEngine.Application.OpenURL(self.CurPayUrl)
  76. else
  77. LogError("获取支付页面失败!!!!")
  78. end
  79. end
  80. self.getPayUrlWWW:Dispose()
  81. self.getPayUrlWWW = nil
  82. end
  83. end
  84. function OpenPayMgr:Pay(goodsId, goodsName, goodsDesc, count, amount, cpOrderId, cbUrl, extrasParams)
  85. local goodsNameNew = amount.."_商品"
  86. local goodsIdNew = ""
  87. if self.platform == "SDKHwQuick" then
  88. goodsIdNew = "product_"..amount.."_ro"
  89. elseif self.platform == "SDKYOUYI_IOS" then
  90. goodsIdNew = "intention"..amount
  91. else
  92. --goodsIdNew = "intention"..amount
  93. goodsIdNew = "product_"..amount.."_ro"
  94. end
  95. local exstr = "{\"platform\":\""..self.platform.."_MyCard\",\"cpOrderId\":\""..cpOrderId.."\"}"
  96. local url,params = self:GetOpenPayUrl(goodsIdNew, goodsNameNew, goodsDesc, count, amount, cpOrderId, cbUrl, exstr)
  97. local sortParams= {}
  98. for kv in pairs(params) do
  99. if kv ~= nil then
  100. table.insert(sortParams,kv)
  101. end
  102. end
  103. table.sort(sortParams,function (a,b)
  104. return a < b
  105. end)
  106. local paaramsStr = ""
  107. for _, k in pairs(sortParams) do
  108. --LogError("["..k.."] = "..params[k])
  109. paaramsStr = paaramsStr..k.."="..params[k].."&"
  110. end
  111. paaramsStr= paaramsStr.. self.openKey
  112. --LogError("url = "..url)
  113. LogError("paaramsStr = "..paaramsStr)
  114. self.postData = url
  115. ManagerContainer.NetManager:SendMessage(ProtoMsgId.CS_MD5_GET_REQ, {md5 = paaramsStr})
  116. end
  117. function OpenPayMgr:GetOpenPayUrl(goodsId, goodsName, goodsDesc, count, amount, cpOrderId, cbUrl, extrasParams)
  118. local params= {}
  119. local url ="" --"https://mia.hkhappygame.com/open/getPayUrl?"
  120. -- openId string 必传 开放平台开发者身份id,由QuickSDK分配
  121. url = url .. "openId=" .. self.openID
  122. params['openId'] = self.openID
  123. -- productCode string 必传 产品CODE,在QuickSDK后台获取
  124. url = url .. "&productCode=" .. self.productCode
  125. params['productCode'] = self.productCode
  126. -- userId string 必传 SDK用户的账号ID
  127. url = url .. "&userId=" .. self.userId
  128. params['userId'] = self.userId
  129. -- goodsId string 必传 游戏商品id
  130. url = url .. "&goodsId=" .. goodsId
  131. params['goodsId'] = goodsId
  132. -- cpOrderNostring 选传游戏订单号
  133. url = url .. "&cpOrderNostring=" .. cpOrderId
  134. params['cpOrderNostring'] = cpOrderId
  135. -- orderSubject string 必传 订单标题
  136. url = url .. "&orderSubject=" .. goodsDesc
  137. params['orderSubject'] = goodsDesc
  138. -- roleName string必传 用户角色名
  139. url = url .. "&roleName=" .. self.roleName
  140. params['roleName'] = self.roleName
  141. -- serverName string必传游戏服务器名
  142. url = url .. "&serverName=" .. self.serverName
  143. params['serverName'] = self.serverName
  144. -- goodsName string必传 商品名称
  145. url = url .. "&goodsName=" .. goodsName
  146. params['goodsName'] = goodsName
  147. -- roleLevel int 必传 用户角色等级
  148. url = url .. "&roleLevel=" .. self.roleLevel
  149. params['roleLevel'] = self.roleLevel
  150. -- extrasParams string必传 订单保留参数,原样返回给cp
  151. url = url .. "&extrasParams=" .. extrasParams
  152. params['extrasParams'] = extrasParams
  153. -- callbackUrl string 选传订单回调地址,就是通知cp服务器发货的通知地址
  154. url = url .. "&callbackUrl=" .. cbUrl
  155. params['callbackUrl'] = cbUrl
  156. -- payType string 选传 支付方式ID,ID获取请参照SDK后台“平台管理”>“支付对照表”。支持多种支付方式,多个支付方式以“|”隔开,比如:12|13|23注意:支付方式ID需满足后台勾选已经支持的第三方支付方式,否则无法显示指定支付方式渠道
  157. --url = url .. "&payType=" .. "14"
  158. --params['payType'] = "14"
  159. -- countryCode string 选传 国家代码,如CHN。获取请参照SDK后台“平台管理”>“地区管理”注意:国家代码需满足后台勾选已经支持的第三方支付方式,否则无法显示指定国家的支付
  160. url = url .. "&countryCode=" .. "TWN"--"en-US"
  161. params['countryCode'] = "TWN"--"en-US"
  162. -- clientLang string 必传 支付中心语言包,填写地区语言代码,如en-US。默认为中文繁体
  163. url = url .. "&clientLang=" .. "zh-tw"--"en-US"
  164. params['clientLang'] = "zh-tw"--"en-US"
  165. -- payVersion int 选传 第三方支付版本,默认不填写为SDK常规版本。取固定值为:2. 表示平台单独处理版本,此版本平台需传金额和币种进行支付并且SDK不参与商品金额的转换由平台自身处理,平台根据自身情况酌情考虑使用。
  166. -- amount float 选传 订单金额。如果payVersion的值为2,则必传amount字段
  167. url = url .. "&amount=" .. amount
  168. params['amount'] = amount
  169. -- currency string 选传 选传 订单支付的币种代码。如果payVersion的值为2,则必传currency字段注意:支付币种代码必须为SDK后台货币管理里面所支持的货币代码
  170. url = url .. "&currency=" .. "USD"
  171. params['currency'] = "USD"
  172. -- sign string 必传 签名串,算法详见第三章签名算法描述
  173. url = url .. "&sign="
  174. return url,params
  175. end
  176. function OpenPayMgr:OnGetMD5InfoAck(data)
  177. if ManagerContainer.NetManager:IsErrorData(data) then
  178. return
  179. end
  180. if data.md5 then
  181. self.postData= self.postData..data.md5
  182. else
  183. return
  184. end
  185. LogError("md5 = "..data.md5)
  186. if self.getPayUrlWWW then
  187. self.getPayUrlWWW:Dispose()
  188. self.getPayUrlWWW = nil
  189. end
  190. LogError("Url = [[["..self.baseUrl.."]]]")
  191. LogError("postData = [[["..self.postData.."]]]")
  192. self.getPayUrlWWW = UnityEngine.WWW(self.baseUrl,self.postData)
  193. end
  194. function OpenPayMgr:GetVersionCfg()
  195. local url = PlatformPack.NOTIFY_URL .. "VersionCfg.json"
  196. ManagerContainer.LuaGameMgr:RequestHttpServer(url,function (text)
  197. self:OnGetVersionCfg(text)
  198. end)
  199. end
  200. function OpenPayMgr:OnGetVersionCfg(text)
  201. local cfgsJson
  202. self.versionCfgs = {}
  203. local ok, errors = RO_XPCALL(function() cfgsJson = JSON:decode(text) end, debug.traceback)
  204. if ok then
  205. for k,p in pairs(cfgsJson) do
  206. self.versionCfgs[p.Version] = p
  207. LogError(Inspect(p))
  208. end
  209. else
  210. LogError("[Notice].."..errors)
  211. end
  212. end
  213. function OpenPayMgr:GetCurVersionCfg(version)
  214. local cfg
  215. if self.versionCfgs[version] == nil then
  216. cfg =
  217. {
  218. Version = version,
  219. AndroidPayMode = -1,
  220. IOSPayMode = -1
  221. }
  222. else
  223. cfg = self.versionCfgs[version]
  224. end
  225. LogError(Inspect(cfg))
  226. return cfg
  227. end
  228. function OpenPayMgr:GetCurPayMode()
  229. local vs = UnityEngine.Application.version
  230. local vcfg = self:GetCurVersionCfg(vs)
  231. if self.platform == "SDKHwQuick" then
  232. return vcfg.AndroidPayMode + 0
  233. elseif self.platform == "SDKYOUYI_IOS" then
  234. return vcfg.IOSPayMode + 0
  235. else
  236. return vcfg.AndroidPayMode + 0
  237. end
  238. end
  239. return OpenPayMgr