| #!/usr/bin/python  | 
| # -*- coding: utf-8 -*-  | 
| #  | 
| ##@package  | 
| #  | 
| # @todo: 受理HTTP请求  | 
| #  | 
| # @author: Alee  | 
| # @date 2018-5-4 22:10:51  | 
| # @version 1.0  | 
| #  | 
| # @note: 中文必须传utf8,收到的为urlencode内容  .decode('gbk').encode('utf8')  | 
| #  | 
| #---------------------------------------------------------------------  | 
|   | 
| from bottle import Bottle, request  | 
| import logging  | 
| import jpush  | 
| import requests  | 
| import urllib  | 
| from lib import ConfigIniReader  | 
| import json  | 
|   | 
| #app_key = u'22186239fee975f883198cf4'  | 
| #master_secret = u'cb2b72ba143a3f3fb13a6f45'  | 
|   | 
| #_jpush = jpush.JPush(app_key, master_secret)  | 
| #_jpush.set_logging("DEBUG")  | 
|   | 
| requests.packages.urllib3.disable_warnings()  | 
|   | 
| # get: request.query.username request.GET.get('username','')  | 
| # post: request.forms.get('username')  request.POST.get('username')  | 
| #===============================================================================  | 
| # @myapp.route('/cool/kk/:name3/:count#\\d+#')  | 
| # def maybe(name3, count):  | 
| #===============================================================================  | 
|   | 
| myapp = Bottle()  | 
|   | 
| Def_Split_Mark = "|"  | 
|   | 
| # 文本格式GBK取出出来转unicode,服务器发过来也是unicode 推送统一unicode  | 
| Def_NoName = ConfigIniReader.GetConfig().GetValue('Def_NoName').decode("gbk")  | 
| NotifyFormat = ConfigIniReader.GetConfig().GetValue('NotifyFormat').decode("gbk")  | 
|   | 
|   | 
| # 推送消息  | 
| # 混服使用对应不同key {平台ID:[[玩家个推ID, 玩家名],[玩家个推ID2, 玩家名2]。。。]}  | 
| # {u'822055139': [[u'160a3797c8504368d60', u'\u76f8\u601d\u59ff\u6653']]}-1234567  | 
|   | 
| @myapp.route('/getui/index.php', method='POST')  | 
| def JGGeTui():  | 
|     getDict = request.POST  | 
|     notifyMsg = urllib.unquote(getDict.get("NotifyMsg","")).decode("utf8")  | 
|     playerDict = json.loads(urllib.unquote_plus(getDict.get("PlayerInfo", "")))  | 
|       | 
|     logging.info("%s-%s"%(playerDict, notifyMsg))  | 
|     if not playerDict:  | 
|         # 只能单\多推,不能全部推  | 
|         return  | 
|       | 
|     osName = jpush.all_  | 
|           | 
|     #logging.info("%s-%s-%s"%(getDict.get("RegID",""), playrNames, notifyMsg))  | 
|     #return "账号:" + getDict.get("AccountID",""), "充值", getDict.get("money","")   | 
|       | 
|     # 约定 {appID:[推送ID1, 推送ID2...]} 为群推  | 
|     # 约定 {appID:[[推送ID1, 玩家名称1], [推送ID2, 玩家名称2]...]} 为一一个推  | 
|     for appID in playerDict:  | 
|         # 找到对应KEY  | 
|         try:  | 
|             app_key = ConfigIniReader.GetConfig().GetValue('app_key_%s'%appID)  | 
|             master_secret = ConfigIniReader.GetConfig().GetValue('master_secret_%s'%appID)  | 
|         except:  | 
|             logging.warn("no key = %s"%appID)  | 
|             continue  | 
|         jpushObj = jpush.JPush(app_key, master_secret)  | 
|           | 
|         if type(playerDict[appID][0]) != list:  # 列表中的元素不是列表说明是群推  | 
|             PushOne(jpushObj, playerDict[appID], notifyMsg, osName)  | 
|         else:  | 
|             # 不支持notifymsg内容不一样的多推,只能一一对应推送  | 
|             for regID, playerName in playerDict[appID]:  | 
|                 playerName = playerName if playerName else Def_NoName  | 
|                 #playerName = urllib.unquote(playerName)  | 
|                 #playerName = playerName.encode('utf-8')  | 
|                 geTuiMsg = NotifyFormat%(playerName, notifyMsg)  | 
|                 #logging.info("PushOne%s-%s-%s"%([regID], geTuiMsg, osName))  | 
|                 PushOne(jpushObj, [regID], geTuiMsg, osName)  | 
|   | 
|           | 
| def PushOne(jpushObj, regIDList, notifyMsg, osName=jpush.all_):  | 
|     # 1.推送对象 单推(多推);  群推只能提交中心推  | 
|     # 2.平台 ios  安卓  默认全平台  | 
|     # 3.通知消息  | 
|       | 
|     push = jpushObj.create_push()  | 
|     push.audience =  {"registration_id" : regIDList}  | 
|     push.notification = jpush.notification(alert=notifyMsg)  | 
|     push.platform = osName  | 
|     push.options = {"time_to_live":300}  | 
|     #push.options = {"apns_production": False,}  | 
|   | 
|     try:  | 
|         response=push.send()  | 
|     except:  | 
|         pass  | 
|   | 
|   | 
|   |