|
- local PluginBase = require("luaScript.Plugins.PluginBase")
-
- local PluginConfig = require("preload.PluginConfig")
-
- local PluginIosPay = class("PluginIosPay" , PluginBase)
-
- IosPayData = defClass("IosPayData"
- , defVar("dataStr", VT_String, "")
- )
-
- function PluginIosPay:ctor()
- PluginIosPay.super.ctor(self);
- self.plugin = nil
-
- --self.payData = IosPayData:new();
- --self.filePath = cc.FileUtils:getInstance():getWritablePath() .. "iosPay.data";
- self.payData = {}
- self.payDataFile = cc.FileUtils:getInstance():getWritablePath() .. "iosPay.data";
-
- -- 登录PHP成功之后开始检测未完成的订单
- app:addEventListener("PHP_LGIN_SUCCESSED", handler(self, self.checkPurchase));
- end
-
-
- -- 检测是否有未完成的订单
- -- PHP登录完成后检测
- function PluginIosPay:checkPurchase()
- if self.plugin then
- logD("PluginIosPay call checkPurchase")
- self.plugin:callVoid("checkPurchase");
- end
- end
-
- -- 启动插件
- function PluginIosPay:start()
- self:loadData()
-
- -- 必须主动申明支持苹果内购
- if not PluginConfig or not PluginConfig.isSupportIAP then
- return
- end
-
- self.plugin = cc.PluginManager:getInstance():createPlugin("IAPApple" , "IAPApple");
- if self.plugin then
- self.plugin:callVoid("setDebugMode" , true);
-
- local developerInfo =
- {
- -- 回调函数
- Listener = handler(self , self.onPayResult);
- };
- self.plugin:callVoid("initIAP" , developerInfo);
- end
- end
-
- -- 停止插件
- function PluginIosPay:stop()
- if self.plugin then
- cc.PluginManager:getInstance():removePlugin(self.plugin);
- self.plugin = nil;
- end
- end
-
- function PluginIosPay:isSupportPay()
- return true
- end
-
- -- 插件是否被支持
- function PluginIosPay:isSupport()
- return self.plugin ~= nil;
- end
-
- function PluginIosPay:showWaitDialog(text)
- local waitUI = loadUI("res/ui/ui_tongyong/t_ios_paying.ui")
- waitUI.Items.ImageView_ring:playClip("rotate");
- waitUI:setAnchorPoint(cc.p(0.5, 0.5));
- waitUI.Items.Text_content:setText(text);
- self.waitDialog = app:showWaitUI(waitUI, nil, nil, false);
- end
-
- function PluginIosPay:closeWaitDialog()
- if not tolua.isnull(self.waitDialog) then
- self.waitDialog:removeFromParent()
- self.waitDialog = nil
- end
- end
-
- -- 支付
- --[[
- ["10182"] = {
- ["currency"] = 1,
- ["desc"] = "",
- ["ext"] = {
- },
- ["icon"] = http://img.dingdingqipai.com/images/goods/5cb7e2f9138ba.png?v=1555555065,
- ["id"] = 10182,
- ["name"] = 50房卡,
- ["number"] = 50,
- ["order"] = 100,
- ["pay_type"] = {
- [1] = {
- ["id"] = 1,
- ["name"] = 苹果支付,
- },
- },
- ["price"] = 10,
- ["privilege_icon"] = ,
- ["product_id"] = com_dangdang_chuannan_10,
- ["prop_id"] = 0,
- ["type"] = 0,
- },
- ]]
- function PluginIosPay:pay(item)
- logD("PluginIosPay:pay() item = ", table.tostring(item))
-
- if not item or not item.id then
- showTooltip("无效商品");
- return
- end
-
- local url = getGlobalPhpUrl()
- local tt1 =
- {
- action = "order.create",
- item_id = item.id,
- uid = app.user.loginInfo.uid,
- app = getAppId(),
- productid = item.product_id,
- pay_type = PayType.Apple,
- }
- logD("PluginIosPay:pay() tt1 = ", table.tostring(tt1))
- logD("PluginIosPay:pay() url = ", url)
- app.waitDialogManager:showTransparencyMask()
- httpPost(url, tt1, function(status, response)
-
- app.waitDialogManager:closeTransparencyMask()
- logD("PluginIosPay:pay() status = ", tostring(status))
- logD("PluginIosPay:pay() response = ", tostring(response))
-
- if status ~= "successed" then
- return;
- end
-
- -- 状态码
- local data = json.decode(response)
- if tonumber(data.code) ~= 200 then
- return
- end
-
- -- 订单号
- if not data.result or not data.result.orderid then
- return
- end
-
- local tt2 =
- {
- -- 商品ID
- productId = item.product_id;
- -- 商品数量
- productNum = 1;
- -- 请求的信息
- requestData = item.id .. "_" .. data.result.orderid;
- }
- --self:showWaitDialog("等待支付完成!");
- app.waitDialogManager:showWaitNetworkDialog("等待支付完成!")
- self.plugin:callVoid("payForProduct" , tt2);
- end);
- end
-
-
- --[[
-
- {"msg":\{"receiptData":"ewoJInNpZ25hdHVyZSIgPSAiQTU3T1loRkwveVByelRIU2t2eFBKWDJBVkhDa0tNZTlobjVkTUk0SXFFMHlDV2NaNGxyUmNONVltWmcxOVFZUnRnL2hSN2t3L2RFSW1DUEJ0RlU1VkFEWjZ3RkZzeWloWnYyUkg2bHQxN3k2UUFrdkVYNzNXN0pDZWk4a21obDNiOXBINUZ6TnM5dWxXQlZrSElibldBN3Vwd2FXb1VpeVBYbUNZSFkrRTFzK1NiYVVWdG9UMmh3WWtxb2M4Nk5YNGxxbG10Mm5qdkNxQkphaE1WV2laVVZ1NjYzZGl2RXVXUGZnOHZDWmZKZWE0UnlFM2ZRMUNyNGZGQ3hjMEtzNUMwWFQ4V1dPdHFiMFo3SnlRcUVwRDRlbG95eWFFUU9UVUFxM1FvU28rWVprTVAwYzQwWnBFZXNsUHF1Ni9qQWhIK3JwOWdJNGtqelNnU2lPZlljRzZpb0FBQVdBTUlJRmZEQ0NCR1NnQXdJQkFnSUlEdXRYaCtlZUNZMHdEUVlKS29aSWh2Y05BUUVGQlFBd2daWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFLREFwQmNIQnNaU0JKYm1NdU1Td3dLZ1lEVlFRTERDTkJjSEJzWlNCWGIzSnNaSGRwWkdVZ1JHVjJaV3h2Y0dWeUlGSmxiR0YwYVc5dWN6RkVNRUlHQTFVRUF3dzdRWEJ3YkdVZ1YyOXliR1IzYVdSbElFUmxkbVZzYjNCbGNpQlNaV3hoZEdsdmJuTWdRMlZ5ZEdsbWFXTmhkR2x2YmlCQmRYUm9iM0pwZEhrd0hoY05NVFV4TVRFek1ESXhOVEE1V2hjTk1qTXdNakEzTWpFME9EUTNXakNCaVRFM01EVUdBMVVFQXd3dVRXRmpJRUZ3Y0NCVGRHOXlaU0JoYm1RZ2FWUjFibVZ6SUZOMGIzSmxJRkpsWTJWcGNIUWdVMmxuYm1sdVp6RXNNQ29HQTFVRUN3d2pRWEJ3YkdVZ1YyOXliR1IzYVdSbElFUmxkbVZzYjNCbGNpQlNaV3hoZEdsdmJuTXhFekFSQmdOVkJBb01Da0Z3Y0d4bElFbHVZeTR4Q3pBSkJnTlZCQVlUQWxWVE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcGMrQi9TV2lnVnZXaCswajJqTWNqdUlqd0tYRUpzczl4cC9zU2cxVmh2K2tBdGVYeWpsVWJYMS9zbFFZbmNRc1VuR09aSHVDem9tNlNkWUk1YlNJY2M4L1cwWXV4c1FkdUFPcFdLSUVQaUY0MWR1MzBJNFNqWU5NV3lwb041UEM4cjBleE5LaERFcFlVcXNTNCszZEg1Z1ZrRFV0d3N3U3lvMUlnZmRZZUZScjZJd3hOaDlLQmd4SFZQTTNrTGl5a29sOVg2U0ZTdUhBbk9DNnBMdUNsMlAwSzVQQi9UNXZ5c0gxUEttUFVockFKUXAyRHQ3K21mNy93bXYxVzE2c2MxRkpDRmFKekVPUXpJNkJBdENnbDdaY3NhRnBhWWVRRUdnbUpqbTRIUkJ6c0FwZHhYUFEzM1k3MkMzWmlCN2o3QWZQNG83UTAvb21WWUh2NGdOSkl3SURBUUFCbzRJQjF6Q0NBZE13UHdZSUt3WUJCUVVIQVFFRU16QXhNQzhHQ0NzR0FRVUZCekFCaGlOb2RIUndPaTh2YjJOemNDNWhjSEJzWlM1amIyMHZiMk56Y0RBekxYZDNaSEl3TkRBZEJnTlZIUTRFRmdRVWthU2MvTVIydDUrZ2l2Uk45WTgyWGUwckJJVXdEQVlEVlIwVEFRSC9CQUl3QURBZkJnTlZIU01FR0RBV2dCU0lKeGNKcWJZWVlJdnM2N3IyUjFuRlVsU2p0ekNDQVI0R0ExVWRJQVNDQVJVd2dnRVJNSUlCRFFZS0tvWklodmRqWkFVR0FUQ0IvakNCd3dZSUt3WUJCUVVIQWdJd2diWU1nYk5TWld4cFlXNWpaU0J2YmlCMGFHbHpJR05sY25ScFptbGpZWFJsSUdKNUlHRnVlU0J3WVhKMGVTQmhjM04xYldWeklHRmpZMlZ3ZEdGdVkyVWdiMllnZEdobElIUm9aVzRnWVhCd2JHbGpZV0pzWlNCemRHRnVaR0Z5WkNCMFpYSnRjeUJoYm1RZ1kyOXVaR2wwYVc5dWN5QnZaaUIxYzJVc0lHTmxjblJwWm1sallYUmxJSEJ2YkdsamVTQmhibVFnWTJWeWRHbG1hV05oZEdsdmJpQndjbUZqZEdsalpTQnpkR0YwWlcxbGJuUnpMakEyQmdnckJnRUZCUWNDQVJZcWFIUjBjRG92TDNkM2R5NWhjSEJzWlM1amIyMHZZMlZ5ZEdsbWFXTmhkR1ZoZFhSb2IzSnBkSGt2TUE0R0ExVWREd0VCL3dRRUF3SUhnREFRQmdvcWhraUc5Mk5rQmdzQkJBSUZBREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBRGFZYjB5NDk0MXNyQjI1Q2xtelQ2SXhETUlKZjRGelJqYjY5RDcwYS9DV1MyNHlGdzRCWjMrUGkxeTRGRkt3TjI3YTQvdncxTG56THJSZHJqbjhmNUhlNXNXZVZ0Qk5lcGhtR2R2aGFJSlhuWTR3UGMvem83Y1lmcnBuNFpVaGNvT0FvT3NBUU55MjVvQVE1SDNPNXlBWDk4dDUvR2lvcWJpc0IvS0FnWE5ucmZTZW1NL2oxbU9DK1JOdXhUR2Y4YmdwUHllSUdxTktYODZlT2ExR2lXb1IxWmRFV0JHTGp3Vi8xQ0tuUGFObVNBTW5CakxQNGpRQmt1bGhnd0h5dmozWEthYmxiS3RZZGFHNllRdlZNcHpjWm04dzdISG9aUS9PamJiOUlZQVlNTnBJcjdONFl0UkhhTFNQUWp2eWdhWndYRzU2QWV6bEhSVEJoTDhjVHFBPT0iOwoJInB1cmNoYXNlLWluZm8iID0gImV3b0pJbTl5YVdkcGJtRnNMWEIxY21Ob1lYTmxMV1JoZEdVdGNITjBJaUE5SUNJeU1ERTNMVEEzTFRBMElESXhPakE0T2pRNElFRnRaWEpwWTJFdlRHOXpYMEZ1WjJWc1pYTWlPd29KSW5WdWFYRjFaUzFwWkdWdWRHbG1hV1Z5SWlBOUlDSTNZelZtWXpNMk16WXhZMkV5TURabVlXTXhOemxqWXpka1kyRXpaakl5TTJJNE9EWmtZV1prSWpzS0NTSnZjbWxuYVc1aGJDMTBjbUZ1YzJGamRHbHZiaTFwWkNJZ1BTQWlNVEF3TURBd01ETXhNalUxTlRjek1pSTdDZ2tpWW5aeWN5SWdQU0FpTVM0d0xqa2lPd29KSW5SeVlXNXpZV04wYVc5dUxXbGtJaUE5SUNJeE1EQXdNREF3TXpFeU5UVTFOek15SWpzS0NTSnhkV0Z1ZEdsMGVTSWdQU0FpTVNJN0Nna2liM0pwWjJsdVlXd3RjSFZ5WTJoaGMyVXRaR0YwWlMxdGN5SWdQU0FpTVRRNU9USXlOemN5T0RReU5TSTdDZ2tpZFc1cGNYVmxMWFpsYm1SdmNpMXBaR1Z1ZEdsbWFXVnlJaUE5SUNJelJEVkJNRGMwUlMwNE5UVXpMVFJHTVRZdE9FTXpPQzAwUWprek0wVTNNVUU1TlRVaU93b0pJbkJ5YjJSMVkzUXRhV1FpSUQwZ0ltTnZiUzVrYVc1blpHbHVaMmRoYldVdWNESXhMbU5oY21ReE1DSTdDZ2tpYVhSbGJTMXBaQ0lnUFNBaU1USTFOVFEzTlRJeU5TSTdDZ2tpWW1sa0lpQTlJQ0pqYjIwdVpHbHVaMlJwYm1kbllXMWxMbkF5TVNJN0Nna2ljSFZ5WTJoaGMyVXRaR0YwWlMxdGN5SWdQU0FpTVRRNU9USXlOemN5T0RReU5TSTdDZ2tpY0hWeVkyaGhjMlV0WkdGMFpTSWdQU0FpTWpBeE55MHdOeTB3TlNBd05Eb3dPRG8wT0NCRmRHTXZSMDFVSWpzS0NTSndkWEpqYUdGelpTMWtZWFJsTFhCemRDSWdQU0FpTWpBeE55MHdOeTB3TkNBeU1Ub3dPRG8wT0NCQmJXVnlhV05oTDB4dmMxOUJibWRsYkdWeklqc0tDU0p2Y21sbmFXNWhiQzF3ZFhKamFHRnpaUzFrWVhSbElpQTlJQ0l5TURFM0xUQTNMVEExSURBME9qQTRPalE0SUVWMFl5OUhUVlFpT3dwOSI7CgkiZW52aXJvbm1lbnQiID0gIlNhbmRib3giOwoJInBvZCIgPSAiMTAwIjsKCSJzaWduaW5nLXN0YXR1cyIgPSAiMCI7Cn0=","requestData":"MTAwOTA1MF8xNDk5MjI3Njk1","state":1,"productId":"com.dingdinggame.p21.card10","tradeSnid":"1000000312555732"\},"code":0\}
-
- --]]
-
- -- 把订单数据提交到服务器
- function PluginIosPay:postReceiptData(msg)
- logD("PluginIosPay::postReceiptData() ")
-
- local msgData = json.decode(msg);
- logD("PluginIosPay::postReceiptData() msgData = ", table.tostring(msgData));
-
- local msgData = json.decode(msg);
- local tradeSnid = msgData.tradeSnid;
- -- 将玩家的支付数据写本地
- if tradeSnid ~= nil then
- self.payData[tradeSnid] = msgData;
- self:saveData()
- end
-
- local requestData = msgData.requestData;
- local arr = string.split(requestData, "_")
- local item_id = arr[1]
- local order_id = arr[2]
-
- local tt =
- {
- action = "order.receipt",
- app = getAppId(),
- uid = app.user.loginInfo.uid,
- item_id = item_id,
- productid = msgData.productId,
- orderid = order_id,
- receipt = msgData.receiptData,
- }
- logD("PluginIosPay::postReceiptData() tt = ", table.tostring(tt));
-
- local url = getGlobalPhpUrl()
- logD("PluginIosPay::postReceiptData() url = ", url)
-
- if not url or url == "" then
- return
- end
-
- httpPost(url, tt, function(status, response)
- logD("PluginIosPay::postReceiptData() status = ", tostring(status));
- logD("PluginIosPay::postReceiptData() response = ", tostring(response));
-
- if status ~= "successed" then
- return;
- end
-
- -- 状态码
- local data = json.decode(response)
- if tonumber(data.code) ~= 200 then
- logD("PluginIosPay::postReceiptData() tradeSnid = ", tradeSnid);
- if tradeSnid then
- self.plugin:callVoid("finishPurchase" , tradeSnid);
- end
- return
- end
-
- -- 房卡数量
- if not data.result or not data.result.card then
- return
- end
-
- -- 更新房卡数量
- app.user.loginInfo.curCardNum = tonumber(data.result.card);
-
- showConfirmDialog("恭喜您充值成功,祝您游戏愉快!");
-
- -- 通知 APPLE 订单完成
- logD("PluginIosPay::postReceiptData() tradeSnid = ", tradeSnid);
- self.plugin:callVoid("finishPurchase" , tradeSnid);
- end )
-
- end
-
- -- 回调函数
- function PluginIosPay:onPayResult(result)
- local resultJson = json.decode(result);
- local ret = resultJson.code;
- local msg = resultJson.msg;
-
- logD("PluginIosPay:onPayResult() code = ", ret)
- if type(msg) == "table" then
- logD("PluginIosPay:onPayResult() msg = ", table.tostring(msg))
- else
- logD("PluginIosPay:onPayResult() msg = ", tostring(msg))
- end
-
- if ret == 0 then
- -- 打印信息
- logD("AppleIAP:" , msg);
- elseif ret == 1 then
- -- 支付成功
- app.waitDialogManager:closeWaitNetworkDialog()
- self:postReceiptData(msg);
- elseif ret == 2 then
- -- 发现有订单丢失的情况
- -- 首先上报异常,上报成功之后删除订单
- app.waitDialogManager:closeWaitNetworkDialog()
- self:postReceiptData(msg);
- elseif ret == 3 then
- -- 支付失败
- app.waitDialogManager:closeWaitNetworkDialog()
- --showConfirmDialog(string.format("支付失败: %s", msg));
- elseif ret == 4 then
- -- 支付取消
- app.waitDialogManager:closeWaitNetworkDialog()
- --showConfirmDialog(string.format("支付取消: %s", msg));
- else
- -- 未知的回调信息
- app.waitDialogManager:closeWaitNetworkDialog()
- end
- end
-
- function PluginIosPay:loadData()
- logD("PluginIosPay:loadData()")
-
- local fileSting = loadStringFromFile(self.payDataFile)
- logD("PluginIosPay:loadData() fileSting = ", fileSting);
- if not fileSting or string.len(fileSting) <= 0 then
- return
- end
-
- local function loadFromFile()
- logD("PluginIosPay:loadData() loadFromFile")
- self.payData = json.decode(fileSting);
- end
- local function loadFromFileFailed()
- logE("PluginIosPay:loadData() loadFromFileFailed")
- end
- -- 容错处理
- xpcall(loadFromFile, loadFromFileFailed);
- logD("PluginIosPay:loadData() self.payData = ", table.tostring(self.payData))
- end
-
- function PluginIosPay:saveData()
- logD("PluginIosPay:saveData() payData = ", table.tostring(self.payData))
-
- local fileSting = json.encode(self.payData)
- logD("PluginIosPay:saveData() fileSting = ", fileSting)
-
- saveStringToFile(fileSting, self.payDataFile);
- end
-
- return PluginIosPay;
|