Roku Developer Program

Developers and content creators—a complete solution for growing an audience directly.
cancel
Showing results for 
Search instead for 
Did you mean: 
soporte
Level 7

BRIGHTSCRIPT: ERROR: ParseJSON: Data is empty with url https

Hello everyone, 
I want to implement ssl and I have this error

Url verifyuser with https gives me this error: data empty
With only http  works fine 


------ Running dev 'app tv' main ------

Url verifyuser = https://mychanneltest.com/RokuDev/verify_user.php?user=test&pass=test&idu=1GN63R123456&d=Roku%203
BRIGHTSCRIPT: ERROR: ParseJSON: Data is empty: pkg:/source/conexionserver.brs
(228)



function verify_user(user As String, pass As String) As Object
    request = CreateObject("roUrlTransfer")
    user = getStrValFromReg("user_apptv", "data_apptv")
    pass = getStrValFromReg("pass_apptv", "data_apptv")
    url = UrlServer()+"/RokuDev/verify_user.php?user=" + urlencode(user) + "&pass=" + urlencode(pass) + "&idu=" + GetDeviceESN() + "&d="+ urlencode(device())
    print "Url verify_user = "; url
    ba = CreateObject("roByteArray") 
    ba.FromAsciiString(user+":"+pass) 
    request.AddHeader("X-Roku-Reserved-Dev-Id", "6874f4tg626d99c29b30a689254ed2baa6252g11")
    request.AddHeader("X-Content", ba.ToBase64String())    
    request.SetUrl(url)
    html = request.GetToString()
    data = html.Trim() 
    json = ParseJSON(data)                                                      

    if json <> invalid then
        'print "data = "; json.mensaje
        return json
    else
        return []
    end if

End Function


I read that I have to add in apptv the certificate file (pkg: /cert/cert.pem) 

I have these 3 files on my server
Which of these 3 files do I need to add ?

        SSLCertificateKeyFile /etc/ssl/ssl.key/michannel.key
        SSLCertificateFile /etc/ssl/ssl.crt/d2a8843b0a103367.crt
        SSLCertificateChainFile /etc/ssl/ssl.crt/gd_bundle-g2-g1.crt

Do I need to add a special roku certificate? 
And if so, where do I download it (In sdk I did not find it)? 

thanks in advanced ¡
0 Kudos
5 Replies
destruk
Level 10

Re: BRIGHTSCRIPT: ERROR: ParseJSON: Data is empty with url https

Right, keep using the serial number to verify your users...
0 Kudos
soporte
Level 7

Re: BRIGHTSCRIPT: ERROR: ParseJSON: Data is empty with url https

"destruk" wrote:
Right, keep using the serial number to verify your users...

It is correct, I want to continue to use the serial number to verify  users only with ssl
thanks for your help destruk 
please someone who realy want help me with this topic

Hello everyone, 
I want to implement ssl and I have this error
Url verifyuser with https gives me this error: data empty
0 Kudos
Roku Employee
Roku Employee

Re: BRIGHTSCRIPT: ERROR: ParseJSON: Data is empty with url https

The reason you shouldn't rely on device ID is because people buy new players and give away the old ones, so the unit S/N is not 1:1 mapping to account. Instead it is better to store a token in the registry when initially the device is linked to account and pass that. The registry would be deleted on factory reset or channel deletion, resulting in auto-unlinking of the device.

If i remember, there is no default certificates file, so you have to provide one yourself setCertificatesFile() (that may have changed - s/o correct me?):
video.Addheader("x-roku-reserved-dev-id", "") ' please re-read docs on this, 2nd param ignored for x-roku-reserved-dev-id' 
video.SetCertificatesFile("pkg:/source/testCA.CRT")
video.InitClientCertificates()
0 Kudos
belltown
Level 7

Re: BRIGHTSCRIPT: ERROR: ParseJSON: Data is empty with url https

"soporte" wrote:

please someone who realy want help me with this topic

Hello everyone, 
I want to implement ssl and I have this error
Url verifyuser with https gives me this error: data empty


After creating the roUrlTransfer object you need to call SetCertificatesFile on that object, specifying a file containing the certificate chain (bundle) used to verify your server certificate.

If your server certificate is signed by a well-known, trusted certificate authority, then you can use Roku's standard certificate file as follows:

request.SetCertificatesFile("common:/certs/ca-bundle.crt")

If your server certificate is signed by other Root/Intermediate CAs, then you need to supply your own certificate file containing the certificate chain used to verify your server certificate. I'm guessing that in your case it would be the SSLCertificateChainFile: /etc/ssl/ssl.crt/gd_bundle-g2-g1.crt. If so, copy that file into your Roku channel's package directory, e.g. into a folder named certs, and specify the location of the file as follows:

request.SetCertificatesFile("pkg:/certs/gd_bundle-g2-g1.crt")

The bundle file should be in PEM format, i.e. a base-64 encoded text file containing a concatenation of certificates with each certificate surrounded by:

-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----

Note, you don't need to call InitClientCertificates() unless your server is configured to verify that the requests are coming from an actual Roku device (Client Authentication). If your server does perform this check, then you'd also need to copy the Roku Corp's SDK public key file, cacert.pem, into your server. Similarly, there is no need to call AddHeader("X-Roku-Reserved-Dev-Id") unless your server explicitly needs to check the developer id.
https://github.com/belltown/
0 Kudos
destruk
Level 10

Re: BRIGHTSCRIPT: ERROR: ParseJSON: Data is empty with url https

If you are making channels to make money, then securing your users' financial information ought to be high on your list of priorities.  HTTPS is alright for transactions, however, to give the keys away with the store relying on the serial number, mac id, or other static information that can't be wiped from the device itself is stupid.  Maybe you should add a disclaimer stating that their credit cards and identifying information will be permanently attached to their roku device - I'm sure letting them know would be appreciated.
0 Kudos