0

我正在尝试使用 asp.net 和 MVC3 创建一个 Facebook 移动应用程序,并将 Facebook Credits 集成为一种支付方式。首先,考虑到最近的公告,现在是否有可能拥有一个接受 Facebook Credits 的移动 Web 应用程序?

如果是这样,我采用了以下帖子中提供的示例

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 Credits 的条件。如果此应用之前接受过积分,请重试。错误消息:无效的应用程序

从移动浏览器测试时:

抱歉,我们在处理您的付款时遇到了问题。您没有为此交易支付任何费用。请再试一次。

我还注意到我的回调被请求两次,这似乎也不正确。

任何有关如何让我的集成启动和运行的见解将不胜感激。我的 Facebook AppId 是 177876855621874

谢谢。

4

1 回答 1

0

更新:所以我玩弄了给出的例子并恢复到网络表单,以测试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;
}

我希望这可以帮助任何为 Facebook Credits 实现 MVC3 的人。

于 2011-10-23T23:45:03.290 回答