0

教程中引用的示例库使用 ashx 文件来处理回调。

为了验证付款,示例代码将发送到 Wallet 的各种项目与 Wallet 返回的结果进行比较。

使用沙箱,我的代码按预期执行,并在我不进行详细比较的情况下进行验证。我不知道如何将详细信息传递给 ashx 文件以便进行比较。回调 url 在商家资料中指定,在我的例子中名为 callback.ashx。

    <script type="text/javascript">
    google.load('payments', '1.0', {
        'packages': ['sandbox_config']

    });

    function purchase(callback) {
        google.payments.inapp.buy({
            "parameters": {},
            "jwt": "<%=theJWT() %>",
            "success": function (result) {
                if (isFunction(callback)) {
                    callback(true, result);
                }
            },
            "failure": function (result) {
                if (isFunction(callback)) {
                    callback(false, result);
                }
            }
        }
    )
    };

    function isFunction(possibleFunction) {
        return (typeof (possibleFunction) === typeof (Function));
    }

    /*** S A M P L E   O N L Y ****
    *******************************
    !You should verify server side!
    *******************************                
    */
    var sampleParseResult = function (isgood, data) {
        var _console = (typeof window.console === "undefined");
        if (isgood) {
            var _str = "Verify Order No. " + data.response.orderId;
            _str += "\nDetails:\n";
            _str += data.request.name + " " + data.request.description + "\n";
            _str += data.request.price + "\n";
            alert(_str);
            if (!_console) {
                console.log(data);
            }
        } else {
            alert("failed");
            if (!_console) {
                console.log(data);
            }
        }
    };
</script>

一切正常,但我想将包含请求详细信息的对象传递给 ashx 文件。可能吗?

4

1 回答 1

1

如果您指的是这个 .Net lib,我实际上是在几年前写的 :) 我想我什至认识到上述内容 :)

你能澄清你的问题吗?以防我误会——

该库应该已经完成​​了所有检查/验证(订单号验证除外),您只需要在回发期间存储订单号和详细信息 - 如果我没记错的话,ashx 示例有一个用于发送电子邮件的存根。 .likely 注释掉并标记仅用于调试目的。如果需要,您可以更改该部分以写入 sql 表。

如果买家确认购买并且 Google 验证买家确实可以支付蛋糕费用,Google 会发送一条 HTTP POST 消息

然后在上面发生在客户端的成功回调中,您应该验证订单号是否存在 - 重新:将 Google 在成功回调中返回的数据与您存储在 db 中的数据匹配(之前/回发期间)。如果存在,那么您已经验证了所有数据...

如果我误解了,请发表评论,我会更新答案...hth ....

顺便说一句,该库尚未更新以支持订阅...仅供参考...

更新

这是我在处理程序(ashx)中提到的“存根”:

//Sample
private void parsePayload(InAppItemObject ClaimObj, JWTHeaderObject HeaderObj)
{
    //header JWTHeaderObject
    string foo = string.Format("JWT Headers{0}JWT Algo: {1}{0}JWT kid: {2}{0}JWT typ: {3}{0}{0}", Environment.NewLine, HeaderObj.alg, HeaderObj.kid, HeaderObj.typ);

    //payload InAppItemObject
    string bar = string.Format("JWT Payload{0}JWT aud: {1}{0}JWT iss: {2}{0}JWT orderid: {3}{0}JWT sellerdata: {4}{0}JWT iat: {5}{0}" +
            "JWT itemName: {6}{0}JWT itemPrice: {7:c}{0}JWT Item Description: {8}{0}JWT exp: {9}{0}JWT typ: {10}{0}{0}", Environment.NewLine, ClaimObj.aud, ClaimObj.iss, ClaimObj.response.orderId, ClaimObj.request.sellerData, ClaimObj.iat,
            ClaimObj.request.name, ClaimObj.request.price, ClaimObj.request.description, ClaimObj.exp, ClaimObj.typ);

    debug(foo, bar);
}

您可以将上面的内容更改为标准的数据库插入 - 上面ClaimObj会有您的订单详细信息。所以有些东西(示例):

using (SqlConnection conn = new SqlConnection(connStr))
{
 .....
 using (SqlCommand cmd = new SqlCommand(cmdText, conn))
 {
  .....
  cmd.Parameters.AddWithValue("@OrderNumber",ClaimObj.response.orderId);
  cmd.Parameters.AddWithValue("@ProductOrdered",ClaimObj.request.name);
  ....

该文件处理您在客户端成功回调之前ashx获得的 Google发(我意识到也许我应该将该文件命名为postback_handler_demo.ashx)。这允许您在任何客户端回调之前存储(已经在服务器端验证的)数据。

然后,如果/当您在回调中触发时,您可以查询此数据是否存在orderId(或任何其他数据)。success handler

于 2013-10-08T01:28:27.890 回答