Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 19.12.2012, 22:45
skolm вне форума Посмотреть профиль Найти все сообщения от skolm
  № 1  
Ответить с цитированием
skolm
Banned

Регистрация: Dec 2012
Сообщений: 20
Arrow Какой язык для сервера

Здравствуйте.

Подскажите пожалуйста,для оформления платежей в vk на чем лучше писать сервер.

Спасибо.

p.s. Ответ: на любом серверном - не вариант.

Старый 19.12.2012, 22:49
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
p.s. Ответ: на любом серверном - не вариант.
И тем не менее )
Хоть на чем. Любой серверный язык подойдет.
У меня на джаве и на php есть

Ну, проще, конечно же на php, так как у них там и пример на php есть. Рабочий.

Хотя сводится все в конечном итоге к одному - принять запрос, отправить ответ с описанием товара - принять еще один запрос о подтверждении транзакции - записать в базу данных все что требуется - отправить ответ об успешной транзакции, ну или об ошибке.

Старый 19.12.2012, 23:03
skolm вне форума Посмотреть профиль Найти все сообщения от skolm
  № 3  
Ответить с цитированием
skolm
Banned

Регистрация: Dec 2012
Сообщений: 20
Значит java и php,но проще будет на php.Понял,спасибо,буду изучать

Старый 20.12.2012, 10:28
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 4  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Смотря для чего это нужно. У меня джава потому что сокет сервер на ней написан. Городить php-шный костыль как-то не по феншую, хотя на php код был бы реально проще. На джаве еще и http сервер приходится поднимать, тогда как в php это уже есть

Старый 20.12.2012, 12:28
skolm вне форума Посмотреть профиль Найти все сообщения от skolm
  № 5  
Ответить с цитированием
skolm
Banned

Регистрация: Dec 2012
Сообщений: 20
Так нужно,для платежей в контакте.

Старый 20.12.2012, 13:42
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 6  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
skolm, вам бы сначала разобраться вообще с тем, что вы делаете, а потом уже лезть в платежи.
Я не платежи имел в виду когда сказал, "смотря для чего это нужно", а способ взаимодействия приложения с сервером. Либо это http запросы, либо сокеты. PHP для сокетов не подходящий вариант. Сокеты во многих других языках реализованы лучше, чем в php.

п.с. Вот пример модуля платежей на джаве, можете сравнить с php ради интереса
Код AS3:
package roommodule;
 
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.util.Iterator;
import java.util.concurrent.Executors;
import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import java.text.Collator;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import net.user1.union.api.Account;
import net.user1.union.api.Server;
import org.json.simple.JSONObject;
import statics.validation.Validation;
 
 
public class VKPaymentApi {
	public VKPaymentApi(LoginModule loginModule) {
		try {
			InetSocketAddress addr		= null;
			addr								= new InetSocketAddress(80);
			HttpServer server				= HttpServer.create(addr, 0);
			HttpContext context			= server.createContext("/", new MyHandler(loginModule));
			context.getFilters().add(new ParameterFilter());
			server.setExecutor(Executors.newCachedThreadPool());
			server.start();
			System.out.println("Payment API started on port 80");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
class MyHandler implements HttpHandler {
 
	private LoginModule loginModule;
	private HashMap<String, Order> pendingOrders = new HashMap<String, Order>();
 
 
	public MyHandler(LoginModule loginModule) {
		this.loginModule = loginModule;
		System.out.println("HANDLER CREATED");
	}
 
	public void handle(HttpExchange exchange) {
		OutputStream responseBody = null;
		String requestMethod = exchange.getRequestMethod();
		try {
			if (requestMethod.equalsIgnoreCase("POST") || requestMethod.equalsIgnoreCase("GET")) {
				Map<String, Object> params = (Map<String, Object>)exchange.getAttribute("parameters");
 
				Headers responseHeaders = exchange.getResponseHeaders();
				responseHeaders.set("Content-Type", "application/json");
 
				exchange.sendResponseHeaders(200, 0);
				responseBody = exchange.getResponseBody();
 
				String sig	= String.valueOf(params.get("sig"));
				params.remove("sig");																							
				System.out.println("SIGNATURE " + sig);
				Iterator<String> iter = params.keySet().iterator();
				String[] toSort	= new String[params.keySet().size()];
 
				int i = 0;
				while (iter.hasNext()) {
					String key		= iter.next();
					String value	= String.valueOf(params.get(key));
					toSort[i] = key + "=" + value;																			
					i++;
				}
				Arrays.sort(toSort, Collator.getInstance());
 
				String strToHash	= "";
				for (i = 0; i < toSort.length; i++) {
					strToHash += toSort[i];
				}
				String hash = MD5.encrypt(strToHash + VK.API_SECRET);
 
				String notificationType	= String.valueOf(params.get("notification_type"));
 
				System.out.println("NOTIFICATION TYPE " + notificationType);
 
				if (notificationType != null) {
					if (notificationType.equals("get_item") || notificationType.equals("get_item_test")) {
						String userID				= String.valueOf(params.get("user_id"));
						String item					= String.valueOf(params.get("item"));											
						try {
							if (item != null && item.length() >= 5) {
								if (hash.equals(sig)) { 
									String receiverID		= String.valueOf(params.get("receiver_id"));				
									String orderID			= String.valueOf(params.get("order_id"));
									Order order				= new Order();
 
									order.userID			= userID + "_v";
									String[] preparsed	= item.split("\\_");
									int code					= Integer.parseInt(preparsed[0]);
									int numCredits			= Integer.parseInt(preparsed[1]);							
									int numPacks			= Integer.parseInt(preparsed[2]);							
									int packPrice			= Validation.getPrice(code);									
									int creditsInPack		= Validation.getItemsInPack(code);
 
									int totalPriceInVotes = packPrice * numPacks;
									int totalCreditsToBuy = creditsInPack * numPacks;
									if (totalCreditsToBuy != numCredits) {
										sendErrorResponce(responseBody, 1);
									} else {
										order.code	= code;
										order.creditsAmount	= totalCreditsToBuy;
										order.quantity = numPacks;
										order.votes	= totalPriceInVotes;
										pendingOrders.put(orderID, order);													
										if (order.code > 800 && order.code < 900) {
											sendResponce(responseBody, totalCreditsToBuy + " кредитов на игровой счет", totalPriceInVotes);
										} else if (order.code > 900 && order.code < 1000) {
											sendResponce(responseBody, totalCreditsToBuy + " золотых монет", totalPriceInVotes);
										} else {
											sendErrorResponce(responseBody, 1);												
										}
									}
								} else {
									System.out.println("SIGNATURE IS WRONG " + sig);
									sendErrorResponce(responseBody, 10);													
								}
							}
						} catch (Exception e) {
							sendErrorResponce(responseBody, 1);																
							e.printStackTrace();
						}
					} else if (notificationType.equals("order_status_change") ||
							  notificationType.equals("order_status_change_test")) {
						String status					= String.valueOf(params.get("status"));
						System.out.println("STATUS");
						if (status.equals("chargeable")) {
							String orderID				= String.valueOf(params.get("order_id"));
							try {
								Order order				= pendingOrders.get(orderID);
								if (order != null) {
									String userID		= order.userID;
									int credits			= order.creditsAmount;
									try {
 
										Server server		= loginModule.getServer();
										Account account	= server.getAccount(userID);
										if (order.code >= 800 && order.code < 900) {
											loginModule.addMoney(account, credits);
										} else if (order.code >= 900 && order.code < 1000) {
											loginModule.addGoldCoins(account, credits);
										} else {
											sendErrorResponce(responseBody, 1);											
											return;
										}
										sendApproval(responseBody, Integer.parseInt(orderID));
										pendingOrders.remove(orderID);
									} catch (Exception e) {
										sendErrorResponce(responseBody, 1);
									}
								}
							} catch (Exception e) {
								e.printStackTrace();
								sendErrorResponce(responseBody, 1);
							}
						} else {
							sendErrorResponce(responseBody, 100);
						}
					}
				} else {
					System.out.println("NOT A VK PAYMENT REQUEST");
				}
				responseBody.close();
			}
		} catch (Exception e) {
			if (responseBody != null) {
				try {
					responseBody.close();
				} catch (Exception ex) {}
			}
			e.printStackTrace();
		}
	}
 
	private void sendApproval(OutputStream responseBody, int orderID) {
		System.out.println("APPROVAL SENT");
		try {
			JSONObject response = new JSONObject();
			response.put("app_order_id", 1);
			response.put("order_id", orderID);
			String stringResponse = "{\"response\":" + response.toJSONString() + "}";
			responseBody.write(stringResponse.getBytes("UTF-8"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 
	private void sendResponce(OutputStream responseBody, String title, int priceInVotes) {
		try {
			JSONObject response = new JSONObject();
			response.put("title", title);
			response.put("price", priceInVotes);
			response.put("expiration", 3600);																			
			String stringResponse = "{\"response\":" + response.toJSONString() + "}";
			responseBody.write(stringResponse.getBytes("UTF-8"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
 
 
	private void sendErrorResponce(OutputStream responseBody, int errorCode) {
		System.out.println("ERROR SENT");
		try {
			JSONObject error		= new JSONObject();
			error.put("error_code", errorCode);
			error.put("error_msg", "");
			error.put("critical", "true");
			String response = "{\"response\":" + error.toJSONString() + "}";
			responseBody.write(response.getBytes("UTF-8"));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

Создать новую тему Ответ Часовой пояс GMT +4, время: 01:04.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 01:04.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.