瀏覽代碼

增加微信一键登录接口

chenjunkai 5 年之前
父節點
當前提交
c4b198b1e9

+ 1 - 1
Ansjer/config.py

@@ -169,7 +169,7 @@ FCM_CONFIG = {
 # type= 0
 APNS_CONFIG = {
     'com.ansjer.loocamccloud': {
-        'pem_path': os.path.join(BASE_DIR, 'Ansjer/file/apns_pem/apns-dev-test.pem'),
+        'pem_path': os.path.join(BASE_DIR, 'Ansjer/file/apns_pem/apns-dev.pem'),
         'password': '111111'
     }
 }

+ 64 - 0
Ansjer/file/apns_pem/apns-dev-loc.pem

@@ -0,0 +1,64 @@
+Bag Attributes
+    friendlyName: Apple Development IOS Push Services: com.ansjer.loocamccloud
+    localKeyID: 23 82 B2 0B 3D C6 B3 4A D4 D8 13 C3 4B B4 3F 45 A4 B9 C1 AE 
+subject=/UID=com.ansjer.loocamccloud/CN=Apple Development IOS Push Services: com.ansjer.loocamccloud/OU=JCHT67XT68/C=US
+issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
+-----BEGIN CERTIFICATE-----
+MIIFkzCCBHugAwIBAgIIKg69mG6JJd8wDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
+BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
+ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
+aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
+HhcNMTkwOTAzMDEzNTEwWhcNMjAwOTAyMDEzNTEwWjCBkjEnMCUGCgmSJomT8ixk
+AQEMF2NvbS5hbnNqZXIubG9vY2FtY2Nsb3VkMUUwQwYDVQQDDDxBcHBsZSBEZXZl
+bG9wbWVudCBJT1MgUHVzaCBTZXJ2aWNlczogY29tLmFuc2plci5sb29jYW1jY2xv
+dWQxEzARBgNVBAsMCkpDSFQ2N1hUNjgxCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2+0/TMV1utd5WCe1exM3PDTdyCneRrva7mmF
+5XYjfCEjcTCAuWTKka4QFuOWNoDsbTuG+qeR+rQ25rRZ2gQYgHD1bJbIu5o9RCAp
+5PJ2cxslXlKbPjoMfgqtLGmjbV02F3gvAAEgvbA8CqLoNrfaHTHtPMAMvzbLhQm2
+oWSzAOsTcx3dHBB8kgl9qTDr5f5yLU5pJRJph+/FRnjA3DbDJcNFayO38qNq39GH
+TF2aTE/ueJyCx1j+ZJLzUc969SCH6i71Y4660S0sHBx+3oqlRgPzS97WX4L4Ab3b
+RFh9Qar8//uFBBTiCavIzNktLyeN/ciefwR7fXwGl6nX+vP5hwIDAQABo4IB5TCC
+AeEwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2R1nFUlSjtzCC
+AQ8GA1UdIASCAQYwggECMIH/BgkqhkiG92NkBQEwgfEwgcMGCCsGAQUFBwICMIG2
+DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNz
+dW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQg
+dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kg
+YW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wKQYIKwYBBQUH
+AgEWHWh0dHA6Ly93d3cuYXBwbGUuY29tL2FwcGxlY2EvMBMGA1UdJQQMMAoGCCsG
+AQUFBwMCME0GA1UdHwRGMEQwQqBAoD6GPGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUu
+Y29tL2NlcnRpZmljYXRpb25hdXRob3JpdHkvd3dkcmNhLmNybDAdBgNVHQ4EFgQU
+I4KyCz3Gs0rU2BPDS7Q/RaS5wa4wCwYDVR0PBAQDAgeAMBAGCiqGSIb3Y2QGAwEE
+AgUAMA0GCSqGSIb3DQEBBQUAA4IBAQAdZQ1i9o22sLj9oj4s1sFNaAnevpTw9fqx
+tkrzaXqbCFvYb+MRaXM2gbZq8QfDKdK3hCZ9M5bEZlYYV+RfmWjs5c/Ucfd8Sy7z
+MHU8EsebdZcefU98OAjN+NyECasmzc1RrfgucL3Cuw2ZSM5VYrnFxNHByOVcf2y+
+yw9bSFILPODDXvHC8Dxm3nckvQ3rj9+Dj3zyL5KCePuGxIUFQ6w4F2xvs2ma08TZ
++lpWi6x2Wu56KRluTs5/GH4fla1jyHGl/nyjU1oKNYGK9ehk+HAjrG48UlbleDP3
+ADPLsNIF5CHTE1gK69u7HDf4YSD6KQNfdydJByB790/38WiMZMj8
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIEowIBAAKCAQEA2+0/TMV1utd5WCe1exM3PDTdyCneRrva7mmF5XYjfCEjcTCA
+uWTKka4QFuOWNoDsbTuG+qeR+rQ25rRZ2gQYgHD1bJbIu5o9RCAp5PJ2cxslXlKb
+PjoMfgqtLGmjbV02F3gvAAEgvbA8CqLoNrfaHTHtPMAMvzbLhQm2oWSzAOsTcx3d
+HBB8kgl9qTDr5f5yLU5pJRJph+/FRnjA3DbDJcNFayO38qNq39GHTF2aTE/ueJyC
+x1j+ZJLzUc969SCH6i71Y4660S0sHBx+3oqlRgPzS97WX4L4Ab3bRFh9Qar8//uF
+BBTiCavIzNktLyeN/ciefwR7fXwGl6nX+vP5hwIDAQABAoIBACua1IwiMn+DLXn/
+FYp7et4jFT4Unw+jO3s9zOB8FfkMkPxmQ39+rnNH8cS4BxZzZW0a+l5ETztH9AK2
+C4KggUMmImMPWmln4XHadrQAJuAXp8cV1dX2qHdtInzFzTNn4cuxdpAnqRgzExSA
+zE3dEg/r0D/VTDG1aZDNJjrFvoAVvcGckbP6hBlEuu8mNlYmjLIwf3CZaNDE8vL+
+UPylyuniruxLxk0WePG7WpRHc5jzdBcrYfJBoDSoI8WYmfISIn5am6w7sAPzGBSB
+GsrRB9/8if3SS0Up30scSyHjy/v6SHmGjCa9cielx/XX7fh29vp/347HzaOuFY0V
+3BvGsMECgYEA8J+/iHks33vc9a2JkOZjZW6lQHRMroc17UX7ceyEqN2mxzYcHeee
+/kryoAPB4Jmpm6IXI6Q2ZVUNqCzK8joxuuF+oW7BbBFn2L7J/Jxd41p5jy8HW472
+X9LiRIbaL15h3mOKfCy9ylN0haq7KLSSKHWGnotLzfkBjmM27UvYYJECgYEA6frs
+J6CjiwtcevuDT+E1acy0PQpHYJHj+Iy9D/21L0orDlzaKJXbhf4H6mdXhYVGwFN6
+Rwej8rxfu/XEMseKRfOWKfnHgrBr118wtw9PLpKt2qESZ6Lb3ShxeOifAtR3A9Iq
+tPd2H9i75ljZlBgjD4bIev59rvxOyXhF0QAkxJcCgYAY2HXfcpumi9SZ7YxJ0PAs
+dgtMJ3YPg1iXImW/MqvT/+cLpNOsZtEs8rIwwZKQTW2M62S2Qmt3dRvO5Kkj78xY
+vpXjt1rzfKybXb/ffInZQutQVIvO8WkRJeZFKyN2RqmWW/LdtYT3Ujyy3Jksr9Bz
+qwb2ce2m2/JEMIxoXi9+cQKBgFja6YPDBVhwYBZ0HVHgfKBJFMl5ddG+lYx2JfZE
+quHikKdLq61t+4fPCMKDrEEQc+XlzbHbvO8ZimGe23tNO72E26nlKVcAGHQZui5K
+qg9NtKgqMwsYVdaO3UjFTl2MwgW5cm5262z8qZ64byhGYkorLUdIDgK93k20Vw8f
+ttbRAoGBALlVcYpvc8cSMAhYuZrVaD/lajQsllEz5xSFSJdWjZi3ospD/FUfnNDN
+zH2dY9QzCIao7TE0Fzi38zozEUaZhE9IJoG/rXnwFp4XsARf+/xZpd78yaZmZdDY
+lpwslFKZ+TEgKUfdo7LABqYCcVWc687MprAniOcHOXJtENoXvc8r
+-----END RSA PRIVATE KEY-----

+ 0 - 0
Ansjer/file/apns_pem/apns-dev.pem → Ansjer/file/apns_pem/apns-dev-t.pem


+ 0 - 64
Ansjer/file/apns_pem/apns-dev-test.pem

@@ -1,64 +0,0 @@
-Bag Attributes
-    friendlyName: Apple Development IOS Push Services: com.ansjer.loocamccloud
-    localKeyID: 88 F8 4C E3 C3 6E E8 8E 07 D4 F6 FD 04 7E 79 A4 93 4F 7E 82 
-subject=/UID=com.ansjer.loocamccloud/CN=Apple Development IOS Push Services: com.ansjer.loocamccloud/OU=JCHT67XT68/C=US
-issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
------BEGIN CERTIFICATE-----
-MIIFkzCCBHugAwIBAgIIYwaKq6f2DAEwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
-ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
-aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
-HhcNMTkwNjI2MDU1MzM5WhcNMjAwNjI1MDU1MzM5WjCBkjEnMCUGCgmSJomT8ixk
-AQEMF2NvbS5hbnNqZXIubG9vY2FtY2Nsb3VkMUUwQwYDVQQDDDxBcHBsZSBEZXZl
-bG9wbWVudCBJT1MgUHVzaCBTZXJ2aWNlczogY29tLmFuc2plci5sb29jYW1jY2xv
-dWQxEzARBgNVBAsMCkpDSFQ2N1hUNjgxCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwjdrw+8hKwbPbgsK8z3WhOX6ZlWE1xB3EK8M
-GmVdluRco4/utE31gheJXmRCTGrOVyoLwls2zmlzv51KNG5/h0M9ltN4JIJMvlWx
-au0EJp6PM/cVTBbJ2ssY8SdaW2nxUoWcbiYVcBs2WXqzQYtXs3GH5nFYWH47LQ4w
-bMqBUnhzPdqHLT4u+CVXCK/LcRpnMT9Vepve8vLchakgpGRXOOWta5Yg5G4KgQKT
-j62IpHhBmGD+2Vq14odVsb0GmlFCHHVYqQ88a/0cL9pb0wqQnzxdeyguAtfvK3VM
-4o+dGshx7/U9fpwtmTeVfpsRbejy0UVLavQ/qO1OyVxJgKxmywIDAQABo4IB5TCC
-AeEwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2R1nFUlSjtzCC
-AQ8GA1UdIASCAQYwggECMIH/BgkqhkiG92NkBQEwgfEwgcMGCCsGAQUFBwICMIG2
-DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNz
-dW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQg
-dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kg
-YW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wKQYIKwYBBQUH
-AgEWHWh0dHA6Ly93d3cuYXBwbGUuY29tL2FwcGxlY2EvMBMGA1UdJQQMMAoGCCsG
-AQUFBwMCME0GA1UdHwRGMEQwQqBAoD6GPGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUu
-Y29tL2NlcnRpZmljYXRpb25hdXRob3JpdHkvd3dkcmNhLmNybDAdBgNVHQ4EFgQU
-iPhM48Nu6I4H1Pb9BH55pJNPfoIwCwYDVR0PBAQDAgeAMBAGCiqGSIb3Y2QGAwEE
-AgUAMA0GCSqGSIb3DQEBBQUAA4IBAQCQAjc/KENJjRAJ1dugJUlY5GtaRFHDtFi6
-rU0FdxlyAYUJUzRzqEKE0onMWpJ3CevfTcoXIG+iEQ1DiNwWh5crYP85RlOoSqs8
-oporzTq+TUgI/XByzhCgtJwNx8gvUWJKJIgmL6SHvsGUit8fQjSlSjEjR2aPAuFG
-olZWsQmjNH9dluy5+BZLKSJ9hBo2TrhwJB1vk4B8+K2uqdG0T/elHxgNiq3KlPQt
-1s2Y+6kzGBnZuu42zlYnGSsNehNbWaEeW27avK/jilpNYaKQHotavbihXHQoUQml
-UYNFOqIRJyaMUDoC85+HH1CnfaFjj9T229z2/2pQUQGXskIt6hSa
------END CERTIFICATE-----
------BEGIN RSA PRIVATE KEY-----
-MIIEowIBAAKCAQEAwjdrw+8hKwbPbgsK8z3WhOX6ZlWE1xB3EK8MGmVdluRco4/u
-tE31gheJXmRCTGrOVyoLwls2zmlzv51KNG5/h0M9ltN4JIJMvlWxau0EJp6PM/cV
-TBbJ2ssY8SdaW2nxUoWcbiYVcBs2WXqzQYtXs3GH5nFYWH47LQ4wbMqBUnhzPdqH
-LT4u+CVXCK/LcRpnMT9Vepve8vLchakgpGRXOOWta5Yg5G4KgQKTj62IpHhBmGD+
-2Vq14odVsb0GmlFCHHVYqQ88a/0cL9pb0wqQnzxdeyguAtfvK3VM4o+dGshx7/U9
-fpwtmTeVfpsRbejy0UVLavQ/qO1OyVxJgKxmywIDAQABAoIBAG4mIn94cxZFAYYG
-y0oTS0QKbs51OCcFVpHmxXV/AepfT88QBbDK+i+zC5y2Pge7F5XF6e9r7hR5KEWH
-fptoA/oB/7835k7Ge6IDVeEv1YfVq6AsRS7nScpGH7o9uHhaCJzl3Ed4X/Y56MQs
-29eToMTL4einZhSiWwt9nadF3ryXR2/ZIYZbdfqKwA60ELL0/G90CU6vI76bxivZ
-QAzl2fG6U0WiwNKcmdc7MfYOXz2t9tsjPeRvPoKvNMwTIJXKAa7WzkUvZsjXaE1U
-fd6JQ1zlDqeAbbA2MCUdXM1ZAkLnwjh2+OxegEM9bEj8k4RLr530ywJKfI0FoqS+
-tz6RAikCgYEA93d9HmgPzysclhalZHBEDQEVpXaV9B4nmDg5WkOUdn48sFGNYgT6
-205XqxsCbSL2dur3T5xQMDYqqxX+rOXfq+eaU0y2ddTv4fvTWWAKdvlb1b23QXJV
-suWwkPbF1inOiNo0WEy1GY6cCrliuXexsrfTp8uZtnT9VowRMzoxkR0CgYEAyOnd
-prSvj1vavASPZ0BF4pdcfbm0T82ZlQo2TLzbUapsrNlqdHADylUMsB8YpoPf95b+
-VFjL76o3DPrjL9fsf0It7nI7AiMpdUPXqCsPWYcvBBUVXiXnzWcrT0Cw81TitK0/
-rU7HYn3LroqBZTpYXatyxpw1pdZiPCWsecwS+wcCgYAwDpVOrVi8m5uujfFKgv7E
-I7zHaDMQuDZqOijxHYScSkGQ4BV7vonUwu8FfHZJKWwBhfnHDQ0Jf8tjdB8EBpQc
-NxriKFiao2J+WUAe8Ca4Gg66gGAxJnn8Btz2GeYrg+zm6LEXoLXeo7Ir5vqEF/l7
-QnWo9UIBi9CS2RqR/zAXBQKBgQCMeWeubVrqgzC2kQGrEXdLbMUQas01lu0xFcjN
-cqZtvRjq6cDS1Jbx2vFaGwPjOQVZWUtNsiA02/BNtQUvqGsEt0LiGyBC6E7OXLbm
-L+U1lZ0733nnL92Y8e+IJBUUrV8tMIz7Ib+qj4Xf7Zt3KYorQ/ql/wZLg09/+l9T
-cWo79QKBgCg/6UmTTEFzkxBNTevQy/i+2WSl8Hs3jfBr/jMKoSb17HMuXVTP89eK
-4N8z8DZrx8czW7oOPhgWd4uYSx5ti0SSCdUqne57IE7Gf3Ul1ORIth1lvXccvMTj
-PtnftfShMZ6z1wVvpzR1+x1L4h0qBHFoLH4HrMHKod60u2xbdtoO
------END RSA PRIVATE KEY-----

+ 0 - 41
Ansjer/file/apns_pem/apns-dev_nw.pem

@@ -1,41 +0,0 @@
-Bag Attributes
-    friendlyName: Apple Development IOS Push Services: com.ansjer.loocamccloud
-    localKeyID: 88 F8 4C E3 C3 6E E8 8E 07 D4 F6 FD 04 7E 79 A4 93 4F 7E 82 
-subject=/UID=com.ansjer.loocamccloud/CN=Apple Development IOS Push Services: com.ansjer.loocamccloud/OU=JCHT67XT68/C=US
-issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
------BEGIN CERTIFICATE-----
-MIIFkzCCBHugAwIBAgIIYwaKq6f2DAEwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
-ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
-aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
-HhcNMTkwNjI2MDU1MzM5WhcNMjAwNjI1MDU1MzM5WjCBkjEnMCUGCgmSJomT8ixk
-AQEMF2NvbS5hbnNqZXIubG9vY2FtY2Nsb3VkMUUwQwYDVQQDDDxBcHBsZSBEZXZl
-bG9wbWVudCBJT1MgUHVzaCBTZXJ2aWNlczogY29tLmFuc2plci5sb29jYW1jY2xv
-dWQxEzARBgNVBAsMCkpDSFQ2N1hUNjgxCzAJBgNVBAYTAlVTMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwjdrw+8hKwbPbgsK8z3WhOX6ZlWE1xB3EK8M
-GmVdluRco4/utE31gheJXmRCTGrOVyoLwls2zmlzv51KNG5/h0M9ltN4JIJMvlWx
-au0EJp6PM/cVTBbJ2ssY8SdaW2nxUoWcbiYVcBs2WXqzQYtXs3GH5nFYWH47LQ4w
-bMqBUnhzPdqHLT4u+CVXCK/LcRpnMT9Vepve8vLchakgpGRXOOWta5Yg5G4KgQKT
-j62IpHhBmGD+2Vq14odVsb0GmlFCHHVYqQ88a/0cL9pb0wqQnzxdeyguAtfvK3VM
-4o+dGshx7/U9fpwtmTeVfpsRbejy0UVLavQ/qO1OyVxJgKxmywIDAQABo4IB5TCC
-AeEwCQYDVR0TBAIwADAfBgNVHSMEGDAWgBSIJxcJqbYYYIvs67r2R1nFUlSjtzCC
-AQ8GA1UdIASCAQYwggECMIH/BgkqhkiG92NkBQEwgfEwgcMGCCsGAQUFBwICMIG2
-DIGzUmVsaWFuY2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNz
-dW1lcyBhY2NlcHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQg
-dGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kg
-YW5kIGNlcnRpZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wKQYIKwYBBQUH
-AgEWHWh0dHA6Ly93d3cuYXBwbGUuY29tL2FwcGxlY2EvMBMGA1UdJQQMMAoGCCsG
-AQUFBwMCME0GA1UdHwRGMEQwQqBAoD6GPGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUu
-Y29tL2NlcnRpZmljYXRpb25hdXRob3JpdHkvd3dkcmNhLmNybDAdBgNVHQ4EFgQU
-iPhM48Nu6I4H1Pb9BH55pJNPfoIwCwYDVR0PBAQDAgeAMBAGCiqGSIb3Y2QGAwEE
-AgUAMA0GCSqGSIb3DQEBBQUAA4IBAQCQAjc/KENJjRAJ1dugJUlY5GtaRFHDtFi6
-rU0FdxlyAYUJUzRzqEKE0onMWpJ3CevfTcoXIG+iEQ1DiNwWh5crYP85RlOoSqs8
-oporzTq+TUgI/XByzhCgtJwNx8gvUWJKJIgmL6SHvsGUit8fQjSlSjEjR2aPAuFG
-olZWsQmjNH9dluy5+BZLKSJ9hBo2TrhwJB1vk4B8+K2uqdG0T/elHxgNiq3KlPQt
-1s2Y+6kzGBnZuu42zlYnGSsNehNbWaEeW27avK/jilpNYaKQHotavbihXHQoUQml
-UYNFOqIRJyaMUDoC85+HH1CnfaFjj9T229z2/2pQUQGXskIt6hSa
------END CERTIFICATE-----
-Bag Attributes
-    friendlyName: ansjer
-    localKeyID: 88 F8 4C E3 C3 6E E8 8E 07 D4 F6 FD 04 7E 79 A4 93 4F 7E 82 
-Key Attributes: <No Attributes>

+ 0 - 41
Ansjer/file/apns_pem/apns-loocamccloud.pem

@@ -1,41 +0,0 @@
-Bag Attributes
-    friendlyName: Apple Development IOS Push Services: com.loocam.loocamcloud
-    localKeyID: B0 37 EA 76 9F F8 94 4C E7 6A E7 85 05 37 99 B4 10 AC E7 A2 
-subject=/UID=com.loocam.loocamcloud/CN=Apple Development IOS Push Services: com.loocam.loocamcloud/OU=JCHT67XT68/C=US
-issuer=/C=US/O=Apple Inc./OU=Apple Worldwide Developer Relations/CN=Apple Worldwide Developer Relations Certification Authority
------BEGIN CERTIFICATE-----
-MIIFkTCCBHmgAwIBAgIIS894dI4qHJYwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNV
-BAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3Js
-ZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3
-aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkw
-HhcNMTkwNjI2MDI1MDQ3WhcNMjAwNjI1MDI1MDQ3WjCBkDEmMCQGCgmSJomT8ixk
-AQEMFmNvbS5sb29jYW0ubG9vY2FtY2xvdWQxRDBCBgNVBAMMO0FwcGxlIERldmVs
-b3BtZW50IElPUyBQdXNoIFNlcnZpY2VzOiBjb20ubG9vY2FtLmxvb2NhbWNsb3Vk
-MRMwEQYDVQQLDApKQ0hUNjdYVDY4MQswCQYDVQQGEwJVUzCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBALtezKRHBBko9CaDqJTnX/itHK1baMPB6WHviVDJ
-6FG1vphLhg2PbZCIPdU3fQXnnqo+4u67ol/j5ER9jW1nmf5e9AzkjCGIA1Yst6SH
-s2VpIlwG3kd96f5Yjk161iXbJ0iMyu1Y2WiElpwOhd8IthXZl2eB7NYBJxW4utEg
-pXqS90U7QYg0Mt7hdO8gE9yO5K996Z8YabTQHRdoKhdgLUH8iGl57oO6usgiDvj0
-nXHjruBLOV0HwvV4SXPwShEScQN5M87WQx/EC2ocoocKL1G4x61ITPYEtq0VoELK
-LChnHyl4OaDhGQKtAZZlEKiZKql2r5JitsVsz/sFAA1QsiUCAwEAAaOCAeUwggHh
-MAkGA1UdEwQCMAAwHwYDVR0jBBgwFoAUiCcXCam2GGCL7Ou69kdZxVJUo7cwggEP
-BgNVHSAEggEGMIIBAjCB/wYJKoZIhvdjZAUBMIHxMIHDBggrBgEFBQcCAjCBtgyB
-s1JlbGlhbmNlIG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3Vt
-ZXMgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRl
-cm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFu
-ZCBjZXJ0aWZpY2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMCkGCCsGAQUFBwIB
-Fh1odHRwOi8vd3d3LmFwcGxlLmNvbS9hcHBsZWNhLzATBgNVHSUEDDAKBggrBgEF
-BQcDAjBNBgNVHR8ERjBEMEKgQKA+hjxodHRwOi8vZGV2ZWxvcGVyLmFwcGxlLmNv
-bS9jZXJ0aWZpY2F0aW9uYXV0aG9yaXR5L3d3ZHJjYS5jcmwwHQYDVR0OBBYEFLA3
-6naf+JRM52rnhQU3mbQQrOeiMAsGA1UdDwQEAwIHgDAQBgoqhkiG92NkBgMBBAIF
-ADANBgkqhkiG9w0BAQUFAAOCAQEApenYB9Kku9rAtx8UOZc9aUlnolxp119BDgte
-t8JXi5FA5ujxT1JVLNUhgqeQmEHFzlgBs8/cWUdcyJpvoH3ppSlFefJf09pu2Nrw
-4UOHeoUFVJMc2hFEgHqEPk8gnY/PebgfrBc2E5iRj+C3nf+iyqCB9Ot8KNy9N9XB
-XrL6fcu4MHYuEgAjdq5ysVFgWEyYYEmKRAc1qnXkBIa8GUJ1q2JZ910aG4anfSDy
-km49HnxQJBzOpTjWWuNDwCwKXf55wNXocq1bZgjho/ByLX9waWSlTeamuHp5bu/P
-22NkrcR2/KLMjCPbRn5+ew5SPNEuFTkRML9WBCUcpPC1hzyxqA==
------END CERTIFICATE-----
-Bag Attributes
-    friendlyName: mac mini01
-    localKeyID: B0 37 EA 76 9F F8 94 4C E7 6A E7 85 05 37 99 B4 10 AC E7 A2 
-Key Attributes: <No Attributes>

+ 18 - 3
Ansjer/test/kbt.py

@@ -1,3 +1,18 @@
-import requests
-ss = requests.put('https://statres.oss-cn-hongkong.aliyuncs.com/log%2FPVKWF95KGSV3A9G9111A1571041637.log?OSSAccessKeyId=LTAIyMkGfEdogyL9&Signature=Q90obbnivosYDCs9qJqqfa00HQU%3D&Expires=1571048837',data='13241342134314')
-print(ss.status_code)
+
+import apns2
+
+token_val = 'c9c695befbd15dc0af6f0c43d4d8e0c4e0c711da9fea8b16c93c392cf0213b11'
+# token_val = '00952704d5e0295faa021ba6537b669556149439110ce2ac07bbe195f9e7067f'
+pem_path = "D:/13.56.215.252/git/AnsjerFormal/Ansjer/file/apns_pem/apns-dev-loc.pem"
+# pem_path = "D:/13.56.215.252/git/AnsjerFormal/Ansjer/file/apns_pem/apns-dev-t.pem"
+# cli = apns2.APNSClient(mode="prod", client_cert=pem_path)
+cli = apns2.APNSClient(mode="dev", client_cert=pem_path)
+alert = apns2.PayloadAlert(body="body!", title="title!")
+payload = apns2.Payload(alert=alert)
+n = apns2.Notification(payload=payload, priority=apns2.PRIORITY_LOW)
+response = cli.push(n=n, device_token=token_val,topic='com.ansjer.loocamccloud')
+# response = cli.push(n=n, device_token=token_val, topic='com.ansjer.zccloud')
+print(response.status_code)
+assert response.status_code == 200, response.reason
+assert response.apns_id
+

+ 1 - 0
Ansjer/urls.py

@@ -152,6 +152,7 @@ urlpatterns = [
 
     url(r'^log/getUploadUrl', EquipmentStatus.getUploadLogUrl),
     url(r'^app/getIdData', AppInfo.AppIdDataView.as_view()),
+    url(r'^wechat/authsign', UserController.wxAuthSignView.as_view()),
     # 分区分流
     path('Test', Test.Test.as_view()),
     # 路由加参数参考

+ 1 - 1
Controller/CheckUserData.py

@@ -39,7 +39,7 @@ class DataValid:
     def __init__(self):
         # 用户名正则
         # self.re_name = re.compile(r'^[A-Za-z0-9\u4e00-\u9fa5\.\_]{1,16}$')
-        self.re_name = re.compile(r'^[A-Za-z0-9\u4e00-\u9fa5\.\_\-\@]{4,40}$')
+        self.re_name = re.compile(r'^[A-Za-z0-9\u4e00-\u9fa5\.\_\-\@]{4,64}$')
         # 密码强度正则
         self.re_password = re.compile(r'^[\w\.\_\@\-]{1,16}$')
         # 手机号码正则

+ 13 - 14
Controller/SysMsg.py

@@ -68,21 +68,20 @@ class SysMsgView(View):
             app_list = app_list.split(',')
             region = region.split(',')
             nowTime = int(time.time())
+            ue_filter = UserExtendModel.objects.filter()
             if app_list:
-                ue_filter = UserExtendModel.objects.filter(appBundleId__in=app_list)
-                if region:
-                    ue_filter.filter(userID__language__in=region)
-                ue_count = ue_filter.count()
-                range_count = math.ceil(ue_count / 5000)
-                for i in range(range_count):
-                    querysetlist = []
-                    userID_list = ue_filter.values_list('userID_id', flat=True)
-                    for urd in userID_list:
-                        querysetlist.append(SysMsgModel(userID_id=urd, msg=msg, addTime=nowTime, updTime=nowTime))
-                    SysMsgModel.objects.bulk_create(querysetlist)
-                return response.json(0)
-            else:
-                return response.json(444, 'app_list')
+                ue_filter = ue_filter.filter(appBundleId__in=app_list)
+            if region:
+                ue_filter.filter(userID__language__in=region)
+            ue_count = ue_filter.count()
+            range_count = math.ceil(ue_count / 5000)
+            for i in range(range_count):
+                querysetlist = []
+                userID_list = ue_filter.values_list('userID_id', flat=True)
+                for urd in userID_list:
+                    querysetlist.append(SysMsgModel(userID_id=urd, msg=msg, addTime=nowTime, updTime=nowTime))
+                SysMsgModel.objects.bulk_create(querysetlist)
+            return response.json(0)
         else:
             return response.json(404)
 

+ 13 - 19
Controller/Test.py

@@ -125,34 +125,28 @@ class Test(View):
 
     def do_apns(self, request_dict):
         token_val = request_dict.get('token_val', None)
-        pem_path = os.path.join(BASE_DIR, 'Ansjer/file/apns_pem/apns-dev-test.pem')
+        pem_path = os.path.join(BASE_DIR, 'Ansjer/file/apns_pem/apns-dev2.pem')
+        # pem_path = os.path.join(BASE_DIR, 'Ansjer/file/apns_pem/apns-loocamccloud.pem')
         print(pem_path)
         response = ResponseObject()
         try:
-            import apns2
-            now_time = int(time.time())
-
-            # cli = apns2.APNSClient(mode="dev", client_cert="/your/path.pem")
-            # alert = apns2.PayloadAlert(body="body!", title="title!")
-            # payload = apns2.Payload(alert=alert)
-            # n = apns2.Notification(payload=payload, priority=apns2.PRIORITY_LOW)
-            # response = cli.push(n=n, device_token="your_token")
-            # assert response.status_code == 200, response.reason
-            # assert response.apns_id
-
-            # cli = apns2.APNSClient(mode="prod", client_cert=pem_path)
-            cli = apns2.APNSClient(mode="dev", client_cert=pem_path, password='111111')
-            push_data = {"alert": "Motion ", "event_time": now_time, "event_type": "51", "msg": "",
-                         "received_at": now_time, "sound": "sound.aif", "uid": "XFDJUHUIOKJHYTGSFFDR", "zpush": "1"}
-            alert = apns2.PayloadAlert(body=json.dumps(push_data), title="title!")
-            payload = apns2.Payload(alert=alert)
-
+            n_time = int(time.time())
+
+            cli = apns2.APNSClient(mode="dev", client_cert=pem_path,
+                                   password='111111')
+            push_data = {"alert": "Motion ", "event_time": n_time, "event_type": 51, "msg": "",
+                         "received_at": n_time, "sound": "sound.aif", "uid": 'XFDJUHUIOKJHYTGSFFDR', "zpush": "1", "channel": 1}
+            alert = apns2.PayloadAlert(body='通道:1 uid:XFDJUHUIOKJHYTGSFFDR', title='ansjer')
+            payload = apns2.Payload(alert=alert, custom=push_data)
             n = apns2.Notification(payload=payload, priority=apns2.PRIORITY_LOW)
             res = cli.push(n=n, device_token=token_val, topic='com.ansjer.loocamccloud')
+            # assert res.status_code == 200, res.reason
+            # assert res.apns_id
             if res.status_code == 200:
                 return response.json(0)
             else:
                 return response.json(404, res.reason)
+
         except Exception as e:
             return response.json(10, repr(e))
 

+ 136 - 0
Controller/UserController.py

@@ -15,6 +15,7 @@ import datetime
 import traceback
 import time
 import simplejson as json
+import requests
 from django.contrib.auth.hashers import make_password, check_password  # 对密码加密模块
 from django.db.models import Q
 from django.http import HttpResponseRedirect
@@ -1373,3 +1374,138 @@ class verifyAuthcode(TemplateView):
         if authcode != resetCode:
             return response.json(121)
         return response.json(0)
+
+
+# 获取验证码
+class wxAuthSignView(TemplateView):
+
+    def post(self, request, *args, **kwargs):
+        request.encoding = 'utf-8'
+        lang = request.POST.get('lang', None)
+        response = ResponseObject(lang)
+        request_dict = request.POST
+        return self.ValidationError(request_dict, response)
+
+    def get(self, request, *args, **kwargs):
+        # Device_User.objects.filter(userEmail='chanjunkai@163.com').delete()
+        request.encoding = 'utf-8'
+        lang = request.GET.get('lang', None)
+        response = ResponseObject(lang)
+        request_dict = request.GET
+        # return self.do_register('157113010663213800138000', '157113010663213800138000', response, 'xx')
+
+        return self.ValidationError(request_dict, response)
+
+    def ValidationError(self, request_dict, response):
+        grant_code = request_dict.get('grant_code', None)  # 微信授权code
+        appBundleID = request_dict.get('appBundleID', None)  # 包名
+        if all([grant_code, appBundleID]):
+            app_config = {
+                'com.ansjer.zccloud': {'appid': 'wx2a9f5ef9baf2760f', 'secret': '5d38c7079676463149ffea593c58f2ed'},
+                # ios
+                'com.ansjer.zccloud_ab': {'appid': 'wx2a9f5ef9baf2760f', 'secret': '5d38c7079676463149ffea593c58f2ed'},
+                # android
+            }
+            if appBundleID in app_config.keys():
+                appid = app_config[appBundleID]['appid']
+                secret = app_config[appBundleID]['secret']
+                # 获取access_token请求
+                at_url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid={appid}&secret={secret}&code={code}&grant_type=authorization_code'.format(
+                    appid=appid, secret=secret, code=grant_code)
+                res_req = requests.get(url=at_url)
+                res_json = res_req.json()
+                print(res_json)
+                if 'access_token' not in res_json.keys():
+                    # 授权过期
+                    return response.json(717)
+                access_token = res_json['access_token']
+                openid = res_json['openid']
+                if access_token and openid:
+                    user_extend_qs = UserExtendModel.objects.filter(authOpenID=openid,authType=1)
+                    if user_extend_qs.exists():
+                        # 如果用户绑定过则直接登录
+                        userID = user_extend_qs[0].userID
+                        user_qs = Device_User.objects.filter(userID=userID)
+                        from var_dump import var_dump
+                        var_dump('lgggin')
+                        return self.do_login(user_qs, response)
+                    else:
+                        # 如果用户为绑定过则创建用户并进行登录返回token
+                        info_url = 'https://api.weixin.qq.com/sns/userinfo?access_token={access_token}&openid={openid}'.format(
+                            access_token=access_token, openid=openid)
+                        res_req = requests.get(url=info_url)
+                        res_json = res_req.json()
+                        print(res_json)
+                        userID = CommonService.getUserID(getUser=False)
+                        nickname = res_json['nickname'] + '_' + CommonService.RandomStr(4)
+                        return self.do_register(userID, nickname, response, appBundleID, openid)
+                else:
+                    return response.json(414, 'access_token,openid')
+            else:
+                return response.json(414, 'appBundleID is wrong!')
+        else:
+            return response.json(414)
+        # if wxcode
+
+    # 登录
+    def do_login(self, user_qs, response):
+        now_time = datetime.datetime.utcnow().replace(tzinfo=utc).astimezone(utc)
+        user_qs.update(last_login=now_time, online=True)
+        userID = user_qs[0].userID
+        print('userID' + userID)
+        tko = TokenObject()
+        user_list = user_qs.values("NickName", "userIconUrl", "userIconPath", "username", "userEmail", "phone")
+        res = tko.generate(data={'userID': userID, 'lang': response.lang, 'user': user_list[0]["username"]})
+        # 增加角色
+        user_qs[0].role.add(Role.objects.get(rid=1))
+        role_dict = ModelService.own_role(userID=userID)
+        res['rid'] = role_dict['rid']
+        res['roleName'] = role_dict['roleName']
+        res['permList'] = ModelService.own_permission(userID)
+        res['userID'] = userID
+        # 昵称,邮箱,电话,刷新,头像
+        userIconPath = str(user_list[0]["userIconPath"])
+        if userIconPath and userIconPath.find('static/') != -1:
+            userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
+            res['userIconUrl'] = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
+        else:
+            res['userIconUrl'] = ''
+        res['NickName'] = user_list[0]["NickName"] if user_list[0]["NickName"] is not None else ''
+        res['username'] = user_list[0]["username"] if user_list[0]["username"] is not None else ''
+        res['userEmail'] = user_list[0]["userEmail"] if user_list[0]["userEmail"] is not None else ''
+        res['phone'] = user_list[0]["phone"] if user_list[0]["phone"] is not None else ''
+        print(res)
+        return response.json(0, res)
+
+    def do_register(self, userID, nickname, response, appBundleId, openid):
+        data_valid = DataValid()
+        if data_valid.name_validate(userID) is not True:
+            return response.json(105)
+        try:
+            users = Device_User.objects.create(
+                username=userID,
+                NickName=nickname,
+                password=make_password('123456'),
+                userID=userID,
+                is_active=True,
+                user_isValid=True,
+            )
+
+            nowTime = int(time.time())
+            UserExtendModel.objects.create(
+                addTime=nowTime,
+                updTime=nowTime,
+                appBundleId=appBundleId,
+                userID_id=users.userID,
+                authType=1,
+                authOpenID=openid
+            )
+        except Exception as e:
+            errorInfo = traceback.format_exc()
+            print(errorInfo)
+            return response.json(424, repr(e))
+        else:
+            user_qs = Device_User.objects.filter(Q(userID=userID))
+            print('---')
+            print(user_qs)
+            return self.do_login(user_qs, response)

+ 13 - 10
Model/models.py

@@ -709,7 +709,9 @@ class UidPushModel(models.Model):
 class UserExtendModel(models.Model):
     id = models.AutoField(primary_key=True, verbose_name='自增id')
     userID = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)
-    appBundleId = models.CharField(blank=True, max_length=32, verbose_name=u'appID')
+    appBundleId = models.CharField(default='', max_length=32, verbose_name=u'appID')
+    authType = models.SmallIntegerField(default=0, verbose_name=0)  # 授权类型 0 非授权,1 微信授权
+    authOpenID = models.CharField(default='', max_length=64, verbose_name='唯一标记')  # 绑定唯一标记
     addTime = models.IntegerField(verbose_name='添加时间', default=0)
     updTime = models.IntegerField(verbose_name='更新时间', default=0)
 
@@ -718,12 +720,13 @@ class UserExtendModel(models.Model):
         verbose_name = '用户扩展信息表'
         verbose_name_plural = verbose_name
         ordering = ('-id',)
-#
-#
-# class SysMass(models.Model):
-#     id = models.AutoField(primary_key=True, verbose_name='主键自增id')
-#     sender = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)  # 发送人
-#     recever = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)  # 发送接受者
-#     msg = models.TextField(blank=True, default='', verbose_name=u'发送内容')
-#     addTime = models.IntegerField(verbose_name='添加时间', default=0)
-#     updTime = models.IntegerField(verbose_name='修改时间', default=0)
+
+
+class SysMassModel(models.Model):
+    id = models.AutoField(primary_key=True, verbose_name='主键自增id')
+    sender = models.ForeignKey(Device_User, to_field='userID', on_delete=models.CASCADE)  # 发送人
+    lang = models.TextField(blank=True, default='', verbose_name=u'语种')
+    recever = models.TextField(blank=True, default='', verbose_name=u'接受者')
+    msg = models.TextField(blank=True, default='', verbose_name=u'发送内容')
+    addTime = models.IntegerField(verbose_name='添加时间', default=0)
+    updTime = models.IntegerField(verbose_name='修改时间', default=0)

+ 2 - 0
Object/ResponseObject.py

@@ -52,6 +52,7 @@ class ResponseObject(object):
             711: 'Do not downgrade',
             712: 'Area needs to be consistent',
             713: 'Storage rules cannot be changed during the validity period',
+            717: 'Authorization expires',
             900: 'There is no information about this version!',
             901: 'Getting URL failure!',
             902: 'No update!',
@@ -105,6 +106,7 @@ class ResponseObject(object):
             711: '不可降级',
             712: '区域不一致',
             713: '有效期内不可更改存储规则',
+            717: '授权过期',
             900: '版本信息不存在',
             901: '获取链接失败',
             902: '无更新!',