| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- <?php
- namespace app\api\controller\v1;
- use app\common\logic\Pay as PayLogic;
- use app\common\logic\PayCallback;
- use app\common\model\ComplexMembers;
- use app\common\model\ComplexPay;
- use app\common\model\PayCpinfo;
- use think\Controller;
- use think\Db;
- use think\Log;
- use think\Request;
- class MwNotify extends Controller
- {
- const APPSECCRET = "642f0193ec59dbb781e48ad94b32e735";
- public function index(Request $request)
- {
- $param = $request->post("data");
- $filename = ROOT_PATH."mw.txt";
- if(!file_exists($filename)){
- touch($filename);
- chmod($filename,0777);
- }
- file_put_contents($filename,$param,FILE_APPEND);
- if (empty($param)) {
- Log::info("参数错误");
- return "FAIL";
- }
- $data = json_decode($param, true);
- if (json_last_error() != JSON_ERROR_NONE) {
- Log::info("数据解析错误");
- return "FAIL";
- }
- // 验证签名
- if (!$this->checkSign($data)) {
- Log::info("签名错误");
- return "FAIL";
- }
- // 检查订单
- $orderInfo = db("nw_complex_pay")->where("orderid", $data['cp_order_id'])->find();
- if (!$orderInfo) {
- Log::info($data['cp_order_id'] . ":订单信息不存在");
- return "FAIL";
- }
- if ($orderInfo['status'] == 1) {
- Log::info($data['cp_order_id'] . ":订单信息已支付不能重复支付");
- return "FAIL";
- }
- if ($orderInfo['amount'] != intval($data['amount'])) {
- Log::info($data['cp_order_id'] . ":订单金额错误");
- return "FAIL";
- }
- $this->updateOrder($orderInfo['orderid'], $data['amount'],$data['order_id']);
- return "SUCCESS";
- }
- /**
- * 验证签名
- */
- public function checkSign($data)
- {
- $sign = $data['sign'];
- unset($data['sign']);
- ksort($data);
- $signString = "";
- foreach ($data as $key => $val) {
- $signString .= $key . "=" . $val . "&";
- }
- $signString = trim($signString, "&");
- $signString = self::APPSECCRET . $signString . self::APPSECCRET;
- $sign_result = strtoupper(md5($signString));
- if ($sign == $sign_result) {
- return true;
- }
- return false;
- }
- /**
- * 更新订单信息
- *
- * @param string $orderid :订单编号
- * @param string $real_amount :第三方支付的金额(现金部分)
- *
- * @return boolean
- */
- public function updateOrder($orderid, $real_amount = '',$sub_order_id=null)
- {
- $complexPayModel = new ComplexPay();
- $payCpinfoModel = new PayCpinfo;
- $membersModel = new ComplexMembers();
- $result = false;
- //消费订单信息
- $payInfo = $complexPayModel->field('id,status,amount,userid,gameid,channel_id')->where(['orderid' => $orderid])->find();
- if ($real_amount != '' && $payInfo['amount'] != $real_amount) {
- $result = false;
- //写入日志
- log_message('订单编号:' . $orderid . '支付金额不一致,订单状态更新失败', 'error', LOG_PATH . '../paylog/');
- } //待支付状态时
- elseif ($payInfo['status'] == 0) {
- // 启动事务
- Db::startTrans();
- try {
- $complexPayModel->where(['id' => $payInfo['id']])->update(
- [
- 'status' => 1,
- 'pay_time' => NOW_TIMESTAMP,
- 'sub_orderid'=>$sub_order_id
- ]);
- //cy_paycpinfo表记录状态更新
- $payCpinfoModel->where(['orderid' => $orderid])->update(['payflag' => 1, 'update_time' => NOW_TIMESTAMP]);
- $result = true;
- // 提交事务
- Db::commit();
- } catch (\Exception $e) {
- // 回滚事务
- Db::rollback();
- $result = false;
- //写入日志
- log_message('订单编号:' . $orderid . '订单状态更新失败' . $e->getMessage(), 'error', LOG_PATH . '../paylog/');
- }
- }
- //订单状态更新成功
- if ($result) {
- //更新member表的total_pay_amount
- $membersModel->where(['id' => $payInfo['userid']])->update(['total_pay_amount' => Db::raw('total_pay_amount+' . $payInfo['amount'])]);
- // 通知CP,支付成功
- (new PayCallback())->callBackToCp($orderid);
- //预警邮件
- (new PayLogic())->payWarning($payInfo['userid'], $payInfo['channel_id'], $payInfo['gameid'], $payInfo['amount']);
- }
- }
- }
|