V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ccnccy
V2EX  ›  PHP

有没大佬帮忙看看这段 ruby, PHP 要怎么改

  •  
  •   ccnccy · 2018-12-18 13:30:27 +08:00 via iPhone · 3745 次点击
    这是一个创建于 2166 天前的主题,其中的信息可能已经有所发展或是发生改变。
    nonce = SecureRandom.hex
    date = Time.now.httpdate
    canonical_string = "application/json,,#{path},#{date},#{nonce}"
    signature = Base64.strict_encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), user_secret, canonical_string))
    第 1 条附言  ·  2018-12-18 19:12:52 +08:00
    改成下面这样,一直错误,提示
    Parse error: syntax error, unexpected '$payload' (T_VARIABLE)


    $path = "/orders?status=live";

    $nonce = md5(time() . mt_rand(0,1000));
    $dt = new DateTime('UTC');
    $date = $dt->format('D, d M Y H:i:s \G\M\T');
    $api_secret1 = 'xxxx'


    $payload = ["#{$path}","#{$date}","#{$nonce}"];
    $signature = hash_hmac("SHA1", $payload,$api_secret1, true);
    $signature_encoded = $this->base64url_encode($signature);
    12 条回复    2018-12-19 20:57:39 +08:00
    chatfeed
        1
    chatfeed  
       2018-12-18 14:25:51 +08:00
    函数大概用到 random_bytes ,date,bin2hex,hash_hmac,base64_encode
    Citrullus
        2
    Citrullus  
       2018-12-18 16:53:19 +08:00
    虽然从未接触过 Ruby (手动狗头),但是从这段代码上看,这是一个生成签名的片段吧!获取字符串和当前时间等通过 sha1 生成签名再 base64
    lihongjie0209
        3
    lihongjie0209  
       2018-12-18 17:59:52 +08:00
    有什么看不懂的吗?
    TimLang
        4
    TimLang  
       2018-12-18 18:01:26 +08:00
    感觉像微信签名呀。。
    2pang
        5
    2pang  
       2018-12-18 18:32:02 +08:00 via Android
    虽然不会 ruby 但这个代码写的这么通俗 一眼就能看出是做什么的吧
    ccnccy
        6
    ccnccy  
    OP
       2018-12-18 19:13:30 +08:00
    @lihongjie0209
    @2pang
    @chatfeed
    改成下面这样,一直错误,提示
    Parse error: syntax error, unexpected '$payload' (T_VARIABLE)


    $path = "/orders?status=live";

    $nonce = md5(time() . mt_rand(0,1000));
    $dt = new DateTime('UTC');
    $date = $dt->format('D, d M Y H:i:s \G\M\T');
    $api_secret1 = 'xxxx'


    $payload = ["#{$path}","#{$date}","#{$nonce}"];
    $signature = hash_hmac("SHA1", $payload,$api_secret1, true);
    $signature_encoded = $this->base64url_encode($signature);
    2pang
        7
    2pang  
       2018-12-18 19:27:54 +08:00 via Android   ❤️ 1
    Parse error: syntax error, unexpected '$payload' (T_VARIABLE)
    不是写的很清楚么?
    上一行没写分号
    linxu
        8
    linxu  
       2018-12-18 19:28:10 +08:00 via Android   ❤️ 1
    分号少了一个。$api_secret1 = 'xxxx';
    ccnccy
        9
    ccnccy  
    OP
       2018-12-18 20:14:48 +08:00 via iPhone
    感谢楼上 2 位,我再测试测试。
    peterxu
        10
    peterxu  
       2018-12-19 10:47:29 +08:00   ❤️ 1
    上面 ruby 的代码运行结果如下
    ```
    2.4.1 :003 > require 'securerandom'
    => true
    2.4.1 :004 > nonce = SecureRandom.hex
    => "5b6097c4519fb22eb0ae399f0678bd05"
    2.4.1 :005 > require 'time'
    => true
    2.4.1 :006 > date = Time.now.httpdate
    => "Wed, 19 Dec 2018 02:39:32 GMT"
    2.4.1 :007 > path = "path"
    => "path"
    2.4.1 :008 > canonical_string = "application/json,,#{path},#{date},#{nonce}"
    => "application/json,,path,Wed, 19 Dec 2018 02:39:32 GMT,5b6097c4519fb22eb0ae399f0678bd05"
    2.4.1 :009 > require "base64"
    => false
    2.4.1 :010 > user_secret = "user_secret"
    => "user_secret"
    2.4.1 :011 > signature = Base64.strict_encode64(OpenSSL::HMAC.digest(OpenSSL::Digest.new('sha1'), user_secret, canonical_string))
    => "iGwkpjulP43xZqK/h8JBjL9L9ro="
    ```
    为了能跑通,我把 path 和 user_secret 分别给了个值
    path = "path"
    user_secret = "user_secret"
    代码的意思就是
    1、获取一个随机数
    2,获取当前时间的一个 date 格式
    3、拼成一个指定字符串
    4,先使用 sha 算法,再使用 base64 编码
    peterxu
        11
    peterxu  
       2018-12-19 10:48:31 +08:00
    v2ex 不支持 markdown 模式?
    ccnccy
        12
    ccnccy  
    OP
       2018-12-19 20:57:39 +08:00 via iPhone
    楼上的辛苦了! ruby 真漂亮。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2759 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 02:12 · PVG 10:12 · LAX 18:12 · JFK 21:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.