Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Помогите пожалуйста с "переводом" php - asp.net


Автор: JaguarSmith 6.6.2012, 14:17
Здравствуйте люди добрые!

Есть такой замечательный сервис ecwid, а в нем есть замечательная возможность SSO (http://kb.ecwid.com/w/page/43883623/Single%20Sign-On%20API документация и примеры у них даны под разработку на php.
Так вот - понадобилось мне реализовать это самое SSO для модуля dotnetnuke (asp.net) и вот что у меня получилось:
исходный код на php
Код

<?php
if (!$_REQUEST['logoff']) {
        $profile = array(
                'appId' => "My cool app",
                'userId' => "234",
                'profile' => array(
                        'email' => "[email protected]",
                        'billingPerson' => array(
                                'name' => "Tester",
                                'companyName' => "Company Name",
                                'street' => "Street",
                                'city' => "City",
                                'countryCode' => "US",
                                'postalCode' => "10001",
                                'stateOrProvinceCode' => "NY"
                        )
                )
        );
        $message = json_encode($profile);
        $message = base64_encode($message);
        $timestamp = time();
        $hmac = hash_hmac('sha1', "$message $timestamp", "A1Lu7ANIhKD6");
        echo "var ecwid_sso_profile='$message $hmac $timestamp'";
} else {
        echo "var ecwid_sso_profile=''";
}
?>

мой перевод на vb.net
Код

            Dim profile As New _profile 
            profile.appId = "my_cool_test_app"
            profile.userId = "465"
            profile.profile.email = "[email protected]"
            profile.profile.billingPerson = New Person With { _
               .city = "Москва", _
               .companyName = "zoo", _
               .countryCode = "US", _
               .name = "jaggy_Smt", _
               .postalCode = "10001", _
               .stateOrProvinceCode = "NY", _
               .street = "Street"}
           
            Dim timestamp As String = DateDiff("s", "01/01/1970 00:00:00", Now()).ToString
            Dim message As String = profile.ToJson

            ' до этого момента всё работает правильно!

            message = Convert.ToBase64String(Encoding.Unicode.GetBytes(message))

            Dim SSO_Secret As String = "A1Lu7ANIhKD6"
            Dim myhmacsha1 As New HMACSHA1(Encoding.Unicode.GetBytes(SSO_Secret))
            Dim hashValue As Byte() = myhmacsha1.ComputeHash(Encoding.Unicode.GetBytes(message + " " + timestamp))


            Dim hmac As String = Convert.ToBase64String(hashValue)
            Dim ecwid_sso_profile As String = message + " " + hmac + " " + timestamp
            SSO_out.Text = ecwid_sso_profile


всё ломается видимо на попытке привети строку к кодировке base64 я пробовал менять кодировку Encoding.Unicode.GetBytes на Encoding.utf8.GetBytes но это не помогло.

Помогите пожалуйста с переводом!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)