短信平台积分累计系统的核心逻辑是玩家发送短信到指定号码,短信平台回调服务端接口,服务端验证后给对应角色增加积分,积分累计到一定数量可兑换物品。整个流程涉及短信平台配置、服务端接口开发、数据库表设计、脚本触发、兑换NPC设置五个环节。
一、短信平台选择与配置
常用短信平台提供回调接口,支持HTTP或HTTPS协议。注册平台账号后创建应用,获取三个关键参数:应用ID、应用密钥、回调地址。回调地址填写服务端的公网IP和端口,格式为http://你的IP:端口/sms/callback。平台发送短信的号码和指令格式也要记录,例如发送JF到106XXXX,平台会把手机号和短信内容回调到服务端。部分平台支持长短信和上行指令,需要确认平台是否支持自定义指令。
二、服务端接口开发
服务端需要一个HTTP接口接收短信平台回调。用易语言、C#、Java、PHP都可以,核心是解析POST或GET参数。平台通常传递手机号、短信内容、时间戳、签名。先验证签名,签名算法一般是MD5或SHA1,把应用密钥和参数按平台规则拼接后加密,与服务端收到的签名对比。签名通过后提取手机号和短信内容。短信内容格式建议设计为JF角色名,例如玩家发送JF张三,服务端解析出角色名张三,然后查询该角色是否在线或存在。
三、数据库表设计
新建短信积分表,字段包括ID、手机号、角色名、积分余额、累计积分、最后发送时间、发送次数。再建短信记录表,字段包括ID、手机号、角色名、短信内容、积分变化、发送时间、平台流水号。积分余额用于兑换扣减,累计积分用于统计和等级判定,最后发送时间用于频率限制,发送次数用于防刷。角色名和手机号建立索引,提高查询速度。表引擎用InnoDB,字符集用utf8或gbk,与服务端数据库保持一致。
四、接口与数据库交互逻辑
收到短信回调后,先查短信记录表,用平台流水号判断是否重复回调,重复则直接返回成功。再查最后发送时间,如果距离上次发送不足60秒,拒绝并返回频率过高。通过后查询角色是否存在,不存在则记录失败原因。角色存在则更新积分余额和累计积分,插入短信记录。返回平台成功响应,平台收到成功响应后不再重试。失败响应要返回具体错误码,方便排查。
五、游戏内积分查询与兑换脚本
在QFunction-0.txt中添加NPC对话脚本。玩家点击NPC查询积分,脚本用CHECKVAR或GETVAR读取积分变量。积分存储在数据库中,游戏内用变量同步。登录触发时从数据库读取积分写入个人变量,例如U200记录积分余额,U201记录累计积分。兑换时先检查积分是否足够,足够则扣除积分变量并更新数据库,然后GIVE物品。示例脚本:
[@查询积分]
#IF
#ACT
MOVU200<$STR(U200)>
SENDMSG6你的积分余额为<$STR(U200)>,累计积分为<$STR(U201)>
[@兑换物品]
#IF
CHECKVARHUMAN积分余额>999
#ACT
CALCVARHUMAN积分余额-1000
SAVEVARHUMAN积分余额
GIVE屠龙1
SENDMSG6兑换成功,扣除1000积分
#ELSEACT
SENDMSG6积分不足
六、积分变量同步机制
游戏内变量与数据库需要同步。登录时从数据库读取积分写入变量,脚本中修改变量后立即写回数据库。写回数据库通过服务端脚本调用SQL命令,或者通过接口回调服务端处理。部分引擎支持直接执行SQL,例如GOM引擎的ExecSql命令。如果不支持,可以用文件记录积分,登录时读取文件。文件格式为角色名=积分余额累计积分,每行一条记录。修改后立即保存文件,防止服务端崩溃丢数据。
七、防刷与安全设置
同一手机号每天发送次数限制,例如每天最多10次。同一手机号只能绑定一个角色名,绑定后不可更改。同一角色名只能被一个手机号绑定。短信内容中的角色名要做合法性校验,只允许中文、字母、数字,长度不超过12个字符。签名验证必须开启,防止伪造回调。接口IP白名单可以增加一层防护,只允许短信平台服务器IP访问。回调地址不要暴露在客户端,只配置在短信平台后台。数据库账号密码不要写在接口代码明文,用配置文件读取。
八、短信平台对接流程
第一步,在短信平台后台配置回调地址。第二步,在服务端部署接口程序,监听指定端口。第三步,用测试手机发送短信,查看接口日志是否收到回调。第四步,检查数据库是否写入记录。第五步,进入游戏查询积分是否增加。第六步,测试兑换功能。第七步,测试重复回调是否被拦截。第八步,测试频率限制是否生效。第九步,测试角色不存在时的处理。第十步,压力测试,模拟多用户同时发送。
九、常见问题排查
接口收不到回调,检查防火墙是否开放端口,检查回调地址是否公网可访问,检查短信平台是否配置正确。签名验证失败,检查应用密钥是否正确,检查参数拼接顺序是否与平台文档一致,检查编码是否统一。积分不增加,检查角色名是否解析正确,检查数据库连接是否正常,检查更新语句是否执行成功。积分重复增加,检查流水号是否唯一,检查重复回调判断逻辑。兑换失败,检查积分变量是否同步,检查物品名是否存在,检查背包空格。服务端重启后积分丢失,检查是否持久化到数据库或文件。手机号绑定多个角色,检查绑定逻辑是否有唯一性约束。短信内容乱码,检查接口编码和数据库编码是否一致。
十、运维与日志
接口程序记录详细日志,包括请求时间、手机号、短信内容、解析结果、数据库操作、返回结果。日志按天分割,保留30天。数据库定期备份,短信记录表数据量大时按月分表。监控接口响应时间,超过3秒要优化。监控短信平台余额,不足时及时充值。监控异常请求,频繁失败IP加入黑名单。游戏内公告提示玩家短信指令格式,避免发错。客服后台提供积分查询和手动补发功能,处理玩家投诉。
十一、多区服支持
如果服务端有多个区服,短信平台回调需要区分区服。方法一,不同区服用不同回调地址,每个区服独立接口。方法二,同一接口根据角色名查询所在区服,然后转发到对应区服数据库。方法三,短信内容中带区服编号,例如JF1张三表示一区张三。推荐方法一,配置简单,互不影响。每个区服的积分表独立,兑换脚本独立,物品独立。
十二、计费与结算
短信平台按条计费,每条短信成本固定。玩家发送短信后,平台扣费,服务端加积分。需要统计每日短信发送量、积分发放量、兑换物品价值。设置积分兑换比例,例如1条短信等于100积分,1000积分兑换一件装备。根据装备价值反推积分定价,确保不亏本。定期核对短信平台账单和服务端记录,差异过大时排查是否有刷单或接口漏洞。
十三、脚本触发点
登录触发:从数据库或文件读取积分写入变量。小退触发:保存积分变量到数据库或文件。兑换触发:扣除积分并给物品。查询触发:显示当前积分。短信回调触发:接口程序直接操作数据库,游戏内变量在下次登录时同步。如果玩家在线时收到短信积分,需要接口程序通知游戏服务端刷新变量,可以通过GM命令或消息推送实现。
十四、测试用例
正常发送短信,积分增加。重复发送相同流水号,积分不重复增加。60秒内连续发送,第二次被拒绝。发送不存在的角色名,记录失败。发送超长角色名,被截断或拒绝。发送特殊字符角色名,被拒绝。积分不足时兑换,提示不足。积分足够时兑换,扣除正确。兑换后积分余额和累计积分同时更新。服务端重启后积分不丢失。数据库断开时接口返回错误。短信平台回调超时,平台重试,服务端只处理一次。
十五、部署清单
短信平台账号注册完成。应用创建完成。回调地址配置完成。应用ID和密钥记录。服务端接口程序部署完成。端口开放完成。数据库表创建完成。数据库连接配置完成。接口签名验证测试通过。游戏内NPC脚本添加完成。积分变量定义完成。登录和小退触发添加完成。兑换物品列表确认。防刷规则配置完成。日志目录创建完成。备份策略制定完成。测试用例全部通过。正式上线前关闭测试数据。上线后监控运行状态。
一、短信平台选择与配置
常用短信平台提供回调接口,支持HTTP或HTTPS协议。注册平台账号后创建应用,获取三个关键参数:应用ID、应用密钥、回调地址。回调地址填写服务端的公网IP和端口,格式为http://你的IP:端口/sms/callback。平台发送短信的号码和指令格式也要记录,例如发送JF到106XXXX,平台会把手机号和短信内容回调到服务端。部分平台支持长短信和上行指令,需要确认平台是否支持自定义指令。
二、服务端接口开发
服务端需要一个HTTP接口接收短信平台回调。用易语言、C#、Java、PHP都可以,核心是解析POST或GET参数。平台通常传递手机号、短信内容、时间戳、签名。先验证签名,签名算法一般是MD5或SHA1,把应用密钥和参数按平台规则拼接后加密,与服务端收到的签名对比。签名通过后提取手机号和短信内容。短信内容格式建议设计为JF角色名,例如玩家发送JF张三,服务端解析出角色名张三,然后查询该角色是否在线或存在。
三、数据库表设计
新建短信积分表,字段包括ID、手机号、角色名、积分余额、累计积分、最后发送时间、发送次数。再建短信记录表,字段包括ID、手机号、角色名、短信内容、积分变化、发送时间、平台流水号。积分余额用于兑换扣减,累计积分用于统计和等级判定,最后发送时间用于频率限制,发送次数用于防刷。角色名和手机号建立索引,提高查询速度。表引擎用InnoDB,字符集用utf8或gbk,与服务端数据库保持一致。
四、接口与数据库交互逻辑
收到短信回调后,先查短信记录表,用平台流水号判断是否重复回调,重复则直接返回成功。再查最后发送时间,如果距离上次发送不足60秒,拒绝并返回频率过高。通过后查询角色是否存在,不存在则记录失败原因。角色存在则更新积分余额和累计积分,插入短信记录。返回平台成功响应,平台收到成功响应后不再重试。失败响应要返回具体错误码,方便排查。
五、游戏内积分查询与兑换脚本
在QFunction-0.txt中添加NPC对话脚本。玩家点击NPC查询积分,脚本用CHECKVAR或GETVAR读取积分变量。积分存储在数据库中,游戏内用变量同步。登录触发时从数据库读取积分写入个人变量,例如U200记录积分余额,U201记录累计积分。兑换时先检查积分是否足够,足够则扣除积分变量并更新数据库,然后GIVE物品。示例脚本:
[@查询积分]
#IF
#ACT
MOVU200<$STR(U200)>
SENDMSG6你的积分余额为<$STR(U200)>,累计积分为<$STR(U201)>
[@兑换物品]
#IF
CHECKVARHUMAN积分余额>999
#ACT
CALCVARHUMAN积分余额-1000
SAVEVARHUMAN积分余额
GIVE屠龙1
SENDMSG6兑换成功,扣除1000积分
#ELSEACT
SENDMSG6积分不足
六、积分变量同步机制
游戏内变量与数据库需要同步。登录时从数据库读取积分写入变量,脚本中修改变量后立即写回数据库。写回数据库通过服务端脚本调用SQL命令,或者通过接口回调服务端处理。部分引擎支持直接执行SQL,例如GOM引擎的ExecSql命令。如果不支持,可以用文件记录积分,登录时读取文件。文件格式为角色名=积分余额累计积分,每行一条记录。修改后立即保存文件,防止服务端崩溃丢数据。
七、防刷与安全设置
同一手机号每天发送次数限制,例如每天最多10次。同一手机号只能绑定一个角色名,绑定后不可更改。同一角色名只能被一个手机号绑定。短信内容中的角色名要做合法性校验,只允许中文、字母、数字,长度不超过12个字符。签名验证必须开启,防止伪造回调。接口IP白名单可以增加一层防护,只允许短信平台服务器IP访问。回调地址不要暴露在客户端,只配置在短信平台后台。数据库账号密码不要写在接口代码明文,用配置文件读取。
八、短信平台对接流程
第一步,在短信平台后台配置回调地址。第二步,在服务端部署接口程序,监听指定端口。第三步,用测试手机发送短信,查看接口日志是否收到回调。第四步,检查数据库是否写入记录。第五步,进入游戏查询积分是否增加。第六步,测试兑换功能。第七步,测试重复回调是否被拦截。第八步,测试频率限制是否生效。第九步,测试角色不存在时的处理。第十步,压力测试,模拟多用户同时发送。
九、常见问题排查
接口收不到回调,检查防火墙是否开放端口,检查回调地址是否公网可访问,检查短信平台是否配置正确。签名验证失败,检查应用密钥是否正确,检查参数拼接顺序是否与平台文档一致,检查编码是否统一。积分不增加,检查角色名是否解析正确,检查数据库连接是否正常,检查更新语句是否执行成功。积分重复增加,检查流水号是否唯一,检查重复回调判断逻辑。兑换失败,检查积分变量是否同步,检查物品名是否存在,检查背包空格。服务端重启后积分丢失,检查是否持久化到数据库或文件。手机号绑定多个角色,检查绑定逻辑是否有唯一性约束。短信内容乱码,检查接口编码和数据库编码是否一致。
十、运维与日志
接口程序记录详细日志,包括请求时间、手机号、短信内容、解析结果、数据库操作、返回结果。日志按天分割,保留30天。数据库定期备份,短信记录表数据量大时按月分表。监控接口响应时间,超过3秒要优化。监控短信平台余额,不足时及时充值。监控异常请求,频繁失败IP加入黑名单。游戏内公告提示玩家短信指令格式,避免发错。客服后台提供积分查询和手动补发功能,处理玩家投诉。
十一、多区服支持
如果服务端有多个区服,短信平台回调需要区分区服。方法一,不同区服用不同回调地址,每个区服独立接口。方法二,同一接口根据角色名查询所在区服,然后转发到对应区服数据库。方法三,短信内容中带区服编号,例如JF1张三表示一区张三。推荐方法一,配置简单,互不影响。每个区服的积分表独立,兑换脚本独立,物品独立。
十二、计费与结算
短信平台按条计费,每条短信成本固定。玩家发送短信后,平台扣费,服务端加积分。需要统计每日短信发送量、积分发放量、兑换物品价值。设置积分兑换比例,例如1条短信等于100积分,1000积分兑换一件装备。根据装备价值反推积分定价,确保不亏本。定期核对短信平台账单和服务端记录,差异过大时排查是否有刷单或接口漏洞。
十三、脚本触发点
登录触发:从数据库或文件读取积分写入变量。小退触发:保存积分变量到数据库或文件。兑换触发:扣除积分并给物品。查询触发:显示当前积分。短信回调触发:接口程序直接操作数据库,游戏内变量在下次登录时同步。如果玩家在线时收到短信积分,需要接口程序通知游戏服务端刷新变量,可以通过GM命令或消息推送实现。
十四、测试用例
正常发送短信,积分增加。重复发送相同流水号,积分不重复增加。60秒内连续发送,第二次被拒绝。发送不存在的角色名,记录失败。发送超长角色名,被截断或拒绝。发送特殊字符角色名,被拒绝。积分不足时兑换,提示不足。积分足够时兑换,扣除正确。兑换后积分余额和累计积分同时更新。服务端重启后积分不丢失。数据库断开时接口返回错误。短信平台回调超时,平台重试,服务端只处理一次。
十五、部署清单
短信平台账号注册完成。应用创建完成。回调地址配置完成。应用ID和密钥记录。服务端接口程序部署完成。端口开放完成。数据库表创建完成。数据库连接配置完成。接口签名验证测试通过。游戏内NPC脚本添加完成。积分变量定义完成。登录和小退触发添加完成。兑换物品列表确认。防刷规则配置完成。日志目录创建完成。备份策略制定完成。测试用例全部通过。正式上线前关闭测试数据。上线后监控运行状态。

