2012-08-31 27 views

回答

0

这里是(未完成)Python的例子:

from M2Crypto import BIO, RSA, EVP 

ANDROID_PK = """-----BEGIN PUBLIC KEY----- 
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAgmZW0GxWr0v1ndLfxHbV2ruWcmQ 
<some lines skipped> 
cwWjx5sWSahVp0M5aYRysSkGGjSxe1wIDAQAB 
-----END PUBLIC KEY-----""" 

def validate_google_play_signature(signed_data, signature_base64, public_key): 
    # http://stackoverflow.com/a/546476/227024 
    bio = BIO.MemoryBuffer(public_key) 
    rsa = RSA.load_pub_key_bio(bio) 
    pubkey = EVP.PKey() 
    pubkey.assign_rsa(rsa) 

    pubkey.reset_context(md="sha1") 
    pubkey.verify_init() 
    pubkey.verify_update(signed_data) 

    signature = base64.b64decode(signature_base64) 
    return bool(pubkey.verify_final(signature)) 
1

其实这是很容易,你只需要像这样的小功能在PHP中:

function checkPayment($data, $signature) 
{ 
    $base64EncodedPublicKey = "yourBase64PublicKey"; 
    $openSslFriendlyKey = "-----BEGIN PUBLIC KEY-----\n" . chunk_split($base64EncodedPublicKey, 64, "\n") . "-----END PUBLIC KEY-----"; 
    $publicKeyId = openssl_get_publickey($openSslFriendlyKey); 

    $result = openssl_verify ($data, base64_decode($signature), $publicKeyId, OPENSSL_ALGO_SHA1); 

    /* 
    if ($result == 1) { 
     echo "Success"; 
    } elseif ($result == 0) { 
     echo "Verification Failed"; 
    } 
    */ 

    return $result; 
} 
+0

这$数据和$签名做我送到服务器?并且你有任何改变也有MPL(PayPal)的功能(我不想使用IPN) – Diego