106 lines
3.3 KiB
PHP
106 lines
3.3 KiB
PHP
<?php
|
|
|
|
namespace services;
|
|
|
|
class ShopBuyGoodsDirect
|
|
{
|
|
public function process()
|
|
{
|
|
error_log('ShopBuyGoodsDirect:' . json_encode($_REQUEST, JSON_PRETTY_PRINT));
|
|
// let repdata = {
|
|
// account_id: string
|
|
// order_id: string
|
|
// status: string
|
|
// id: string
|
|
// txhash: string
|
|
// }
|
|
// 我返回给你这些数据和一个sign字段,
|
|
// sign使用上面 repdata 按key 顺序排后, 组成key1=val1&key2=val2后, 使用hmac_sha256 hash, key是 iG4Rpsa)6U31$H#^T85$^^3
|
|
// PENDING = 0, // 初始状态
|
|
// TRANSFERING = 1, //只有国库模式才会有该状态
|
|
// TRANSFERED = 2, //只有国库模式才会有该状态
|
|
// SUCCESS = 9, // 成功的最终状态
|
|
// TRANSFER_FAIL = 98, // 转账错误
|
|
// FAIL = 99, // 也是错误
|
|
//
|
|
|
|
$account_id = getReqVal('account_id', '');
|
|
$order_id = getReqVal('order_id', '');
|
|
$status = getReqVal('status', '');
|
|
$id = getReqVal('id', '');
|
|
$txhash = getReqVal('txhash', '');
|
|
|
|
$sign = getReqVal('sign', '');
|
|
|
|
$data = array(
|
|
'account_id' => $account_id,
|
|
'id' => $id,
|
|
'order_id' => $order_id,
|
|
'status' => $status,
|
|
'txhash' => $txhash,
|
|
);
|
|
|
|
$hash_data = http_build_query($data);
|
|
|
|
$signature = hash_hmac('sha256', $hash_data, 'iG4Rpsa)6U31$H#^T85$^^3');
|
|
|
|
if ($signature != $sign) {
|
|
$this->_rspErr(1, "signature error, signature: {$signature}, sign: {$sign}");
|
|
return;
|
|
}
|
|
|
|
error_log("buyGoodsDirect-------" . $order_id . "---" . $status);
|
|
|
|
$conn = myself()->_getMysql('');
|
|
|
|
$order = SqlHelper::selectOne($conn, 't_shop_buy_order', array('address', 'item_id', 'goods_num', 'status'), array('idx' => $order_id));
|
|
|
|
$id = $order['item_id'];
|
|
$goods_num = $order['goods_num'];
|
|
$o_status = $order['status'];
|
|
|
|
if ($o_status != 0) {
|
|
$this->_rspErr(1, "order status error, status: {$o_status}");
|
|
return;
|
|
}
|
|
|
|
$buyStatus = 0; // 1: 成功, 2: 失败
|
|
switch ($status) {
|
|
case "9":
|
|
$buyStatus = 1;
|
|
break;
|
|
case "99":
|
|
case "98":
|
|
$buyStatus = 2;
|
|
break;
|
|
}
|
|
|
|
SqlHelper::update($conn, 't_shop_buy_order', array('idx' => $order_id), array('status' => $buyStatus));
|
|
|
|
$goods = mt\ShopGoods::get($id);
|
|
// 这里命名混乱了, 购买个数,一捆个数命名冲突
|
|
$goods_num = $order['goods_num'];
|
|
$bundle_size = $goods['bonus_num'];
|
|
$item_num = $goods_num * $bundle_size;
|
|
$item_id = $goods['bonus'];
|
|
$address = $order['address'];
|
|
$account_id = $this->getAccountId($address);
|
|
|
|
if ($item_id == V_ITEM_DIAMOND) {
|
|
$event = [
|
|
'name' => LogService::RECHARGE_CEBG_BONUS,
|
|
'val' => $item_num
|
|
];
|
|
LogService::productDiamond(['account_id' => $account_id], $event);
|
|
}
|
|
|
|
$this->_addGoods($address, array(
|
|
'goods_id' => $item_id,
|
|
'goods_num' => $item_num,
|
|
'id' => $id,
|
|
));
|
|
|
|
$this->_rspOk();
|
|
}
|
|
}
|