本教程中引用的示例库使用ashx文件来处理回调。
为了验证付款,示例代码将发送到电子钱包的各种项目与从电子钱包返回的结果进行比较。
使用沙箱我的代码按预期执行并验证,但我没有进行详细的比较。我不知道如何将细节传递给ashx文件,以便可以执行比较。回调网址在商家资料中指定,在我的情况下名为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文件。可能吗?
答案 0 :(得分:1)
如果你指的是this .Net lib,我实际上几年前写了它:)我想我甚至认识到上面的内容:)
你能澄清一下你的问题吗?万一我误解了 -
lib 已经已经进行所有检查/验证(订单号验证除外),您只需要在回发期间存储订单号和详细信息 - 如果我没有记错的话,ashx sample有一个用于发送电子邮件的存根...可能已注释掉并标记为仅用于调试目的。如果需要,您可以更改该部分以写入sql表。
如果买家确认购买,Google会验证买家 确实可以买蛋糕,谷歌发送HTTP POST消息
然后在上面的成功回调中,这发生在客户端,您应该验证订单号是否存在 - re:匹配Google在成功回调中返回的数据与您在db中存储的数据(之前/回发期间) 。如果它存在,那么您已经验证了所有数据......
如果我误解了,只需发表评论,我就会更新答案...... hth ....
顺便说一下,lib尚未更新以支持订阅...只是fyi ...这是我在处理程序(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
(或任何其他相关数据)。< / p>