Facebook отмечает обратный вызов в мобильном веб-приложении

#asp.net #asp.net-mvc-3 #facebook-credits

#asp.net #asp.net-mvc-3 #facebook-кредиты

Вопрос:

Я пытаюсь создать мобильное приложение Facebook с помощью asp.net и MVC3 и интегрировать Facebook Credits в качестве способа оплаты. Прежде всего, принимая во внимание недавние анонсы, возможно ли теперь иметь мобильное веб-приложение, которое принимает кредиты Facebook?

Если это так, я взял пример, приведенный в следующем сообщении

http://www.m-webs.com/blog_facebookcredits.html

И реализовал следующее действие контроллера:

 public JsonResult CallBack()
{
    string fborder_info = Request.Form["order_info"];
    string fborder_id = Request.Form["order_id"];
    string fbmethod = Request.Form["method"];



    if (fbmethod == "payments_get_items")
    {

        fborder_info = fborder_info.Substring(1, (fborder_info.Length - 2)); // remove the quotes 

        ulong credscost = 2; // Price of purchase in facebook credits 

        var theItem = new FacebookBuyItem()
        {
            item_id = 123456789,
            description = "Own yours today!",
            price = credscost,
            title = "Digital Unicorn",
            product_url = "http://www.facebook.com/images/gifts/21.png",
            image_url = "http://www.facebook.com/images/gifts/21.png"
        };

        var res = new Dictionary<string, object>();
        res["method"] = fbmethod;
        res["order_id"] = fborder_id;
        res["content"] = new object[] { theItem };
        var jss = new JavaScriptSerializer();
        var ob = jss.Serialize(res);
        ob = ob.Replace("#$", @"/".Replace("//", @"/"));

        return Json(ob, JsonRequestBehavior.AllowGet);
    }

    return null;
}
  

Я проверил, что обратный вызов запрашивается facebook, и я также записал отправляемый ответ, который, по-видимому, содержит всю необходимую информацию для отображения диалогового окна покупки, но я все еще получаю следующее сообщение об ошибке:

Код ошибки API: 1151 Описание ошибки API: Извините, но это приложение может не иметь права принимать кредиты Facebook. Если это приложение ранее принимало кредиты, попробуйте еще раз. Сообщение об ошибке: недопустимое приложение

и при тестировании из мобильного браузера:

Извините, но у нас возникли проблемы с обработкой вашего платежа. С вас не взималась плата за эту транзакцию. Попробуйте еще раз.

Я также заметил, что мой обратный вызов запрашивается дважды, что тоже не кажется правильным.

Буду признателен за любую информацию о том, как запустить и запустить мою интеграцию. Мой идентификатор приложения в Facebook — 177876855621874

Спасибо.

Ответ №1:

Обновление: итак, я поиграл с приведенными примерами и вернулся к webforms, чтобы протестировать пример, приведенный на http://www.m-webs.com/blog_facebookcredits.html . Для того, чтобы это решение работало в asp.net Приложение MVC3 Мне пришлось изменить тип действия на HttpResponse вместо JsonResult, что имеет смысл, поскольку JsonResult исключает элементы, которые обычно включаются в HttpResponse.

Таким образом, действие контроллера в конечном итоге выглядело так:

 [HttpPost]
public HttpResponse CallBack()
{
    if (Request.Form["signed_request"] != null)
    {
        var decodeFbSignedRequest = FacebookSignedRequest.Parse(FacebookApplication.Current.AppSecret,
                                                            Request.Form["signed_request"]);

        LogHelper.MicroLogMsg("SIGNED REQUEST DECODE:: "   decodeFbSignedRequest.Data);
    }

    string fborder_id = Request.Form["order_id"];
    string fbmethod = Request.Form["method"];
    string fborder_info = Request.Form["order_info"];  // Use this to look up a product on the database..

    if (fbmethod == "payments_get_items")
    {
        int credscost = 2; // Price of purchase in facebook credits 

        var theItem = new FacebookBuyItem()
        {
            item_id = "123456AA",
            description = "[Test Mode] Own yours today!",
            price = credscost,
            title = "[Test Mode] Digital Unicorn",
            product_url = @"http://www.facebook.com/images/gifts/21.png",
            image_url = @"http://www.facebook.com/images/gifts/21.png"
        };

        // Return the initial response to FB 
        //------------------------------------------ 
        var res = new Dictionary<string, object>();
        res["method"] = fbmethod;
        res["content"] = new object[] { theItem };

        var jss = new JavaScriptSerializer();
        string ob = jss.Serialize(res);

        LogHelper.MicroLogMsg(ob);

        Response.ContentType = "application/json";
        Response.Write(ob);
        Response.End();
    }

    return null;
}
  

Я надеюсь, что это поможет любому, кто выполняет реализацию MVC3 для Facebook Credits.