1

我使用计费应用程序(版本 3)构建 Android 应用程序。我想使用 openssl_verify() 在我的服务器 PHP 中验证购买。我需要四个值:$data、$signature、$public_key 和 $SIGNATURE_ALGORITHM。我在这里找到了一个解决方案,但我不明白 $data 应该采用什么形式?我在 Android 应用程序中得到 responseData:

'{
"orderId":"12999763169054705758.1371079406387615",
"packageName":"com.example.app",
"productId":"exampleSku",
"purchaseTime":1345678900000,
"purchaseState":0,
"developerPayload":"bGoa+V7g /yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
"purchaseToken":"rojeslcdyyiapnqcynkjyyjh"
}'

我有应用程序的签名。我需要如何转换字符串以便可以在函数 php openssl_verify() 中使用它?
谢谢。

4

1 回答 1

2

我在我的项目中使用

 public  function verifySignatureTransaction($signed_data, $signature, $public_key_base64) {
        $key = "-----BEGIN PUBLIC KEY-----\n" .
            chunk_split($public_key_base64, 64, "\n") .
            '-----END PUBLIC KEY-----';
        //using PHP to create an RSA key
        $key = openssl_pkey_get_public($key);

        if ($key === false) {
            throw new \InvalidArgumentException("Public key not valid");
        }
        $signature = base64_decode($signature);
        //using PHP's native support to verify the signature
        $result = openssl_verify(
            $signed_data,
            $signature,
            $key,
            OPENSSL_ALGO_SHA1
        );
        if (0 === $result) {
            return false;
        } else {
            if (1 !== $result) {
                return false;
            } else {
                return true;
            }
        }
    }

并且 $signed_data 它的 json 字符串没有格式化

于 2013-11-19T10:18:40.473 回答