游戏对接实例
传奇游戏对接易支付实例
斩仙情缘对接易支付实例
莽荒纪H5平台币版对接易支付实例
-
+
首页
斩仙情缘对接易支付实例
 ### 1前端跳转链接: ```main.js // 假设正确的区服变量是 ServerID "http://IP/pay.php?action=pay&money=" + t + "&qu=" +ServerID + "&account=" + encodeURIComponent(Actor.myName) ``` ### 2.支付界面: ```pay.php <?php /** * 游戏充值接口(易支付pay.jjzfw.com) */ ini_set("error_reporting", "E_ALL & ~E_NOTICE"); header("Content-Type: text/html; charset=utf-8"); // 易支付配置(修改为你的实际信息) $epay_config = array( 'api_url' => 'https://cc.txyi.cc/submit.php', // 易支付提交地址 'pid' => '', // 商户ID(从易支付后台获取) 'key' => '', // 商户密钥(必须与后台一致) 'notify_url' => 'http://IP/pay.php', // 异步回调地址 'return_url' => 'http://IP/pay_success.html' // 支付成功跳转页 ); // 数据库配置(替换为你的实际数据库信息) $db_host = '127.0.0.1'; $db_username = 'root'; $db_password = 'root'; // 区服对应数据库(根据实际分区修改) $db = array( 1 => "actors", // 1区数据库 2 => "actors2", // 2区数据库 3 => "actors3", // 3区数据库 // ... 其他区服 ); /** * 充值到账核心逻辑 * @param array $data 易支付回调参数 * @return bool 处理结果 */ function chongzhi($data) { global $db_host, $db_username, $db_password, $db; // 从回调参数中提取关键信息(易支付用param传递区服ID) $actorname = $data['username']; // 角色名 $qu = intval($data['param']); // 区服ID(修正:从param获取) $gold = intval($data['money'] * 10); // 充值金额转元宝(1:10) $order_no = $data['out_trade_no']; // 商户订单号 // 连接数据库 $con = @mysql_connect($db_host, $db_username, $db_password) or die("数据库链接失败!"); mysql_query("set names 'utf8'"); // 选择区服对应的数据库 $dbgame = isset($db[$qu]) ? $db[$qu] : $db[1]; // 默认1区 mysql_select_db($dbgame, $con); // 查询角色是否存在(防SQL注入) $actorname = mysql_real_escape_string($actorname); $result = mysql_query("SELECT accountname, actorid FROM actors WHERE actorname = '$actorname'"); if ($result && mysql_num_rows($result) > 0) { $row = mysql_fetch_array($result); $accountname = $row[0]; $actorid = $row[1]; // 记录充值回调(用于对账) mysql_query("INSERT INTO feecallback (serverid, openid, itemid, actor_id, out_trade_no) VALUES ('$qu', '$accountname', '$gold', $actorid, '$order_no')"); // 【关键】给角色增加元宝(请修改为你的实际表名和字段) // 例如:如果角色表是actors,元宝字段是yuanbao,则改为: // mysql_query("UPDATE actors SET yuanbao = yuanbao + $gold WHERE actorid = $actorid"); mysql_query("UPDATE user SET gold = gold + $gold WHERE actorid = $actorid"); mysql_close($con); return true; } else { mysql_close($con); return false; } } /** * 易支付签名验证(严格遵循文档规则) * @param array $data 待验证的参数 * @param string $key 商户密钥 * @return string 生成的签名 */ function epay_verify($data, $key) { // 1. 排除sign、sign_type和空值参数 $filter = array(); foreach ($data as $k => $v) { if ($v !== '' && $k !== 'sign' && $k !== 'sign_type') { $filter[$k] = $v; } } // 2. 按参数名ASCII排序(a-z) ksort($filter); // 3. 拼接为a=b&c=d格式,最后加&key=密钥 $sign_str = urldecode(http_build_query($filter)) . '&key=' . $key; // 4. MD5加密后转大写 return strtoupper(md5($sign_str)); } // 处理易支付异步回调(支付成功后触发) if ($_SERVER['REQUEST_METHOD'] == 'POST') { $data = $_POST; $sign = isset($data['sign']) ? $data['sign'] : ''; // 验证签名和支付状态 if (epay_verify($data, $epay_config['key']) == $sign && $data['trade_status'] == 'TRADE_SUCCESS') { // 调用充值到账逻辑(传递角色名,从商品名称中提取) // 商品名称格式:充值-角色名-区服,所以按'-'分割取第二个元素 $name_parts = explode('-', $data['name']); $data['username'] = isset($name_parts[1]) ? $name_parts[1] : ''; if (chongzhi($data)) { echo 'success'; // 必须返回success,否则易支付会重复回调 } else { echo '角色不存在'; } } else { echo '签名错误'; } exit; } // 生成支付链接(用户点击充值时调用) if (isset($_GET['action']) && $_GET['action'] == 'pay') { // 1. 验证前端传递的参数(确保必要参数存在) if (!isset($_GET['account']) || !isset($_GET['qu']) || !isset($_GET['money'])) { die("参数错误:缺少角色名、区服或金额"); } // 2. 生成商户订单号 $order_no = 'LT' . date('YmdHis') . rand(1000, 9999); // 3. 构造支付参数 $params = array( 'pid' => $epay_config['pid'], 'type' => isset($_GET['type']) ? $_GET['type'] : 'alipay', // 支付方式 'out_trade_no' => $order_no, // 商户订单号 'notify_url' => $epay_config['notify_url'], // 异步回调地址 'return_url' => $epay_config['return_url'], // 跳转回调地址 'name' => "充值-{$_GET['account']}-{$_GET['qu']}区", // 商品名称(含角色和区服) 'money' => $_GET['money'], // 支付金额(元) 'param' => $_GET['qu'] // 业务扩展参数(存储区服ID,易支付会原样返回) ); // 4. 生成签名 $params['sign'] = epay_verify($params, $epay_config['key']); $params['sign_type'] = 'MD5'; // 5. 跳转到易支付页面 header('Location: ' . $epay_config['api_url'] . '?' . http_build_query($params)); exit; } // 充值表单页面(测试) ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>游戏充值</title> <style> .container { width: 500px; margin: 100px auto; padding: 20px; border: 1px solid #ccc; } .form-group { margin: 15px 0; } label { display: inline-block; width: 100px; } input, select { padding: 5px; width: 300px; } button { padding: 8px 20px; margin-left: 100px; } </style> </head> <body> <div class="container"> <h2>游戏充值</h2> <form method="get"> <input type="hidden" name="action" value="pay"> <div class="form-group"> <label>角色名:</label> <input type="text" name="account" required> </div> <div class="form-group"> <label>区服:</label> <select name="qu" required> <?php for ($i=1; $i<=12; $i++) { echo "<option value='$i'>$i区</option>"; } ?> </select> </div> <div class="form-group"> <label>金额(元):</label> <input type="number" name="money" min="1" step="1" required> </div> <div class="form-group"> <label>支付方式:</label> <select name="type"> <option value="alipay">支付宝</option> <option value="wechat">微信支付</option> </select> </div> <button type="submit">提交充值</button> </form> </div> </body> </html> <?php ?> ``` >i **注意修改:** >如果角色数据存在actors表,元宝字段是yuanbao ``` mysql_query("UPDATE actors SET yuanbao = yuanbao + $gold WHERE actorid = $actorid"); ```
hechu
2025年10月31日 12:15
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码