• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無以明志,非寧靜無以致遠。
            隨筆 - 397, 文章 - 0, 評論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            中宣部防沉迷系統(tǒng)python版本

            import json
            from Crypto.Cipher import AES
            import base64
            import requests
            import hashlib
            import time
            import os
            import binascii
            URL = "https://wlc.nppa.gov.cn/test/authentication/check"  #接口調(diào)用地址(實名認證)
            KEY = "d10d8642c66c1c785aa32b194aba2afa"                   #訪問密鑰                     
            APPID = "9177929f5010481b858f661a409fd764"                 #接口調(diào)用唯一憑證 由系統(tǒng)發(fā)放
            BIZID = "1101999999"                                       #業(yè)務(wù)權(quán)限標(biāo)識 與游戲備案識別碼一致
            #測試用例
            TEST_PARAMS = {"ai":"100000000000000001",
            "name":"某一一",
            "idNum":"110000190101010001"}
            class AES_GCM(object):
                def __init__(self, key):
                    self.key = key  #秘鑰
                    self.MODE = AES.MODE_GCM
                    self.iv = os.urandom(12)
                def aes_encrypt(self, params):
                    aes = AES.new(binascii.unhexlify(self.key), self.MODE, self.iv)
                    params, tag=aes.encrypt_and_digest(json.dumps(params).encode("utf-8"))
                    base64_data= self.iv + params + tag
                    encrypted_text = str(base64.b64encode(base64_data), encoding='utf-8')
                    return encrypted_text
                def aes_decrypt(self, encrypted_text):
                    encrypted_text = base64.b64decode(encrypted_text)
                    cipher = AES.new(binascii.unhexlify(self.key), self.MODE, encrypted_text[:12])
                    cc = cipher.decrypt_and_verify(encrypted_text[12:-16], encrypted_text[-16:])
                    return json.loads(cc)
            def hash256(pre_hash_text):
                hs256 = hashlib.sha256()
                hs256.update(pre_hash_text.encode())
                return hs256.hexdigest()
            def sorted_params(params, param_="%s%s", none_keys = []):
                return "".join([
                        param_ % i for i in
                        sorted(params.items(), key=lambda d:d[0]) if i[0] not in none_keys
                        ])
            def main():
                aesobject = AES_GCM(KEY)
                _time = str(int(time.time() * 1000))
                #############上報用戶行為(上線 下線),直接替換TEST_PARAMS 接口調(diào)用地址 http:// api2.wlc.nppa.gov.cn/behavior/collection/loginout  實名認證接結(jié)果查詢接口http:// api2.wlc.nppa.gov.cn/idcard/authentication/query
                #no:[條目編碼]在批量模式中標(biāo)識一條行為數(shù)據(jù),取值范圍 1-128
                #si:[游戲內(nèi)部會話標(biāo)識]一個會話標(biāo)識只能對應(yīng)唯一的實名用戶,一個實名用戶可以擁有多個會話標(biāo)識;同一用戶單次游戲會話中,上下線動作必須使用同一會話標(biāo)識上報備注:
                #                  會話標(biāo)識僅標(biāo)識一次用戶會話,生命周期僅為一次上線和與之匹配的一次下線,不會對生命周期之外的任何業(yè)務(wù)有任何影響
                #bt:[用戶行為類型]游戲用戶行為類型0:下線,1:上線
                #ot:[行為發(fā)生時間]行為發(fā)生時間戳,單位秒
                #ct:[上報類型]用戶行為數(shù)據(jù)上報類型,0:已認證通過用戶,2:游客用戶
                #di:[設(shè)備標(biāo)識]游客模式設(shè)備標(biāo)識,由游戲運營單位生成,游客用戶下必填
                #pi:[用戶唯一標(biāo)識]已通過實名認證用戶的唯一標(biāo)識,已認證通過用戶必填 由38位的字符串構(gòu)成,其中包括用戶出生日期和用戶編碼兩部分。用戶出生日期以26進制(10個數(shù)字+英文字母表前16個字母)的方式編碼,位于用戶唯一標(biāo)識前6位;用戶編碼由網(wǎng)絡(luò)游戲防沉迷實名認證系統(tǒng)生成,位于用戶唯一標(biāo)識的后32位。
                #   例如:用戶唯一標(biāo)識 1hpfml09b57f3f8185f8cb5094ea3f26278efb 用戶生日部分是1hpfml 用戶編碼部分是09b57f3f8185f8cb5094ea3f26278efb 
                player_data = {'collections':[{"no":1,"si":"w7ligxjw355ftctm94yqt9dcew4zd723","bt":0,"ot":_time,"ct":0,"di":"uyiv6clpf7cu296pd4ppv11le820dhkw","pi":"1fffbjzos82bs9cnyj1dna7d6d29zg4esnh99u"}]}
                ##############
                aes_gcm = aesobject.aes_encrypt(TEST_PARAMS)
                body_data='{"data":"%s"}' % aes_gcm  ## 國家游戲防沉迷的api試了不能進行json.dumps()
                ## 加入請求頭報文
                headers = {"Content-Type":"application/json; charset=utf-8","appId":APPID,"bizId":BIZID,"timestamps":_time}
                ## 對請求頭報文排序并排除 不必要的字段進行字符串拼接
                params_str = sorted_params(headers, none_keys=["Content-Type"])
                headers["sign"] = hash256("".join([KEY, params_str, body_data]))
                # print(aesobject.aes_decrypt(aes_gcm)) ## 解碼
                response = requests.post(URL, headers=headers, data= body_data)
                print(response.json())
            if __name__ == '__main__':
                main()
                
            附錄:  響應(yīng)參數(shù) 
            字段                  類型       名稱             字段說明 
            errcode               Int       狀態(tài)碼             狀態(tài)碼 
            errmsg                String    狀態(tài)描述           狀態(tài)描述 
            data                  Object    響應(yīng)對象          響應(yīng)結(jié)果 
            data.result           Object    響應(yīng)結(jié)果對象      響應(yīng)結(jié)果內(nèi)容 
            data.result.status    Int       實名認證結(jié)果      認證結(jié)果 0:認證成功 1:認證中  2:認證失敗 
            data.result.pi       String     用戶唯一標(biāo)識      已通過實名認證用戶的唯一標(biāo)識
                
            接口返回狀態(tài)碼
            狀態(tài)碼               狀態(tài)描述           狀態(tài)說明 
            0                     OK                請求成功
            1001                SYS ERROR           系統(tǒng)錯誤 
            1002      SYS REQ RESOURCE NOT EXIST    接口請求的資源不存在 
            1003        SYS REQ METHOD ERROR        接口請求方式錯誤 
            1004      SYS REQ HEADER MISS ERROR     接口請求核心參數(shù)缺失 
            1005      SYS REQ IP ERROR              接口請求IP地址非法 
            1006      SYS REQ BUSY ERROR            接口請求超出流量限制 
            1007      SYS REQ EXPIRE ERROR          接口請求過期 
            1008      SYS REQ PARTNER ERROR         接口請求方身份非法 
            1009      SYS REQ PARTNER AUTH DISABLE  接口請求方權(quán)限未啟用 
            1010        SYS REQ AUTH ERROR          接口請求方無該接口權(quán)限 
            1011      SYS REQ PARTNER AUTH ERROR    接口請求方身份核驗錯誤 
            1012      SYS REQ PARAM CHECK ERROR     接口請求報文核驗失敗
            實名認證業(yè)務(wù)異常
            2001      BUS AUTH IDNUM ILLEGAL        身份證號格式校驗失敗 
            2002      BUS AUTH RESOURCE LIMIT       實名認證條目已達上限 
            2003      BUS AUTH CODE NO AUTH RECODE  無該編碼提交的實名認證記錄 
            2004      BUS AUTH CODE ALREADY IN USE  編碼已經(jīng)被占用
            游戲用戶行為數(shù)據(jù)上報業(yè)務(wù)異常 
            3001     BUS COLL PARTIAL ERROR         行為數(shù)據(jù)部分上報失敗 
            3002     BUS COLL BEHAVIOR NULL ERROR   行為數(shù)據(jù)為空 
            3003     BUS COLL OVER LIMIT COUNT      行為數(shù)據(jù)超出條目數(shù)量限制 
            3004     BUS COLL NO INVALID            行為數(shù)據(jù)編碼錯誤 
            3005     BUS COLL BEHAVIOR TIME ERROR   行為發(fā)生時間錯誤 
            3006     BUS COLL PLAYER MODE INVALID   用戶類型無效 
            3007     BUS COLL BEHAVIOR MODE INVALID 行為類型無效 
            3008     BUS COLL PLAYERID MISS         缺失PI(用戶唯一標(biāo)識)值 
            3009     BUS COLL DEVICEID MISS         缺失DI(設(shè)備標(biāo)識)值 3
            010      BUS COLL PLAYERID INVALID PI (用戶唯一標(biāo)識)值無效

            posted on 2021-08-28 10:52 Benjamin 閱讀(4661) 評論(0)  編輯 收藏 引用 所屬分類: python

            久久精品国产亚洲AV不卡| 久久久久久综合一区中文字幕| 久久93精品国产91久久综合| 久久久久久久综合综合狠狠| 婷婷国产天堂久久综合五月| 午夜精品久久久久久久| 精品久久久久一区二区三区| 亚洲中文字幕无码久久2017| 一本大道加勒比久久综合| 一本大道久久香蕉成人网| 国产精品久久久久aaaa| 久久这里的只有是精品23| 99999久久久久久亚洲| 久久只这里是精品66| 久久精品国产亚洲沈樵| 中文字幕无码精品亚洲资源网久久| 精品国产福利久久久| 久久国产欧美日韩精品免费| 办公室久久精品| 无码国内精品久久人妻| 亚洲国产成人久久精品99| 国内精品久久久久久99| 久久亚洲国产成人影院| 九九久久精品无码专区| 精品蜜臀久久久久99网站| 人人妻久久人人澡人人爽人人精品| 精品国产91久久久久久久a| 久久久久人妻精品一区二区三区| 成人综合久久精品色婷婷| 中文字幕亚洲综合久久2| av午夜福利一片免费看久久| 亚洲欧美成人综合久久久| 久久精品国产亚洲AV忘忧草18| 一本色道久久88综合日韩精品 | 久久亚洲国产精品成人AV秋霞| 91久久精品国产91性色也| 精品一区二区久久久久久久网站| 亚洲第一极品精品无码久久| 久久久久波多野结衣高潮| 久久婷婷色综合一区二区| 国产成人无码精品久久久性色|