This commit is contained in:
songliang 2023-07-11 10:21:40 +08:00
parent d73c76cc1e
commit 41fd3a2715

View File

@ -420,7 +420,7 @@ class ShopController extends BaseAuthedController
// gen order id
$order_id_base = date('YmdHis') . "10000000";
$divIdx = ($lastId) % 9999999;
$order_id = bnAdd_s($order_id_base, $divIdx);
$test = SqlHelper::update($conn, 't_web2_order', array('idx' => $lastId), array('order_id' => $order_id));
if (!$test) {
@ -446,14 +446,15 @@ class ShopController extends BaseAuthedController
public function inappPurchaseDiamonds()
{
error_log('----- inappPurchaseDiamonds -----');
error_log('request:' . json_encode($_REQUEST));
$channel = getReqVal('channel', '');
$records = getReqVal('records', '');
$records_json = json_decode($records);
$records_json = json_decode($records, true);
$sign = getReqVal('sign', '');
error_log('records:' . json_encode($records_json));
$order_id = getReqVal('order_id', '');
// {
// channel: 'google',
// sign: '123456677' // 签名字段
@ -473,63 +474,98 @@ class ShopController extends BaseAuthedController
// const sign = hmacsha256(signStr, hashSort)
// 定义一个空数组,用来存放每个记录的键值对字符串
$record_strings = array();
// 遍历 records 数组,对每个记录进行排序和拼接
foreach ($records_json as $record) {
// 对记录的键进行升序排序
ksort($record);
// 把记录的键值对用等号连接,然后用 & 连接成一个字符串
$record_string = http_build_query($record);
// 把字符串加入到 record_strings 数组中
$record_strings[] = $record_string;
}
// 把 record_strings 数组用 & 连接成一个字符串
$records_string = implode("&", $record_strings);
$hash_data = 'channel=' . $channel . '&' . $records_string;
$signature = hash_hmac('sha256', $hash_data, 'iG4Rpsa)6U31$H#^T85$^^3');
if ($signature != $sign) {
$this->_rspErr(1, "signature error, signature: {$signature}, sign: {$sign}");
return;
}
// 有三种情况:
// 1. 从商城购买钻石,有订单号
// 2. 站外充值钻石,没有订单号
// 3. appstore 退款,没有订单号
$order_id = getReqVal('order_id', '');
for ($i = 0; $i < count($records_json); $i++) {
$record = $records_json[$i];
error_log('----- inappPurchaseDiamonds -----');
$product_id = $record['productId'];
$order_id = $record['gameOrderId'];
$out_order_id = $record['orderId'];
$status = $record['status'];
$data = [
'channel' => 'google',
'sign' => '123456677',
'records' => [[
'productId' => '2999', // 从google play console获取的product id
'gameOrderId' => '299', // 开始支付时, 从游戏相关服务那获得的订单id
'orderId' => 'GPA.3355-1172-9416-16839', // 从google develope API 获取的订单id
'status' => 9, // 订单状态, 上报的订单状态一般只有2种情况, 9: 支付成功, 96: 用户退款
]]
];
switch ($status) {
case 9: {
$status = 1;
if (empty($order_id)) {
if (empty($product_id)) {
$this->_rspErr(2, "product_id is empty");
return;
}
// $goods = mt\ShopGoods::getByProductId($product_id);
$order_id = $data['records'][0]['gameOrderId'];
$data_str = json_encode($data);
$data_json = json_decode($data_str, true);
error_log('----- inappPurchaseDiamonds -----' . json_encode($data));
return;
}
$conn = myself()->_getMysql('');
$conn = myself()->_getMysql('');
$order = SqlHelper::selectOne($conn, 't_shop_buy_order', array('address', 'id', 'item_id', 'goods_num', 'status'), array('idx' => $order_id));
$order = SqlHelper::selectOne($conn, 't_web2_order', array('address', 'id', 'item_id', 'goods_num', 'status'), array('idx' => $order_id));
$buyStatus = 1;
SqlHelper::update($conn, 't_web2_order', array('idx' => $order_id), array('status' => $status, 'channel' => $channel, 'out_order_id' => $out_order_id));
SqlHelper::update($conn, 't_shop_buy_order', array('idx' => $order_id), array('status' => $buyStatus));
$id = $order['id'];
$goods = mt\ShopGoods::get($id);
// 这里命名混乱了, 购买个数,一捆个数命名冲突
$goods_num = $order['goods_num'];
$bundle_size = $goods['goods_num'];
$item_num = $goods_num * $bundle_size;
$item_id = $goods['goods_id'];
$address = $order['address'];
$account_id = $this->getAccountId($address);
$id = $order['id'];
$goods = mt\ShopGoods::get($id);
// 这里命名混乱了, 购买个数,一捆个数命名冲突
$goods_num = $order['goods_num'];
$bundle_size = $goods['goods_num'];
$item_num = $goods_num * $bundle_size;
$item_id = $goods['goods_id'];
$address = $order['address'];
$account_id = $this->getAccountId($address);
if ($item_id == V_ITEM_DIAMOND) {
$event = [
'name' => LogService::RECHARGE_DIAMOND,
'val' => $item_num
];
LogService::productDiamond(['account_id' => $account_id], $event);
}
if ($item_id == V_ITEM_DIAMOND) {
$event = [
'name' => LogService::RECHARGE_DIAMOND,
'val' => $item_num
];
LogService::productDiamond(['account_id' => $account_id], $event);
$this->_addGoods($address, array(
'goods_id' => $item_id,
'goods_num' => $item_num,
'id' => $id,
));
}
break;
case 96:
// 退款
$status = 2;
break;
default:
$status = 0;
break;
}
}
$this->_addGoods($address, array(
'goods_id' => $item_id,
'goods_num' => $item_num,
'id' => $id,
));
$this->_rspOk();
}