PHP

时间:2017-02-23 10:39:00

标签: php sha256

Vungle没有任何PHP示例代码。我的游戏运行在PHP上,我不想使用客户端回调。

他们有一些指示: 我们有一个指南如何验证您的回调如下:

通过将您的密钥与以冒号分隔的事务ID连接来创建原始事务验证字符串: transactionString = secretKey +":" +%txid%

使用SHA-256算法对transactionString的字节进行两次哈希处理。

通过对两个连续轮次的SHA-256哈希的输出字节进行十六进制编码来生成事务验证令牌,如下所示:transactionToken = 870a0d13da1f1670b5ba35f27604018aeb804d5e6ac5c48194b2358e6748e2a8

检查您生成的transactionToken是否等于回调查询字符串中发送的那个为%digest%。

我尝试过这段代码。但是,安全码对我来说并不匹配。

$user = $_REQUEST['uid'];
$txid = $_REQUEST['txid'];
$digest = $_REQUEST['digest'];
error_log(print_r($_GET, TRUE), 0);
//verify hash
$test_string = "" .$MY_SECRET_KEY . ":" . $txid; 
   // $open_udid . $udid . $odin1 . $mac_sha1 . $custom_id;
//$test_result = md5($test_string);
error_log(print_r("test string: " . $test_string, TRUE), 0);

$result = hash('sha256', $test_string);
error_log(print_r("result: " . $result, TRUE), 0);
$test_result = hash('sha256', $result);

error_log(print_r("test result" . $test_result, TRUE), 0);

if($test_result != $digest) {
    echo "vc_noreward";
    error_log(print_r("failed validation", TRUE), 0);

    die;
}

1 个答案:

答案 0 :(得分:2)

您还需要hash的第三个参数:

 $hash0 = $secret.":".$txid;
 $hash1 = hash('sha256', $hash0, true); //binnary
 $hash2 = hash('sha256', $hash1, false); // hex

 if ($hash2 == $digest) OK