服务器端problemt:PHP推送消息到黑莓 [英] server-side problemt: PHP Push message to Blackberry

查看:204
本文介绍了服务器端problemt:PHP推送消息到黑莓的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用从客户端code <一个href=\"http://supportforums.blackberry.com/t5/BlackBerry-Push-Development/Simplified-BIS-Push-client-sample/ta-p/693857\" rel=\"nofollow\">http://supportforums.blackberry.com/t5/BlackBerry-Push-Development/Simplified-BIS-Push-client-sample/ta-p/693857对黑莓开发人员支持论坛。

我能够获得黑莓推送服务器注册响应,但我无法从黑莓推送服务器的推送消息。服务器端code是内置的PHP。当我按一下按钮发送,我得到这个错误

  ---------------错误---------------------- -----------------------
    XML解析器发生错误
    无效的文件结束
    响应
--------------- PHP code ------------------------------ ------------------------------------
    &LT; PHP
    如果($ _ POST){
        // APP ID由RIM提供
        $的appid ='XXXXXXXXXX';
        //密码由RIM提供
        $密码='XXXXXXXXXXXXXXXX';        //时间戳之前交付
        $ deliverbefore = gmdate('Y-M-D \\ TH:我:■\\ Z',的strtotime('+ 5分钟));        //地址的数组必须是PIN格式或push_all
        $ addresstosendto [] ='push_all';        $地址='';
        的foreach($ addresstosendto为$值){
            $地址='&LT;地址的地址值='。$价值。'/&GT;';
        }        //创建一个新的资源卷曲
        $ ERR = FALSE;
        $ CH = curl_init();
        $信息id = microtime中(真);        $数据='--mPsbVQo0a68eIL3OAxnm。 \\ r \\ n。
        内容类型:应用程序/ xml的;字符集= UTF-8。 \\ r \\ n \\ r \\ n。
        '&LT; XML版本=1.0&GT?;
        !&LT; D​​OCTYPE PAP PUBLIC - // WAPFORUM // DTD PAP 2.1 // ENhttp://www.openmobilealliance.org/tech/DTD/pap_2.1.dtd\">
        &LT;&PAP GT;
        &LT;推消息推送-ID ='。$信息id'。提供-前时间戳='$ deliverbefore。'来源引用='$的appid。'&GT;'
        。 $地址。
        '&LT;质量的服务交付法=未经证实的/&GT;
        &LT; /推送消息&GT;
        &LT; / PAP&GT;' 。 \\ r \\ n。
        --mPsbVQo0a68eIL3OAxnm。 \\ r \\ n。
        '内容类型:text / plain的。 \\ r \\ n。
        推邮件ID:。 $邮件ID。 \\ r \\ n \\ r \\ n。
        的stripslashes($ _ POST ['消息'])。 \\ r \\ n。
        --mPsbVQo0a68eIL3OAxnm--。 \\ n \\ r;        //设置URL和其他适当的选项
        curl_setopt($ CH,CURLOPT_URLhttps://pushapi.eval.blackberry.com/mss/PD_pushRequest);
        curl_setopt($ CH,CURLOPT_HEADER,FALSE);
        curl_setopt($ CH,CURLOPT_USERAGENT,Hallgren网络BB推送服务器/ 1.0);
        curl_setopt($ CH,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
        curl_setopt($ CH,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);
        curl_setopt($ CH,CURLOPT_USERPWD,$的appid:$密码);
        curl_setopt($ CH,CURLOPT_POST,1);
        curl_setopt($ CH,CURLOPT_POSTFIELDS,$数据);
        curl_setopt($ CH,CURLOPT_RETURNTRANSFER,真正的);
        curl_setopt($ CH,CURLOPT_HTTPHEADER,阵列(内容类型:多重/相关的;边界= mPsbVQo0a68eIL3OAxnm;类型=应用程序/ XML,接受:text / html的,图像/ GIF,图像/ JPEG,*; Q = 0.2 * / *; q = 0.2,连接:保持活动));        // URL抓取,并将它传递给浏览器
        $ XMLDATA = curl_exec($ CH);        //关闭卷曲的资源,并释放系统资源
        curl_close($ CH);        //开始解析响应转换成XML数据,我们可以读取和输出
        $ P = xml_parser_create();
        xml_parse_into_struct($ P,$ XMLDATA,$瓦尔斯);
        $错误code = xml_get_error_ code($ P);
        如果($错误code&0){
            $ ERR = TRUE;
        }
        xml_parser_free($ p)的;        呼应我们的PUSH-ID:。 $邮件ID。 &LT; BR \\&GT; \\ N的;
        如果(!$ ERR和放大器;&安培; $瓦尔斯[1] ['标签'] =='PUSH-RESPONSE'){
            回声PUSH-ID:。 $瓦尔斯[1] ['属性'] ['PUSH-ID。 &LT; BR \\&GT; \\ N的;
            呼应回复时间:。 $瓦尔斯[1] ['属性'] [回复时间。 &LT; BR \\&GT; \\ N的;
            回声响应code:。 $瓦尔斯[2] ['属性'] ['code'。 &LT; BR \\&GT; \\ N的;
            回声响应DESC:。 $瓦尔斯[2] ['属性'] ['DESC']。 &LT; BR \\&GT; \\ N的;
        } ELSEIF($ ERR){
            呼应'&LT; P&gt;一种XML解析器发生错误&LT; / P&GT;' 。 \\ n;
            呼应'&LT; pre&GT;' 。 xml_error_string($错误code)&LT; / pre&GT; \\ N。
            呼应'&LT; P&GT;响应&LT; / P&GT;' 。 \\ n;
            呼应'&LT; pre&GT;' 。 $ XMLDATA。 '&LT; / pre&GT;' 。 \\ n
        }其他{
            呼应'&LT; P&gt;一种错误发生与LT; / P&GT;' 。 \\ n;
            回声错误code:。 $瓦尔斯[1] ['属性'] ['code'。 &LT; BR \\&GT; \\ N的;
            回声'错误DESC:。 $瓦尔斯[1] ['属性'] ['DESC']。 &LT; BR \\&GT; \\ N的;
        }
    }其他{
        showhtml();
    }    功能showhtml(){
        ?&GT;
    &LT; HTML和GT;
    &LT; HEAD&GT;&LT;标题&GT; BlackBerry推送Bishes!&LT; /标题&GT;&LT; /头&GT;
    &LT;身体GT;
    &LT;形式方法=POSTACTION =&LT; PHP的echo $ _ SERVER ['PHP_SELF'];?&GT;&GT;
    &LT; P&gt;消息推:LT; / P&GT;
    &LT; textarea的名称=消息行=30COLS =50&GT;&LT; / textarea的&GT;
    &LT; P&GT;&LT; / P&GT;&LT;输入类型=提交值=推数据&GT;&LT; / P&GT;
    &LT; /表及GT;
    &LT; /身体GT;
    &LT; / HTML&GT;
    &LT; PHP
    }
    ?&GT;


解决方案

我能够加入前的下面一行将邮件推送到黑莓手机的 curl_exec

  curl_setopt($ CH,CURLOPT_SSL_VERIFYPEER,FALSE);

下面是完整的code:

 &LT; PHP
如果($ _ POST){
    // APP ID由RIM提供    $的appid ='XXXXXXXXXX';
    //密码由RIM提供
    $密码='XXXXXXXXXXXXXXXX';    //时间戳之前交付
    $ deliverbefore = gmdate('Y-M-D \\ TH:我:■\\ Z',的strtotime('+ 5分钟));    //地址的数组必须是PIN格式或push_all
    $ addresstosendto [] ='push_all';    $地址='';
    的foreach($ addresstosendto为$值){
        $地址='&LT;地址的地址值='。$价值。'/&GT;';
    }    //创建一个新的资源卷曲
    $ ERR = FALSE;
    $ CH = curl_init();
    $信息id = microtime中(真);    $数据='--mPsbVQo0a68eIL3OAxnm。 \\ r \\ n。
    内容类型:应用程序/ xml的;字符集= UTF-8。 \\ r \\ n \\ r \\ n。
    '&LT; XML版本=1.0&GT?;
    !&LT; D​​OCTYPE PAP PUBLIC - // WAPFORUM // DTD PAP 2.1 // ENhttp://www.openmobilealliance.org/tech/DTD/pap_2.1.dtd\">
    &LT;&PAP GT;
    &LT;推消息推送-ID ='。$信息id'。提供-前时间戳='$ deliverbefore。'来源引用='$的appid。'&GT;'
    。 $地址。
    '&LT;质量的服务交付法=未经证实的/&GT;
    &LT; /推送消息&GT;
    &LT; / PAP&GT;' 。 \\ r \\ n。
    --mPsbVQo0a68eIL3OAxnm。 \\ r \\ n。
    '内容类型:text / plain的。 \\ r \\ n。
    推邮件ID:。 $邮件ID。 \\ r \\ n \\ r \\ n。
    的stripslashes($ _ POST ['消息'])。 \\ r \\ n。
    --mPsbVQo0a68eIL3OAxnm--。 \\ n \\ r;    //设置URL和其他适当的选项
    curl_setopt($ CH,CURLOPT_URLhttps://pushapi.eval.blackberry.com/mss/PD_pushRequest);
    curl_setopt($ CH,CURLOPT_HEADER,FALSE);
    curl_setopt($ CH,CURLOPT_USERAGENT,Hallgren网络BB推送服务器/ 1.0);
    curl_setopt($ CH,CURLOPT_HTTP_VERSION,CURL_HTTP_VERSION_1_1);
    curl_setopt($ CH,CURLOPT_HTTPAUTH,CURLAUTH_BASIC);
    curl_setopt($ CH,CURLOPT_USERPWD,$的appid:$密码);
    curl_setopt($ CH,CURLOPT_POST,1);
    curl_setopt($ CH,CURLOPT_POSTFIELDS,$数据);
    curl_setopt($ CH,CURLOPT_RETURNTRANSFER,真正的);
    curl_setopt($ CH,CURLOPT_HTTPHEADER,阵列(内容类型:多重/相关的;边界= mPsbVQo0a68eIL3OAxnm;类型=应用程序/ XML,接受:text / html的,图像/ GIF,图像/ JPEG,*; Q = 0.2 * / *; q = 0.2,连接:保持活动));
    curl_setopt($ CH,CURLOPT_SSL_VERIFYPEER,FALSE);    // URL抓取,并将它传递给浏览器
    $ XMLDATA = curl_exec($ CH);    //关闭卷曲的资源,并释放系统资源
    curl_close($ CH);    //开始解析响应转换成XML数据,我们可以读取和输出
    $ P = xml_parser_create();
    xml_parse_into_struct($ P,$ XMLDATA,$瓦尔斯);
    $错误code = xml_get_error_ code($ P);
    如果($错误code&0){
        $ ERR = TRUE;
    }
    xml_parser_free($ p)的;    呼应我们的PUSH-ID:。 $邮件ID。 &LT; BR \\&GT; \\ N的;
    如果(!$ ERR和放大器;&安培; $瓦尔斯[1] ['标签'] =='PUSH-RESPONSE'){
        回声PUSH-ID:。 $瓦尔斯[1] ['属性'] ['PUSH-ID。 &LT; BR \\&GT; \\ N的;
        呼应回复时间:。 $瓦尔斯[1] ['属性'] [回复时间。 &LT; BR \\&GT; \\ N的;
        回声响应code:。 $瓦尔斯[2] ['属性'] ['code'。 &LT; BR \\&GT; \\ N的;
        回声响应DESC:。 $瓦尔斯[2] ['属性'] ['DESC']。 &LT; BR \\&GT; \\ N的;
    } ELSEIF($ ERR){
        呼应'&LT; P&gt;一种XML解析器发生错误&LT; / P&GT;' 。 \\ n;
        呼应'&LT; pre&GT;' 。 xml_error_string($错误code)&LT; / pre&GT; \\ N。
        呼应'&LT; P&GT;响应&LT; / P&GT;' 。 \\ n;
        呼应'&LT; pre&GT;' 。 $ XMLDATA。 '&LT; / pre&GT;' 。 \\ n;
    }其他{
        呼应'&LT; P&gt;一种错误发生与LT; / P&GT;' 。 \\ n;
        回声错误code:。 $瓦尔斯[1] ['属性'] ['code'。 &LT; BR \\&GT; \\ N的;
        回声'错误DESC:。 $瓦尔斯[1] ['属性'] ['DESC']。 &LT; BR \\&GT; \\ N的;
    }
}其他{
    showhtml();
}功能showhtml(){
    ?&GT;
&LT; HTML和GT;
&LT; HEAD&GT;&LT;标题&GT; BlackBerry推送Bishes!&LT; /标题&GT;&LT; /头&GT;
&LT;身体GT;
&LT;形式方法=POSTACTION =&LT; PHP的echo $ _ SERVER ['PHP_SELF'];?&GT;&GT;
&LT; P&gt;消息推:LT; / P&GT;
&LT; textarea的名称=消息行=30COLS =50&GT;&LT; / textarea的&GT;
&LT; P&GT;&LT; / P&GT;&LT;输入类型=提交值=推数据&GT;&LT; / P&GT;
&LT; /表及GT;
&LT; /身体GT;
&LT; / HTML&GT;
&LT; PHP
}
?&GT;

I am using the client side code from http://supportforums.blackberry.com/t5/BlackBerry-Push-Development/Simplified-BIS-Push-client-sample/ta-p/693857 on the BlackBerry Developer Support forums.

I am able to get a registration response from the BlackBerry push server, however I am unable to get any push messages from the BlackBerry push server. The server side code is built in PHP. When I click on the button send, I obtain this error

---------------error---------------------------------------------
    An XML parser error has occured
    Invalid document end
    Response
---------------PHP code------------------------------------------------------------------
    <?php
    if ($_POST) {
        // APP ID provided by RIM
        $appid = 'xxxxxxxxxx';
        // Password provided by RIM
        $password = 'xxxxxxxxxxxxxxxx';

        //Deliver before timestamp
        $deliverbefore = gmdate('Y-m-d\TH:i:s\Z', strtotime('+5 minutes'));

        //An array of address must be in PIN format or "push_all"
        $addresstosendto[] = 'push_all';

        $addresses = '';
        foreach ($addresstosendto as $value) {
            $addresses .= '<address address-value="' . $value . '"/>';
        }

        // create a new cURL resource
        $err = false;
        $ch = curl_init();
        $messageid = microtime(true);

        $data = '--mPsbVQo0a68eIL3OAxnm'. "\r\n" .
        'Content-Type: application/xml; charset=UTF-8' . "\r\n\r\n" .
        '<?xml version="1.0"?>
        <!DOCTYPE pap PUBLIC "-//WAPFORUM//DTD PAP 2.1//EN" "http://www.openmobilealliance.org/tech/DTD/pap_2.1.dtd">
        <pap>
        <push-message push-id="' . $messageid . '" deliver-before-timestamp="' . $deliverbefore . '" source-reference="' . $appid . '">'
        . $addresses .
        '<quality-of-service delivery-method="unconfirmed"/>
        </push-message>
        </pap>' . "\r\n" .
        '--mPsbVQo0a68eIL3OAxnm' . "\r\n" .
        'Content-Type: text/plain' . "\r\n" .
        'Push-Message-ID: ' . $messageid . "\r\n\r\n" .
        stripslashes($_POST['message']) . "\r\n" .
        '--mPsbVQo0a68eIL3OAxnm--' . "\n\r";

        // set URL and other appropriate options
        curl_setopt($ch, CURLOPT_URL, "https://pushapi.eval.blackberry.com/mss/PD_pushRequest");
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_USERAGENT, "Hallgren Networks BB Push Server/1.0");
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        curl_setopt($ch, CURLOPT_USERPWD, $appid . ':' . $password);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: multipart/related; boundary=mPsbVQo0a68eIL3OAxnm; type=application/xml", "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2", "Connection: keep-alive"));

        // grab URL and pass it to the browser
        $xmldata = curl_exec($ch);

        // close cURL resource, and free up system resources
        curl_close($ch);

        //Start parsing response into XML data that we can read and output
        $p = xml_parser_create();
        xml_parse_into_struct($p, $xmldata, $vals);
        $errorcode = xml_get_error_code($p);
        if ($errorcode > 0) {
            $err = true;
        }
        xml_parser_free($p);

        echo 'Our PUSH-ID: ' . $messageid . "<br \>\n";
        if (!$err && $vals[1]['tag'] == 'PUSH-RESPONSE') {
            echo 'PUSH-ID: ' . $vals[1]['attributes']['PUSH-ID'] . "<br \>\n";
            echo 'REPLY-TIME: ' . $vals[1]['attributes']['REPLY-TIME'] . "<br \>\n";
            echo 'Response CODE: ' . $vals[2]['attributes']['CODE'] . "<br \>\n";
            echo 'Response DESC: ' . $vals[2]['attributes']['DESC'] . "<br \> \n";
        } elseif ($err) {
            echo '<p>An XML parser error has occured</p>' . "\n";
            echo '<pre>' . xml_error_string($errorcode) ."</pre>\n";
            echo '<p>Response</p>' . "\n";
            echo '<pre>' . $xmldata . '</pre>' . "\n"
        } else {
            echo '<p>An error has occured</p>' . "\n";
            echo 'Error CODE: ' . $vals[1]['attributes']['CODE'] . "<br \>\n";
            echo 'Error DESC: ' . $vals[1]['attributes']['DESC'] . "<br \>\n";
        }
    } else {
        showhtml();
    }

    function showhtml() {
        ?>
    <html>
    <head><title>Blackberry PUSH Bishes!!!</title></head>
    <body>
    <form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
    <p>Message to push:</p>
    <textarea name="message" rows="30" cols="50"></textarea>
    <p></p><input type="submit" value="Push Data"></p>
    </form>
    </body>
    </html>
    <?php
    }
    ?>

解决方案

I was able to push messages to my BlackBerry by adding the following line before curl_exec.

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Here is the complete code:

<?php
if ($_POST) {
    // APP ID provided by RIM

    $appid = 'xxxxxxxxxx';
    // Password provided by RIM
    $password = 'xxxxxxxxxxxxxxxx';

    //Deliver before timestamp
    $deliverbefore = gmdate('Y-m-d\TH:i:s\Z', strtotime('+5 minutes'));

    //An array of address must be in PIN format or "push_all"
    $addresstosendto[] = 'push_all';

    $addresses = '';
    foreach ($addresstosendto as $value) {
        $addresses .= '<address address-value="' . $value . '"/>';
    }

    // create a new cURL resource
    $err = false;
    $ch = curl_init();
    $messageid = microtime(true);

    $data = '--mPsbVQo0a68eIL3OAxnm'. "\r\n" .
    'Content-Type: application/xml; charset=UTF-8' . "\r\n\r\n" .
    '<?xml version="1.0"?>
    <!DOCTYPE pap PUBLIC "-//WAPFORUM//DTD PAP 2.1//EN" "http://www.openmobilealliance.org/tech/DTD/pap_2.1.dtd">
    <pap>
    <push-message push-id="' . $messageid . '" deliver-before-timestamp="' . $deliverbefore . '" source-reference="' . $appid . '">'
    . $addresses .
    '<quality-of-service delivery-method="unconfirmed"/>
    </push-message>
    </pap>' . "\r\n" .
    '--mPsbVQo0a68eIL3OAxnm' . "\r\n" .
    'Content-Type: text/plain' . "\r\n" .
    'Push-Message-ID: ' . $messageid . "\r\n\r\n" .
    stripslashes($_POST['message']) . "\r\n" .
    '--mPsbVQo0a68eIL3OAxnm--' . "\n\r";

    // set URL and other appropriate options
    curl_setopt($ch, CURLOPT_URL, "https://pushapi.eval.blackberry.com/mss/PD_pushRequest");
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_USERAGENT, "Hallgren Networks BB Push Server/1.0");
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
    curl_setopt($ch, CURLOPT_USERPWD, $appid . ':' . $password);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: multipart/related; boundary=mPsbVQo0a68eIL3OAxnm; type=application/xml", "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2", "Connection: keep-alive"));
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    // grab URL and pass it to the browser
    $xmldata = curl_exec($ch);

    // close cURL resource, and free up system resources
    curl_close($ch);

    //Start parsing response into XML data that we can read and output
    $p = xml_parser_create();
    xml_parse_into_struct($p, $xmldata, $vals);
    $errorcode = xml_get_error_code($p);
    if ($errorcode > 0) {
        $err = true;
    }
    xml_parser_free($p);

    echo 'Our PUSH-ID: ' . $messageid . "<br \>\n";
    if (!$err && $vals[1]['tag'] == 'PUSH-RESPONSE') {
        echo 'PUSH-ID: ' . $vals[1]['attributes']['PUSH-ID'] . "<br \>\n";
        echo 'REPLY-TIME: ' . $vals[1]['attributes']['REPLY-TIME'] . "<br \>\n";
        echo 'Response CODE: ' . $vals[2]['attributes']['CODE'] . "<br \>\n";
        echo 'Response DESC: ' . $vals[2]['attributes']['DESC'] . "<br \> \n";
    } elseif ($err) {
        echo '<p>An XML parser error has occured</p>' . "\n";
        echo '<pre>' . xml_error_string($errorcode) ."</pre>\n";
        echo '<p>Response</p>' . "\n";
        echo '<pre>' . $xmldata . '</pre>' . "\n";
    } else {
        echo '<p>An error has occured</p>' . "\n";
        echo 'Error CODE: ' . $vals[1]['attributes']['CODE'] . "<br \>\n";
        echo 'Error DESC: ' . $vals[1]['attributes']['DESC'] . "<br \>\n";
    }
} else {
    showhtml();
}

function showhtml() {
    ?>
<html>
<head><title>Blackberry PUSH Bishes!!!</title></head>
<body>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF'];?>">
<p>Message to push:</p>
<textarea name="message" rows="30" cols="50"></textarea>
<p></p><input type="submit" value="Push Data"></p>
</form>
</body>
</html>
<?php
}
?>

这篇关于服务器端problemt:PHP推送消息到黑莓的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆