New APNS Provider API and PHP

前端 未结 7 1233
余生分开走
余生分开走 2020-12-08 01:10

I started creating some code based upon this for sending push notifications from PHP.

However now that I have understood there is a new API which utilizes HTTP/2 and

7条回答
  •  伪装坚强ぢ
    2020-12-08 01:37

    I'm using CentOS 6 and the way to solve was to install from source cURL and OpenSSL.

    It may look very simple but it took me 3 days to figure out the right configuration for the packages so I think I can help someone by posting what I did here.

    It proved a little tricky for me since I'm not used to install packages from source, but I now can connect to APNs using HTTPS over HTTP/2.

    The details of what I did is here:

    1. Download and uncompress cURL and OpenSSL:

      wget https://curl.haxx.se/download/curl-7.47.1.tar.gz
      wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz
      
    2. Configure OpenSSL with the following flags (I'm not sure what they do, but is what worked for me):

      export CXXFLAGS="$CXXFLAGS -fPIC"
      ./config zlib enable-ssl3 enable-shared
      
    3. make and install OpenSSL

    4. Configure cURL with the following flag:

      ./configure --with-ssl=/usr/local/ssl/
      
    5. Make and install cURL

    6. set LD_LIBRARY_PATH to /usr/local/ssl/lib/

      export LD_LIBRARY_PATH=/usr/local/ssl/lib/                  
      
    7. Test

      /usr/local/bin/curl -v -d '{"aps":{"alert":"hi","sound":"default"}}' --cert cert.crt --key cert.key -H "apns-topic: topics" --http2 https://api.development.push.apple.com:443/3/device/00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0
      

    The result:

    *   Trying 17.172.238.203...
    * Connected to api.development.push.apple.com (17.172.238.203) port 443 (#0)
    * ALPN, offering h2
    * ALPN, offering http/1.1
    * Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
    * successfully set certificate verify locations:
    *   CAfile: /etc/pki/tls/certs/ca-bundle.crt
      CApath: none
    * TLSv1.2 (OUT), TLS header, Certificate Status (22):
    * TLSv1.2 (OUT), TLS handshake, Client hello (1):
    * TLSv1.2 (IN), TLS handshake, Server hello (2):
    * TLSv1.2 (IN), TLS handshake, Certificate (11):
    * TLSv1.2 (IN), TLS handshake, Server key exchange (12):
    * TLSv1.2 (IN), TLS handshake, Request CERT (13):
    * TLSv1.2 (IN), TLS handshake, Server finished (14):
    * TLSv1.2 (OUT), TLS handshake, Certificate (11):
    * TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
    * TLSv1.2 (OUT), TLS handshake, CERT verify (15):
    * TLSv1.2 (OUT), TLS change cipher, Client hello (1):
    * TLSv1.2 (OUT), TLS handshake, Finished (20):
    * TLSv1.2 (IN), TLS change cipher, Client hello (1):
    * TLSv1.2 (IN), TLS handshake, Finished (20):
    * SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
    * ALPN, server accepted to use h2
    * Server certificate:
    *  subject: CN=api.development.push.apple.com; OU=management:idms.group.533599; O=Apple Inc.; ST=California; C=US
    *  start date: Jun 19 01:49:43 2015 GMT
    *  expire date: Jul 18 01:49:43 2017 GMT
    *  subjectAltName: host "api.development.push.apple.com" matched cert's "api.development.push.apple.com"
    *  issuer: CN=Apple IST CA 2 - G1; OU=Certification Authority; O=Apple Inc.; C=US
    *  SSL certificate verify ok.
    * Using HTTP2, server supports multi-use
    * Connection state changed (HTTP/2 confirmed)
    * TCP_NODELAY set
    * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
    * Using Stream ID: 1 (easy handle 0x1091110)
    > POST /3/device/00fc13adff785122b4ad28809a3420982341241421348097878e577c991de8f0 HTTP/1.1
    > Host: api.development.push.apple.com
    > User-Agent: curl/7.48.0
    > Accept: */*
    > apns-topic: topics
    > Content-Length: 40
    > Content-Type: application/x-www-form-urlencoded
    >
    * Connection state changed (MAX_CONCURRENT_STREAMS updated)!
    * We are completely uploaded and fine
    < HTTP/2.0 400
    <
    * Connection #0 to host api.development.push.apple.com left intact
    {"reason":"BadDeviceToken"}
    

    As you can see, I got rid of the ugly

    ▒@@▒HTTP/2 client preface string missing or corrupt. Hex dump for received bytes: 504f5354202f332f6465766963652f746573742048545450
    

提交回复
热议问题