#!/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  
 | 
  
 | 
  
 | 
  
 |