支付宝支付
作者QQ:67065435 QQ群:821635552
本站内容全部为作者原创,转载请注明出处!
支付宝APP支付流程
支付宝M站支付流程
支付宝PC站支付流程
支付宝支付RSA2生成sign、验证sign,PHP核心代码
<?php /** * 对private_key进行处理 * @param $private_key * @return string */ function dealPrivateKey($private_key) { $private_key = chunk_split($private_key, 64, "\n"); $private_key = "-----BEGIN RSA PRIVATE KEY-----\n$private_key-----END RSA PRIVATE KEY-----\n"; return $private_key; } /** * 对public_key进行处理 * @param $public_key * @return string */ function dealPublicKey($public_key) { $public_key = chunk_split($public_key, 64, "\n"); $public_key = "-----BEGIN PUBLIC KEY-----\n$public_key-----END PUBLIC KEY-----\n"; return $public_key; } /** * 阿里创建签名 * @param $data * @return string */ function buildSign($data) { $private_key = file_get_contents(__DIR__ . '/private_key.txt'); $private_key = trim($private_key); $private_key = dealPrivateKey($private_key); $private_key = openssl_pkey_get_private($private_key); openssl_sign($data, $sign, $private_key, OPENSSL_ALGO_SHA256); $sign = base64_encode($sign); return $sign; } /** * 阿里验证签名 * @param $data * @param $sign * @return bool */ function verifySign($data, $sign) { $sign = base64_decode($sign); $public_key = file_get_contents(__DIR__ . '/public_key.txt'); $public_key = trim($public_key); $public_key = dealPublicKey($public_key); $public_key = openssl_pkey_get_public($public_key); $is_sign = openssl_verify($data, $sign, $public_key, OPENSSL_ALGO_SHA256) === 1; return $is_sign; } /** * 验证回调签名 * @param $sign_str * @param $sign * @return bool */ function verifyBack($sign_str, $sign) { $sign = base64_decode($sign); $public_key = file_get_contents(__DIR__ . '/alipay/public_app_key.txt'); $public_key = trim($public_key); $public_key = dealPublicKey($public_key); $public_key = openssl_pkey_get_public($public_key); $is_sign = openssl_verify($sign_str, $sign, $public_key, OPENSSL_ALGO_SHA256) === 1; return $is_sign; } //把数据转化为json $data = json_encode([],JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); //生成签名 $sign = buildSign($data); //验证签名 $is_sign = verifySign($data, $sign); //打印验证签名结果 var_dump($is_sign);