NOTE
发起服务器校验前需要您已经在服务器获取商品列表,请确保您已掌握 获取商品列表 章节的内容。
简介
一般情况下,在玩家为金魔方商品支付后,在服务器校验支付的真实性以及在服务器编辑发货的逻辑会更安全。您可以在服务器场景中绑定的脚本上通过代码 NetServer.on_payorder_result 实时获取玩家成功支付金魔方商品的动态,并在其返回的函数中根据 网络对话(Net Conversation)、商品 ID(Product ID)等传入参数编辑发货逻辑。
代码格式
代码 NetServer.on_payorder_result 会每次在玩家成功支付该游戏项目的金魔方商品时执行该代码返回的函数,其中调用 NetServer.on_payorder_result 的代码格式如下:
typescript
NetServer.on_payorder_result = (
conv: NetConversation,
orderid: string,
goodsid: number,
count: number
) => {
let resultFlag:boolean;
//编辑校验逻辑,您可以根据支付商品的网络对话和支付的商品 ID 等信息编辑相关逻辑;
return resultFlag;
};- conv 是本次支付金魔方商品的 网络对话(Net Conversation),该参数用于储存连上服务器的客户端的基础信息,以及承担服务器向该客户端发送消息和传参的媒介。关于 网络对话(Net Conversation)的相关内容,请参阅 服务器 章节。
- orderid 是订单的 ID,是引擎用于核验消费的验证手段,一般编辑逻辑过程无需涉及。
- goodsid 是本次支付的金魔方商品的 商品 ID(Product ID)。
- count 是本次支付的金魔方商品数量。
- resultFlag 是 NetServer.on_payorder_result 回调函数的返回值,您可以自定义其名称,但是需要注意此函数需要有一个 布尔值(Boolean)类型的返回值,可用于其他逻辑获取本次消费的某些校验反馈。
代码示例
假如本游戏项目只有 别名(Aliases)为 a 和 别名(Aliases)为 b 的两款金魔方商品 。
【GCube_Product_List001.png】
在服务器的脚本编辑当玩家为金魔方商品支付后进行校验并在服务器发货的代码示例如下:
NOTE
其中获取商品列表的条件和方法已经在获取商品列表章节中描述,本示例将不添加相关的备注,如需了解请参阅 获取商品列表 章节了解相关内容。
typescript
class PurchasesVerification extends Component {
/*
编辑运行时事件;
*/
OnStart(): void {
//定义变量用于保存金魔方商品的信息列表;
let data;
/*
在服务器中获取金魔方商品列表,列表将会由 JSON 格式转换为文本(String)后返回;
* 将商品列表转换回 JSON 格式,并保存在命名为 GoodsListJson 的变量中;
* 在 JSON 中获取金魔方商品的信息列表,并保存在私有变量 data 中;
*/
NetServer.on_get_goodslist = (goodsjson: string) => {
let GoodsListJson:JSON = JSON.parse(goodsjson);
data = GoodsListJson["data"];
}
/*
编辑当有玩家为金魔方商品支付时的事件;
*/
NetServer.on_payorder_result = (
conv: NetConversation,
orderid: string,
goodsid: number,
count: number
) => {
let resultFlag:boolean = false;
//遍历商品列表;
for (let i = 0; i < data.length; i++) {
//找到当前金魔方商品支付订单中的商品 ID 对应的商品序号;
if (data[i]["goods_id"] == goodsid) {
//通过商品的序号获取商品的别名,并根据别名判断当前消费的商品进行校验或发货;
switch(data[i]["goods_mapping_id"]){
case "a":
//玩家支付的金魔方商品为别名为 a 的商品时校验或发货的逻辑;
resultFlag = true;
case "b":
//玩家支付的金魔方商品为别名为 b 的商品时校验或发货的逻辑;
resultFlag = true;
default:
//如果玩家支付的金魔方商品别名不在商品列表中,执行报错或反馈的逻辑;
resultFlag = false;
};
};
};
//将结果返回
return resultFlag;
};
}
}