</div> <?php if (!empty($_POST)) { $captcha_sid = $_POST['captcha_sid']; $captcha_body = $_POST['captcha_body']; $captcha_key = $_POST['captcha_key']; $captcha_nonce = $_POST['captcha_nonce']; if (!empty($captcha_sid) && !empty($captcha_body) && !empty($captcha_key) && wp_verify_nonce($captcha_nonce, $captcha_sid . $captcha_body)) { $vk_at = get_option('vkapi_at'); $body = explode($captcha_sid, $captcha_body); // repeat crosspost $body['captcha_sid'] = $captcha_sid; $body['captcha_key'] = $captcha_key; $curl = new Wp_Http_Curl(); $result = $curl->request($this->vkapi_server . 'wall.post', array('body' => $body, 'method' => 'POST')); /** @var $result WP_Error */ if (is_wp_error($result)) { $msg = $result->get_error_message(); self::notice_error('CrossPost: ' . $msg . ' wpx c' . __LINE__); return false; } $r_data = json_decode($result['body'], true); if (isset($r_data['error'])) { if ($r_data['error']['error_code'] == 14) { $captcha_sid = $r_data['error']['captcha_sid']; $captcha_img = $r_data['error']['captcha_img']; #$captcha_body = implode($captcha_sid, $body); $captcha_action = 'options-general.php?page=vkapi_captcha'; $captcha_nonce = wp_create_nonce($captcha_sid . $captcha_body); $msg = "\n Captcha needed: <img src='{$captcha_img}'>\n <form method='post' action='{$captcha_action}' target='_blank'>\n <input type='text' name='captcha_key'>\n <input type='hidden' name='captcha_sid' value='{$captcha_sid}'>\n <input type='hidden' name='captcha_body' value='{$captcha_body}'>\n <input type='hidden' name='captcha_nonce' value='{$captcha_nonce}'>\n <input type='submit' class='button button-primary'>\n </form>\n ";
private function vk_upload_photo($vk_at, $vk_group, $image_path) { // // Get Wall Upload Server // $params = array(); $params['access_token'] = $vk_at; $params['uid'] = $vk_group; $params['v'] = '3.0'; $result = wp_remote_get($this->vkapi_server . 'photos.getWallUploadServer?' . http_build_query($params)); if (is_wp_error($result)) { $msg = $result->get_error_message(); self::notice_error('CrossPost: ' . $msg . ' wpx' . __LINE__); return false; } $data = json_decode($result['body'], true); if (!$data['response']) { if ($data['error']['error_code'] == 17) { $msg = "ВК просит верификацию пользователя (с выдачей нового Access Token): <a href='{$data['error']['redirect_uri']}'>ссылка для получения</a>"; } else { $msg = $this->getVkApiMsg($data['error']); } self::notice_error('CrossPost: API Error. Code: ' . $data['error']['error_code'] . '. Msg: ' . $msg . '. Line: ' . __LINE__); return false; } // // Upload Photo To Server // $curl = new Wp_Http_Curl(); $result = $curl->request($data['response']['upload_url'], array('method' => 'POST', 'timeout' => 30, 'body' => array('photo' => '@' . $image_path))); if (is_wp_error($result)) { $msg = $result->get_error_message(); self::notice_error('CrossPost: ' . $msg . ' wpx' . __LINE__); return false; } // $data = json_decode($result['body'], true); if (!isset($data['photo'])) { $msg = $this->getVkApiMsg($data['error']); self::notice_error('CrossPost: API Error. Code: ' . $data['error']['error_code'] . '. Msg: ' . $msg . '. Line: ' . __LINE__); return false; } // $post_params['photo'] = '@' . $image_path; // $ch = curl_init(); // curl_setopt($ch, CURLOPT_URL, $data['response']['upload_url']); // curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // curl_setopt($ch, CURLOPT_POST, true); // curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params); // curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); // curl_setopt($ch, CURLOPT_TIMEOUT, 30); // // $result = curl_exec($ch); // $data = json_decode( $result, true ); // if ( ! isset( $data['photo'] ) ) { // $msg = $this->getVkApiMsg( $data['error'] ); // self::notice_error( 'CrossPost: API Error. Code: ' . $data['error']['error_code'] . '. Msg: ' . $msg . '. Line: ' . __LINE__ ); // // return false; // } // // Save Wall Photo // $params = array(); $params['access_token'] = $vk_at; // ВК сказал что теперь это опциональные поля // if ( (int) $vk_group < 0 ) { // $params['uid'] = - $vk_group; // } // if ( (int) $vk_group > 0 ) { // $params['gid'] = $vk_group; // } // https://vk.com/kowack?w=wall14867871_1183%2Fall // https://vk.com/club-14867871?w=wall14867871_1184%2Fall if ($data['photo'] === '[]') { self::notice_error('CrossPost: API Error. Code: Security Breach2. Msg: ВКонтакте отвергнул загрузку фото... Line:' . __LINE__); return false; } $params['server'] = $data['server']; $params['photo'] = $data['photo']; $params['hash'] = $data['hash']; $params['v'] = '3.0'; $result = wp_remote_get($this->vkapi_server . 'photos.saveWallPhoto?' . http_build_query($params)); if (is_wp_error($result)) { $msg = $result->get_error_message(); self::notice_error('CrossPost: ' . $msg . ' wpx' . __LINE__); return false; } $data = json_decode($result['body'], true); if (!$data['response']) { $msg = $this->getVkApiMsg($data['error']); self::notice_error('CrossPost: API Error. Code: ' . $data['error']['error_code'] . '. Msg: ' . $msg . '. Line: ' . __LINE__); return false; } // Return Photo ID return $data['response'][0]['id']; }
/** * @param $vk_at string * @param $post WP_Post * @return bool */ private function crosspost($vk_at, $post) { $body = array(); // todo-dx: crosspost to facebook, g-plus, twitter $body['access_token'] = $vk_at; $body['from_group'] = 1; $body['signed'] = get_option('vkapi_crosspost_signed'); $vk_group_id = get_option('vkapi_vk_group'); if (!is_numeric($vk_group_id)) { $params = array(); $params['group_id'] = $vk_group_id; $params['fields'] = 'screen_name'; $result = wp_remote_get($this->vk_api_buildQuery('groups.getById', $params)); if (is_wp_error($result)) { $msg = $result->get_error_message(); self::notice_error('CrossPost: ' . $msg . ' wpx' . __LINE__); return false; } $r_data = json_decode($result['body'], true); if (!$r_data['response']) { $msg = $r_data['error']['error_msg'] . ' ' . $r_data['error']['error_code']; self::notice_error('CrossPost: API Error Code: ' . $msg . 'vkx' . __LINE__); return false; } $vk_group_id = $r_data['response'][0]['id']; $vk_group_screen_name = $r_data['response'][0]['screen_name']; } $vk_group_id = -$vk_group_id; $body['owner_id'] = $vk_group_id; // Attachment $att = array(); // todo(dx): upgrade crosspost_get_image $image_path = $this->crosspost_get_image($post->ID); if ($image_path) { $att[] = $this->vk_upload_photo($vk_at, $vk_group_id, $image_path); } $temp = isset($_REQUEST['vkapi_crosspost_link']) ? $_REQUEST['vkapi_crosspost_link'] : get_option('vkapi_crosspost_link'); if (!empty($temp)) { $temp = get_permalink($post->ID); if (!class_exists('Punycode')) { // todo-dx: глянуть, говорят сломалось... потестил, у мну всё замечательно работает. Саботаж? require_once $this->plugin_path . 'php/punycode.php'; $temp = Punycode::urldecode($temp); } $att[] = $temp; } if (!empty($att)) { $body['attachments'] = implode(',', $att); } // Text $text = do_shortcode($post->post_content); $text = $this->html2text($text); $text = html_entity_decode($text, ENT_QUOTES); $temp = isset($_REQUEST['vkapi_crosspost_length']) ? $_REQUEST['vkapi_crosspost_length'] : get_option('vkapi_crosspost_length'); if ((int) $temp > 0) { $text_len = mb_strlen($text); $text = mb_substr($text, 0, (int) $temp); $last_pos = strrpos($text, ' '); if (!$last_pos) { $last_pos = strrpos($text, "\n"); } if ($last_pos) { $text = mb_substr($text, 0, $last_pos); } if (mb_strlen($text) != $text_len) { $text .= '...'; } $text = $post->post_title . "\r\n\r\n" . $text; } else { if ((int) $temp === -1) { $text = ''; } } $body['message'] = $text; // mini-test if (mb_strlen($body['attachments']) === 0 && mb_strlen($body['message']) === 0) { self::notice_error('Crosspost: (рус) Ни текста ни медиа-приложений.'); } // Call $body['v'] = $this->vkapi_version; #$body['publish_date'] = unixtime; // $post->post_date_gmt = '2014-12-21 06:39:40'; $curl = new Wp_Http_Curl(); $result = $curl->request($this->vkapi_server . 'wall.post', array('body' => $body, 'method' => 'POST')); /** @var $result WP_Error */ if (is_wp_error($result)) { $msg = $result->get_error_message(); self::notice_error('CrossPost: ' . $msg . ' wpx' . __LINE__); return false; } $r_data = json_decode($result['body'], true); if (isset($r_data['error'])) { if ($r_data['error']['error_code'] == 14) { $captcha_sid = $r_data['error']['captcha_sid']; $captcha_img = $r_data['error']['captcha_img']; $captcha_body = implode($captcha_sid, $body); $captcha_action = 'options-general.php?page=vkapi_captcha'; $captcha_nonce = wp_create_nonce($captcha_sid . $captcha_body); $msg = "\n Captcha needed: <img src='{$captcha_img}'>\n <form method='post' action='{$captcha_action}' target='_blank'>\n <input type='text' name='captcha_key'>\n <input type='hidden' name='captcha_sid' value='{$captcha_sid}'>\n <input type='hidden' name='captcha_body' value='{$captcha_body}'>\n <input type='hidden' name='captcha_nonce' value='{$captcha_nonce}'>\n <input type='submit' class='button button-primary'>\n </form>\n "; self::notice_error('CrossPost: API Error Code: ' . $msg . 'vkx' . __LINE__); } else { $msg = $r_data['error']['error_msg'] . ' ' . $r_data['error']['error_code'] . ' _' . $body['attachments']; self::notice_error('CrossPost: API Error Code: ' . $msg . 'vkx' . __LINE__); } return false; } $temp = isset($vk_group_screen_name) ? $vk_group_screen_name : 'club' . $vk_group_id; $post_link = "https://vk.com/{$temp}?w=wall{$vk_group_id}_{$r_data['response']['post_id']}%2Fall"; $post_href = "<a href='{$post_link}' target='_blank'>{$temp}</a>"; self::notice_notice('CrossPost: Success ! ' . $post_href); update_post_meta($post->ID, 'vkapi_crossposted', $r_data['response']['post_id']); return true; }
function evc_upload_photo($id, $post) { //$options = get_option('evc_options'); $options = evc_get_all_options(array('evc_vk_api_autopost', 'evc_autopost')); if (!$options['upload_photo_count']) { return false; } if ($options['upload_photo_count'] > 5) { $options['upload_photo_count'] = 5; } // Find first 5 attached images $post_images = get_children(array('post_parent' => $post->ID, 'post_status' => 'inherit', 'post_type' => 'attachment', 'post_mime_type' => 'image', 'orderby' => 'menu_order id', 'order' => 'ASC', 'numberposts' => $options['upload_photo_count'])); $post_images = apply_filters('evc_autopost_upload_photo', $post_images, $post); // if no attached photo if (!$post_images || empty($post_images)) { return false; } if ($post_images) { $i = 1; foreach ($post_images as $image) { $att_id = is_object($image) ? $image->ID : $image; $images['file' . $i] = '@' . get_attached_file($att_id); //$images['photo'.$i] = '@' . get_attached_file($att_id ); //$images['photo'] = '@' . get_attached_file($att_id ); $i++; } } $params = array('access_token' => $options['access_token'], 'gid' => $options['page_id']); // Get Wall Upload Server $query = http_build_query($params); $data = wp_remote_get(EVC_API_URL . 'photos.getWallUploadServer?' . $query, array('sslverify' => false)); if (is_wp_error($data)) { evc_add_log('photos.getWallUploadServer: WP ERROR. ' . $data->get_error_code() . ' ' . $data->get_error_message()); return $data->get_error_message(); } $resp = json_decode($data['body'], true); //evc_add_log('photos.getWallUploadServer: $resp. ' . print_r($resp, 1)); // if (isset($resp['error'])) { if (isset($resp['error']['error_code'])) { evc_add_log('photos.getWallUploadServer: VK Error. ' . $resp['error']['error_code'] . ' ' . $resp['error']['error_msg']); } else { evc_add_log('photos.getWallUploadServer: VK Error. ' . $resp['error']); } return false; } if (!$resp['response']['upload_url']) { return false; } // Upload photo to server $curl = new Wp_Http_Curl(); $data = $curl->request($resp['response']['upload_url'], array('body' => $images, 'method' => 'POST')); if (is_wp_error($data)) { evc_add_log('Upload Photos: WP ERROR. ' . $data->get_error_code() . ' ' . $data->get_error_message()); return $data->get_error_message(); } $resp = json_decode($data['body'], true); //evc_add_log('Upload Photos: $resp. ' . print_r($resp, 1)); // if (isset($resp['error'])) { if (isset($resp['error']['error_code'])) { evc_add_log('Upload Photos: VK Error. ' . $resp['error']['error_code'] . ' ' . $resp['error']['error_msg']); } else { evc_add_log('Upload Photos: VK Error. ' . $resp['error']); } return false; } if (!$resp['photo']) { return false; } // Save Wall Photo $params = array(); $params = array('access_token' => $options['access_token'], 'gid' => $options['page_id'], 'server' => $resp['server'], 'photo' => $resp['photo'], 'hash' => $resp['hash']); $query = http_build_query($params); $data = wp_remote_get(EVC_API_URL . 'photos.saveWallPhoto?' . $query, array('sslverify' => false)); if (is_wp_error($data)) { evc_add_log('photos.saveWallPhoto: WP ERROR. ' . $data->get_error_code() . ' ' . $data->get_error_message()); return $data->get_error_message(); } $resp = json_decode($data['body'], true); if (isset($resp['error'])) { if (isset($resp['error']['error_code'])) { evc_add_log('photos.saveWallPhoto: VK Error. ' . $resp['error']['error_code'] . ' ' . $resp['error']['error_msg']); } else { evc_add_log('photos.saveWallPhoto: VK Error. ' . $resp['error']); } return false; } if (!$resp['response']) { return false; } //print__r($resp); foreach ($resp['response'] as $r) { $attachments[] = $r['id']; } return array('i' => $attachments); }