示例#1
0
 * 支付通知验签demo
 * 传输过程一律使用UTF-8编码
 */
define(LOG_FILE, './game.server.notify.log');
file_put_contents(LOG_FILE, "#" . date('Y-m-d H:i:s') . "\n#AnySDK支付通知HTTP原文:\n" . get_http_raw() . "\n");
checkAnySDKSever();
$privateKey = "696064B29E9A0B7DDBD6FCB88F34A555";
$enhancedKey = 'OGM3ODFkNDRhYjUzYjM4ZmUzZjk';
$params = $_POST;
//注意:$_POST数据如果服务器没有自动处理urldecode,请做一次urldecode(参考rfc1738标准)处理
//foreach ($params as $key => $value) {
//        $params[$key] = urldecode($value);
//}
//注意:如果没有增强密钥的游戏只需要通用验签即可,即只需要checkSign
//if (checkSign($params, $privateKey)) {
if (checkSign($params, $privateKey) && checkEnhancedSign($params, $enhancedKey)) {
    checkAmount($params);
    // @todo 验证成功,游戏服务器处理逻辑
    echo "ok";
} else {
    //@todo
    echo "Wrong signature.";
}
exit;
/**
 * anysdk 支付通知白名单判断
 */
function checkAnySDKSever()
{
    $AnySDKServerIps = array('211.151.20.126', '211.151.20.127');
    $remoteIp = $_SERVER['REMOTE_ADDR'];
示例#2
0
 * 支付通知验签demo
 */
$data = $_POST;
/**
 * 注意:$_POST数据如果服务器没有自动处理urldecode,请做一次urldecode(参考rfc1738标准)处理
 */
/**
  foreach ($data as $key => $value) {
  $data[$key] = urldecode($value);
  }
 * */
$privateKey = "481946CEC51BEDE79ED72391F42B4CAF";
$enhancedKey = 'OGM3ODFkNDRhYjUzYjM4ZmUzZjk';
//注意:如果没有增强密钥的游戏只需要通用验签即可,即只需要checkSign
//if (checkSign($data, $privateKey)) {
if (checkSign($data, $privateKey) && checkEnhancedSign($data, $enhancedKey)) {
    // @todo 验证成功,游戏服务器处理逻辑
    echo "ok";
} else {
    //@todo
    echo "failed";
}
/**
 * 通用验签
 * @param array $data 接收到的所有请求参数数组,通过$_POST可以获得。注意data数据如果服务器没有自动解析,请做一次urldecode(参考rfc1738标准)处理
 * @param array $privateKey AnySDK分配的游戏privateKey
 * @return bool
 */
function checkSign($data, $privateKey)
{
    if (empty($data) || !isset($data['sign']) || empty($privateKey)) {