* 支付通知验签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'];
* 支付通知验签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)) {