ccnccy
V2EX  ›  PHP

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

  •  
  •   ccnccy · Dec 18, 2018 via iPhone · 4925 views
    This topic created in 2876 days ago, the information mentioned may be changed or developed.
    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))
    Supplement 1  ·  Dec 18, 2018
    改成下面这样,一直错误,提示
    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 replies  •  2018-12-19 20:57:39 +08:00
    chatfeed
    chatfeed
    Dec 18, 2018
    1
    函数大概用到 random_bytes ,date,bin2hex,hash_hmac,base64_encode
    Citrullus
    Citrullus
    Dec 18, 2018
    2
    虽然从未接触过 Ruby (手动狗头),但是从这段代码上看,这是一个生成签名的片段吧!获取字符串和当前时间等通过 sha1 生成签名再 base64
    lihongjie0209
    lihongjie0209
    Dec 18, 2018
    3
    有什么看不懂的吗?
    TimLang
    TimLang
    Dec 18, 2018
    4
    感觉像微信签名呀。。
    2pang
    2pang
    Dec 18, 2018 via Android
    5
    虽然不会 ruby 但这个代码写的这么通俗 一眼就能看出是做什么的吧
    ccnccy
    ccnccy
    OP
    Dec 18, 2018
    6
    @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
    2pang
    Dec 18, 2018 via Android❤️1
    7
    Parse error: syntax error, unexpected '$payload' (T_VARIABLE)
    不是写的很清楚么?
    上一行没写分号
    linxu
    linxu
    Dec 18, 2018 via Android❤️1
    8
    分号少了一个。$api_secret1 = 'xxxx';
    ccnccy
    ccnccy
    OP
    Dec 18, 2018 via iPhone
    9
    感谢楼上 2 位,我再测试测试。
    peterxu
    peterxu
    Dec 19, 2018❤️1
    10
    上面 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
    peterxu
    Dec 19, 2018
    11
    v2ex 不支持 markdown 模式?
    ccnccy
    ccnccy
    OP
    Dec 19, 2018 via iPhone
    12
    楼上的辛苦了! ruby 真漂亮。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1745 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 23:58 · PVG 07:58 · LAX 15:58 · JFK 18:58
    ♥ Do have faith in what you're doing.